diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-03-19 15:38:50 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-03-19 15:38:50 +0000 |
commit | 53128e64b7552217c8cf290e73ef7a69c375a37c (patch) | |
tree | aff2389b82d86c4bc405f32d413f7d93b3785246 /connectivity/source/parse | |
parent | a0b65deaa6e999132779e26f2b448dfa8662963c (diff) |
MWS_SRX644: migrate branch mws_srx644 -> HEAD
Diffstat (limited to 'connectivity/source/parse')
-rw-r--r-- | connectivity/source/parse/makefile.mk | 4 | ||||
-rw-r--r-- | connectivity/source/parse/sqlbison.y | 272 | ||||
-rw-r--r-- | connectivity/source/parse/sqlflex.l | 140 | ||||
-rw-r--r-- | connectivity/source/parse/sqlnode.cxx | 9 |
4 files changed, 66 insertions, 359 deletions
diff --git a/connectivity/source/parse/makefile.mk b/connectivity/source/parse/makefile.mk index 9b3cee6ed84b..8afaaebee275 100644 --- a/connectivity/source/parse/makefile.mk +++ b/connectivity/source/parse/makefile.mk @@ -2,9 +2,9 @@ # # $RCSfile: makefile.mk,v $ # -# $Revision: 1.11 $ +# $Revision: 1.12 $ # -# last change: $Author: vg $ $Date: 2002-08-27 13:12:02 $ +# last change: $Author: hr $ $Date: 2003-03-19 16:38:46 $ # # The Contents of this file are made available subject to the terms of # either of the following licenses diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y index a0f724d32da0..591e3c10a547 100644 --- a/connectivity/source/parse/sqlbison.y +++ b/connectivity/source/parse/sqlbison.y @@ -1,7 +1,7 @@ %{ //-------------------------------------------------------------------------- // -// $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/connectivity/source/parse/sqlbison.y,v 1.42 2002-11-27 17:14:33 obo Exp $ +// $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/connectivity/source/parse/sqlbison.y,v 1.43 2003-03-19 16:38:46 hr Exp $ // // Copyright 2000 Sun Microsystems, Inc. All Rights Reserved. // @@ -9,14 +9,13 @@ // OJ // // Last change: -// $Author: obo $ $Date: 2002-11-27 17:14:33 $ $Revision: 1.42 $ +// $Author: hr $ $Date: 2003-03-19 16:38:46 $ $Revision: 1.43 $ // // Description: // // //-------------------------------------------------------------------------- -#include <string.h> #ifndef _VECTOR_ #include <vector> #endif @@ -79,34 +78,6 @@ #include "connectivity/dbconversion.hxx" #endif -#ifdef WNT -#include "stdarg.h" -namespace std { -int fprintf(FILE* stream, const char* format, ...) -{ - va_list va_param; - - va_start(va_param, format); - int res = ::vfprintf(stream, format, va_param); - va_end(va_param); - - return res; -} - -#if _MSC_VER < 1300 -void* malloc( size_t size ) -{ - return ::malloc(size); -} - -void free( void *memblock ) -{ - ::free(memblock); -} -#endif -}; -#endif - static ::rtl::OUString aEmptyString; static connectivity::OSQLInternalNode* newNode(const sal_Char* pNewValue, @@ -163,20 +134,6 @@ using namespace connectivity; %token <pParseNode> SQL_TOKEN_STRING SQL_TOKEN_ACCESS_DATE SQL_TOKEN_INT SQL_TOKEN_REAL_NUM %token <pParseNode> SQL_TOKEN_INTNUM SQL_TOKEN_APPROXNUM SQL_TOKEN_NOT SQL_TOKEN_NAME - /* operators */ -%left <pParseNode> SQL_TOKEN_NAME -%left <pParseNode> SQL_TOKEN_OR -%left <pParseNode> SQL_TOKEN_AND - -%left <pParseNode> LESSEQ GREATEQ NOTEQUAL LESS GREAT EQUAL /* '<' '>' = <> < > <= >= != */ -%left <pParseNode> '+' '-' -%left <pParseNode> '*' '/' -%left <pParseNode> SQL_TOKEN_NATURAL SQL_TOKEN_CROSS SQL_TOKEN_FULL SQL_TOKEN_LEFT SQL_TOKEN_RIGHT -%left <pParseNode> ')' -%right <pParseNode> '=' -%right <pParseNode> '.' -%right <pParseNode> '(' - %nonassoc <pParseNode> SQL_TOKEN_UMINUS @@ -186,31 +143,31 @@ using namespace connectivity; %token <pParseNode> SQL_TOKEN_ALL SQL_TOKEN_ALTER SQL_TOKEN_AMMSC SQL_TOKEN_ANY SQL_TOKEN_AS SQL_TOKEN_ASC SQL_TOKEN_AT SQL_TOKEN_AUTHORIZATION SQL_TOKEN_AVG -%token <pParseNode> SQL_TOKEN_BETWEEN SQL_TOKEN_BIT SQL_TOKEN_BIT_LENGTH SQL_TOKEN_BOTH SQL_TOKEN_BY +%token <pParseNode> SQL_TOKEN_BETWEEN SQL_TOKEN_BIT SQL_TOKEN_BOTH SQL_TOKEN_BY -%token <pParseNode> SQL_TOKEN_CAST SQL_TOKEN_CHARACTER SQL_TOKEN_CHAR_LENGTH SQL_TOKEN_CHECK SQL_TOKEN_COLLATE SQL_TOKEN_COMMIT SQL_TOKEN_CONTINUE SQL_TOKEN_CONVERT SQL_TOKEN_COUNT SQL_TOKEN_CREATE SQL_TOKEN_CROSS -%token <pParseNode> SQL_TOKEN_CURRENT SQL_TOKEN_CURRENT_DATE SQL_TOKEN_CURRENT_TIME SQL_TOKEN_CURRENT_TIMESTAMP SQL_TOKEN_CURSOR +%token <pParseNode> SQL_TOKEN_CAST SQL_TOKEN_CHARACTER SQL_TOKEN_CHECK SQL_TOKEN_COLLATE SQL_TOKEN_COMMIT SQL_TOKEN_CONTINUE SQL_TOKEN_CONVERT SQL_TOKEN_COUNT SQL_TOKEN_CREATE SQL_TOKEN_CROSS +%token <pParseNode> SQL_TOKEN_CURRENT SQL_TOKEN_CURSOR %token <pParseNode> SQL_TOKEN_DATE SQL_TOKEN_DAY SQL_TOKEN_DEC SQL_TOKEN_DECIMAL SQL_TOKEN_DECLARE SQL_TOKEN_DEFAULT SQL_TOKEN_DELETE SQL_TOKEN_DESC %token <pParseNode> SQL_TOKEN_DISTINCT SQL_TOKEN_DOUBLE SQL_TOKEN_DROP -%token <pParseNode> SQL_TOKEN_ESCAPE SQL_TOKEN_EXCEPT SQL_TOKEN_EXISTS SQL_TOKEN_EXTRACT SQL_TOKEN_FALSE SQL_TOKEN_FETCH SQL_TOKEN_FLOAT SQL_TOKEN_FOR SQL_TOKEN_FOREIGN SQL_TOKEN_FOUND SQL_TOKEN_FROM SQL_TOKEN_FULL +%token <pParseNode> SQL_TOKEN_ESCAPE SQL_TOKEN_EXCEPT SQL_TOKEN_EXISTS SQL_TOKEN_FALSE SQL_TOKEN_FETCH SQL_TOKEN_FLOAT SQL_TOKEN_FOR SQL_TOKEN_FOREIGN SQL_TOKEN_FOUND SQL_TOKEN_FROM SQL_TOKEN_FULL -%token <pParseNode> SQL_TOKEN_GRANT SQL_TOKEN_GROUP SQL_TOKEN_HAVING SQL_TOKEN_HOUR SQL_TOKEN_IN SQL_TOKEN_INDICATOR SQL_TOKEN_INNER SQL_TOKEN_INSERT SQL_TOKEN_INTEGER SQL_TOKEN_INTO SQL_TOKEN_IS SQL_TOKEN_INTERSECT +%token <pParseNode> SQL_TOKEN_GRANT SQL_TOKEN_GROUP SQL_TOKEN_HAVING SQL_TOKEN_IN SQL_TOKEN_INDICATOR SQL_TOKEN_INNER SQL_TOKEN_INTEGER SQL_TOKEN_INTO SQL_TOKEN_IS SQL_TOKEN_INTERSECT -%token <pParseNode> SQL_TOKEN_JOIN SQL_TOKEN_KEY SQL_TOKEN_LEADING SQL_TOKEN_LEFT SQL_TOKEN_LIKE SQL_TOKEN_LOCAL SQL_TOKEN_LOWER SQL_TOKEN_MINUTE SQL_TOKEN_MONTH +%token <pParseNode> SQL_TOKEN_JOIN SQL_TOKEN_KEY SQL_TOKEN_LEADING SQL_TOKEN_LIKE SQL_TOKEN_LOCAL SQL_TOKEN_LOWER %token <pParseNode> SQL_TOKEN_MAX SQL_TOKEN_MIN SQL_TOKEN_NATURAL SQL_TOKEN_NCHAR SQL_TOKEN_NULL SQL_TOKEN_NUMERIC %token <pParseNode> SQL_TOKEN_OCTECT_LENGTH SQL_TOKEN_OF SQL_TOKEN_ON SQL_TOKEN_OPTION SQL_TOKEN_ORDER SQL_TOKEN_OUTER -%token <pParseNode> SQL_TOKEN_POSITION SQL_TOKEN_PRECISION SQL_TOKEN_PRIMARY SQL_TOKEN_PRIVILEGES SQL_TOKEN_PROCEDURE SQL_TOKEN_PUBLIC -%token <pParseNode> SQL_TOKEN_REAL SQL_TOKEN_REFERENCES SQL_TOKEN_ROLLBACK SQL_TOKEN_RIGHT +%token <pParseNode> SQL_TOKEN_PRECISION SQL_TOKEN_PRIMARY SQL_TOKEN_PRIVILEGES SQL_TOKEN_PROCEDURE SQL_TOKEN_PUBLIC +%token <pParseNode> SQL_TOKEN_REAL SQL_TOKEN_REFERENCES SQL_TOKEN_ROLLBACK -%token <pParseNode> SQL_TOKEN_SCHEMA SQL_TOKEN_SECOND SQL_TOKEN_SELECT SQL_TOKEN_SET SQL_TOKEN_SIZE SQL_TOKEN_SMALLINT SQL_TOKEN_SOME SQL_TOKEN_SQLCODE SQL_TOKEN_SQLERROR SQL_TOKEN_SUBSTRING SQL_TOKEN_SUM +%token <pParseNode> SQL_TOKEN_SCHEMA SQL_TOKEN_SELECT SQL_TOKEN_SET SQL_TOKEN_SIZE SQL_TOKEN_SMALLINT SQL_TOKEN_SOME SQL_TOKEN_SQLCODE SQL_TOKEN_SQLERROR SQL_TOKEN_SUM %token <pParseNode> SQL_TOKEN_TABLE SQL_TOKEN_TIME SQL_TOKEN_TIMESTAMP SQL_TOKEN_TIMEZONE_HOUR SQL_TOKEN_TIMEZONE_MINUTE SQL_TOKEN_TO SQL_TOKEN_TRAILING SQL_TOKEN_TRANSLATE SQL_TOKEN_TRIM SQL_TOKEN_TRUE SQL_TOKEN_UNION %token <pParseNode> SQL_TOKEN_UNIQUE SQL_TOKEN_UNKNOWN SQL_TOKEN_UPDATE SQL_TOKEN_UPPER SQL_TOKEN_USAGE SQL_TOKEN_USER SQL_TOKEN_USING SQL_TOKEN_VALUES SQL_TOKEN_VIEW -%token <pParseNode> SQL_TOKEN_WHERE SQL_TOKEN_WITH SQL_TOKEN_WORK SQL_TOKEN_YEAR SQL_TOKEN_ZONE +%token <pParseNode> SQL_TOKEN_WHERE SQL_TOKEN_WITH SQL_TOKEN_WORK SQL_TOKEN_ZONE /* ODBC KEYWORDS */ %token <pParseNode> SQL_TOKEN_CALL SQL_TOKEN_D SQL_TOKEN_FN SQL_TOKEN_T SQL_TOKEN_TS SQL_TOKEN_OJ @@ -233,6 +190,22 @@ using namespace connectivity; %token <pParseNode> SQL_TOKEN_LOG10 SQL_TOKEN_MOD SQL_TOKEN_PI SQL_TOKEN_POWER SQL_TOKEN_RADIANS SQL_TOKEN_RAND %token <pParseNode> SQL_TOKEN_ROUND SQL_TOKEN_SIGN SQL_TOKEN_SIN SQL_TOKEN_SQRT SQL_TOKEN_TAN SQL_TOKEN_TRUNCATE + + /* operators */ +%left SQL_TOKEN_NAME +%left <pParseNode> SQL_TOKEN_OR +%left <pParseNode> SQL_TOKEN_AND + +%left <pParseNode> LESSEQ GREATEQ NOTEQUAL LESS GREAT EQUAL /* '<' '>' = <> < > <= >= != */ +%left <pParseNode> '+' '-' +%left <pParseNode> '*' '/' +%left SQL_TOKEN_NATURAL SQL_TOKEN_CROSS SQL_TOKEN_FULL SQL_TOKEN_LEFT SQL_TOKEN_RIGHT +%left ')' +%right '=' +%right '.' +%right '(' + + %token <pParseNode> SQL_TOKEN_INVALIDSYMBOL /*%type <pParseNode> sql_single_statement */ @@ -1055,10 +1028,7 @@ boolean_primary: $$->append($3 = newNode(")", SQL_NODE_PUNCTUATION)); } ; -subroutine: - { - } - ; + boolean_test: boolean_primary | boolean_primary SQL_TOKEN_IS truth_value @@ -1076,7 +1046,7 @@ boolean_test: $$->append($3); $$->append($4); } - | subroutine SQL_TOKEN_NOT SQL_TOKEN_LIKE string_value_exp opt_escape +/* | sql_not SQL_TOKEN_LIKE string_value_exp opt_escape { if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) { @@ -1085,10 +1055,10 @@ boolean_test: $$ = SQL_NEW_RULE; $$->append(pColumnRef); + $$->append($1); $$->append($2); - $$->append($3); - if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$4,$5)) - $$->append($5); + if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$3,$4)) + $$->append($4); else { delete $$; @@ -1097,15 +1067,18 @@ boolean_test: } else YYERROR; - } + }
+*/ ; boolean_factor: boolean_test - | SQL_TOKEN_NOT boolean_test + | SQL_TOKEN_NOT '(' boolean_test ')' { $$ = SQL_NEW_RULE; $$->append($1); - $$->append($2); + $$->append($2 = newNode("(", SQL_NODE_PUNCTUATION));
+ $$->append($3);
+ $$->append($4 = newNode(")", SQL_NODE_PUNCTUATION)); } ; boolean_term: @@ -1224,15 +1197,7 @@ comparison: | GREATEQ ; between_predicate: - row_value_constructor SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor - {$$ = SQL_NEW_RULE; - $$->append($1); - $$->append($2); - $$->append($3); - $$->append($4); - $$->append($5); - } - | row_value_constructor SQL_TOKEN_NOT SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor + row_value_constructor sql_not SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor {$$ = SQL_NEW_RULE; $$->append($1); $$->append($2); @@ -1241,25 +1206,7 @@ between_predicate: $$->append($5); $$->append($6); } - | subroutine SQL_TOKEN_NOT SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor - { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - { - OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); - pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); - - $$ = SQL_NEW_RULE; - $$->append(pColumnRef); - $$->append($2); - $$->append($3); - $$->append($4); - $$->append($5); - $$->append($6); - } - else - YYERROR; - } - | subroutine SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor + | sql_not SQL_TOKEN_BETWEEN row_value_constructor SQL_TOKEN_AND row_value_constructor { if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) { @@ -1268,6 +1215,7 @@ between_predicate: $$ = SQL_NEW_RULE; $$->append(pColumnRef); + $$->append($1); $$->append($2); $$->append($3); $$->append($4); @@ -1313,33 +1261,7 @@ like_predicate: $$->append($3); $$->append($4); } - /*| SQL_TOKEN_NOT - { - if(!xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - YYERROR; - } SQL_TOKEN_LIKE string_value_exp opt_escape - { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - { - OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); - pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); - - $$ = SQL_NEW_RULE; - $$->append(pColumnRef); - $$->append($1); - $$->append($3); - if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$4,$5)) - $$->append($5); - else - { - delete $$; - YYABORT; - } - } - else - YYERROR; - } - */| SQL_TOKEN_LIKE string_value_exp opt_escape + | sql_not SQL_TOKEN_LIKE string_value_exp opt_escape { if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) { @@ -1348,9 +1270,10 @@ like_predicate: $$ = SQL_NEW_RULE; $$->append(pColumnRef); - $$->append($1); - if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$2,$3)) - $$->append($3); + $$->append($1);
+ $$->append($2); + if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$3,$4)) + $$->append($4); else { delete $$; @@ -1360,7 +1283,7 @@ like_predicate: else YYERROR; } - | SQL_TOKEN_LIKE value_exp_primary opt_escape + | sql_not SQL_TOKEN_LIKE value_exp_primary opt_escape { if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) { @@ -1370,30 +1293,9 @@ like_predicate: $$ = SQL_NEW_RULE; $$->append(pColumnRef); $$->append($1); - if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$2,$3)) - $$->append($3); - else - { - delete $$; - YYABORT; - } - } - else - YYERROR; - } - | subroutine SQL_TOKEN_NOT SQL_TOKEN_LIKE value_exp_primary opt_escape - { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) - { - OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); - pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); - - $$ = SQL_NEW_RULE; - $$->append(pColumnRef); $$->append($2); - $$->append($3); - if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$4,$5)) - $$->append($5); + if (xxx_pGLOBAL_SQLPARSER->buildLikeRule($$,$3,$4)) + $$->append($4); else { delete $$; @@ -1468,18 +1370,18 @@ in_predicate: $$->append($3); $$->append($4); } - | subroutine SQL_TOKEN_IN in_predicate_value + | sql_not SQL_TOKEN_IN in_predicate_value { - if (xxx_pGLOBAL_SQLPARSER->inPredicateCheck()) + if ( xxx_pGLOBAL_SQLPARSER->inPredicateCheck() ) { OSQLParseNode* pColumnRef = newNode(aEmptyString, SQL_NODE_RULE,OSQLParser::RuleID(OSQLParseNode::column_ref)); pColumnRef->append(newNode(xxx_pGLOBAL_SQLPARSER->getFieldName(),SQL_NODE_NAME)); $$ = SQL_NEW_RULE; $$->append(pColumnRef); + $$->append($1); $$->append($2); $$->append($3); - /*$$->append($3);*/ } else YYERROR; @@ -2523,7 +2425,7 @@ value_exp_commalist: value_exp {$$ = SQL_NEW_COMMALISTRULE; $$->append($1);} - | value_exp_commalist ',' value_exp + | value_exp_commalist ',' value_exp {$1->append($3); $$ = $1;} /* this rule is only valid if we check predicates */ @@ -3057,7 +2959,7 @@ sql: } else YYERROR; - } + }; %% @@ -3105,7 +3007,6 @@ IMPLEMENT_CONSTASCII_STRING(KEY_STR_LIKE, "LIKE"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_NOT, "NOT"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_NULL, "NULL"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_TRUE, "True"); - IMPLEMENT_CONSTASCII_STRING(KEY_STR_FALSE, "False"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_IS, "IS"); IMPLEMENT_CONSTASCII_STRING(KEY_STR_BETWEEN, "BETWEEN"); @@ -3193,7 +3094,6 @@ IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const ::rtl::O sal_uInt32 nCount = sizeof Intl_TokenID / sizeof Intl_TokenID[0]; for (sal_uInt32 i = 0; i < nCount; i++) { - ::rtl::OString aKey = getIntlKeywordAscii(Intl_TokenID[i]); if (rToken.equalsIgnoreAsciiCase(aKey)) return Intl_TokenID[i]; @@ -3203,63 +3103,34 @@ IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const ::rtl::O } //------------------------------------------------------------------------------ - static Locale& impl_getLocaleInstance( ) - { - static Locale s_aLocale( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "en" ) ), - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "US" ) ), - ::rtl::OUString( ) - ); - return s_aLocale; - } - - //------------------------------------------------------------------------------ - void OParseContext::setDefaultLocale( const ::com::sun::star::lang::Locale& _rLocale ) - { - impl_getLocaleInstance() = _rLocale; - } - - //------------------------------------------------------------------------------ - Locale OParseContext::getPreferredLocale( ) const - { - return getDefaultLocale(); - } - - //------------------------------------------------------------------------------ - const Locale& OParseContext::getDefaultLocale() - { - return impl_getLocaleInstance(); - } - - //========================================================================== //= misc //========================================================================== @@ -3414,46 +3285,26 @@ OSQLParseNode* OSQLParser::parseTree(::rtl::OUString& rErrorMessage, { ::rtl::OString aStr; if (pContext) - { - IParseContext::InternationalKeyCode eKeyCode = IParseContext::KEY_NONE; - switch( nTokenID ) - { - case SQL_TOKEN_LIKE: eKeyCode = IParseContext::KEY_LIKE; break; - case SQL_TOKEN_NOT: eKeyCode = IParseContext::KEY_NOT; break; - case SQL_TOKEN_NULL: eKeyCode = IParseContext::KEY_NULL; break; - case SQL_TOKEN_TRUE: eKeyCode = IParseContext::KEY_TRUE; break; - case SQL_TOKEN_FALSE: eKeyCode = IParseContext::KEY_FALSE; break; - case SQL_TOKEN_IS: eKeyCode = IParseContext::KEY_IS; break; - case SQL_TOKEN_BETWEEN: eKeyCode = IParseContext::KEY_BETWEEN; break; - case SQL_TOKEN_OR: eKeyCode = IParseContext::KEY_OR; break; - case SQL_TOKEN_AND: eKeyCode = IParseContext::KEY_AND; break; - case SQL_TOKEN_AVG: eKeyCode = IParseContext::KEY_AVG; break; - case SQL_TOKEN_COUNT: eKeyCode = IParseContext::KEY_COUNT; break; - case SQL_TOKEN_MAX: eKeyCode = IParseContext::KEY_MAX; break; - case SQL_TOKEN_MIN: eKeyCode = IParseContext::KEY_MIN; break; - case SQL_TOKEN_SUM: eKeyCode = IParseContext::KEY_SUM; break; - } aStr = pContext->getIntlKeywordAscii(eKeyCode); - } if (!aStr.getLength()) @@ -3852,16 +3703,5 @@ int OSQLParser::SQLlex() { return s_pScanner->SQLlex(); } -/*------------------------------------------------------------------------ - - $Log: not supported by cvs2svn $ - - Revision 1.34.8.1.2.1 2002/05/10 07:53:46 oj - #98357# enable = TRUE - - Revision 1.1 2000/07/25 10:39:29 oj - new revision - - Revision 1.0 21.07.2000 12:27:34 oj -------------------------------------------------------------------------*/ + diff --git a/connectivity/source/parse/sqlflex.l b/connectivity/source/parse/sqlflex.l index fbb776bdbe60..175bbb7bc51e 100644 --- a/connectivity/source/parse/sqlflex.l +++ b/connectivity/source/parse/sqlflex.l @@ -2,7 +2,7 @@ //-------------------------------------------------------------------------- // -// $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/connectivity/source/parse/sqlflex.l,v 1.17 2002-09-27 11:10:30 oj Exp $ +// $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/connectivity/source/parse/sqlflex.l,v 1.18 2003-03-19 16:38:46 hr Exp $ // // Copyright 2000 Sun Microsystems, Inc. All Rights Reserved. // @@ -10,7 +10,7 @@ // OJ // // Last change: -// $Author: oj $ $Date: 2002-09-27 11:10:30 $ $Revision: 1.17 $ +// $Author: hr $ $Date: 2003-03-19 16:38:46 $ $Revision: 1.18 $ // // Description: // @@ -113,7 +113,6 @@ OSQLScanner* xxx_pGLOBAL_SQLSCAN = NULL; [Aa][Nn][Yy] {SQL_NEW_KEYWORD(SQL_TOKEN_ANY); return SQL_TOKEN_ANY; } [Aa][Ss] {SQL_NEW_KEYWORD(SQL_TOKEN_AS); return SQL_TOKEN_AS; } [Aa][Ss][Cc] {SQL_NEW_KEYWORD(SQL_TOKEN_ASC); return SQL_TOKEN_ASC; } - [Aa][Ss][Cc][Ii][Ii] {SQL_NEW_KEYWORD(SQL_TOKEN_ASC); return SQL_TOKEN_ASCII; } [Aa][Tt] {SQL_NEW_KEYWORD(SQL_TOKEN_AT); return SQL_TOKEN_AT; } [Aa][Uu][Tt][Hh][Oo][Rr][Ii][Zz][Aa][Tt][Ii][Oo][Nn] {SQL_NEW_KEYWORD(SQL_TOKEN_AUTHORIZATION); return SQL_TOKEN_AUTHORIZATION; } @@ -353,11 +352,8 @@ sal_Int32 gatherString( sal_Int32 delim, sal_Int32 nTyp) sal_Int32 ch; static sal_Int32 BUFFERSIZE = 256; static sal_Char* Buffer = 0; - if(!Buffer) - Buffer = new sal_Char[BUFFERSIZE]; - sal_Char *s = Buffer; sal_Int32 nPos = 0; @@ -377,23 +373,17 @@ sal_Int32 gatherString( sal_Int32 delim, sal_Int32 nTyp) { case 0: SQL_NEW_NODE(::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8), SQL_NODE_NAME); - delete Buffer; - Buffer = NULL; return SQL_TOKEN_NAME; case 1: SQL_NEW_NODE(::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8), SQL_NODE_STRING); - delete Buffer; - Buffer = NULL; return SQL_TOKEN_STRING; case 2: SQL_NEW_NODE(::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8), SQL_NODE_ACCESS_DATE); - delete Buffer; - Buffer = NULL; return SQL_TOKEN_ACCESS_DATE; } @@ -433,56 +423,32 @@ sal_Int32 gatherString( sal_Int32 delim, sal_Int32 nTyp) } *s = '\0'; YY_FATAL_ERROR("Unterminated name string"); - delete Buffer; - Buffer = NULL; return SQL_TOKEN_INVALIDSYMBOL; } - - sal_Int32 mapEnumToToken(IParseContext::InternationalKeyCode _eKeyCode ) - { - sal_Int32 nTokenID = 0; - switch( _eKeyCode ) - { - case IParseContext::KEY_LIKE: nTokenID = SQL_TOKEN_LIKE; break; - case IParseContext::KEY_NOT: nTokenID = SQL_TOKEN_NOT; break; - case IParseContext::KEY_NULL: nTokenID = SQL_TOKEN_NULL; break; - case IParseContext::KEY_TRUE: nTokenID = SQL_TOKEN_TRUE; break; - case IParseContext::KEY_FALSE: nTokenID = SQL_TOKEN_FALSE; break; - case IParseContext::KEY_IS: nTokenID = SQL_TOKEN_IS; break; - case IParseContext::KEY_BETWEEN: nTokenID = SQL_TOKEN_BETWEEN; break; - case IParseContext::KEY_OR: nTokenID = SQL_TOKEN_OR; break; - case IParseContext::KEY_AND: nTokenID = SQL_TOKEN_AND; break; - case IParseContext::KEY_AVG: nTokenID = SQL_TOKEN_AVG; break; - case IParseContext::KEY_COUNT: nTokenID = SQL_TOKEN_COUNT; break; - case IParseContext::KEY_MAX: nTokenID = SQL_TOKEN_MAX; break; - case IParseContext::KEY_MIN: nTokenID = SQL_TOKEN_MIN; break; - case IParseContext::KEY_SUM: nTokenID = SQL_TOKEN_SUM; break; - } return nTokenID; - } /* * Read SQL Name literal @@ -492,9 +458,7 @@ sal_Int32 mapEnumToToken(IParseContext::InternationalKeyCode _eKeyCode ) sal_Int32 gatherName(const sal_Char* text) { sal_Int32 nToken; - OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!"); - IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text); switch (eKeyCode) { @@ -512,7 +476,6 @@ sal_Int32 gatherName(const sal_Char* text) case IParseContext::KEY_MAX: case IParseContext::KEY_MIN: case IParseContext::KEY_SUM: - nToken = mapEnumToToken(eKeyCode); SQL_NEW_KEYWORD(nToken); return nToken; @@ -528,81 +491,46 @@ sal_Int32 gatherName(const sal_Char* text) */ sal_Int32 gatherNamePre(const sal_Char* text) { - sal_Int32 nToken; OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!"); IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text); switch (eKeyCode) { case IParseContext::KEY_LIKE: - case IParseContext::KEY_NOT: - case IParseContext::KEY_NULL: - case IParseContext::KEY_TRUE: - case IParseContext::KEY_FALSE: - case IParseContext::KEY_IS: - case IParseContext::KEY_BETWEEN: - case IParseContext::KEY_OR: - case IParseContext::KEY_AND: - case IParseContext::KEY_COUNT: - case IParseContext::KEY_AVG: - case IParseContext::KEY_MAX: - case IParseContext::KEY_MIN: - case IParseContext::KEY_SUM: - nToken = mapEnumToToken(eKeyCode); SQL_NEW_KEYWORD(nToken); - break; - default: - // we need a special handling for parameter - { - ::rtl::OString sStmt = xxx_pGLOBAL_SQLSCAN->getStatement(); - sal_Int32 nLength = strlen(text); - sal_Int32 nPos = sStmt.getLength() - nLength - 1; - if (sStmt.getStr()[nPos] == ':') - { - SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_NAME); - nToken = SQL_TOKEN_NAME; - } - else - { - SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_STRING); - nToken = SQL_TOKEN_STRING; - } - } - } - return nToken; } @@ -623,7 +551,6 @@ OSQLScanner::OSQLScanner() , m_pContext(NULL) , m_nRule(0) // 0 is INITIAL { - IN_SQLyyerror = false; } @@ -635,115 +562,65 @@ OSQLScanner::~OSQLScanner() void OSQLScanner::SQLyyerror(sal_Char *fmt) { - - if(IN_SQLyyerror) - return; - IN_SQLyyerror = true; - OSL_ENSURE(m_pContext, "OSQLScanner::SQLyyerror: No Context set"); m_sErrorMessage = ::rtl::OUString(fmt,strlen(fmt),RTL_TEXTENCODING_UTF8); if (m_nCurrentPos < m_sStatement.getLength()) { m_sErrorMessage += ::rtl::OUString::createFromAscii(": "); - ::rtl::OUString aError; - static sal_Int32 BUFFERSIZE = 256; - static sal_Char* Buffer = 0; - if(!Buffer) - Buffer = new sal_Char[BUFFERSIZE]; - - sal_Char *s = Buffer; - sal_Int32 nPos = 1; - sal_Int32 ch = SQLyytext ? (SQLyytext[0] == 0 ? ' ' : SQLyytext[0]): ' '; - *s++ = ch; - while ((ch = yyinput()) != EOF) - { - if (ch == ' ') - { - if ((ch = yyinput()) != ' ') - { - if (ch != EOF) - unput(ch); - } - *s = '\0'; - aError = ::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8); - break; - } - else - { - *s++ = ch; - if (++nPos == BUFFERSIZE) - { - ::rtl::OString aBuf(Buffer); - delete Buffer; - BUFFERSIZE *=2; - Buffer = new sal_Char[BUFFERSIZE]; - for(sal_Int32 i=0;i<aBuf.getLength();++i,++Buffer) - *Buffer = aBuf.getStr()[i]; - s = &Buffer[nPos]; - } - } - } - m_sErrorMessage += aError; - delete Buffer; - Buffer = NULL; } - IN_SQLyyerror = false; - YY_FLUSH_BUFFER; - } //------------------------------------------------------------------------------ void OSQLScanner::prepareScan(const ::rtl::OUString & rNewStatement, const IParseContext* pContext, sal_Bool bInternational) { - YY_FLUSH_BUFFER; BEGIN(m_nRule); @@ -752,7 +629,6 @@ void OSQLScanner::prepareScan(const ::rtl::OUString & rNewStatement, const IPars m_nCurrentPos = 0; m_bInternational = bInternational; m_pContext = pContext; - } //------------------------------------------------------------------------------ @@ -784,16 +660,4 @@ sal_Int32 OSQLScanner::SQLlex() { return SQLyylex(); } -/*------------------------------------------------------------------------ - - $Log: not supported by cvs2svn $ - - Revision 1.2 2000/08/01 14:26:02 oj - modified - - Revision 1.1 2000/07/25 10:39:47 oj - new revision - - Revision 1.0 21.07.2000 10:54:08 oj -------------------------------------------------------------------------*/ diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index 47b3e4a2a1eb..9480a274bce5 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -2,9 +2,9 @@ * * $RCSfile: sqlnode.cxx,v $ * - * $Revision: 1.31 $ + * $Revision: 1.32 $ * - * last change: $Author: oj $ $Date: 2002-09-27 11:10:32 $ + * last change: $Author: hr $ $Date: 2003-03-19 16:38:47 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -67,7 +67,10 @@ #include <internalnode.hxx> #endif #define YYBISON 1 +#ifndef BISON_INCLUDED +#define BISON_INCLUDED #include <sqlbison.hxx> +#endif #ifndef _CONNECTIVITY_SQLPARSE_HXX #include <connectivity/sqlparse.hxx> #endif @@ -327,7 +330,7 @@ void OSQLParseNode::parseNodeToStr(::rtl::OUString& rString, const SQLParseNodeP { // Funktionsname nicht quoten SQLParseNodeParameter aNewParam(rParam); - aNewParam.bQuote = sal_False; + aNewParam.bQuote = ( SQL_ISRULE(this,length_exp) || SQL_ISRULE(this,char_value_fct) ); m_aChilds[0]->parseNodeToStr(rString, aNewParam); aNewParam.bQuote = rParam.bQuote; |