Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _SQL_1_H_
      7 #define _SQL_1_H_
      8 
      9 struct SQL_LEVEL_1_TOKEN {
     10   enum { OP_EXPRESSION = 1,TOKEN_AND,TOKEN_OR,TOKEN_NOT };
     11   enum { IFUNC_NONE = 0,IFUNC_UPPER = 1,IFUNC_LOWER = 2 };
     12   int nTokenType;
     13   enum { OP_EQUAL = 1,OP_NOT_EQUAL,OP_EQUALorGREATERTHAN,OP_EQUALorLESSTHAN,OP_LESSTHAN,OP_GREATERTHAN,OP_LIKE };
     14   BSTR pPropertyName;
     15   int nOperator;
     16   WINBOOL bConstIsStrNumeric;
     17   VARIANT vConstValue;
     18   BSTR pPropName2;
     19   DWORD dwPropertyFunction;
     20   DWORD dwConstFunction;
     21   SQL_LEVEL_1_TOKEN();
     22   SQL_LEVEL_1_TOKEN(SQL_LEVEL_1_TOKEN&);
     23   ~SQL_LEVEL_1_TOKEN();
     24   SQL_LEVEL_1_TOKEN& operator=(SQL_LEVEL_1_TOKEN &Src);
     25   void Dump(FILE *);
     26 };
     27 
     28 struct SQL_LEVEL_1_RPN_EXPRESSION {
     29   int nNumTokens;
     30   int nCurSize;
     31   SQL_LEVEL_1_TOKEN *pArrayOfTokens;
     32   BSTR bsClassName;
     33   int nNumberOfProperties;
     34   int nCurPropSize;
     35   BSTR *pbsRequestedPropertyNames;
     36   SQL_LEVEL_1_RPN_EXPRESSION();
     37   ~SQL_LEVEL_1_RPN_EXPRESSION();
     38   void AddToken(SQL_LEVEL_1_TOKEN *pTok);
     39   void AddToken(SQL_LEVEL_1_TOKEN &pTok);
     40   void AddProperty(LPWSTR pProp);
     41   void Dump(const char *pszTextFile);
     42 };
     43 
     44 class SQL1_Parser {
     45   CGenLexer *m_pLexer;
     46   int m_nLine;
     47   wchar_t *m_pTokenText;
     48   int m_nCurrentToken;
     49   SQL_LEVEL_1_RPN_EXPRESSION *m_pExpression;
     50   void Cleanup();
     51   void Init(CGenLexSource *pSrc);
     52   VARIANT m_vTypedConst;
     53   int m_nRelOp;
     54   DWORD m_dwConstFunction;
     55   DWORD m_dwPropFunction;
     56   LPWSTR m_pIdent;
     57   LPWSTR m_pPropComp;
     58   WINBOOL m_bConstIsStrNumeric;
     59   WINBOOL Next();
     60   int parse();
     61   int prop_list();
     62   int class_name();
     63   int opt_where();
     64   int expr();
     65   int property_name();
     66   int prop_list_2();
     67   int term();
     68   int expr2();
     69   int simple_expr();
     70   int term2();
     71   int leading_ident_expr();
     72   int finalize();
     73   int rel_operator();
     74   int equiv_operator();
     75   int comp_operator();
     76   int is_operator();
     77   int trailing_prop_expr();
     78   int trailing_prop_expr2();
     79   int trailing_or_null();
     80   int trailing_const_expr();
     81   int unknown_func_expr();
     82   int typed_constant();
     83 public:
     84   enum {
     85     SUCCESS,SYNTAX_ERROR,LEXICAL_ERROR,FAILED,BUFFER_TOO_SMALL
     86   };
     87   SQL1_Parser(CGenLexSource *pSrc);
     88   ~SQL1_Parser();
     89   int GetQueryClass(LPWSTR pBuf,int nBufSize);
     90   int Parse(SQL_LEVEL_1_RPN_EXPRESSION **pOutput);
     91   int CurrentLine() { return m_nLine; }
     92   LPWSTR CurrentToken() { return m_pTokenText; }
     93   void SetSource(CGenLexSource *pSrc);
     94 };
     95 #endif
     96