summaryrefslogtreecommitdiff
path: root/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp')
-rw-r--r--ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp243
1 files changed, 0 insertions, 243 deletions
diff --git a/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp b/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp
deleted file mode 100644
index 29aa876f669..00000000000
--- a/ndb/src/old_files/client/odbc/codegen/SimpleScan.lpp
+++ /dev/null
@@ -1,243 +0,0 @@
-%{
-#include <ctype.h>
-#include "SimpleParser.hpp"
-
-struct SqlKeyword {
- const char* m_name;
- int m_value;
- int m_state;
- static const SqlKeyword* find(Ctx& ctx, const char* name, int state);
-};
-
-%}
-
-%option c++
-%option yyclass="SimpleParser"
-%option stack
-%option noyywrap
-
-space [\040\t\n\r\f]
-digit [0-9]
-letter [A-Za-z_]
-special ("$")
-identifier ({letter}({letter}|{digit}|{special})*)
-integer {digit}++
-decimal (({digit}*\.{digit}+)|({digit}+\.{digit}*))
-real ((({digit}*\.{digit}+)|({digit}+\.{digit}*)|({digit}+))([Ee][-+]?{digit}+))
-
-%s StateEval
-%s StateType
-%s StatePhys
-%x StateString
-%x StateQuoted
-
-%%
-
-{space} {
- }
-{identifier} {
- const SqlKeyword* key = SqlKeyword::find(m_ctx, (char*)yytext, YYSTATE);
- if (key != 0)
- return key->m_value;
- for (unsigned char* a = (unsigned char*)yytext; *a != 0; a++) {
- if (islower(*a))
- *a = toupper(*a);
- }
- m_yylval.m_string = strcpy(new char[yyleng + 1], yytext);
- return T_IDENTIFIER;
- }
-{integer} {
- m_yylval.m_string = strcpy(new char[yyleng + 1], yytext);
- return T_LINTEGER;
- }
-{decimal} {
- m_yylval.m_string = strcpy(new char[yyleng + 1], yytext);
- return T_LDECIMAL;
- }
-{real} {
- m_yylval.m_string = strcpy(new char[yyleng + 1], yytext);
- return T_LREAL;
- }
-"--".* {
- }
-"/*" {
- int c = 0, d;
- while (1) {
- d = c;
- if ((c = yyinput()) == EOF) {
- parseError("unterminated comment");
- yyterminate();
- }
- if (d == '*' && c == '/')
- break;
- }
- }
-<StateEval>{
-"+" return T_PLUS;
-"-" return T_MINUS;
-"*" return T_TIMES;
-"/" return T_DIVIDE;
-"=" return T_EQ;
-"!=" return T_NOTEQ;
-"^=" return T_NOTEQ;
-"<>" return T_NOTEQ;
-"<" return T_LT;
-"<=" return T_LTEQ;
-">" return T_GT;
-">=" return T_GTEQ;
-"?" m_paramNumber++; return T_QUES;
-}
-
-"." return T_PERIOD;
-"," return T_COMMA;
-"(" return T_PARENLEFT;
-")" return T_PARENRIGHT;
-"*" return T_ASTERISK;
-"=" return T_ASSIGN;
-
-"'" {
- pushState(StateString);
- m_string.assign("");
- }
-<StateString>{
-[^']* {
- m_string.append(yytext);
- }
-"''" {
- m_string.append("'");
- }
-"'" {
- m_yylval.m_string = strcpy(new char[m_string.length() + 1], m_string.c_str());
- popState();
- return T_STRING;
- }
-}
-
-\" {
- pushState(StateQuoted);
- m_string.assign("");
- }
-<StateQuoted>{
-[^"]* {
- m_string.append(yytext);
- }
-\\\" {
- m_string.append("\"");
- }
-\" {
- m_yylval.m_string = strcpy(new char[m_string.length() + 1], m_string.c_str());
- popState();
- return T_IDENTIFIER;
- }
-}
-
-%%
-
-// scan states
-int SimpleParser_stateEval = StateEval;
-int SimpleParser_stateType = StateType;
-int SimpleParser_statePhys = StatePhys;
-
-// keep sorted
-
-static const SqlKeyword sqlKeyword[] = {
- { "AND", T_AND, -1 },
- { "ASC", T_ASC, -1 },
- { "AUTO_INCREMENT", T_AUTO_INCREMENT, -1 },
- { "BIGINT", T_BIGINT, StateType },
- { "BINARY", T_BINARY, StateType },
- { "BLOB", T_BLOB, StateType },
- { "BY", T_BY, -1 },
- { "CHAR", T_CHAR, StateType },
- { "CLOB", T_CLOB, StateType },
- { "CONSTRAINT", T_CONSTRAINT, -1 },
- { "CREATE", T_CREATE, -1 },
- { "DATETIME", T_DATETIME, StateType },
- { "DEFAULT", T_DEFAULT, -1 },
- { "DELETE", T_DELETE, -1 },
- { "DESC", T_DESC, -1 },
- { "DISTINCT", T_DISTINCT, -1 },
- { "DOUBLE", T_DOUBLE, StateType },
- { "DROP", T_DROP, -1 },
- { "FLOAT", T_FLOAT, StateType },
- { "FOREIGN", T_FOREIGN, -1 },
- { "FROM", T_FROM, -1 },
- { "GROUP", T_GROUP, -1 },
- { "HASH", T_HASH, -1 },
- { "HAVING", T_HAVING, -1 },
- { "IN", T_IN, -1 },
- { "INDEX", T_INDEX, -1 },
- { "INSERT", T_INSERT, -1 },
- { "INT", T_INT, StateType },
- { "INTEGER", T_INTEGER, StateType },
- { "INTO", T_INTO, -1 },
- { "IS", T_IS, -1 },
- { "KEY", T_KEY, -1 },
- { "LARGE", T_LARGE, StatePhys },
- { "LIKE", T_LIKE, -1 },
- { "LIMIT", T_LIMIT, -1 },
- { "LOGGING", T_LOGGING, StatePhys },
- { "LONGBLOB", T_LONGBLOB, StateType },
- { "LONGCLOB", T_LONGCLOB, StateType },
- { "MEDIUM", T_MEDIUM, StatePhys },
- { "NOLOGGING", T_NOLOGGING, StatePhys },
- { "NOT", T_NOT, -1 },
- { "NULL", T_NULL, -1 },
- { "OFFSET", T_OFFSET, -1 },
- { "ON", T_ON, -1 },
- { "OR", T_OR, -1 },
- { "ORDER", T_ORDER, -1 },
- { "PRECISION", T_PRECISION, StateType },
- { "PRIMARY", T_PRIMARY, -1 },
- { "REAL", T_REAL, StateType },
- { "REFERENCES", T_REFERENCES, -1 },
- { "ROWNUM", T_ROWNUM, -1 },
- { "SELECT", T_SELECT, -1 },
- { "SET", T_SET, -1 },
- { "SINGLE", T_SINGLE, StatePhys },
- { "SMALL", T_SMALL, StatePhys },
- { "SMALLINT", T_SMALLINT, StateType },
- { "STORAGE", T_STORAGE, StatePhys },
- { "SYSDATE", T_SYSDATE, -1 },
- { "TABLE", T_TABLE, -1 },
- { "UNIQUE", T_UNIQUE, -1 },
- { "UNSIGNED", T_UNSIGNED, -1 },
- { "UPDATE", T_UPDATE, -1 },
- { "VALUES", T_VALUES, -1 },
- { "VARBINARY", T_VARBINARY, StateType },
- { "VARCHAR", T_VARCHAR, StateType },
- { "WHERE", T_WHERE, -1 },
- { "WRITE", T_WRITE, -1 }
-};
-
-static const unsigned sqlKeywordCount = sizeof(sqlKeyword) / sizeof(sqlKeyword[0]);
-
-const SqlKeyword*
-SqlKeyword::find(Ctx& ctx, const char* name, int state)
-{
- ctx_log4(("find keyword '%s' lex state = %d", name, state));
- const unsigned maxlen = 99;
- char buf[maxlen + 1];
- char* a = buf;
- const char* b = name;
- while (*b != 0) {
- if (a >= buf + maxlen) // will not be found
- break;
- char c = *b++;
- if ('a' <= c && c <= 'z') // locale independent
- c -= 'a' - 'A';
- *a++ = c;
- }
- *a = 0;
- for (unsigned i = 0; i < sqlKeywordCount; i++) {
- const SqlKeyword* key = &sqlKeyword[i];
- if (strcmp(key->m_name, buf) == 0) {
- if (key->m_state != -1 && key->m_state != state)
- return 0;
- return key;
- }
- }
- return 0;
-}
-
-/* vim: set filetype=lex: */