1*b1cdbd2cSJim Jagielski %{
2*b1cdbd2cSJim Jagielski //------------------------------------------------------------
3*b1cdbd2cSJim Jagielski //
4*b1cdbd2cSJim Jagielski // Licensed to the Apache Software Foundation (ASF) under one
5*b1cdbd2cSJim Jagielski // or more contributor license agreements.  See the NOTICE file
6*b1cdbd2cSJim Jagielski // distributed with this work for additional information
7*b1cdbd2cSJim Jagielski // regarding copyright ownership.  The ASF licenses this file
8*b1cdbd2cSJim Jagielski // to you under the Apache License, Version 2.0 (the
9*b1cdbd2cSJim Jagielski // "License"); you may not use this file except in compliance
10*b1cdbd2cSJim Jagielski // with the License.  You may obtain a copy of the License at
11*b1cdbd2cSJim Jagielski //
12*b1cdbd2cSJim Jagielski //   http://www.apache.org/licenses/LICENSE-2.0
13*b1cdbd2cSJim Jagielski //
14*b1cdbd2cSJim Jagielski // Unless required by applicable law or agreed to in writing,
15*b1cdbd2cSJim Jagielski // software distributed under the License is distributed on an
16*b1cdbd2cSJim Jagielski // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17*b1cdbd2cSJim Jagielski // KIND, either express or implied.  See the License for the
18*b1cdbd2cSJim Jagielski // specific language governing permissions and limitations
19*b1cdbd2cSJim Jagielski // under the License.
20*b1cdbd2cSJim Jagielski //
21*b1cdbd2cSJim Jagielski //------------------------------------------------------------
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #define YY_EXIT 1				// YY_FATAL will not halt the application
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #ifndef _CSTDARG_
26*b1cdbd2cSJim Jagielski #include <cstdarg>      // std::va_list
27*b1cdbd2cSJim Jagielski #endif
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #ifndef _INC_STRING
30*b1cdbd2cSJim Jagielski #include <string.h>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include "internalnode.hxx"
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #ifndef _CONNECTIVITY_SQLYACC_HXX
36*b1cdbd2cSJim Jagielski #define _CONNECTIVITY_SQLYACC_HXX
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #ifndef SQLYYDEBUG
39*b1cdbd2cSJim Jagielski #define SQLYYDEBUG 1
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski #include "sqlbison.hxx"
43*b1cdbd2cSJim Jagielski #endif
44*b1cdbd2cSJim Jagielski #include "sqlscan.hxx"
45*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
46*b1cdbd2cSJim Jagielski #include <rtl/strbuf.hxx>
47*b1cdbd2cSJim Jagielski #include <connectivity/sqlparse.hxx>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #if defined __GNUC__
50*b1cdbd2cSJim Jagielski     #pragma GCC system_header
51*b1cdbd2cSJim Jagielski #elif defined __SUNPRO_CC
52*b1cdbd2cSJim Jagielski #pragma disable_warn
53*b1cdbd2cSJim Jagielski #elif defined _MSC_VER
54*b1cdbd2cSJim Jagielski #pragma warning(push, 1)
55*b1cdbd2cSJim Jagielski /**/
56*b1cdbd2cSJim Jagielski #ifdef yywrap
57*b1cdbd2cSJim Jagielski #undef  yywrap
58*b1cdbd2cSJim Jagielski #define yywrap() 1
59*b1cdbd2cSJim Jagielski #endif
60*b1cdbd2cSJim Jagielski /**/
61*b1cdbd2cSJim Jagielski #endif
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski using namespace connectivity;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski //=============================================================================
66*b1cdbd2cSJim Jagielski //
67*b1cdbd2cSJim Jagielski // Erzeugung der Blaetter fuer die Token
68*b1cdbd2cSJim Jagielski // Blaetter werden generell vom Lexer erzeugt
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski static ::rtl::OUString aEmptyString;
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski static sal_Int32	gatherString(sal_Int32 delim, sal_Int32 nTyp);
73*b1cdbd2cSJim Jagielski static sal_Int32	gatherName(const sal_Char*);
74*b1cdbd2cSJim Jagielski static sal_Int32	gatherNamePre(const sal_Char* );
75*b1cdbd2cSJim Jagielski // has to be set before the parser starts
76*b1cdbd2cSJim Jagielski OSQLScanner* xxx_pGLOBAL_SQLSCAN = NULL;
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski #define SQL_NEW_NODE(text, token)	\
79*b1cdbd2cSJim Jagielski 		SQLyylval.pParseNode = new OSQLInternalNode(text, token);
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski #define SQL_NEW_KEYWORD(token)						\
82*b1cdbd2cSJim Jagielski 		SQLyylval.pParseNode = new OSQLInternalNode(aEmptyString, SQL_NODE_KEYWORD, (token));		return token;
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski #define SQL_NEW_INTNUM 		SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_INTNUM); return SQL_TOKEN_INTNUM;
85*b1cdbd2cSJim Jagielski #define SQL_NEW_APPROXNUM 	SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_APPROXNUM); return SQL_TOKEN_APPROXNUM;
86*b1cdbd2cSJim Jagielski #define SQL_NEW_DATE 		SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_ACCESS_DATE); return SQL_TOKEN_ACCESS_DATE;
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski #define YY_INPUT(buf,result,max_size) 				\
89*b1cdbd2cSJim Jagielski {													\
90*b1cdbd2cSJim Jagielski 	buf[0] = xxx_pGLOBAL_SQLSCAN->SQLyygetc();		\
91*b1cdbd2cSJim Jagielski 	result = buf[0] != -1;							\
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski #define YY_FATAL_ERROR(msg)							\
95*b1cdbd2cSJim Jagielski {													\
96*b1cdbd2cSJim Jagielski 	xxx_pGLOBAL_SQLSCAN->SQLyyerror(msg);			\
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski //
100*b1cdbd2cSJim Jagielski //=============================================================================
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski %}
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski %s SQL
105*b1cdbd2cSJim Jagielski %s PREDICATE_ENG
106*b1cdbd2cSJim Jagielski %s PREDICATE_GER
107*b1cdbd2cSJim Jagielski %s DATE
108*b1cdbd2cSJim Jagielski %s STRING
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski %option noyywrap
111*b1cdbd2cSJim Jagielski %option never-interactive
112*b1cdbd2cSJim Jagielski %%
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski ABS					{SQL_NEW_KEYWORD(SQL_TOKEN_ABS);  }
115*b1cdbd2cSJim Jagielski ACOS				{SQL_NEW_KEYWORD(SQL_TOKEN_ACOS);  }
116*b1cdbd2cSJim Jagielski AFTER				{SQL_NEW_KEYWORD(SQL_TOKEN_AFTER);  }
117*b1cdbd2cSJim Jagielski ALL					{SQL_NEW_KEYWORD(SQL_TOKEN_ALL);  }
118*b1cdbd2cSJim Jagielski ALTER				{SQL_NEW_KEYWORD(SQL_TOKEN_ALTER);  }
119*b1cdbd2cSJim Jagielski AND					{SQL_NEW_KEYWORD(SQL_TOKEN_AND);  }
120*b1cdbd2cSJim Jagielski ANY					{SQL_NEW_KEYWORD(SQL_TOKEN_ANY);  }
121*b1cdbd2cSJim Jagielski ARRAY_AGG			{SQL_NEW_KEYWORD(SQL_TOKEN_ARRAY_AGG);  }
122*b1cdbd2cSJim Jagielski AS					{SQL_NEW_KEYWORD(SQL_TOKEN_AS);  }
123*b1cdbd2cSJim Jagielski ASC					{SQL_NEW_KEYWORD(SQL_TOKEN_ASC);  }
124*b1cdbd2cSJim Jagielski ASCII				{SQL_NEW_KEYWORD(SQL_TOKEN_ASCII);  }
125*b1cdbd2cSJim Jagielski ASIN				{SQL_NEW_KEYWORD(SQL_TOKEN_ASIN);  }
126*b1cdbd2cSJim Jagielski AT					{SQL_NEW_KEYWORD(SQL_TOKEN_AT);  }
127*b1cdbd2cSJim Jagielski ATAN				{SQL_NEW_KEYWORD(SQL_TOKEN_ATAN);  }
128*b1cdbd2cSJim Jagielski ATAN2				{SQL_NEW_KEYWORD(SQL_TOKEN_ATAN2);  }
129*b1cdbd2cSJim Jagielski ATOMIC				{SQL_NEW_KEYWORD(SQL_TOKEN_ATOMIC);  }
130*b1cdbd2cSJim Jagielski AUTHORIZATION   	{SQL_NEW_KEYWORD(SQL_TOKEN_AUTHORIZATION);  }
131*b1cdbd2cSJim Jagielski AVG					{SQL_NEW_KEYWORD(SQL_TOKEN_AVG);  }
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski BEFORE				{SQL_NEW_KEYWORD(SQL_TOKEN_BEFORE);  }
134*b1cdbd2cSJim Jagielski BEGIN				{SQL_NEW_KEYWORD(SQL_TOKEN_BEGIN);  }
135*b1cdbd2cSJim Jagielski BETWEEN				{SQL_NEW_KEYWORD(SQL_TOKEN_BETWEEN);  }
136*b1cdbd2cSJim Jagielski BIGINT				{SQL_NEW_KEYWORD(SQL_TOKEN_BIGINT);  }
137*b1cdbd2cSJim Jagielski BINARY				{SQL_NEW_KEYWORD(SQL_TOKEN_BINARY);  }
138*b1cdbd2cSJim Jagielski BIT					{SQL_NEW_KEYWORD(SQL_TOKEN_BIT);  }
139*b1cdbd2cSJim Jagielski BIT_LENGTH          {SQL_NEW_KEYWORD(SQL_TOKEN_BIT_LENGTH);  }
140*b1cdbd2cSJim Jagielski BLOB				{SQL_NEW_KEYWORD(SQL_TOKEN_BLOB);  }
141*b1cdbd2cSJim Jagielski BOTH				{SQL_NEW_KEYWORD(SQL_TOKEN_BOTH);  }
142*b1cdbd2cSJim Jagielski BY					{SQL_NEW_KEYWORD(SQL_TOKEN_BY);  }
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski CALL				{SQL_NEW_KEYWORD(SQL_TOKEN_CALL);  }
145*b1cdbd2cSJim Jagielski CASE				{SQL_NEW_KEYWORD(SQL_TOKEN_CASE);  }
146*b1cdbd2cSJim Jagielski CAST				{SQL_NEW_KEYWORD(SQL_TOKEN_CAST);  }
147*b1cdbd2cSJim Jagielski CEILING				{SQL_NEW_KEYWORD(SQL_TOKEN_CEILING);  }
148*b1cdbd2cSJim Jagielski CHAR				{SQL_NEW_KEYWORD(SQL_TOKEN_CHAR);  }
149*b1cdbd2cSJim Jagielski CHARACTER			{SQL_NEW_KEYWORD(SQL_TOKEN_CHARACTER);  }
150*b1cdbd2cSJim Jagielski CHAR(ACTER)?_LENGTH {SQL_NEW_KEYWORD(SQL_TOKEN_CHAR_LENGTH);  }
151*b1cdbd2cSJim Jagielski CHECK				{SQL_NEW_KEYWORD(SQL_TOKEN_CHECK);  }
152*b1cdbd2cSJim Jagielski CLOB				{SQL_NEW_KEYWORD(SQL_TOKEN_CLOB);  }
153*b1cdbd2cSJim Jagielski COALESCE			{SQL_NEW_KEYWORD(SQL_TOKEN_COALESCE);  }
154*b1cdbd2cSJim Jagielski COLLATE				{SQL_NEW_KEYWORD(SQL_TOKEN_COLLATE);  }
155*b1cdbd2cSJim Jagielski COLLECT             {SQL_NEW_KEYWORD(SQL_TOKEN_COLLECT);  }
156*b1cdbd2cSJim Jagielski COMMIT				{SQL_NEW_KEYWORD(SQL_TOKEN_COMMIT);  }
157*b1cdbd2cSJim Jagielski CONCAT				{SQL_NEW_KEYWORD(SQL_TOKEN_CONCAT);  }
158*b1cdbd2cSJim Jagielski CONTINUE			{SQL_NEW_KEYWORD(SQL_TOKEN_CONTINUE);  }
159*b1cdbd2cSJim Jagielski CONVERT				{SQL_NEW_KEYWORD(SQL_TOKEN_CONVERT);  }
160*b1cdbd2cSJim Jagielski COS					{SQL_NEW_KEYWORD(SQL_TOKEN_COS);  }
161*b1cdbd2cSJim Jagielski COT					{SQL_NEW_KEYWORD(SQL_TOKEN_COT);  }
162*b1cdbd2cSJim Jagielski COUNT				{SQL_NEW_KEYWORD(SQL_TOKEN_COUNT);  }
163*b1cdbd2cSJim Jagielski CREATE				{SQL_NEW_KEYWORD(SQL_TOKEN_CREATE);  }
164*b1cdbd2cSJim Jagielski CROSS				{SQL_NEW_KEYWORD(SQL_TOKEN_CROSS);  }
165*b1cdbd2cSJim Jagielski CUME_RANK			{SQL_NEW_KEYWORD(SQL_TOKEN_CUME_DIST);  }
166*b1cdbd2cSJim Jagielski CURRENT				{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT);  }
167*b1cdbd2cSJim Jagielski CURRENT_DATE		{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_DATE);  }
168*b1cdbd2cSJim Jagielski CURRENT_CATALOG					{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_CATALOG);  }
169*b1cdbd2cSJim Jagielski CURRENT_DEFAULT_TRANSFORM_GROUP	{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_DEFAULT_TRANSFORM_GROUP);  }
170*b1cdbd2cSJim Jagielski CURRENT_PATH					{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_PATH);  }
171*b1cdbd2cSJim Jagielski CURRENT_ROLE					{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_ROLE);  }
172*b1cdbd2cSJim Jagielski CURRENT_SCHEMA					{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_SCHEMA);  }
173*b1cdbd2cSJim Jagielski CURRENT_USER					{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_USER);  }
174*b1cdbd2cSJim Jagielski CURDATE				{SQL_NEW_KEYWORD(SQL_TOKEN_CURDATE);  }
175*b1cdbd2cSJim Jagielski CURRENT_TIME		{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_TIME);  }
176*b1cdbd2cSJim Jagielski CURTIME				{SQL_NEW_KEYWORD(SQL_TOKEN_CURTIME);  }
177*b1cdbd2cSJim Jagielski CURRENT_TIMESTAMP	{SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_TIMESTAMP);  }
178*b1cdbd2cSJim Jagielski CURSOR				{SQL_NEW_KEYWORD(SQL_TOKEN_CURSOR);  }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski D					{SQL_NEW_KEYWORD(SQL_TOKEN_D);  }
181*b1cdbd2cSJim Jagielski DATE				{SQL_NEW_KEYWORD(SQL_TOKEN_DATE);  }
182*b1cdbd2cSJim Jagielski DATEDIFF			{SQL_NEW_KEYWORD(SQL_TOKEN_DATEDIFF);  }
183*b1cdbd2cSJim Jagielski DATEVALUE			{SQL_NEW_KEYWORD(SQL_TOKEN_DATEVALUE);  }
184*b1cdbd2cSJim Jagielski DAY					{SQL_NEW_KEYWORD(SQL_TOKEN_DAY);  }
185*b1cdbd2cSJim Jagielski DAYNAME				{SQL_NEW_KEYWORD(SQL_TOKEN_DAYNAME);  }
186*b1cdbd2cSJim Jagielski DAYOFMONTH			{SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFMONTH);  }
187*b1cdbd2cSJim Jagielski DAYOFWEEK			{SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFWEEK);  }
188*b1cdbd2cSJim Jagielski DAYOFYEAR			{SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFYEAR);  }
189*b1cdbd2cSJim Jagielski DEC					{SQL_NEW_KEYWORD(SQL_TOKEN_DEC);  }
190*b1cdbd2cSJim Jagielski DECIMAL				{SQL_NEW_KEYWORD(SQL_TOKEN_DECIMAL);  }
191*b1cdbd2cSJim Jagielski DECLARE				{SQL_NEW_KEYWORD(SQL_TOKEN_DECLARE);  }
192*b1cdbd2cSJim Jagielski DEFAULT				{SQL_NEW_KEYWORD(SQL_TOKEN_DEFAULT);  }
193*b1cdbd2cSJim Jagielski DEGREES				{SQL_NEW_KEYWORD(SQL_TOKEN_DEGREES);  }
194*b1cdbd2cSJim Jagielski DELETE				{SQL_NEW_KEYWORD(SQL_TOKEN_DELETE);  }
195*b1cdbd2cSJim Jagielski DENSE_RANK			{SQL_NEW_KEYWORD(SQL_TOKEN_DENSE_RANK);  }
196*b1cdbd2cSJim Jagielski DESC				{SQL_NEW_KEYWORD(SQL_TOKEN_DESC);  }
197*b1cdbd2cSJim Jagielski DIFFERENCE			{SQL_NEW_KEYWORD(SQL_TOKEN_DIFFERENCE);  }
198*b1cdbd2cSJim Jagielski DISTINCT			{SQL_NEW_KEYWORD(SQL_TOKEN_DISTINCT);  }
199*b1cdbd2cSJim Jagielski DOUBLE				{SQL_NEW_KEYWORD(SQL_TOKEN_DOUBLE);  }
200*b1cdbd2cSJim Jagielski DROP				{SQL_NEW_KEYWORD(SQL_TOKEN_DROP);  }
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski EACH				{SQL_NEW_KEYWORD(SQL_TOKEN_EACH);  }
203*b1cdbd2cSJim Jagielski ELSE				{SQL_NEW_KEYWORD(SQL_TOKEN_ELSE);  }
204*b1cdbd2cSJim Jagielski END					{SQL_NEW_KEYWORD(SQL_TOKEN_END);  }
205*b1cdbd2cSJim Jagielski EVERY               {SQL_NEW_KEYWORD(SQL_TOKEN_EVERY);  }
206*b1cdbd2cSJim Jagielski ESCAPE				{SQL_NEW_KEYWORD(SQL_TOKEN_ESCAPE);  }
207*b1cdbd2cSJim Jagielski EXCEPT				{SQL_NEW_KEYWORD(SQL_TOKEN_EXCEPT);  }
208*b1cdbd2cSJim Jagielski EXCLUDE				{SQL_NEW_KEYWORD(SQL_TOKEN_EXCLUDE);  }
209*b1cdbd2cSJim Jagielski EXISTS				{SQL_NEW_KEYWORD(SQL_TOKEN_EXISTS);  }
210*b1cdbd2cSJim Jagielski EXP					{SQL_NEW_KEYWORD(SQL_TOKEN_EXP);  }
211*b1cdbd2cSJim Jagielski EXTRACT				{SQL_NEW_KEYWORD(SQL_TOKEN_EXTRACT);  }
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski FALSE				{SQL_NEW_KEYWORD(SQL_TOKEN_FALSE);  }
214*b1cdbd2cSJim Jagielski FETCH				{SQL_NEW_KEYWORD(SQL_TOKEN_FETCH);  }
215*b1cdbd2cSJim Jagielski FIRST				{SQL_NEW_KEYWORD(SQL_TOKEN_FIRST);  }
216*b1cdbd2cSJim Jagielski FIRST_VALUE			{SQL_NEW_KEYWORD(SQL_TOKEN_FIRST_VALUE);  }
217*b1cdbd2cSJim Jagielski FLOAT				{SQL_NEW_KEYWORD(SQL_TOKEN_FLOAT);  }
218*b1cdbd2cSJim Jagielski FLOOR				{SQL_NEW_KEYWORD(SQL_TOKEN_FLOOR);  }
219*b1cdbd2cSJim Jagielski FN					{SQL_NEW_KEYWORD(SQL_TOKEN_FN);  }
220*b1cdbd2cSJim Jagielski FOLLOWING			{SQL_NEW_KEYWORD(SQL_TOKEN_FOLLOWING);  }
221*b1cdbd2cSJim Jagielski FOR					{SQL_NEW_KEYWORD(SQL_TOKEN_FOR);  }
222*b1cdbd2cSJim Jagielski FOREIGN				{SQL_NEW_KEYWORD(SQL_TOKEN_FOREIGN);  }
223*b1cdbd2cSJim Jagielski FOUND				{SQL_NEW_KEYWORD(SQL_TOKEN_FOUND);  }
224*b1cdbd2cSJim Jagielski FROM				{SQL_NEW_KEYWORD(SQL_TOKEN_FROM);  }
225*b1cdbd2cSJim Jagielski FULL				{SQL_NEW_KEYWORD(SQL_TOKEN_FULL);  }
226*b1cdbd2cSJim Jagielski FUSION              {SQL_NEW_KEYWORD(SQL_TOKEN_FUSION);  }
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski GRANT				{SQL_NEW_KEYWORD(SQL_TOKEN_GRANT);  }
229*b1cdbd2cSJim Jagielski GROUP				{SQL_NEW_KEYWORD(SQL_TOKEN_GROUP);  }
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski HAVING				{SQL_NEW_KEYWORD(SQL_TOKEN_HAVING);  }
232*b1cdbd2cSJim Jagielski HOUR				{SQL_NEW_KEYWORD(SQL_TOKEN_HOUR);  }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski IGNORE				{SQL_NEW_KEYWORD(SQL_TOKEN_IGNORE);  }
235*b1cdbd2cSJim Jagielski IN					{SQL_NEW_KEYWORD(SQL_TOKEN_IN);  }
236*b1cdbd2cSJim Jagielski INNER				{SQL_NEW_KEYWORD(SQL_TOKEN_INNER);  }
237*b1cdbd2cSJim Jagielski INSERT				{SQL_NEW_KEYWORD(SQL_TOKEN_INSERT);  }
238*b1cdbd2cSJim Jagielski INSTEAD				{SQL_NEW_KEYWORD(SQL_TOKEN_INSTEAD);  }
239*b1cdbd2cSJim Jagielski INT(EGER)?			{SQL_NEW_KEYWORD(SQL_TOKEN_INTEGER);  }
240*b1cdbd2cSJim Jagielski INTERSECT			{SQL_NEW_KEYWORD(SQL_TOKEN_INTERSECT);  }
241*b1cdbd2cSJim Jagielski INTERVAL			{SQL_NEW_KEYWORD(SQL_TOKEN_INTERVAL);  }
242*b1cdbd2cSJim Jagielski INTERSECTION		{SQL_NEW_KEYWORD(SQL_TOKEN_INTERSECTION);  }
243*b1cdbd2cSJim Jagielski INTO				{SQL_NEW_KEYWORD(SQL_TOKEN_INTO);  }
244*b1cdbd2cSJim Jagielski IS					{SQL_NEW_KEYWORD(SQL_TOKEN_IS);  }
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski JOIN				{SQL_NEW_KEYWORD(SQL_TOKEN_JOIN);  }
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski KEY					{SQL_NEW_KEYWORD(SQL_TOKEN_KEY);  }
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski LAG					{SQL_NEW_KEYWORD(SQL_TOKEN_LAG);  }
251*b1cdbd2cSJim Jagielski LARGE				{SQL_NEW_KEYWORD(SQL_TOKEN_LARGE);  }
252*b1cdbd2cSJim Jagielski LAST				{SQL_NEW_KEYWORD(SQL_TOKEN_LAST);  }
253*b1cdbd2cSJim Jagielski LAST_VALUE			{SQL_NEW_KEYWORD(SQL_TOKEN_LAST_VALUE);  }
254*b1cdbd2cSJim Jagielski LCASE				{SQL_NEW_KEYWORD(SQL_TOKEN_LCASE);  }
255*b1cdbd2cSJim Jagielski LEAD				{SQL_NEW_KEYWORD(SQL_TOKEN_LEAD);  }
256*b1cdbd2cSJim Jagielski LEADING				{SQL_NEW_KEYWORD(SQL_TOKEN_LEADING);  }
257*b1cdbd2cSJim Jagielski LEFT				{SQL_NEW_KEYWORD(SQL_TOKEN_LEFT);  }
258*b1cdbd2cSJim Jagielski LENGTH				{SQL_NEW_KEYWORD(SQL_TOKEN_LENGTH);  }
259*b1cdbd2cSJim Jagielski LIKE				{SQL_NEW_KEYWORD(SQL_TOKEN_LIKE);  }
260*b1cdbd2cSJim Jagielski LIMIT				{SQL_NEW_KEYWORD(SQL_TOKEN_LIMIT);  }
261*b1cdbd2cSJim Jagielski LN					{SQL_NEW_KEYWORD(SQL_TOKEN_LN);  }
262*b1cdbd2cSJim Jagielski LOCAL				{SQL_NEW_KEYWORD(SQL_TOKEN_LOCAL);  }
263*b1cdbd2cSJim Jagielski LOCATE				{SQL_NEW_KEYWORD(SQL_TOKEN_LOCATE);  }
264*b1cdbd2cSJim Jagielski LOG					{SQL_NEW_KEYWORD(SQL_TOKEN_LOG);  }
265*b1cdbd2cSJim Jagielski LOGF				{SQL_NEW_KEYWORD(SQL_TOKEN_LOGF);  }
266*b1cdbd2cSJim Jagielski LOG10				{SQL_NEW_KEYWORD(SQL_TOKEN_LOG10);  }
267*b1cdbd2cSJim Jagielski LOWER				{SQL_NEW_KEYWORD(SQL_TOKEN_LOWER);  }
268*b1cdbd2cSJim Jagielski LTRIM				{SQL_NEW_KEYWORD(SQL_TOKEN_LTRIM);  }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski MAX					{SQL_NEW_KEYWORD(SQL_TOKEN_MAX);  }
271*b1cdbd2cSJim Jagielski MIN					{SQL_NEW_KEYWORD(SQL_TOKEN_MIN);  }
272*b1cdbd2cSJim Jagielski MINUTE				{SQL_NEW_KEYWORD(SQL_TOKEN_MINUTE);  }
273*b1cdbd2cSJim Jagielski MOD					{SQL_NEW_KEYWORD(SQL_TOKEN_MOD);  }
274*b1cdbd2cSJim Jagielski MONTH				{SQL_NEW_KEYWORD(SQL_TOKEN_MONTH);  }
275*b1cdbd2cSJim Jagielski MONTHNAME			{SQL_NEW_KEYWORD(SQL_TOKEN_MONTHNAME);  }
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski NATIONAL			{SQL_NEW_KEYWORD(SQL_TOKEN_NATIONAL);  }
278*b1cdbd2cSJim Jagielski NATURAL				{SQL_NEW_KEYWORD(SQL_TOKEN_NATURAL);  }
279*b1cdbd2cSJim Jagielski NCHAR				{SQL_NEW_KEYWORD(SQL_TOKEN_NCHAR);  }
280*b1cdbd2cSJim Jagielski NCLOB				{SQL_NEW_KEYWORD(SQL_TOKEN_NCLOB);  }
281*b1cdbd2cSJim Jagielski NEW					{SQL_NEW_KEYWORD(SQL_TOKEN_NEW);  }
282*b1cdbd2cSJim Jagielski NEXT				{SQL_NEW_KEYWORD(SQL_TOKEN_NEXT);  }
283*b1cdbd2cSJim Jagielski NO					{SQL_NEW_KEYWORD(SQL_TOKEN_NO);  }
284*b1cdbd2cSJim Jagielski NOT					{SQL_NEW_KEYWORD(SQL_TOKEN_NOT);  }
285*b1cdbd2cSJim Jagielski NOW					{SQL_NEW_KEYWORD(SQL_TOKEN_NOW);  }
286*b1cdbd2cSJim Jagielski NTH_VALUE			{SQL_NEW_KEYWORD(SQL_TOKEN_NTH_VALUE);  }
287*b1cdbd2cSJim Jagielski NTILE				{SQL_NEW_KEYWORD(SQL_TOKEN_NTILE);  }
288*b1cdbd2cSJim Jagielski NULL				{SQL_NEW_KEYWORD(SQL_TOKEN_NULL);  }
289*b1cdbd2cSJim Jagielski NULLIF				{SQL_NEW_KEYWORD(SQL_TOKEN_NULLIF);  }
290*b1cdbd2cSJim Jagielski NULLS				{SQL_NEW_KEYWORD(SQL_TOKEN_NULLS);  }
291*b1cdbd2cSJim Jagielski NUMERIC				{SQL_NEW_KEYWORD(SQL_TOKEN_NUMERIC);  }
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski OBJECT				{SQL_NEW_KEYWORD(SQL_TOKEN_OBJECT);  }
294*b1cdbd2cSJim Jagielski OCTET_LENGTH		{SQL_NEW_KEYWORD(SQL_TOKEN_OCTET_LENGTH);  }
295*b1cdbd2cSJim Jagielski OF					{SQL_NEW_KEYWORD(SQL_TOKEN_OF);  }
296*b1cdbd2cSJim Jagielski OFFSET				{SQL_NEW_KEYWORD(SQL_TOKEN_OFFSET);  }
297*b1cdbd2cSJim Jagielski OJ					{SQL_NEW_KEYWORD(SQL_TOKEN_OJ);  }
298*b1cdbd2cSJim Jagielski OLD					{SQL_NEW_KEYWORD(SQL_TOKEN_OLD);  }
299*b1cdbd2cSJim Jagielski ON					{SQL_NEW_KEYWORD(SQL_TOKEN_ON);  }
300*b1cdbd2cSJim Jagielski ONLY				{SQL_NEW_KEYWORD(SQL_TOKEN_ONLY);  }
301*b1cdbd2cSJim Jagielski OPTION				{SQL_NEW_KEYWORD(SQL_TOKEN_OPTION);  }
302*b1cdbd2cSJim Jagielski OR					{SQL_NEW_KEYWORD(SQL_TOKEN_OR);  }
303*b1cdbd2cSJim Jagielski ORDER				{SQL_NEW_KEYWORD(SQL_TOKEN_ORDER);  }
304*b1cdbd2cSJim Jagielski OTHERS				{SQL_NEW_KEYWORD(SQL_TOKEN_OTHERS);  }
305*b1cdbd2cSJim Jagielski OUTER				{SQL_NEW_KEYWORD(SQL_TOKEN_OUTER);  }
306*b1cdbd2cSJim Jagielski OVER				{SQL_NEW_KEYWORD(SQL_TOKEN_OVER);  }
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski PARTITION			{SQL_NEW_KEYWORD(SQL_TOKEN_PARTITION);  }
309*b1cdbd2cSJim Jagielski PERCENT_RANK		{SQL_NEW_KEYWORD(SQL_TOKEN_PERCENT_RANK);  }
310*b1cdbd2cSJim Jagielski PERCENTILE_CONT		{SQL_NEW_KEYWORD(SQL_TOKEN_PERCENTILE_CONT);  }
311*b1cdbd2cSJim Jagielski PERCENTILE_DISC		{SQL_NEW_KEYWORD(SQL_TOKEN_PERCENTILE_DISC);  }
312*b1cdbd2cSJim Jagielski PI					{SQL_NEW_KEYWORD(SQL_TOKEN_PI);  }
313*b1cdbd2cSJim Jagielski POSITION	        {SQL_NEW_KEYWORD(SQL_TOKEN_POSITION);  }
314*b1cdbd2cSJim Jagielski POWER				{SQL_NEW_KEYWORD(SQL_TOKEN_POWER);  }
315*b1cdbd2cSJim Jagielski PRECEDING           {SQL_NEW_KEYWORD(SQL_TOKEN_PRECEDING);  }
316*b1cdbd2cSJim Jagielski PRECISION           {SQL_NEW_KEYWORD(SQL_TOKEN_PRECISION);  }
317*b1cdbd2cSJim Jagielski PRIMARY				{SQL_NEW_KEYWORD(SQL_TOKEN_PRIMARY);  }
318*b1cdbd2cSJim Jagielski PRIVILEGES			{SQL_NEW_KEYWORD(SQL_TOKEN_PRIVILEGES);  }
319*b1cdbd2cSJim Jagielski PROCEDURE           {SQL_NEW_KEYWORD(SQL_TOKEN_PROCEDURE);  }
320*b1cdbd2cSJim Jagielski PUBLIC				{SQL_NEW_KEYWORD(SQL_TOKEN_PUBLIC);  }
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski QUARTER				{SQL_NEW_KEYWORD(SQL_TOKEN_QUARTER);  }
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski RADIANS				{SQL_NEW_KEYWORD(SQL_TOKEN_RADIANS);  }
325*b1cdbd2cSJim Jagielski RAND				{SQL_NEW_KEYWORD(SQL_TOKEN_RAND);  }
326*b1cdbd2cSJim Jagielski RANGE				{SQL_NEW_KEYWORD(SQL_TOKEN_RANGE);  }
327*b1cdbd2cSJim Jagielski RANK				{SQL_NEW_KEYWORD(SQL_TOKEN_RANK);  }
328*b1cdbd2cSJim Jagielski REAL				{SQL_NEW_KEYWORD(SQL_TOKEN_REAL);  }
329*b1cdbd2cSJim Jagielski REFERENCES			{SQL_NEW_KEYWORD(SQL_TOKEN_REFERENCES);  }
330*b1cdbd2cSJim Jagielski REFERENCING			{SQL_NEW_KEYWORD(SQL_TOKEN_REFERENCING);  }
331*b1cdbd2cSJim Jagielski REPEAT				{SQL_NEW_KEYWORD(SQL_TOKEN_REPEAT);  }
332*b1cdbd2cSJim Jagielski REPLACE				{SQL_NEW_KEYWORD(SQL_TOKEN_REPLACE);  }
333*b1cdbd2cSJim Jagielski RESPECT				{SQL_NEW_KEYWORD(SQL_TOKEN_RESPECT);  }
334*b1cdbd2cSJim Jagielski ROLLBACK            {SQL_NEW_KEYWORD(SQL_TOKEN_ROLLBACK);  }
335*b1cdbd2cSJim Jagielski ROUND			    {SQL_NEW_KEYWORD(SQL_TOKEN_ROUND);  }
336*b1cdbd2cSJim Jagielski ROUNDMAGIC			{SQL_NEW_KEYWORD(SQL_TOKEN_ROUNDMAGIC);  }
337*b1cdbd2cSJim Jagielski ROW					{SQL_NEW_KEYWORD(SQL_TOKEN_ROW);  }
338*b1cdbd2cSJim Jagielski ROWS					{SQL_NEW_KEYWORD(SQL_TOKEN_ROWS);  }
339*b1cdbd2cSJim Jagielski ROW_NUMBER			{SQL_NEW_KEYWORD(SQL_TOKEN_ROW_NUMBER);  }
340*b1cdbd2cSJim Jagielski RIGHT				{SQL_NEW_KEYWORD(SQL_TOKEN_RIGHT);  }
341*b1cdbd2cSJim Jagielski RTRIM				{SQL_NEW_KEYWORD(SQL_TOKEN_RTRIM);  }
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski SCHEMA				{SQL_NEW_KEYWORD(SQL_TOKEN_SCHEMA);  }
344*b1cdbd2cSJim Jagielski SECOND				{SQL_NEW_KEYWORD(SQL_TOKEN_SECOND);  }
345*b1cdbd2cSJim Jagielski SELECT				{SQL_NEW_KEYWORD(SQL_TOKEN_SELECT);  }
346*b1cdbd2cSJim Jagielski SET					{SQL_NEW_KEYWORD(SQL_TOKEN_SET);  }
347*b1cdbd2cSJim Jagielski SIZE				{SQL_NEW_KEYWORD(SQL_TOKEN_SIZE);  }
348*b1cdbd2cSJim Jagielski SIGN				{SQL_NEW_KEYWORD(SQL_TOKEN_SIGN);  }
349*b1cdbd2cSJim Jagielski SIN					{SQL_NEW_KEYWORD(SQL_TOKEN_SIN);  }
350*b1cdbd2cSJim Jagielski SMALLINT            {SQL_NEW_KEYWORD(SQL_TOKEN_SMALLINT);  }
351*b1cdbd2cSJim Jagielski SOME				{SQL_NEW_KEYWORD(SQL_TOKEN_SOME);  }
352*b1cdbd2cSJim Jagielski SOUNDEX				{SQL_NEW_KEYWORD(SQL_TOKEN_SOUNDEX);  }
353*b1cdbd2cSJim Jagielski SPACE				{SQL_NEW_KEYWORD(SQL_TOKEN_SPACE);  }
354*b1cdbd2cSJim Jagielski SQRT				{SQL_NEW_KEYWORD(SQL_TOKEN_SQRT);  }
355*b1cdbd2cSJim Jagielski STDDEV_POP          {SQL_NEW_KEYWORD(SQL_TOKEN_STDDEV_POP);  }
356*b1cdbd2cSJim Jagielski STDDEV_SAMP         {SQL_NEW_KEYWORD(SQL_TOKEN_STDDEV_SAMP); }
357*b1cdbd2cSJim Jagielski STATEMENT			{SQL_NEW_KEYWORD(SQL_TOKEN_STATEMENT);  }
358*b1cdbd2cSJim Jagielski SUBSTRING			{SQL_NEW_KEYWORD(SQL_TOKEN_SUBSTRING);  }
359*b1cdbd2cSJim Jagielski SUM					{SQL_NEW_KEYWORD(SQL_TOKEN_SUM);  }
360*b1cdbd2cSJim Jagielski SESSION_USER		{SQL_NEW_KEYWORD(SQL_TOKEN_SESSION_USER);  }
361*b1cdbd2cSJim Jagielski SYSTEM_USER			{SQL_NEW_KEYWORD(SQL_TOKEN_SYSTEM_USER);  }
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski TABLE				{SQL_NEW_KEYWORD(SQL_TOKEN_TABLE);  }
364*b1cdbd2cSJim Jagielski TAN					{SQL_NEW_KEYWORD(SQL_TOKEN_TAN);  }
365*b1cdbd2cSJim Jagielski THEN				{SQL_NEW_KEYWORD(SQL_TOKEN_THEN);  }
366*b1cdbd2cSJim Jagielski TIES				{SQL_NEW_KEYWORD(SQL_TOKEN_TIES);  }
367*b1cdbd2cSJim Jagielski TIME				{SQL_NEW_KEYWORD(SQL_TOKEN_TIME);  }
368*b1cdbd2cSJim Jagielski TIMESTAMP			{SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMP);  }
369*b1cdbd2cSJim Jagielski TIMESTAMPADD		{SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMPADD);  }
370*b1cdbd2cSJim Jagielski TIMESTAMPDIFF		{SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMPDIFF);  }
371*b1cdbd2cSJim Jagielski TIMEVALUE			{SQL_NEW_KEYWORD(SQL_TOKEN_TIMEVALUE);  }
372*b1cdbd2cSJim Jagielski TIMEZONE_HOUR		{SQL_NEW_KEYWORD(SQL_TOKEN_TIMEZONE_HOUR);  }
373*b1cdbd2cSJim Jagielski TIMEZONE_MINUTE		{SQL_NEW_KEYWORD(SQL_TOKEN_TIMEZONE_MINUTE);  }
374*b1cdbd2cSJim Jagielski TO					{SQL_NEW_KEYWORD(SQL_TOKEN_TO);  }
375*b1cdbd2cSJim Jagielski TRAILING			{SQL_NEW_KEYWORD(SQL_TOKEN_TRAILING);  }
376*b1cdbd2cSJim Jagielski TRANSLATE			{SQL_NEW_KEYWORD(SQL_TOKEN_TRANSLATE);  }
377*b1cdbd2cSJim Jagielski TRIGGER				{SQL_NEW_KEYWORD(SQL_TOKEN_TRIGGER);  }
378*b1cdbd2cSJim Jagielski TRIM				{SQL_NEW_KEYWORD(SQL_TOKEN_TRIM);  }
379*b1cdbd2cSJim Jagielski TRUE				{SQL_NEW_KEYWORD(SQL_TOKEN_TRUE);  }
380*b1cdbd2cSJim Jagielski TRUNCATE			{SQL_NEW_KEYWORD(SQL_TOKEN_TRUNCATE);  }
381*b1cdbd2cSJim Jagielski TS					{SQL_NEW_KEYWORD(SQL_TOKEN_TS);  }
382*b1cdbd2cSJim Jagielski T					{SQL_NEW_KEYWORD(SQL_TOKEN_T);  }
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski UCASE				{SQL_NEW_KEYWORD(SQL_TOKEN_UCASE);  }
385*b1cdbd2cSJim Jagielski UNBOUNDED			{SQL_NEW_KEYWORD(SQL_TOKEN_UNBOUNDED);  }
386*b1cdbd2cSJim Jagielski UNION				{SQL_NEW_KEYWORD(SQL_TOKEN_UNION);  }
387*b1cdbd2cSJim Jagielski UNIQUE				{SQL_NEW_KEYWORD(SQL_TOKEN_UNIQUE);  }
388*b1cdbd2cSJim Jagielski UNKNOWN				{SQL_NEW_KEYWORD(SQL_TOKEN_UNKNOWN);  }
389*b1cdbd2cSJim Jagielski UPDATE				{SQL_NEW_KEYWORD(SQL_TOKEN_UPDATE);  }
390*b1cdbd2cSJim Jagielski UPPER				{SQL_NEW_KEYWORD(SQL_TOKEN_UPPER);  }
391*b1cdbd2cSJim Jagielski USAGE				{SQL_NEW_KEYWORD(SQL_TOKEN_USAGE);  }
392*b1cdbd2cSJim Jagielski USER				{SQL_NEW_KEYWORD(SQL_TOKEN_USER);  }
393*b1cdbd2cSJim Jagielski USING				{SQL_NEW_KEYWORD(SQL_TOKEN_USING);  }
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski VARBINARY			{SQL_NEW_KEYWORD(SQL_TOKEN_VARBINARY);  }
396*b1cdbd2cSJim Jagielski VARCHAR             {SQL_NEW_KEYWORD(SQL_TOKEN_VARCHAR);  }
397*b1cdbd2cSJim Jagielski VARYING             {SQL_NEW_KEYWORD(SQL_TOKEN_VARYING);  }
398*b1cdbd2cSJim Jagielski VAR_POP             {SQL_NEW_KEYWORD(SQL_TOKEN_VAR_POP);  }
399*b1cdbd2cSJim Jagielski VAR_SAMP            {SQL_NEW_KEYWORD(SQL_TOKEN_VAR_SAMP);  }
400*b1cdbd2cSJim Jagielski VALUE				{SQL_NEW_KEYWORD(SQL_TOKEN_VALUE);  }
401*b1cdbd2cSJim Jagielski VALUES				{SQL_NEW_KEYWORD(SQL_TOKEN_VALUES);  }
402*b1cdbd2cSJim Jagielski VIEW				{SQL_NEW_KEYWORD(SQL_TOKEN_VIEW);  }
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski WEEK				{SQL_NEW_KEYWORD(SQL_TOKEN_WEEK);  }
405*b1cdbd2cSJim Jagielski WHEN				{SQL_NEW_KEYWORD(SQL_TOKEN_WHEN);  }
406*b1cdbd2cSJim Jagielski WHERE				{SQL_NEW_KEYWORD(SQL_TOKEN_WHERE);  }
407*b1cdbd2cSJim Jagielski WITH				{SQL_NEW_KEYWORD(SQL_TOKEN_WITH);  }
408*b1cdbd2cSJim Jagielski WITHIN				{SQL_NEW_KEYWORD(SQL_TOKEN_WITHIN);  }
409*b1cdbd2cSJim Jagielski WITHOUT				{SQL_NEW_KEYWORD(SQL_TOKEN_WITHOUT);  }
410*b1cdbd2cSJim Jagielski WORK				{SQL_NEW_KEYWORD(SQL_TOKEN_WORK);  }
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski YEAR				{SQL_NEW_KEYWORD(SQL_TOKEN_YEAR);  }
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski ZONE				{SQL_NEW_KEYWORD(SQL_TOKEN_ZONE);  }
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski "<"					{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_LESS);return SQL_LESS;}
417*b1cdbd2cSJim Jagielski ">"					{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_GREAT);return SQL_GREAT;}
418*b1cdbd2cSJim Jagielski "="					{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_EQUAL);return SQL_EQUAL;}
419*b1cdbd2cSJim Jagielski "<="				{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_LESSEQ);return SQL_LESSEQ;}
420*b1cdbd2cSJim Jagielski ">="				{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_GREATEQ);return SQL_GREATEQ;}
421*b1cdbd2cSJim Jagielski "<>"				{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_NOTEQUAL);return SQL_NOTEQUAL;}
422*b1cdbd2cSJim Jagielski "!="				{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_NOTEQUAL);return SQL_NOTEQUAL;}
423*b1cdbd2cSJim Jagielski "||"				{ SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_CONCAT);return SQL_CONCAT;}
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski [-+*/:(),.;?{}]    { return SQLyytext[0]; }
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski <SQL>[A-Za-z\200-\277\300-\337\340-\357\360-\367\370-\373\374-\375][A-Za-z\200-\277\300-\337\340-\357\360-\367\370-\373\374-\375_0-9]*		{return gatherName( SQLyytext);}
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski <SQL>([0-9]+) |
432*b1cdbd2cSJim Jagielski <SQL>([0-9]+"."[0-9]*) |
433*b1cdbd2cSJim Jagielski <SQL>("."[0-9]*)					{SQL_NEW_INTNUM; }
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski <SQL>[0-9]+[eE][+-]?[0-9]+   |
436*b1cdbd2cSJim Jagielski <SQL>[0-9]+"."[0-9]*[eE][+-]?[0-9]+ |
437*b1cdbd2cSJim Jagielski <SQL>"."[0-9]*[eE][+-]?[0-9]+		{SQL_NEW_APPROXNUM;  }
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski <PREDICATE_GER,PREDICATE_ENG,DATE>[A-Za-z\200-\277\300-\337\340-\357\360-\367\370-\373\374-\375][A-Za-z0-9_%.,*?\200-\277\300-\337\340-\357\360-\367\370-\373\374-\375]* {return gatherNamePre(SQLyytext);}
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski <PREDICATE_GER,PREDICATE_ENG>([0-9]+)		{SQL_NEW_INTNUM; }
442*b1cdbd2cSJim Jagielski <PREDICATE_ENG>([0-9]{1,3}(","[0-9]{3})+) 	{SQL_NEW_INTNUM; }
443*b1cdbd2cSJim Jagielski <PREDICATE_GER>([0-9]{1,3}("."[0-9]{3})+)	{SQL_NEW_INTNUM; }
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski <PREDICATE_ENG>([0-9]+"."[0-9]+) |
446*b1cdbd2cSJim Jagielski <PREDICATE_ENG>([0-9]{1,3}(","[0-9]{3})+"."[0-9]+) |
447*b1cdbd2cSJim Jagielski <PREDICATE_ENG>("."[0-9]+)					{SQL_NEW_APPROXNUM;  }
448*b1cdbd2cSJim Jagielski <PREDICATE_ENG>[0-9]+[eE][+-]?[0-9]+   |
449*b1cdbd2cSJim Jagielski <PREDICATE_ENG>[0-9]+"."[0-9]*[eE][+-]?[0-9]+ |
450*b1cdbd2cSJim Jagielski <PREDICATE_ENG>"."[0-9]*[eE][+-]?[0-9]+		{SQL_NEW_APPROXNUM;  }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski <PREDICATE_GER>([0-9]+","[0-9]+) |
453*b1cdbd2cSJim Jagielski <PREDICATE_GER>([0-9]{1,3}("."[0-9]{3})+","[0-9]+) |
454*b1cdbd2cSJim Jagielski <PREDICATE_GER>(","[0-9]+)					{SQL_NEW_APPROXNUM;  }
455*b1cdbd2cSJim Jagielski <PREDICATE_GER>[0-9]+[eE][+-]?[0-9]+   |
456*b1cdbd2cSJim Jagielski <PREDICATE_GER>[0-9]+","[0-9]*[eE][+-]?[0-9]+ |
457*b1cdbd2cSJim Jagielski <PREDICATE_GER>","[0-9]*[eE][+-]?[0-9]+		{SQL_NEW_APPROXNUM;  }
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski <PREDICATE_GER,PREDICATE_ENG>[0-9.,][A-Za-z0-9_.,%]* {return gatherNamePre(SQLyytext);}
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski <SQL>\"	{ return gatherString('\"',0); }
462*b1cdbd2cSJim Jagielski <SQL>`	{ return gatherString('`' ,0); }
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski <PREDICATE_GER,PREDICATE_ENG,DATE,SQL>"["		{ return gatherString(']' ,0);}
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski \'		{ return gatherString('\'',1); }
467*b1cdbd2cSJim Jagielski 
468*b1cdbd2cSJim Jagielski <PREDICATE_GER,PREDICATE_ENG,DATE>#	{ return gatherString('#' ,2); }
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski <DATE>[0-9]{1,4}[^ ]*[0-9] |
471*b1cdbd2cSJim Jagielski <DATE>[0-9]{1,4}[^ ]*[0-9][ ][0-9]{1,4}[^ ]*[0-9]		{ SQL_NEW_DATE; }
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski <STRING>["-""+""*""/"":""("")"",""."";""?""{""}"]		{ return SQLyytext[0]; } /*  */
474*b1cdbd2cSJim Jagielski <STRING>"["					{ return gatherString(']' ,0); }
475*b1cdbd2cSJim Jagielski <STRING>[^ ':["?"]*			{ return gatherNamePre(SQLyytext); }
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski \n              {}
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski [ \t\r]+        {}
480*b1cdbd2cSJim Jagielski 
481*b1cdbd2cSJim Jagielski "--".*$         {}
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski .				{YY_FATAL_ERROR("Invalid symbol"); return SQL_TOKEN_INVALIDSYMBOL;}
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski %%
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski // Kludge around a bug (well, Posix incompatibility) in flex 2.5.x
488*b1cdbd2cSJim Jagielski // http://bugs.debian.org/cgi-bin/bugreport.cgi?archive=no&bug=189332
489*b1cdbd2cSJim Jagielski #if YY_FLEX_MAJOR_VERSION >= 2 && YY_FLEX_MINOR_VERSION >= 5
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski   #ifndef YY_FLUSH_BUFFER
492*b1cdbd2cSJim Jagielski     #define YY_FLUSH_BUFFER SQLyy_flush_buffer(YY_CURRENT_BUFFER )
493*b1cdbd2cSJim Jagielski   #endif
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski   #ifndef yytext_ptr
496*b1cdbd2cSJim Jagielski     #define yytext_ptr SQLyytext
497*b1cdbd2cSJim Jagielski   #endif
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski #endif
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski // Versions of flex apparently differ in whether input() resp. yyinput() returns
502*b1cdbd2cSJim Jagielski // zero or EOF upon end of file:
503*b1cdbd2cSJim Jagielski inline bool checkeof(int c) { return c == 0 || c == EOF; }
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski /*
506*b1cdbd2cSJim Jagielski  * Read SQL string literal
507*b1cdbd2cSJim Jagielski  * Valid strings:
508*b1cdbd2cSJim Jagielski  *	''	'a string'	'quote '' within string'
509*b1cdbd2cSJim Jagielski  *	""	"a string"	"quote "" within string"
510*b1cdbd2cSJim Jagielski  * nTyp == 0 -> SQL_NODE_NAME
511*b1cdbd2cSJim Jagielski  * nTyp == 1 -> SQL_NODE_STRING
512*b1cdbd2cSJim Jagielski  * nTyp == 2 -> SQL_NODE_ACCESS_DATE
513*b1cdbd2cSJim Jagielski  */
514*b1cdbd2cSJim Jagielski sal_Int32 gatherString( sal_Int32 delim, sal_Int32 nTyp)
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski 	sal_Char ch;
517*b1cdbd2cSJim Jagielski 	::rtl::OStringBuffer sBuffer(256);
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 	while (!checkeof(ch = yyinput()))
520*b1cdbd2cSJim Jagielski 	{
521*b1cdbd2cSJim Jagielski 		if (ch == delim)
522*b1cdbd2cSJim Jagielski 		{
523*b1cdbd2cSJim Jagielski 			if ((ch = yyinput()) != delim)
524*b1cdbd2cSJim Jagielski 			{
525*b1cdbd2cSJim Jagielski 				if (!checkeof(ch))
526*b1cdbd2cSJim Jagielski 					unput(ch);
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 				switch(nTyp)
529*b1cdbd2cSJim Jagielski 				{
530*b1cdbd2cSJim Jagielski 					case 0:
531*b1cdbd2cSJim Jagielski 						SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
532*b1cdbd2cSJim Jagielski 						return SQL_TOKEN_NAME;
533*b1cdbd2cSJim Jagielski 					case 1:
534*b1cdbd2cSJim Jagielski 						SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_STRING);
535*b1cdbd2cSJim Jagielski 						return SQL_TOKEN_STRING;
536*b1cdbd2cSJim Jagielski 					case 2:
537*b1cdbd2cSJim Jagielski 						SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_ACCESS_DATE);
538*b1cdbd2cSJim Jagielski 						return SQL_TOKEN_ACCESS_DATE;
539*b1cdbd2cSJim Jagielski 				}
540*b1cdbd2cSJim Jagielski 			}
541*b1cdbd2cSJim Jagielski 			else
542*b1cdbd2cSJim Jagielski 			{
543*b1cdbd2cSJim Jagielski 			    sBuffer.append(ch);
544*b1cdbd2cSJim Jagielski 			}
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 		}
547*b1cdbd2cSJim Jagielski 		else if (nTyp != 1 && (ch == '\r' || ch == '\n') )
548*b1cdbd2cSJim Jagielski 			break;
549*b1cdbd2cSJim Jagielski 		else
550*b1cdbd2cSJim Jagielski 		{
551*b1cdbd2cSJim Jagielski 		    sBuffer.append(ch);
552*b1cdbd2cSJim Jagielski 		}
553*b1cdbd2cSJim Jagielski 	}
554*b1cdbd2cSJim Jagielski 	YY_FATAL_ERROR("Unterminated name string");
555*b1cdbd2cSJim Jagielski 	return SQL_TOKEN_INVALIDSYMBOL;
556*b1cdbd2cSJim Jagielski }
557*b1cdbd2cSJim Jagielski 
558*b1cdbd2cSJim Jagielski sal_Int32 mapEnumToToken(IParseContext::InternationalKeyCode _eKeyCode )
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski 	sal_Int32 nTokenID = 0;
561*b1cdbd2cSJim Jagielski 	switch( _eKeyCode )
562*b1cdbd2cSJim Jagielski 	{
563*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_LIKE:		nTokenID = SQL_TOKEN_LIKE;		break;
564*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NOT:		nTokenID = SQL_TOKEN_NOT;		break;
565*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NULL:		nTokenID = SQL_TOKEN_NULL;		break;
566*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_TRUE:		nTokenID = SQL_TOKEN_TRUE;		break;
567*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_FALSE:		nTokenID = SQL_TOKEN_FALSE;		break;
568*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_IS:			nTokenID = SQL_TOKEN_IS;		break;
569*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_BETWEEN:	nTokenID = SQL_TOKEN_BETWEEN;	break;
570*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_OR:			nTokenID = SQL_TOKEN_OR;		break;
571*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AND:		nTokenID = SQL_TOKEN_AND;		break;
572*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AVG:		nTokenID = SQL_TOKEN_AVG;		break;
573*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_COUNT:		nTokenID = SQL_TOKEN_COUNT;		break;
574*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MAX:		nTokenID = SQL_TOKEN_MAX;		break;
575*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MIN:		nTokenID = SQL_TOKEN_MIN;		break;
576*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_SUM:		nTokenID = SQL_TOKEN_SUM;		break;
577*b1cdbd2cSJim Jagielski         case IParseContext::KEY_EVERY:      nTokenID = SQL_TOKEN_EVERY;     break;
578*b1cdbd2cSJim Jagielski         case IParseContext::KEY_ANY:        nTokenID = SQL_TOKEN_ANY;       break;
579*b1cdbd2cSJim Jagielski         case IParseContext::KEY_SOME:       nTokenID = SQL_TOKEN_SOME;      break;
580*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_POP: nTokenID = SQL_TOKEN_STDDEV_POP; break;
581*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_SAMP: nTokenID = SQL_TOKEN_STDDEV_SAMP; break;
582*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_SAMP:   nTokenID = SQL_TOKEN_VAR_SAMP;  break;
583*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_POP:    nTokenID = SQL_TOKEN_VAR_POP;   break;
584*b1cdbd2cSJim Jagielski         case IParseContext::KEY_COLLECT:    nTokenID = SQL_TOKEN_COLLECT;   break;
585*b1cdbd2cSJim Jagielski         case IParseContext::KEY_FUSION:     nTokenID = SQL_TOKEN_FUSION;    break;
586*b1cdbd2cSJim Jagielski         case IParseContext::KEY_INTERSECTION: nTokenID = SQL_TOKEN_INTERSECTION; break;
587*b1cdbd2cSJim Jagielski                 default:
588*b1cdbd2cSJim Jagielski             OSL_ENSURE( false, "mapEnumToToken: unsupported key!" );
589*b1cdbd2cSJim Jagielski 	}
590*b1cdbd2cSJim Jagielski 	return nTokenID;
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski /*
593*b1cdbd2cSJim Jagielski  * Read SQL Name literal
594*b1cdbd2cSJim Jagielski  * Valid Names or internatioanl keywords:
595*b1cdbd2cSJim Jagielski  *	As we have international keywords, we test first on them
596*b1cdbd2cSJim Jagielski  */
597*b1cdbd2cSJim Jagielski sal_Int32 gatherName(const sal_Char* text)
598*b1cdbd2cSJim Jagielski {
599*b1cdbd2cSJim Jagielski 	sal_Int32 nToken;
600*b1cdbd2cSJim Jagielski 	OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!");
601*b1cdbd2cSJim Jagielski 	IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text);
602*b1cdbd2cSJim Jagielski 	switch (eKeyCode)
603*b1cdbd2cSJim Jagielski 	{
604*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_LIKE:
605*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NOT:
606*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NULL:
607*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_TRUE:
608*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_FALSE:
609*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_IS:
610*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_BETWEEN:
611*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_OR:
612*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AND:
613*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_COUNT:
614*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AVG:
615*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MAX:
616*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MIN:
617*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_SUM:
618*b1cdbd2cSJim Jagielski         case IParseContext::KEY_EVERY:
619*b1cdbd2cSJim Jagielski         case IParseContext::KEY_ANY:
620*b1cdbd2cSJim Jagielski         case IParseContext::KEY_SOME:
621*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_POP:
622*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_SAMP:
623*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_SAMP:
624*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_POP:
625*b1cdbd2cSJim Jagielski         case IParseContext::KEY_COLLECT:
626*b1cdbd2cSJim Jagielski         case IParseContext::KEY_FUSION:
627*b1cdbd2cSJim Jagielski         case IParseContext::KEY_INTERSECTION:
628*b1cdbd2cSJim Jagielski 			nToken = mapEnumToToken(eKeyCode);
629*b1cdbd2cSJim Jagielski 			SQL_NEW_KEYWORD(nToken);
630*b1cdbd2cSJim Jagielski 			break;
631*b1cdbd2cSJim Jagielski 		default:
632*b1cdbd2cSJim Jagielski 			SQL_NEW_NODE(::rtl::OUString(text,strlen(text),RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
633*b1cdbd2cSJim Jagielski 			return SQL_TOKEN_NAME;
634*b1cdbd2cSJim Jagielski 	}
635*b1cdbd2cSJim Jagielski }
636*b1cdbd2cSJim Jagielski /**
637*b1cdbd2cSJim Jagielski  Read SQL Name literal for predicate check
638*b1cdbd2cSJim Jagielski  Valid Names or internatioanl keywords:
639*b1cdbd2cSJim Jagielski  As we have international keywords, we test first on them
640*b1cdbd2cSJim Jagielski */
641*b1cdbd2cSJim Jagielski sal_Int32 gatherNamePre(const sal_Char* text)
642*b1cdbd2cSJim Jagielski {
643*b1cdbd2cSJim Jagielski 	sal_Int32 nToken;
644*b1cdbd2cSJim Jagielski 	OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!");
645*b1cdbd2cSJim Jagielski 	IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text);
646*b1cdbd2cSJim Jagielski 	switch (eKeyCode)
647*b1cdbd2cSJim Jagielski 	{
648*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_LIKE:
649*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NOT:
650*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_NULL:
651*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_TRUE:
652*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_FALSE:
653*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_IS:
654*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_BETWEEN:
655*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_OR:
656*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AND:
657*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_COUNT:
658*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_AVG:
659*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MAX:
660*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_MIN:
661*b1cdbd2cSJim Jagielski 		case IParseContext::KEY_SUM:
662*b1cdbd2cSJim Jagielski         case IParseContext::KEY_EVERY:
663*b1cdbd2cSJim Jagielski         case IParseContext::KEY_ANY:
664*b1cdbd2cSJim Jagielski         case IParseContext::KEY_SOME:
665*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_POP:
666*b1cdbd2cSJim Jagielski         case IParseContext::KEY_STDDEV_SAMP:
667*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_SAMP:
668*b1cdbd2cSJim Jagielski         case IParseContext::KEY_VAR_POP:
669*b1cdbd2cSJim Jagielski         case IParseContext::KEY_COLLECT:
670*b1cdbd2cSJim Jagielski         case IParseContext::KEY_FUSION:
671*b1cdbd2cSJim Jagielski         case IParseContext::KEY_INTERSECTION:
672*b1cdbd2cSJim Jagielski 			nToken = mapEnumToToken(eKeyCode);
673*b1cdbd2cSJim Jagielski 			SQL_NEW_KEYWORD(nToken);
674*b1cdbd2cSJim Jagielski 			break;
675*b1cdbd2cSJim Jagielski 		default:
676*b1cdbd2cSJim Jagielski 		// we need a special handling for parameter
677*b1cdbd2cSJim Jagielski 		{
678*b1cdbd2cSJim Jagielski 			::rtl::OString sStmt = xxx_pGLOBAL_SQLSCAN->getStatement();
679*b1cdbd2cSJim Jagielski 			sal_Int32 nLength = strlen(text);
680*b1cdbd2cSJim Jagielski 			sal_Int32 nPos = xxx_pGLOBAL_SQLSCAN->GetCurrentPos() - nLength - 2;
681*b1cdbd2cSJim Jagielski 			if (sStmt.getStr()[nPos] == ':')
682*b1cdbd2cSJim Jagielski 			{
683*b1cdbd2cSJim Jagielski 				SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
684*b1cdbd2cSJim Jagielski 				nToken = SQL_TOKEN_NAME;
685*b1cdbd2cSJim Jagielski 			}
686*b1cdbd2cSJim Jagielski 			else
687*b1cdbd2cSJim Jagielski 			{
688*b1cdbd2cSJim Jagielski 				SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_STRING);
689*b1cdbd2cSJim Jagielski 				nToken = SQL_TOKEN_STRING;
690*b1cdbd2cSJim Jagielski 			}
691*b1cdbd2cSJim Jagielski 		}
692*b1cdbd2cSJim Jagielski 	}
693*b1cdbd2cSJim Jagielski 	return nToken;
694*b1cdbd2cSJim Jagielski }
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski using namespace connectivity;
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski static sal_uInt32 Intl_TokenID[] =
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski 	SQL_TOKEN_LIKE, SQL_TOKEN_NOT, SQL_TOKEN_NULL, SQL_TOKEN_TRUE,
701*b1cdbd2cSJim Jagielski 	SQL_TOKEN_FALSE, SQL_TOKEN_IS, SQL_TOKEN_BETWEEN, SQL_TOKEN_OR,
702*b1cdbd2cSJim Jagielski 	SQL_TOKEN_AND, SQL_TOKEN_AVG, SQL_TOKEN_COUNT, SQL_TOKEN_MAX,
703*b1cdbd2cSJim Jagielski 	SQL_TOKEN_MIN, SQL_TOKEN_SUM
704*b1cdbd2cSJim Jagielski };
705*b1cdbd2cSJim Jagielski static bool IN_SQLyyerror;
706*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
707*b1cdbd2cSJim Jagielski OSQLScanner::OSQLScanner()
708*b1cdbd2cSJim Jagielski 			: m_nCurrentPos(0)
709*b1cdbd2cSJim Jagielski 		    , m_bInternational(sal_False)
710*b1cdbd2cSJim Jagielski 			, m_pContext(NULL)
711*b1cdbd2cSJim Jagielski 			, m_nRule(0) // 0 is INITIAL
712*b1cdbd2cSJim Jagielski {
713*b1cdbd2cSJim Jagielski 	IN_SQLyyerror = false;
714*b1cdbd2cSJim Jagielski }
715*b1cdbd2cSJim Jagielski 
716*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
717*b1cdbd2cSJim Jagielski OSQLScanner::~OSQLScanner()
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski }
720*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
721*b1cdbd2cSJim Jagielski void OSQLScanner::SQLyyerror(sal_Char *fmt)
722*b1cdbd2cSJim Jagielski {
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski 	if(IN_SQLyyerror)
725*b1cdbd2cSJim Jagielski 		return;
726*b1cdbd2cSJim Jagielski 	IN_SQLyyerror = true;
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski 	OSL_ENSURE(m_pContext, "OSQLScanner::SQLyyerror: No Context set");
729*b1cdbd2cSJim Jagielski 	m_sErrorMessage = ::rtl::OUString(fmt,strlen(fmt),RTL_TEXTENCODING_UTF8);
730*b1cdbd2cSJim Jagielski 	if (m_nCurrentPos < m_sStatement.getLength())
731*b1cdbd2cSJim Jagielski 	{
732*b1cdbd2cSJim Jagielski 		m_sErrorMessage += ::rtl::OUString::createFromAscii(": ");
733*b1cdbd2cSJim Jagielski 
734*b1cdbd2cSJim Jagielski 		::rtl::OUString aError;
735*b1cdbd2cSJim Jagielski 		static sal_Int32 BUFFERSIZE = 256;
736*b1cdbd2cSJim Jagielski 		static sal_Char* Buffer = 0;
737*b1cdbd2cSJim Jagielski 		if(!Buffer)
738*b1cdbd2cSJim Jagielski 			Buffer = new sal_Char[BUFFERSIZE];
739*b1cdbd2cSJim Jagielski 
740*b1cdbd2cSJim Jagielski 		sal_Char *s = Buffer;
741*b1cdbd2cSJim Jagielski 		sal_Int32 nPos = 1;
742*b1cdbd2cSJim Jagielski 		sal_Int32 ch = SQLyytext ? (SQLyytext[0] == 0 ? ' ' : SQLyytext[0]): ' ';
743*b1cdbd2cSJim Jagielski 		*s++ = ch;
744*b1cdbd2cSJim Jagielski 		while (!checkeof(ch = yyinput()))
745*b1cdbd2cSJim Jagielski 		{
746*b1cdbd2cSJim Jagielski 			if (ch == ' ')
747*b1cdbd2cSJim Jagielski 			{
748*b1cdbd2cSJim Jagielski 				if ((ch = yyinput()) != ' ')
749*b1cdbd2cSJim Jagielski 				{
750*b1cdbd2cSJim Jagielski 					if (!checkeof(ch))
751*b1cdbd2cSJim Jagielski 						unput(ch);
752*b1cdbd2cSJim Jagielski 				}
753*b1cdbd2cSJim Jagielski 				*s = '\0';
754*b1cdbd2cSJim Jagielski 				aError = ::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8);
755*b1cdbd2cSJim Jagielski 				break;
756*b1cdbd2cSJim Jagielski 			}
757*b1cdbd2cSJim Jagielski 			else
758*b1cdbd2cSJim Jagielski 			{
759*b1cdbd2cSJim Jagielski 				*s++ = ch;
760*b1cdbd2cSJim Jagielski 				if (++nPos == BUFFERSIZE)
761*b1cdbd2cSJim Jagielski 				{
762*b1cdbd2cSJim Jagielski 					::rtl::OString aBuf(Buffer);
763*b1cdbd2cSJim Jagielski 					delete[] Buffer;
764*b1cdbd2cSJim Jagielski 					BUFFERSIZE *=2;
765*b1cdbd2cSJim Jagielski 					Buffer = new sal_Char[BUFFERSIZE];
766*b1cdbd2cSJim Jagielski 					for(sal_Int32 i=0;i<aBuf.getLength();++i,++Buffer)
767*b1cdbd2cSJim Jagielski 						*Buffer = aBuf.getStr()[i];
768*b1cdbd2cSJim Jagielski 					s = &Buffer[nPos];
769*b1cdbd2cSJim Jagielski 				}
770*b1cdbd2cSJim Jagielski 			}
771*b1cdbd2cSJim Jagielski 		}
772*b1cdbd2cSJim Jagielski 		m_sErrorMessage += aError;
773*b1cdbd2cSJim Jagielski 		delete[] Buffer;
774*b1cdbd2cSJim Jagielski 		Buffer = NULL;
775*b1cdbd2cSJim Jagielski 	}
776*b1cdbd2cSJim Jagielski 	IN_SQLyyerror = false;
777*b1cdbd2cSJim Jagielski 	YY_FLUSH_BUFFER;
778*b1cdbd2cSJim Jagielski }
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
781*b1cdbd2cSJim Jagielski void OSQLScanner::prepareScan(const ::rtl::OUString & rNewStatement, const IParseContext* pContext, sal_Bool bInternational)
782*b1cdbd2cSJim Jagielski {
783*b1cdbd2cSJim Jagielski 	YY_FLUSH_BUFFER;
784*b1cdbd2cSJim Jagielski 	BEGIN(m_nRule);
785*b1cdbd2cSJim Jagielski 
786*b1cdbd2cSJim Jagielski 	m_sErrorMessage = ::rtl::OUString();
787*b1cdbd2cSJim Jagielski 	m_sStatement	= ::rtl::OUStringToOString( rNewStatement, RTL_TEXTENCODING_UTF8);
788*b1cdbd2cSJim Jagielski 	m_nCurrentPos	= 0;
789*b1cdbd2cSJim Jagielski 	m_bInternational = bInternational;
790*b1cdbd2cSJim Jagielski 	m_pContext		= pContext;
791*b1cdbd2cSJim Jagielski }
792*b1cdbd2cSJim Jagielski 
793*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
794*b1cdbd2cSJim Jagielski sal_Int32 OSQLScanner::SQLyygetc(void)
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski 	sal_Int32 nPos = (m_nCurrentPos >= m_sStatement.getLength()) ? -1 : m_sStatement.getStr()[m_nCurrentPos];
797*b1cdbd2cSJim Jagielski     m_nCurrentPos++;
798*b1cdbd2cSJim Jagielski     return nPos;
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
802*b1cdbd2cSJim Jagielski IParseContext::InternationalKeyCode OSQLScanner::getInternationalTokenID(const sal_Char* sToken) const
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski 	OSL_ENSURE(m_pContext, "OSQLScanner::getInternationalTokenID: No Context set");
805*b1cdbd2cSJim Jagielski 	return (m_bInternational) ? m_pContext->getIntlKeyCode(::rtl::OString(sToken) ) : IParseContext::KEY_NONE;
806*b1cdbd2cSJim Jagielski }
807*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
808*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetCurrentRule() const { return m_nRule; }
809*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetGERRule() const		{ return PREDICATE_GER; }
810*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetENGRule() const		{ return PREDICATE_ENG; }
811*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetSQLRule() const		{ return SQL; }
812*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetDATERule() const	{ return DATE; }
813*b1cdbd2cSJim Jagielski sal_Int32	OSQLScanner::GetSTRINGRule() const	{ return STRING; }
814*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
815*b1cdbd2cSJim Jagielski void OSQLScanner::setScanner(sal_Bool _bNull)
816*b1cdbd2cSJim Jagielski {
817*b1cdbd2cSJim Jagielski 	xxx_pGLOBAL_SQLSCAN = _bNull ? NULL : this;
818*b1cdbd2cSJim Jagielski }
819*b1cdbd2cSJim Jagielski // -------------------------------------------------------------------------
820*b1cdbd2cSJim Jagielski sal_Int32 OSQLScanner::SQLlex()
821*b1cdbd2cSJim Jagielski {
822*b1cdbd2cSJim Jagielski 	return SQLyylex();
823*b1cdbd2cSJim Jagielski }
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski #if defined __SUNPRO_CC
826*b1cdbd2cSJim Jagielski #pragma enable_warn
827*b1cdbd2cSJim Jagielski #elif defined _MSC_VER
828*b1cdbd2cSJim Jagielski #pragma warning(pop)
829*b1cdbd2cSJim Jagielski #endif
830