blob: 304a4e18be4a4092f092fb40cfb6fbcbe72b2a38 [file] [log] [blame]
%{
//------------------------------------------------------------
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
//------------------------------------------------------------
#define YY_EXIT 1 // YY_FATAL will not halt the application
#ifndef _CSTDARG_
#include <cstdarg> // std::va_list
#endif
#ifndef _INC_STRING
#include <string.h>
#endif
#include "internalnode.hxx"
#ifndef _CONNECTIVITY_SQLYACC_HXX
#define _CONNECTIVITY_SQLYACC_HXX
#ifndef SQLYYDEBUG
#define SQLYYDEBUG 1
#endif
#include "sqlbison.hxx"
#endif
#include "sqlscan.hxx"
#include <osl/diagnose.h>
#include <rtl/strbuf.hxx>
#include <connectivity/sqlparse.hxx>
#if defined __GNUC__
#pragma GCC system_header
#elif defined __SUNPRO_CC
#pragma disable_warn
#elif defined _MSC_VER
#pragma warning(push, 1)
/**/
#ifdef yywrap
#undef yywrap
#define yywrap() 1
#endif
/**/
#endif
using namespace connectivity;
//=============================================================================
//
// Erzeugung der Blaetter fuer die Token
// Blaetter werden generell vom Lexer erzeugt
static ::rtl::OUString aEmptyString;
static sal_Int32 gatherString(sal_Int32 delim, sal_Int32 nTyp);
static sal_Int32 gatherName(const sal_Char*);
static sal_Int32 gatherNamePre(const sal_Char* );
// has to be set before the parser starts
OSQLScanner* xxx_pGLOBAL_SQLSCAN = NULL;
#define SQL_NEW_NODE(text, token) \
SQLyylval.pParseNode = new OSQLInternalNode(text, token);
#define SQL_NEW_KEYWORD(token) \
SQLyylval.pParseNode = new OSQLInternalNode(aEmptyString, SQL_NODE_KEYWORD, (token)); return token;
#define SQL_NEW_INTNUM SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_INTNUM); return SQL_TOKEN_INTNUM;
#define SQL_NEW_APPROXNUM SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_APPROXNUM); return SQL_TOKEN_APPROXNUM;
#define SQL_NEW_DATE SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_ACCESS_DATE); return SQL_TOKEN_ACCESS_DATE;
#define YY_INPUT(buf,result,max_size) \
{ \
buf[0] = xxx_pGLOBAL_SQLSCAN->SQLyygetc(); \
result = buf[0] != -1; \
}
#define YY_FATAL_ERROR(msg) \
{ \
xxx_pGLOBAL_SQLSCAN->SQLyyerror(msg); \
}
//
//=============================================================================
%}
%s SQL
%s PREDICATE_ENG
%s PREDICATE_GER
%s DATE
%s STRING
%option noyywrap
%option never-interactive
%%
ABS {SQL_NEW_KEYWORD(SQL_TOKEN_ABS); }
ACOS {SQL_NEW_KEYWORD(SQL_TOKEN_ACOS); }
AFTER {SQL_NEW_KEYWORD(SQL_TOKEN_AFTER); }
ALL {SQL_NEW_KEYWORD(SQL_TOKEN_ALL); }
ALTER {SQL_NEW_KEYWORD(SQL_TOKEN_ALTER); }
AND {SQL_NEW_KEYWORD(SQL_TOKEN_AND); }
ANY {SQL_NEW_KEYWORD(SQL_TOKEN_ANY); }
ARRAY_AGG {SQL_NEW_KEYWORD(SQL_TOKEN_ARRAY_AGG); }
AS {SQL_NEW_KEYWORD(SQL_TOKEN_AS); }
ASC {SQL_NEW_KEYWORD(SQL_TOKEN_ASC); }
ASCII {SQL_NEW_KEYWORD(SQL_TOKEN_ASCII); }
ASIN {SQL_NEW_KEYWORD(SQL_TOKEN_ASIN); }
AT {SQL_NEW_KEYWORD(SQL_TOKEN_AT); }
ATAN {SQL_NEW_KEYWORD(SQL_TOKEN_ATAN); }
ATAN2 {SQL_NEW_KEYWORD(SQL_TOKEN_ATAN2); }
ATOMIC {SQL_NEW_KEYWORD(SQL_TOKEN_ATOMIC); }
AUTHORIZATION {SQL_NEW_KEYWORD(SQL_TOKEN_AUTHORIZATION); }
AVG {SQL_NEW_KEYWORD(SQL_TOKEN_AVG); }
BEFORE {SQL_NEW_KEYWORD(SQL_TOKEN_BEFORE); }
BEGIN {SQL_NEW_KEYWORD(SQL_TOKEN_BEGIN); }
BETWEEN {SQL_NEW_KEYWORD(SQL_TOKEN_BETWEEN); }
BIGINT {SQL_NEW_KEYWORD(SQL_TOKEN_BIGINT); }
BINARY {SQL_NEW_KEYWORD(SQL_TOKEN_BINARY); }
BIT {SQL_NEW_KEYWORD(SQL_TOKEN_BIT); }
BIT_LENGTH {SQL_NEW_KEYWORD(SQL_TOKEN_BIT_LENGTH); }
BLOB {SQL_NEW_KEYWORD(SQL_TOKEN_BLOB); }
BOTH {SQL_NEW_KEYWORD(SQL_TOKEN_BOTH); }
BY {SQL_NEW_KEYWORD(SQL_TOKEN_BY); }
CALL {SQL_NEW_KEYWORD(SQL_TOKEN_CALL); }
CASE {SQL_NEW_KEYWORD(SQL_TOKEN_CASE); }
CAST {SQL_NEW_KEYWORD(SQL_TOKEN_CAST); }
CEILING {SQL_NEW_KEYWORD(SQL_TOKEN_CEILING); }
CHAR {SQL_NEW_KEYWORD(SQL_TOKEN_CHAR); }
CHARACTER {SQL_NEW_KEYWORD(SQL_TOKEN_CHARACTER); }
CHAR(ACTER)?_LENGTH {SQL_NEW_KEYWORD(SQL_TOKEN_CHAR_LENGTH); }
CHECK {SQL_NEW_KEYWORD(SQL_TOKEN_CHECK); }
CLOB {SQL_NEW_KEYWORD(SQL_TOKEN_CLOB); }
COALESCE {SQL_NEW_KEYWORD(SQL_TOKEN_COALESCE); }
COLLATE {SQL_NEW_KEYWORD(SQL_TOKEN_COLLATE); }
COLLECT {SQL_NEW_KEYWORD(SQL_TOKEN_COLLECT); }
COMMIT {SQL_NEW_KEYWORD(SQL_TOKEN_COMMIT); }
CONCAT {SQL_NEW_KEYWORD(SQL_TOKEN_CONCAT); }
CONTINUE {SQL_NEW_KEYWORD(SQL_TOKEN_CONTINUE); }
CONVERT {SQL_NEW_KEYWORD(SQL_TOKEN_CONVERT); }
COS {SQL_NEW_KEYWORD(SQL_TOKEN_COS); }
COT {SQL_NEW_KEYWORD(SQL_TOKEN_COT); }
COUNT {SQL_NEW_KEYWORD(SQL_TOKEN_COUNT); }
CREATE {SQL_NEW_KEYWORD(SQL_TOKEN_CREATE); }
CROSS {SQL_NEW_KEYWORD(SQL_TOKEN_CROSS); }
CUME_RANK {SQL_NEW_KEYWORD(SQL_TOKEN_CUME_DIST); }
CURRENT {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT); }
CURRENT_DATE {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_DATE); }
CURRENT_CATALOG {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_CATALOG); }
CURRENT_DEFAULT_TRANSFORM_GROUP {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_DEFAULT_TRANSFORM_GROUP); }
CURRENT_PATH {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_PATH); }
CURRENT_ROLE {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_ROLE); }
CURRENT_SCHEMA {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_SCHEMA); }
CURRENT_USER {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_USER); }
CURDATE {SQL_NEW_KEYWORD(SQL_TOKEN_CURDATE); }
CURRENT_TIME {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_TIME); }
CURTIME {SQL_NEW_KEYWORD(SQL_TOKEN_CURTIME); }
CURRENT_TIMESTAMP {SQL_NEW_KEYWORD(SQL_TOKEN_CURRENT_TIMESTAMP); }
CURSOR {SQL_NEW_KEYWORD(SQL_TOKEN_CURSOR); }
D {SQL_NEW_KEYWORD(SQL_TOKEN_D); }
DATE {SQL_NEW_KEYWORD(SQL_TOKEN_DATE); }
DATEDIFF {SQL_NEW_KEYWORD(SQL_TOKEN_DATEDIFF); }
DATEVALUE {SQL_NEW_KEYWORD(SQL_TOKEN_DATEVALUE); }
DAY {SQL_NEW_KEYWORD(SQL_TOKEN_DAY); }
DAYNAME {SQL_NEW_KEYWORD(SQL_TOKEN_DAYNAME); }
DAYOFMONTH {SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFMONTH); }
DAYOFWEEK {SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFWEEK); }
DAYOFYEAR {SQL_NEW_KEYWORD(SQL_TOKEN_DAYOFYEAR); }
DEC {SQL_NEW_KEYWORD(SQL_TOKEN_DEC); }
DECIMAL {SQL_NEW_KEYWORD(SQL_TOKEN_DECIMAL); }
DECLARE {SQL_NEW_KEYWORD(SQL_TOKEN_DECLARE); }
DEFAULT {SQL_NEW_KEYWORD(SQL_TOKEN_DEFAULT); }
DEGREES {SQL_NEW_KEYWORD(SQL_TOKEN_DEGREES); }
DELETE {SQL_NEW_KEYWORD(SQL_TOKEN_DELETE); }
DENSE_RANK {SQL_NEW_KEYWORD(SQL_TOKEN_DENSE_RANK); }
DESC {SQL_NEW_KEYWORD(SQL_TOKEN_DESC); }
DIFFERENCE {SQL_NEW_KEYWORD(SQL_TOKEN_DIFFERENCE); }
DISTINCT {SQL_NEW_KEYWORD(SQL_TOKEN_DISTINCT); }
DOUBLE {SQL_NEW_KEYWORD(SQL_TOKEN_DOUBLE); }
DROP {SQL_NEW_KEYWORD(SQL_TOKEN_DROP); }
EACH {SQL_NEW_KEYWORD(SQL_TOKEN_EACH); }
ELSE {SQL_NEW_KEYWORD(SQL_TOKEN_ELSE); }
END {SQL_NEW_KEYWORD(SQL_TOKEN_END); }
EVERY {SQL_NEW_KEYWORD(SQL_TOKEN_EVERY); }
ESCAPE {SQL_NEW_KEYWORD(SQL_TOKEN_ESCAPE); }
EXCEPT {SQL_NEW_KEYWORD(SQL_TOKEN_EXCEPT); }
EXCLUDE {SQL_NEW_KEYWORD(SQL_TOKEN_EXCLUDE); }
EXISTS {SQL_NEW_KEYWORD(SQL_TOKEN_EXISTS); }
EXP {SQL_NEW_KEYWORD(SQL_TOKEN_EXP); }
EXTRACT {SQL_NEW_KEYWORD(SQL_TOKEN_EXTRACT); }
FALSE {SQL_NEW_KEYWORD(SQL_TOKEN_FALSE); }
FETCH {SQL_NEW_KEYWORD(SQL_TOKEN_FETCH); }
FIRST {SQL_NEW_KEYWORD(SQL_TOKEN_FIRST); }
FIRST_VALUE {SQL_NEW_KEYWORD(SQL_TOKEN_FIRST_VALUE); }
FLOAT {SQL_NEW_KEYWORD(SQL_TOKEN_FLOAT); }
FLOOR {SQL_NEW_KEYWORD(SQL_TOKEN_FLOOR); }
FN {SQL_NEW_KEYWORD(SQL_TOKEN_FN); }
FOLLOWING {SQL_NEW_KEYWORD(SQL_TOKEN_FOLLOWING); }
FOR {SQL_NEW_KEYWORD(SQL_TOKEN_FOR); }
FOREIGN {SQL_NEW_KEYWORD(SQL_TOKEN_FOREIGN); }
FOUND {SQL_NEW_KEYWORD(SQL_TOKEN_FOUND); }
FROM {SQL_NEW_KEYWORD(SQL_TOKEN_FROM); }
FULL {SQL_NEW_KEYWORD(SQL_TOKEN_FULL); }
FUSION {SQL_NEW_KEYWORD(SQL_TOKEN_FUSION); }
GRANT {SQL_NEW_KEYWORD(SQL_TOKEN_GRANT); }
GROUP {SQL_NEW_KEYWORD(SQL_TOKEN_GROUP); }
HAVING {SQL_NEW_KEYWORD(SQL_TOKEN_HAVING); }
HOUR {SQL_NEW_KEYWORD(SQL_TOKEN_HOUR); }
IGNORE {SQL_NEW_KEYWORD(SQL_TOKEN_IGNORE); }
IN {SQL_NEW_KEYWORD(SQL_TOKEN_IN); }
INNER {SQL_NEW_KEYWORD(SQL_TOKEN_INNER); }
INSERT {SQL_NEW_KEYWORD(SQL_TOKEN_INSERT); }
INSTEAD {SQL_NEW_KEYWORD(SQL_TOKEN_INSTEAD); }
INT(EGER)? {SQL_NEW_KEYWORD(SQL_TOKEN_INTEGER); }
INTERSECT {SQL_NEW_KEYWORD(SQL_TOKEN_INTERSECT); }
INTERVAL {SQL_NEW_KEYWORD(SQL_TOKEN_INTERVAL); }
INTERSECTION {SQL_NEW_KEYWORD(SQL_TOKEN_INTERSECTION); }
INTO {SQL_NEW_KEYWORD(SQL_TOKEN_INTO); }
IS {SQL_NEW_KEYWORD(SQL_TOKEN_IS); }
JOIN {SQL_NEW_KEYWORD(SQL_TOKEN_JOIN); }
KEY {SQL_NEW_KEYWORD(SQL_TOKEN_KEY); }
LAG {SQL_NEW_KEYWORD(SQL_TOKEN_LAG); }
LARGE {SQL_NEW_KEYWORD(SQL_TOKEN_LARGE); }
LAST {SQL_NEW_KEYWORD(SQL_TOKEN_LAST); }
LAST_VALUE {SQL_NEW_KEYWORD(SQL_TOKEN_LAST_VALUE); }
LCASE {SQL_NEW_KEYWORD(SQL_TOKEN_LCASE); }
LEAD {SQL_NEW_KEYWORD(SQL_TOKEN_LEAD); }
LEADING {SQL_NEW_KEYWORD(SQL_TOKEN_LEADING); }
LEFT {SQL_NEW_KEYWORD(SQL_TOKEN_LEFT); }
LENGTH {SQL_NEW_KEYWORD(SQL_TOKEN_LENGTH); }
LIKE {SQL_NEW_KEYWORD(SQL_TOKEN_LIKE); }
LIMIT {SQL_NEW_KEYWORD(SQL_TOKEN_LIMIT); }
LN {SQL_NEW_KEYWORD(SQL_TOKEN_LN); }
LOCAL {SQL_NEW_KEYWORD(SQL_TOKEN_LOCAL); }
LOCATE {SQL_NEW_KEYWORD(SQL_TOKEN_LOCATE); }
LOG {SQL_NEW_KEYWORD(SQL_TOKEN_LOG); }
LOGF {SQL_NEW_KEYWORD(SQL_TOKEN_LOGF); }
LOG10 {SQL_NEW_KEYWORD(SQL_TOKEN_LOG10); }
LOWER {SQL_NEW_KEYWORD(SQL_TOKEN_LOWER); }
LTRIM {SQL_NEW_KEYWORD(SQL_TOKEN_LTRIM); }
MAX {SQL_NEW_KEYWORD(SQL_TOKEN_MAX); }
MIN {SQL_NEW_KEYWORD(SQL_TOKEN_MIN); }
MINUTE {SQL_NEW_KEYWORD(SQL_TOKEN_MINUTE); }
MOD {SQL_NEW_KEYWORD(SQL_TOKEN_MOD); }
MONTH {SQL_NEW_KEYWORD(SQL_TOKEN_MONTH); }
MONTHNAME {SQL_NEW_KEYWORD(SQL_TOKEN_MONTHNAME); }
NATIONAL {SQL_NEW_KEYWORD(SQL_TOKEN_NATIONAL); }
NATURAL {SQL_NEW_KEYWORD(SQL_TOKEN_NATURAL); }
NCHAR {SQL_NEW_KEYWORD(SQL_TOKEN_NCHAR); }
NCLOB {SQL_NEW_KEYWORD(SQL_TOKEN_NCLOB); }
NEW {SQL_NEW_KEYWORD(SQL_TOKEN_NEW); }
NEXT {SQL_NEW_KEYWORD(SQL_TOKEN_NEXT); }
NO {SQL_NEW_KEYWORD(SQL_TOKEN_NO); }
NOT {SQL_NEW_KEYWORD(SQL_TOKEN_NOT); }
NOW {SQL_NEW_KEYWORD(SQL_TOKEN_NOW); }
NTH_VALUE {SQL_NEW_KEYWORD(SQL_TOKEN_NTH_VALUE); }
NTILE {SQL_NEW_KEYWORD(SQL_TOKEN_NTILE); }
NULL {SQL_NEW_KEYWORD(SQL_TOKEN_NULL); }
NULLIF {SQL_NEW_KEYWORD(SQL_TOKEN_NULLIF); }
NULLS {SQL_NEW_KEYWORD(SQL_TOKEN_NULLS); }
NUMERIC {SQL_NEW_KEYWORD(SQL_TOKEN_NUMERIC); }
OBJECT {SQL_NEW_KEYWORD(SQL_TOKEN_OBJECT); }
OCTET_LENGTH {SQL_NEW_KEYWORD(SQL_TOKEN_OCTET_LENGTH); }
OF {SQL_NEW_KEYWORD(SQL_TOKEN_OF); }
OFFSET {SQL_NEW_KEYWORD(SQL_TOKEN_OFFSET); }
OJ {SQL_NEW_KEYWORD(SQL_TOKEN_OJ); }
OLD {SQL_NEW_KEYWORD(SQL_TOKEN_OLD); }
ON {SQL_NEW_KEYWORD(SQL_TOKEN_ON); }
ONLY {SQL_NEW_KEYWORD(SQL_TOKEN_ONLY); }
OPTION {SQL_NEW_KEYWORD(SQL_TOKEN_OPTION); }
OR {SQL_NEW_KEYWORD(SQL_TOKEN_OR); }
ORDER {SQL_NEW_KEYWORD(SQL_TOKEN_ORDER); }
OTHERS {SQL_NEW_KEYWORD(SQL_TOKEN_OTHERS); }
OUTER {SQL_NEW_KEYWORD(SQL_TOKEN_OUTER); }
OVER {SQL_NEW_KEYWORD(SQL_TOKEN_OVER); }
PARTITION {SQL_NEW_KEYWORD(SQL_TOKEN_PARTITION); }
PERCENT_RANK {SQL_NEW_KEYWORD(SQL_TOKEN_PERCENT_RANK); }
PERCENTILE_CONT {SQL_NEW_KEYWORD(SQL_TOKEN_PERCENTILE_CONT); }
PERCENTILE_DISC {SQL_NEW_KEYWORD(SQL_TOKEN_PERCENTILE_DISC); }
PI {SQL_NEW_KEYWORD(SQL_TOKEN_PI); }
POSITION {SQL_NEW_KEYWORD(SQL_TOKEN_POSITION); }
POWER {SQL_NEW_KEYWORD(SQL_TOKEN_POWER); }
PRECEDING {SQL_NEW_KEYWORD(SQL_TOKEN_PRECEDING); }
PRECISION {SQL_NEW_KEYWORD(SQL_TOKEN_PRECISION); }
PRIMARY {SQL_NEW_KEYWORD(SQL_TOKEN_PRIMARY); }
PRIVILEGES {SQL_NEW_KEYWORD(SQL_TOKEN_PRIVILEGES); }
PROCEDURE {SQL_NEW_KEYWORD(SQL_TOKEN_PROCEDURE); }
PUBLIC {SQL_NEW_KEYWORD(SQL_TOKEN_PUBLIC); }
QUARTER {SQL_NEW_KEYWORD(SQL_TOKEN_QUARTER); }
RADIANS {SQL_NEW_KEYWORD(SQL_TOKEN_RADIANS); }
RAND {SQL_NEW_KEYWORD(SQL_TOKEN_RAND); }
RANGE {SQL_NEW_KEYWORD(SQL_TOKEN_RANGE); }
RANK {SQL_NEW_KEYWORD(SQL_TOKEN_RANK); }
REAL {SQL_NEW_KEYWORD(SQL_TOKEN_REAL); }
REFERENCES {SQL_NEW_KEYWORD(SQL_TOKEN_REFERENCES); }
REFERENCING {SQL_NEW_KEYWORD(SQL_TOKEN_REFERENCING); }
REPEAT {SQL_NEW_KEYWORD(SQL_TOKEN_REPEAT); }
REPLACE {SQL_NEW_KEYWORD(SQL_TOKEN_REPLACE); }
RESPECT {SQL_NEW_KEYWORD(SQL_TOKEN_RESPECT); }
ROLLBACK {SQL_NEW_KEYWORD(SQL_TOKEN_ROLLBACK); }
ROUND {SQL_NEW_KEYWORD(SQL_TOKEN_ROUND); }
ROUNDMAGIC {SQL_NEW_KEYWORD(SQL_TOKEN_ROUNDMAGIC); }
ROW {SQL_NEW_KEYWORD(SQL_TOKEN_ROW); }
ROWS {SQL_NEW_KEYWORD(SQL_TOKEN_ROWS); }
ROW_NUMBER {SQL_NEW_KEYWORD(SQL_TOKEN_ROW_NUMBER); }
RIGHT {SQL_NEW_KEYWORD(SQL_TOKEN_RIGHT); }
RTRIM {SQL_NEW_KEYWORD(SQL_TOKEN_RTRIM); }
SCHEMA {SQL_NEW_KEYWORD(SQL_TOKEN_SCHEMA); }
SECOND {SQL_NEW_KEYWORD(SQL_TOKEN_SECOND); }
SELECT {SQL_NEW_KEYWORD(SQL_TOKEN_SELECT); }
SET {SQL_NEW_KEYWORD(SQL_TOKEN_SET); }
SIZE {SQL_NEW_KEYWORD(SQL_TOKEN_SIZE); }
SIGN {SQL_NEW_KEYWORD(SQL_TOKEN_SIGN); }
SIN {SQL_NEW_KEYWORD(SQL_TOKEN_SIN); }
SMALLINT {SQL_NEW_KEYWORD(SQL_TOKEN_SMALLINT); }
SOME {SQL_NEW_KEYWORD(SQL_TOKEN_SOME); }
SOUNDEX {SQL_NEW_KEYWORD(SQL_TOKEN_SOUNDEX); }
SPACE {SQL_NEW_KEYWORD(SQL_TOKEN_SPACE); }
SQRT {SQL_NEW_KEYWORD(SQL_TOKEN_SQRT); }
STDDEV_POP {SQL_NEW_KEYWORD(SQL_TOKEN_STDDEV_POP); }
STDDEV_SAMP {SQL_NEW_KEYWORD(SQL_TOKEN_STDDEV_SAMP); }
STATEMENT {SQL_NEW_KEYWORD(SQL_TOKEN_STATEMENT); }
SUBSTRING {SQL_NEW_KEYWORD(SQL_TOKEN_SUBSTRING); }
SUM {SQL_NEW_KEYWORD(SQL_TOKEN_SUM); }
SESSION_USER {SQL_NEW_KEYWORD(SQL_TOKEN_SESSION_USER); }
SYSTEM_USER {SQL_NEW_KEYWORD(SQL_TOKEN_SYSTEM_USER); }
TABLE {SQL_NEW_KEYWORD(SQL_TOKEN_TABLE); }
TAN {SQL_NEW_KEYWORD(SQL_TOKEN_TAN); }
THEN {SQL_NEW_KEYWORD(SQL_TOKEN_THEN); }
TIES {SQL_NEW_KEYWORD(SQL_TOKEN_TIES); }
TIME {SQL_NEW_KEYWORD(SQL_TOKEN_TIME); }
TIMESTAMP {SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMP); }
TIMESTAMPADD {SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMPADD); }
TIMESTAMPDIFF {SQL_NEW_KEYWORD(SQL_TOKEN_TIMESTAMPDIFF); }
TIMEVALUE {SQL_NEW_KEYWORD(SQL_TOKEN_TIMEVALUE); }
TIMEZONE_HOUR {SQL_NEW_KEYWORD(SQL_TOKEN_TIMEZONE_HOUR); }
TIMEZONE_MINUTE {SQL_NEW_KEYWORD(SQL_TOKEN_TIMEZONE_MINUTE); }
TO {SQL_NEW_KEYWORD(SQL_TOKEN_TO); }
TRAILING {SQL_NEW_KEYWORD(SQL_TOKEN_TRAILING); }
TRANSLATE {SQL_NEW_KEYWORD(SQL_TOKEN_TRANSLATE); }
TRIGGER {SQL_NEW_KEYWORD(SQL_TOKEN_TRIGGER); }
TRIM {SQL_NEW_KEYWORD(SQL_TOKEN_TRIM); }
TRUE {SQL_NEW_KEYWORD(SQL_TOKEN_TRUE); }
TRUNCATE {SQL_NEW_KEYWORD(SQL_TOKEN_TRUNCATE); }
TS {SQL_NEW_KEYWORD(SQL_TOKEN_TS); }
T {SQL_NEW_KEYWORD(SQL_TOKEN_T); }
UCASE {SQL_NEW_KEYWORD(SQL_TOKEN_UCASE); }
UNBOUNDED {SQL_NEW_KEYWORD(SQL_TOKEN_UNBOUNDED); }
UNION {SQL_NEW_KEYWORD(SQL_TOKEN_UNION); }
UNIQUE {SQL_NEW_KEYWORD(SQL_TOKEN_UNIQUE); }
UNKNOWN {SQL_NEW_KEYWORD(SQL_TOKEN_UNKNOWN); }
UPDATE {SQL_NEW_KEYWORD(SQL_TOKEN_UPDATE); }
UPPER {SQL_NEW_KEYWORD(SQL_TOKEN_UPPER); }
USAGE {SQL_NEW_KEYWORD(SQL_TOKEN_USAGE); }
USER {SQL_NEW_KEYWORD(SQL_TOKEN_USER); }
USING {SQL_NEW_KEYWORD(SQL_TOKEN_USING); }
VARBINARY {SQL_NEW_KEYWORD(SQL_TOKEN_VARBINARY); }
VARCHAR {SQL_NEW_KEYWORD(SQL_TOKEN_VARCHAR); }
VARYING {SQL_NEW_KEYWORD(SQL_TOKEN_VARYING); }
VAR_POP {SQL_NEW_KEYWORD(SQL_TOKEN_VAR_POP); }
VAR_SAMP {SQL_NEW_KEYWORD(SQL_TOKEN_VAR_SAMP); }
VALUE {SQL_NEW_KEYWORD(SQL_TOKEN_VALUE); }
VALUES {SQL_NEW_KEYWORD(SQL_TOKEN_VALUES); }
VIEW {SQL_NEW_KEYWORD(SQL_TOKEN_VIEW); }
WEEK {SQL_NEW_KEYWORD(SQL_TOKEN_WEEK); }
WHEN {SQL_NEW_KEYWORD(SQL_TOKEN_WHEN); }
WHERE {SQL_NEW_KEYWORD(SQL_TOKEN_WHERE); }
WITH {SQL_NEW_KEYWORD(SQL_TOKEN_WITH); }
WITHIN {SQL_NEW_KEYWORD(SQL_TOKEN_WITHIN); }
WITHOUT {SQL_NEW_KEYWORD(SQL_TOKEN_WITHOUT); }
WORK {SQL_NEW_KEYWORD(SQL_TOKEN_WORK); }
YEAR {SQL_NEW_KEYWORD(SQL_TOKEN_YEAR); }
ZONE {SQL_NEW_KEYWORD(SQL_TOKEN_ZONE); }
"<" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_LESS);return SQL_LESS;}
">" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_GREAT);return SQL_GREAT;}
"=" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_EQUAL);return SQL_EQUAL;}
"<=" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_LESSEQ);return SQL_LESSEQ;}
">=" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_GREATEQ);return SQL_GREATEQ;}
"<>" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_NOTEQUAL);return SQL_NOTEQUAL;}
"!=" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_NOTEQUAL);return SQL_NOTEQUAL;}
"||" { SQL_NEW_NODE(::rtl::OUString(SQLyytext,strlen(SQLyytext),RTL_TEXTENCODING_UTF8), SQL_NODE_CONCAT);return SQL_CONCAT;}
[-+*/:(),.;?{}] { return SQLyytext[0]; }
<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);}
<SQL>([0-9]+) |
<SQL>([0-9]+"."[0-9]*) |
<SQL>("."[0-9]*) {SQL_NEW_INTNUM; }
<SQL>[0-9]+[eE][+-]?[0-9]+ |
<SQL>[0-9]+"."[0-9]*[eE][+-]?[0-9]+ |
<SQL>"."[0-9]*[eE][+-]?[0-9]+ {SQL_NEW_APPROXNUM; }
<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);}
<PREDICATE_GER,PREDICATE_ENG>([0-9]+) {SQL_NEW_INTNUM; }
<PREDICATE_ENG>([0-9]{1,3}(","[0-9]{3})+) {SQL_NEW_INTNUM; }
<PREDICATE_GER>([0-9]{1,3}("."[0-9]{3})+) {SQL_NEW_INTNUM; }
<PREDICATE_ENG>([0-9]+"."[0-9]+) |
<PREDICATE_ENG>([0-9]{1,3}(","[0-9]{3})+"."[0-9]+) |
<PREDICATE_ENG>("."[0-9]+) {SQL_NEW_APPROXNUM; }
<PREDICATE_ENG>[0-9]+[eE][+-]?[0-9]+ |
<PREDICATE_ENG>[0-9]+"."[0-9]*[eE][+-]?[0-9]+ |
<PREDICATE_ENG>"."[0-9]*[eE][+-]?[0-9]+ {SQL_NEW_APPROXNUM; }
<PREDICATE_GER>([0-9]+","[0-9]+) |
<PREDICATE_GER>([0-9]{1,3}("."[0-9]{3})+","[0-9]+) |
<PREDICATE_GER>(","[0-9]+) {SQL_NEW_APPROXNUM; }
<PREDICATE_GER>[0-9]+[eE][+-]?[0-9]+ |
<PREDICATE_GER>[0-9]+","[0-9]*[eE][+-]?[0-9]+ |
<PREDICATE_GER>","[0-9]*[eE][+-]?[0-9]+ {SQL_NEW_APPROXNUM; }
<PREDICATE_GER,PREDICATE_ENG>[0-9.,][A-Za-z0-9_.,%]* {return gatherNamePre(SQLyytext);}
<SQL>\" { return gatherString('\"',0); }
<SQL>` { return gatherString('`' ,0); }
<PREDICATE_GER,PREDICATE_ENG,DATE,SQL>"[" { return gatherString(']' ,0);}
\' { return gatherString('\'',1); }
<PREDICATE_GER,PREDICATE_ENG,DATE># { return gatherString('#' ,2); }
<DATE>[0-9]{1,4}[^ ]*[0-9] |
<DATE>[0-9]{1,4}[^ ]*[0-9][ ][0-9]{1,4}[^ ]*[0-9] { SQL_NEW_DATE; }
<STRING>["-""+""*""/"":""("")"",""."";""?""{""}"] { return SQLyytext[0]; } /* */
<STRING>"[" { return gatherString(']' ,0); }
<STRING>[^ ':["?"]* { return gatherNamePre(SQLyytext); }
\n {}
[ \t\r]+ {}
"--".*$ {}
. {YY_FATAL_ERROR("Invalid symbol"); return SQL_TOKEN_INVALIDSYMBOL;}
%%
// Kludge around a bug (well, Posix incompatibility) in flex 2.5.x
// http://bugs.debian.org/cgi-bin/bugreport.cgi?archive=no&bug=189332
#if YY_FLEX_MAJOR_VERSION >= 2 && YY_FLEX_MINOR_VERSION >= 5
#ifndef YY_FLUSH_BUFFER
#define YY_FLUSH_BUFFER SQLyy_flush_buffer(YY_CURRENT_BUFFER )
#endif
#ifndef yytext_ptr
#define yytext_ptr SQLyytext
#endif
#endif
// Versions of flex apparently differ in whether input() resp. yyinput() returns
// zero or EOF upon end of file:
inline bool checkeof(int c) { return c == 0 || c == EOF; }
/*
* Read SQL string literal
* Valid strings:
* '' 'a string' 'quote '' within string'
* "" "a string" "quote "" within string"
* nTyp == 0 -> SQL_NODE_NAME
* nTyp == 1 -> SQL_NODE_STRING
* nTyp == 2 -> SQL_NODE_ACCESS_DATE
*/
sal_Int32 gatherString( sal_Int32 delim, sal_Int32 nTyp)
{
sal_Char ch;
::rtl::OStringBuffer sBuffer(256);
while (!checkeof(ch = yyinput()))
{
if (ch == delim)
{
if ((ch = yyinput()) != delim)
{
if (!checkeof(ch))
unput(ch);
switch(nTyp)
{
case 0:
SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
return SQL_TOKEN_NAME;
case 1:
SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_STRING);
return SQL_TOKEN_STRING;
case 2:
SQL_NEW_NODE(::rtl::OStringToOUString(sBuffer.makeStringAndClear(),RTL_TEXTENCODING_UTF8), SQL_NODE_ACCESS_DATE);
return SQL_TOKEN_ACCESS_DATE;
}
}
else
{
sBuffer.append(ch);
}
}
else if (nTyp != 1 && (ch == '\r' || ch == '\n') )
break;
else
{
sBuffer.append(ch);
}
}
YY_FATAL_ERROR("Unterminated name string");
return SQL_TOKEN_INVALIDSYMBOL;
}
sal_Int32 mapEnumToToken(IParseContext::InternationalKeyCode _eKeyCode )
{
sal_Int32 nTokenID = 0;
switch( _eKeyCode )
{
case IParseContext::KEY_LIKE: nTokenID = SQL_TOKEN_LIKE; break;
case IParseContext::KEY_NOT: nTokenID = SQL_TOKEN_NOT; break;
case IParseContext::KEY_NULL: nTokenID = SQL_TOKEN_NULL; break;
case IParseContext::KEY_TRUE: nTokenID = SQL_TOKEN_TRUE; break;
case IParseContext::KEY_FALSE: nTokenID = SQL_TOKEN_FALSE; break;
case IParseContext::KEY_IS: nTokenID = SQL_TOKEN_IS; break;
case IParseContext::KEY_BETWEEN: nTokenID = SQL_TOKEN_BETWEEN; break;
case IParseContext::KEY_OR: nTokenID = SQL_TOKEN_OR; break;
case IParseContext::KEY_AND: nTokenID = SQL_TOKEN_AND; break;
case IParseContext::KEY_AVG: nTokenID = SQL_TOKEN_AVG; break;
case IParseContext::KEY_COUNT: nTokenID = SQL_TOKEN_COUNT; break;
case IParseContext::KEY_MAX: nTokenID = SQL_TOKEN_MAX; break;
case IParseContext::KEY_MIN: nTokenID = SQL_TOKEN_MIN; break;
case IParseContext::KEY_SUM: nTokenID = SQL_TOKEN_SUM; break;
case IParseContext::KEY_EVERY: nTokenID = SQL_TOKEN_EVERY; break;
case IParseContext::KEY_ANY: nTokenID = SQL_TOKEN_ANY; break;
case IParseContext::KEY_SOME: nTokenID = SQL_TOKEN_SOME; break;
case IParseContext::KEY_STDDEV_POP: nTokenID = SQL_TOKEN_STDDEV_POP; break;
case IParseContext::KEY_STDDEV_SAMP: nTokenID = SQL_TOKEN_STDDEV_SAMP; break;
case IParseContext::KEY_VAR_SAMP: nTokenID = SQL_TOKEN_VAR_SAMP; break;
case IParseContext::KEY_VAR_POP: nTokenID = SQL_TOKEN_VAR_POP; break;
case IParseContext::KEY_COLLECT: nTokenID = SQL_TOKEN_COLLECT; break;
case IParseContext::KEY_FUSION: nTokenID = SQL_TOKEN_FUSION; break;
case IParseContext::KEY_INTERSECTION: nTokenID = SQL_TOKEN_INTERSECTION; break;
default:
OSL_ENSURE( false, "mapEnumToToken: unsupported key!" );
}
return nTokenID;
}
/*
* Read SQL Name literal
* Valid Names or internatioanl keywords:
* As we have international keywords, we test first on them
*/
sal_Int32 gatherName(const sal_Char* text)
{
sal_Int32 nToken;
OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!");
IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text);
switch (eKeyCode)
{
case IParseContext::KEY_LIKE:
case IParseContext::KEY_NOT:
case IParseContext::KEY_NULL:
case IParseContext::KEY_TRUE:
case IParseContext::KEY_FALSE:
case IParseContext::KEY_IS:
case IParseContext::KEY_BETWEEN:
case IParseContext::KEY_OR:
case IParseContext::KEY_AND:
case IParseContext::KEY_COUNT:
case IParseContext::KEY_AVG:
case IParseContext::KEY_MAX:
case IParseContext::KEY_MIN:
case IParseContext::KEY_SUM:
case IParseContext::KEY_EVERY:
case IParseContext::KEY_ANY:
case IParseContext::KEY_SOME:
case IParseContext::KEY_STDDEV_POP:
case IParseContext::KEY_STDDEV_SAMP:
case IParseContext::KEY_VAR_SAMP:
case IParseContext::KEY_VAR_POP:
case IParseContext::KEY_COLLECT:
case IParseContext::KEY_FUSION:
case IParseContext::KEY_INTERSECTION:
nToken = mapEnumToToken(eKeyCode);
SQL_NEW_KEYWORD(nToken);
break;
default:
SQL_NEW_NODE(::rtl::OUString(text,strlen(text),RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
return SQL_TOKEN_NAME;
}
}
/**
Read SQL Name literal for predicate check
Valid Names or internatioanl keywords:
As we have international keywords, we test first on them
*/
sal_Int32 gatherNamePre(const sal_Char* text)
{
sal_Int32 nToken;
OSL_ENSURE(xxx_pGLOBAL_SQLSCAN,"You forgot to set the scanner!");
IParseContext::InternationalKeyCode eKeyCode = xxx_pGLOBAL_SQLSCAN->getInternationalTokenID(text);
switch (eKeyCode)
{
case IParseContext::KEY_LIKE:
case IParseContext::KEY_NOT:
case IParseContext::KEY_NULL:
case IParseContext::KEY_TRUE:
case IParseContext::KEY_FALSE:
case IParseContext::KEY_IS:
case IParseContext::KEY_BETWEEN:
case IParseContext::KEY_OR:
case IParseContext::KEY_AND:
case IParseContext::KEY_COUNT:
case IParseContext::KEY_AVG:
case IParseContext::KEY_MAX:
case IParseContext::KEY_MIN:
case IParseContext::KEY_SUM:
case IParseContext::KEY_EVERY:
case IParseContext::KEY_ANY:
case IParseContext::KEY_SOME:
case IParseContext::KEY_STDDEV_POP:
case IParseContext::KEY_STDDEV_SAMP:
case IParseContext::KEY_VAR_SAMP:
case IParseContext::KEY_VAR_POP:
case IParseContext::KEY_COLLECT:
case IParseContext::KEY_FUSION:
case IParseContext::KEY_INTERSECTION:
nToken = mapEnumToToken(eKeyCode);
SQL_NEW_KEYWORD(nToken);
break;
default:
// we need a special handling for parameter
{
::rtl::OString sStmt = xxx_pGLOBAL_SQLSCAN->getStatement();
sal_Int32 nLength = strlen(text);
sal_Int32 nPos = xxx_pGLOBAL_SQLSCAN->GetCurrentPos() - nLength - 2;
if (sStmt.getStr()[nPos] == ':')
{
SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_NAME);
nToken = SQL_TOKEN_NAME;
}
else
{
SQL_NEW_NODE(::rtl::OUString(text,nLength,RTL_TEXTENCODING_UTF8), SQL_NODE_STRING);
nToken = SQL_TOKEN_STRING;
}
}
}
return nToken;
}
using namespace connectivity;
static sal_uInt32 Intl_TokenID[] =
{
SQL_TOKEN_LIKE, SQL_TOKEN_NOT, SQL_TOKEN_NULL, SQL_TOKEN_TRUE,
SQL_TOKEN_FALSE, SQL_TOKEN_IS, SQL_TOKEN_BETWEEN, SQL_TOKEN_OR,
SQL_TOKEN_AND, SQL_TOKEN_AVG, SQL_TOKEN_COUNT, SQL_TOKEN_MAX,
SQL_TOKEN_MIN, SQL_TOKEN_SUM
};
static bool IN_SQLyyerror;
//------------------------------------------------------------------------------
OSQLScanner::OSQLScanner()
: m_nCurrentPos(0)
, m_bInternational(sal_False)
, m_pContext(NULL)
, m_nRule(0) // 0 is INITIAL
{
IN_SQLyyerror = false;
}
//------------------------------------------------------------------------------
OSQLScanner::~OSQLScanner()
{
}
//------------------------------------------------------------------------------
void OSQLScanner::SQLyyerror(sal_Char *fmt)
{
if(IN_SQLyyerror)
return;
IN_SQLyyerror = true;
OSL_ENSURE(m_pContext, "OSQLScanner::SQLyyerror: No Context set");
m_sErrorMessage = ::rtl::OUString(fmt,strlen(fmt),RTL_TEXTENCODING_UTF8);
if (m_nCurrentPos < m_sStatement.getLength())
{
m_sErrorMessage += ::rtl::OUString::createFromAscii(": ");
::rtl::OUString aError;
static sal_Int32 BUFFERSIZE = 256;
static sal_Char* Buffer = 0;
if(!Buffer)
Buffer = new sal_Char[BUFFERSIZE];
sal_Char *s = Buffer;
sal_Int32 nPos = 1;
sal_Int32 ch = SQLyytext ? (SQLyytext[0] == 0 ? ' ' : SQLyytext[0]): ' ';
*s++ = ch;
while (!checkeof(ch = yyinput()))
{
if (ch == ' ')
{
if ((ch = yyinput()) != ' ')
{
if (!checkeof(ch))
unput(ch);
}
*s = '\0';
aError = ::rtl::OUString(Buffer,nPos,RTL_TEXTENCODING_UTF8);
break;
}
else
{
*s++ = ch;
if (++nPos == BUFFERSIZE)
{
::rtl::OString aBuf(Buffer);
delete[] Buffer;
BUFFERSIZE *=2;
Buffer = new sal_Char[BUFFERSIZE];
for(sal_Int32 i=0;i<aBuf.getLength();++i,++Buffer)
*Buffer = aBuf.getStr()[i];
s = &Buffer[nPos];
}
}
}
m_sErrorMessage += aError;
delete[] Buffer;
Buffer = NULL;
}
IN_SQLyyerror = false;
YY_FLUSH_BUFFER;
}
//------------------------------------------------------------------------------
void OSQLScanner::prepareScan(const ::rtl::OUString & rNewStatement, const IParseContext* pContext, sal_Bool bInternational)
{
YY_FLUSH_BUFFER;
BEGIN(m_nRule);
m_sErrorMessage = ::rtl::OUString();
m_sStatement = ::rtl::OUStringToOString( rNewStatement, RTL_TEXTENCODING_UTF8);
m_nCurrentPos = 0;
m_bInternational = bInternational;
m_pContext = pContext;
}
//------------------------------------------------------------------------------
sal_Int32 OSQLScanner::SQLyygetc(void)
{
sal_Int32 nPos = (m_nCurrentPos >= m_sStatement.getLength()) ? -1 : m_sStatement.getStr()[m_nCurrentPos];
m_nCurrentPos++;
return nPos;
}
//------------------------------------------------------------------------------
IParseContext::InternationalKeyCode OSQLScanner::getInternationalTokenID(const sal_Char* sToken) const
{
OSL_ENSURE(m_pContext, "OSQLScanner::getInternationalTokenID: No Context set");
return (m_bInternational) ? m_pContext->getIntlKeyCode(::rtl::OString(sToken) ) : IParseContext::KEY_NONE;
}
// -------------------------------------------------------------------------
sal_Int32 OSQLScanner::GetCurrentRule() const { return m_nRule; }
sal_Int32 OSQLScanner::GetGERRule() const { return PREDICATE_GER; }
sal_Int32 OSQLScanner::GetENGRule() const { return PREDICATE_ENG; }
sal_Int32 OSQLScanner::GetSQLRule() const { return SQL; }
sal_Int32 OSQLScanner::GetDATERule() const { return DATE; }
sal_Int32 OSQLScanner::GetSTRINGRule() const { return STRING; }
// -------------------------------------------------------------------------
void OSQLScanner::setScanner(sal_Bool _bNull)
{
xxx_pGLOBAL_SQLSCAN = _bNull ? NULL : this;
}
// -------------------------------------------------------------------------
sal_Int32 OSQLScanner::SQLlex()
{
return SQLyylex();
}
#if defined __SUNPRO_CC
#pragma enable_warn
#elif defined _MSC_VER
#pragma warning(pop)
#endif