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