31 #include "csql_grammar.h" 42 {ABSOLUTE_,
"ABSOLUTE", 0},
43 {ACCESS,
"ACCESS", 1},
44 {ACTION,
"ACTION", 0},
45 {ACTIVE,
"ACTIVE", 1},
47 {ADD_MONTHS,
"ADD_MONTHS", 0},
48 {ADDDATE,
"ADDDATE", 1},
51 {ALLOCATE,
"ALLOCATE", 0},
53 {ANALYZE,
"ANALYZE", 1},
56 {ARCHIVE,
"ARCHIVE", 1},
60 {ASSERTION,
"ASSERTION", 0},
63 {ATTACH,
"ATTACH", 0},
64 {ATTRIBUTE,
"ATTRIBUTE", 0},
65 {AUTO_INCREMENT,
"AUTO_INCREMENT", 1},
67 {BEFORE,
"BEFORE", 0},
69 {BETWEEN,
"BETWEEN", 0},
70 {BIGINT,
"BIGINT", 0},
71 {BINARY,
"BINARY", 0},
73 {BIT_AND,
"BIT_AND", 1},
74 {BIT_LENGTH,
"BIT_LENGTH", 0},
75 {BIT_OR,
"BIT_OR", 1},
76 {BIT_XOR,
"BIT_XOR", 1},
78 {BOOLEAN_,
"BOOLEAN", 0},
80 {BREADTH,
"BREADTH", 0},
82 {BUFFER,
"BUFFER", 1},
85 {CAPACITY,
"CAPACITY", 1},
86 {CASCADE,
"CASCADE", 0},
87 {CASCADED,
"CASCADED", 0},
90 {CATALOG,
"CATALOG", 0},
91 {CHANGE,
"CHANGE", 0},
93 {CHARSET,
"CHARSET", 1},
94 {CHARACTER_SET_,
"CHARACTER_SET", 1},
98 {CLASSES,
"CLASSES", 0},
100 {CLOB_TO_CHAR,
"CLOB_TO_CHR", 1},
102 {COALESCE,
"COALESCE", 0},
103 {COLLATE,
"COLLATE", 0},
104 {COLLATION,
"COLLATION", 1},
106 {COLUMNS,
"COLUMNS", 1},
107 {COMMENT,
"COMMENT", 1},
108 {COMMIT,
"COMMIT", 0},
110 {CONNECT,
"CONNECT", 0},
111 {CONNECT_BY_ISCYCLE,
"CONNECT_BY_ISCYCLE", 0},
112 {CONNECT_BY_ISLEAF,
"CONNECT_BY_ISLEAF", 0},
113 {CONNECT_BY_ROOT,
"CONNECT_BY_ROOT", 0},
114 {CONNECTION,
"CONNECTION", 0},
115 {CONSTRAINT,
"CONSTRAINT", 0},
116 {CONSTRAINTS,
"CONSTRAINTS", 0},
118 {CONVERT,
"CONVERT", 0},
119 {CORRESPONDING,
"CORRESPONDING", 0},
122 {CREATE,
"CREATE", 0},
123 {CRITICAL,
"CRITICAL", 1},
125 {CUME_DIST,
"CUME_DIST", 1},
126 {CURRENT,
"CURRENT", 0},
127 {CURRENT_DATE,
"CURRENT_DATE", 0},
128 {CURRENT_TIME,
"CURRENT_TIME", 0},
129 {CURRENT_TIMESTAMP,
"CURRENT_TIMESTAMP", 0},
130 {CURRENT_DATETIME,
"CURRENT_DATETIME", 0},
131 {CURRENT_USER,
"CURRENT_USER", 0},
135 {DATA_TYPE___,
"DATA_TYPE___", 0},
136 {DATABASE,
"DATABASE", 0},
138 {DATE_ADD,
"DATE_ADD", 1},
139 {DATE_SUB,
"DATE_SUB", 1},
141 {DAY_HOUR,
"DAY_HOUR", 0},
142 {DAY_MILLISECOND,
"DAY_MILLISECOND", 0},
143 {DAY_MINUTE,
"DAY_MINUTE", 0},
144 {DAY_SECOND,
"DAY_SECOND", 0},
145 {DEALLOCATE,
"DEALLOCATE", 0},
147 {NUMERIC,
"DECIMAL", 0},
148 {DECLARE,
"DECLARE", 0},
149 {DECREMENT,
"DECREMENT", 1},
150 {DEFAULT,
"DEFAULT", 0},
151 {DEFERRABLE,
"DEFERRABLE", 0},
152 {DEFERRED,
"DEFERRED", 0},
153 {DELETE_,
"DELETE", 0},
154 {DENSE_RANK,
"DENSE_RANK", 1},
157 {DESCRIBE,
"DESCRIBE", 0},
158 {DESCRIPTOR,
"DESCRIPTOR", 0},
159 {DIAGNOSTICS,
"DIAGNOSTICS", 0},
160 {DIFFERENCE_,
"DIFFERENCE", 0},
161 {DISCONNECT,
"DISCONNECT", 0},
162 {DISTINCT,
"DISTINCT", 0},
165 {Domain,
"DOMAIN", 0},
166 {Double,
"DOUBLE", 0},
168 {DUPLICATE_,
"DUPLICATE", 0},
171 {ELSEIF,
"ELSEIF", 0},
174 {EQUALS,
"EQUALS", 0},
176 {ESCAPE,
"ESCAPE", 0},
177 {EVALUATE,
"EVALUATE", 0},
178 {EXCEPT,
"EXCEPT", 0},
179 {EXCEPTION,
"EXCEPTION", 0},
181 {EXECUTE,
"EXECUTE", 0},
182 {EXISTS,
"EXISTS", 0},
183 {EXPLAIN,
"EXPLAIN", 1},
184 {EXTERNAL,
"EXTERNAL", 0},
185 {EXTRACT,
"EXTRACT", 0},
190 {FIRST_VALUE,
"FIRST_VALUE", 1},
191 {FLOAT_,
"FLOAT", 0},
193 {FOREIGN,
"FOREIGN", 0},
197 {FULLSCAN,
"FULLSCAN", 1},
198 {FUNCTION,
"FUNCTION", 0},
199 {GENERAL,
"GENERAL", 0},
201 {GE_INF_,
"GE_INF", 1},
202 {GE_LE_,
"GE_LE", 1},
203 {GE_LT_,
"GE_LT", 1},
204 {GLOBAL,
"GLOBAL", 0},
208 {GRANTS,
"GRANTS", 1},
209 {GROUP_,
"GROUP", 0},
210 {GROUPS,
"GROUPS", 1},
211 {GROUP_CONCAT,
"GROUP_CONCAT", 1},
212 {GT_INF_,
"GT_INF", 1},
213 {GT_LE_,
"GT_LE", 1},
214 {GT_LT_,
"GT_LT", 1},
216 {HAVING,
"HAVING", 0},
220 {HOUR_MINUTE,
"HOUR_MINUTE", 0},
221 {HOUR_MILLISECOND,
"HOUR_MILLISECOND", 0},
222 {HOUR_SECOND,
"HOUR_SECOND", 0},
223 {IDENTITY,
"IDENTITY", 0},
225 {IFNULL,
"IFNULL", 1},
226 {IGNORE_,
"IGNORE", 0},
227 {IMMEDIATE,
"IMMEDIATE", 0},
229 {INACTIVE,
"INACTIVE", 1},
230 {INCREMENT,
"INCREMENT", 1},
232 {INDEX_PREFIX,
"INDEX_PREFIX", 1},
233 {INDEXES,
"INDEXES", 1},
234 {INDICATOR,
"INDICATOR", 0},
235 {INFINITE_,
"INFINITE", 1},
236 {INF_LE_,
"INF_LE", 1},
237 {INF_LT_,
"INF_LT", 1},
238 {INHERIT,
"INHERIT", 0},
239 {INITIALLY,
"INITIALLY", 0},
242 {INPUT_,
"INPUT", 0},
243 {INSERT,
"INSERT", 0},
244 {INSTANCES,
"INSTANCES", 1},
246 {INTEGER,
"INTEGER", 0},
247 {INTERSECT,
"INTERSECT", 0},
248 {INTERSECTION,
"INTERSECTION", 0},
249 {INTERVAL,
"INTERVAL", 0},
251 {INVALIDATE,
"INVALIDATE", 1},
253 {ISNULL,
"ISNULL", 1},
254 {ISOLATION,
"ISOLATION", 0},
262 {LANGUAGE,
"LANGUAGE", 0},
264 {LAST_VALUE,
"LAST_VALUE", 1},
266 {LEADING_,
"LEADING", 0},
275 {LOCAL_TRANSACTION_ID,
"LOCAL_TRANSACTION_ID", 0},
276 {LOCALTIME,
"LOCALTIME", 0},
277 {LOCALTIMESTAMP,
"LOCALTIMESTAMP", 0},
283 {MATCHED,
"MATCHED", 1},
285 {MAXIMUM,
"MAXIMUM", 1},
286 {MAXVALUE,
"MAXVALUE", 1},
287 {MEDIAN,
"MEDIAN", 1},
288 {MEMBERS,
"MEMBERS", 1},
290 {METHOD,
"METHOD", 0},
292 {MINUTE_,
"MINUTE", 0},
293 {MINUTE_MILLISECOND,
"MINUTE_MILLISECOND", 0},
294 {MINUTE_SECOND,
"MINUTE_SECOND", 0},
295 {MINVALUE,
"MINVALUE", 1},
297 {MODIFY,
"MODIFY", 0},
298 {MODULE,
"MODULE", 0},
299 {Monetary,
"MONETARY", 0},
300 {MONTH_,
"MONTH", 0},
301 {MULTISET,
"MULTISET", 0},
302 {MULTISET_OF,
"MULTISET_OF", 0},
306 {NATIONAL,
"NATIONAL", 0},
307 {NATURAL,
"NATURAL", 0},
311 {NOCACHE,
"NOCACHE", 1},
312 {NOCYCLE,
"NOCYCLE", 1},
313 {NOMAXVALUE,
"NOMAXVALUE", 1},
314 {NOMINVALUE,
"NOMINVALUE", 1},
317 {NTH_VALUE,
"NTH_VALUE", 1},
320 {NULLIF,
"NULLIF", 0},
322 {NUMERIC,
"NUMERIC", 0},
323 {OBJECT,
"OBJECT", 0},
324 {OCTET_LENGTH,
"OCTET_LENGTH", 0},
331 {OPTIMIZATION,
"OPTIMIZATION", 0},
332 {OPTION,
"OPTION", 0},
338 {OVERLAPS,
"OVERLAPS", 0},
341 {PARAMETERS,
"PARAMETERS", 0},
342 {PARTIAL,
"PARTIAL", 0},
343 {PARTITION,
"PARTITION", 0},
344 {PARTITIONING,
"PARTITIONING", 1},
345 {PARTITIONS,
"PARTITIONS", 1},
347 {PASSWORD,
"PASSWORD", 1},
348 {PERCENT_RANK,
"PERCENT_RANK", 1},
349 {PERCENTILE_CONT,
"PERCENTILE_CONT", 1},
350 {PERCENTILE_DISC,
"PERCENTILE_DISC", 1},
351 {POSITION,
"POSITION", 0},
352 {PRECISION,
"PRECISION", 0},
353 {PREPARE,
"PREPARE", 0},
354 {PRESERVE,
"PRESERVE", 0},
355 {PRIMARY,
"PRIMARY", 0},
358 {PRIORITY,
"PRIORITY", 1},
359 {PRIVILEGES,
"PRIVILEGES", 0},
360 {PROCEDURE,
"PROCEDURE", 0},
361 {QUARTER,
"QUARTER", 1},
363 {QUEUES,
"QUEUES", 1},
364 {RANGE_,
"RANGE", 1},
367 {RECURSIVE,
"RECURSIVE", 0},
369 {REFERENCES,
"REFERENCES", 0},
370 {REFERENCING,
"REFERENCING", 0},
371 {REJECT_,
"REJECT", 1},
372 {REMOVE,
"REMOVE", 1},
373 {RENAME,
"RENAME", 0},
374 {REORGANIZE,
"REORGANIZE", 1},
375 {REPEATABLE,
"REPEATABLE", 1},
376 {REPLACE,
"REPLACE", 0},
377 {RESIGNAL,
"RESIGNAL", 0},
378 {RESPECT,
"RESPECT", 1},
380 {RETAIN,
"RETAIN", 1},
381 {RETURN,
"RETURN", 0},
382 {RETURNS,
"RETURNS", 0},
383 {REVOKE,
"REVOKE", 0},
384 {REVERSE,
"REVERSE", 1},
387 {ROLLBACK,
"ROLLBACK", 0},
388 {ROLLUP,
"ROLLUP", 0},
389 {ROUTINE,
"ROUTINE", 0},
391 {ROW_NUMBER,
"ROW_NUMBER", 1},
392 {ROWNUM,
"ROWNUM", 0},
394 {SAVEPOINT,
"SAVEPOINT", 0},
395 {SCHEMA,
"SCHEMA", 0},
396 {
SCOPE,
"SCOPE___", 0},
397 {SCROLL,
"SCROLL", 0},
398 {SEARCH,
"SEARCH", 0},
399 {SECOND_,
"SECOND", 0},
400 {SECOND_MILLISECOND,
"SECOND_MILLISECOND", 0},
401 {MILLISECOND_,
"MILLISECOND", 0},
402 {SECTION,
"SECTION", 0},
403 {SECTIONS,
"SECTIONS", 1},
404 {SELECT,
"SELECT", 0},
405 {SENSITIVE,
"SENSITIVE", 0},
406 {SEPARATOR,
"SEPARATOR", 1},
407 {SEQUENCE,
"SEQUENCE", 0},
408 {SEQUENCE_OF,
"SEQUENCE_OF", 0},
409 {SERIAL,
"SERIAL", 1},
410 {SERIALIZABLE,
"SERIALIZABLE", 0},
411 {SESSION,
"SESSION", 0},
412 {SESSION_USER,
"SESSION_USER", 0},
415 {SETNEQ,
"SETNEQ", 0},
416 {SET_OF,
"SET_OF", 0},
417 {SHARED,
"SHARED", 0},
419 {SmallInt,
"SHORT", 0},
420 {SIBLINGS,
"SIBLINGS", 0},
421 {SIGNAL,
"SIGNAL", 0},
422 {SIMILAR,
"SIMILAR", 0},
423 {SLOTTED,
"SLOTTED", 1},
425 {STABILITY,
"STABILITY", 1},
426 {START_,
"START", 1},
427 {STATEMENT,
"STATEMENT", 1},
428 {STATISTICS,
"STATISTICS", 0},
430 {STDDEV,
"STDDEV", 1},
431 {STDDEV_POP,
"STDDEV_POP", 1},
432 {STDDEV_SAMP,
"STDDEV_SAMP", 1},
433 {String,
"STRING", 0},
434 {STR_TO_DATE,
"STR_TO_DATE", 1},
435 {SUBCLASS,
"SUBCLASS", 0},
436 {SUBDATE,
"SUBDATE", 1},
437 {SUBSET,
"SUBSET", 0},
438 {SUBSETEQ,
"SUBSETEQ", 0},
439 {SUBSTRING_,
"SUBSTRING", 0},
441 {SUPERCLASS,
"SUPERCLASS", 0},
442 {SUPERSET,
"SUPERSET", 0},
443 {SUPERSETEQ,
"SUPERSETEQ", 0},
444 {SYS_CONNECT_BY_PATH,
"SYS_CONNECT_BY_PATH", 0},
445 {SYSTEM,
"SYSTEM", 1},
446 {SYSTEM_USER,
"SYSTEM_USER", 0},
447 {SYS_DATE,
"SYS_DATE", 0},
448 {SYS_TIME_,
"SYS_TIME", 0},
449 {SYS_DATETIME,
"SYS_DATETIME", 0},
450 {SYS_TIMESTAMP,
"SYS_TIMESTAMP", 0},
451 {SYS_DATE,
"SYSDATE", 0},
452 {SYS_TIME_,
"SYSTIME", 0},
453 {SYS_DATETIME,
"SYSDATETIME", 0},
454 {SYS_TIMESTAMP,
"SYSTIMESTAMP", 0},
456 {TABLES,
"TABLES", 1},
457 {TEMPORARY,
"TEMPORARY", 0},
461 {THREADS,
"THREADS", 1},
463 {TIMEOUT,
"TIMEOUT", 1},
464 {TIMESTAMP,
"TIMESTAMP", 0},
465 {TIMESTAMPTZ,
"TIMESTAMPTZ", 0},
466 {TIMESTAMPLTZ,
"TIMESTAMPLTZ", 0},
467 {DATETIME,
"DATETIME", 0},
468 {DATETIMETZ,
"DATETIMETZ", 0},
469 {DATETIMELTZ,
"DATETIMELTZ", 0},
470 {TIMEZONE_HOUR,
"TIMEZONE_HOUR", 0},
471 {TIMEZONE_MINUTE,
"TIMEZONE_MINUTE", 0},
474 {TRAILING_,
"TRAILING", 0},
476 {TRANSACTION,
"TRANSACTION", 0},
477 {TRANSLATE,
"TRANSLATE", 0},
478 {TRANSLATION,
"TRANSLATION", 0},
479 {TRIGGER,
"TRIGGER", 0},
480 {TRIGGERS,
"TRIGGERS", 1},
482 {TRUNCATE,
"TRUNCATE", 0},
487 {UNIQUE,
"UNIQUE", 0},
488 {UNKNOWN,
"UNKNOWN", 0},
489 {UPDATE,
"UPDATE", 0},
496 {VACUUM,
"VACUUM", 0},
498 {VALUES,
"VALUES", 0},
500 {VARIABLE_,
"VARIABLE", 0},
501 {VARIANCE,
"VARIANCE", 1},
502 {VAR_POP,
"VAR_POP", 1},
503 {VAR_SAMP,
"VAR_SAMP", 1},
504 {VARYING,
"VARYING", 0},
505 {VCLASS,
"VCLASS", 0},
507 {VOLUME,
"VOLUME", 1},
510 {WHENEVER,
"WHENEVER", 0},
514 {WITHIN,
"WITHIN", 1},
515 {WITHOUT,
"WITHOUT", 0},
517 {WORKSPACE,
"WORKSPACE", 1},
521 {YEAR_MONTH,
"YEAR_MONTH", 0},
523 {TIMEZONES,
"TIMEZONES", 1}
527 static int keyword_cmp (
const void *k1,
const void *k2);
533 #define GET_KEYWORD_HASH_VALUE(h,s) \ 535 unsigned char* p = (unsigned char*)(s); \ 536 for((h) = 5381; *p; p++ ) \ 538 (h) = (((h) << 5) + (h)) + *p; \ 563 static bool keyword_sorted =
false;
565 static int keyword_max_len = 0;
566 static int keyword_cnt =
sizeof (
keywords) /
sizeof (keywords[0]);
567 static short start_pos[257];
568 #define MAGIC_NUM_BI_SEQ (5) 572 if (keyword_sorted ==
false)
574 for (i = 0; i < keyword_cnt; i++)
576 len =
strlen (keywords[i].keyword);
577 if (len < keyword_min_len)
579 keyword_min_len = len;
581 if (len > keyword_max_len)
583 keyword_max_len = len;
589 memset (start_pos, 0x00,
sizeof (start_pos));
591 qsort (keywords, keyword_cnt,
sizeof (keywords[0]),
keyword_cmp);
593 for (i = 0; i < keyword_cnt; i++)
598 start_pos[256] = keyword_cnt;
599 for (i = 255; i >= 0; i--)
601 start_pos[
i] = start_pos[i + 1] - start_pos[
i];
604 keyword_sorted =
true;
613 if (len < keyword_min_len || len > keyword_max_len)
619 unsigned char *
p, *s;
620 s = (
unsigned char *) dummy.
keyword;
621 for (p = (
unsigned char *) text; *
p; p++, s++)
634 len = (start_pos[i + 1] - start_pos[
i]);
637 for (len = start_pos[i]; len < start_pos[i + 1]; len++)
658 return keywords + len;
667 #if defined(ENABLE_UNUSED_FUNCTION) 674 pt_identifier_or_keyword (
const char *text)
682 return keyword_rec->value;
759 *(rec_count) =
sizeof (keywords) /
sizeof (keywords[0]);
bool pt_is_keyword(const char *text)
#define OUTPUT(charp_out)
bool pt_is_reserved_word(const char *text)
static KEYWORD_RECORD keywords[]
#define OFFSET(collection_index)
char keyword[MAX_KEYWORD_SIZE]
unsigned short hash_value
static KEYWORD_RECORD * pt_find_keyword(const char *text)
#define INDEX(collection, index)
#define TRACE(string, arg1)
#define GET_KEYWORD_HASH_VALUE(h, s)
KEYWORD_RECORD * pt_get_keyword_rec(int *rec_count)
static int keyword_cmp(const void *k1, const void *k2)