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 9struct 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 28struct 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 44class 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(); 83public: 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