| %{ |
| //------------------------------------------------------------ |
| // |
| // 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 |