1174 lines
30 KiB
C
1174 lines
30 KiB
C
/**
|
|
* Copyright (c) 2021 OceanBase
|
|
* OceanBase CE is licensed under Mulan PubL v2.
|
|
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
|
* You may obtain a copy of Mulan PubL v2 at:
|
|
* http://license.coscl.org.cn/MulanPubL-2.0
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
* See the Mulan PubL v2 for more details.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include "lib/alloc/alloc_assist.h"
|
|
#include "ob_non_reserved_keywords.h"
|
|
#include "sql/parser/sql_parser_mysql_mode_tab.h"
|
|
|
|
static t_node *mysql_none_reserved_keywords_root = NULL;
|
|
static t_node *mysql_sql_keywords_in_pl_root = NULL;
|
|
|
|
/* List of non-reserved keywords */
|
|
/*一开始会对这些word建立一颗trie树,对于每次的查找来言,树是固定的
|
|
*若新添加的keyword含有除大小写字母、'_'和数字以外的其它字符,请联系@叶提修改这颗树。
|
|
*实现不需要保证字典序,但是原则上还是保证字典序,方便维护和查找*/
|
|
static const NonReservedKeyword Mysql_none_reserved_keywords[] =
|
|
{
|
|
{"access", ACCESS},
|
|
{"accessible", ACCESSIBLE},
|
|
{"account", ACCOUNT},
|
|
{"action", ACTION},
|
|
{"activate", ACTIVATE},
|
|
{"active", ACTIVE},
|
|
{"add", ADD},
|
|
{"adddate", ADDDATE},
|
|
{"after", AFTER},
|
|
{"against", AGAINST},
|
|
{"aggregate", AGGREGATE},
|
|
{"algorithm", ALGORITHM},
|
|
{"all", ALL},
|
|
{"all_meta", ALL_META},
|
|
{"all_user", ALL_USER},
|
|
{"alter", ALTER},
|
|
{"always", ALWAYS},
|
|
{"analyse", ANALYSE},
|
|
{"analyze", ANALYZE},
|
|
{"and", AND},
|
|
{"any", ANY},
|
|
{"approx_count_distinct", APPROX_COUNT_DISTINCT},
|
|
{"approx_count_distinct_synopsis", APPROX_COUNT_DISTINCT_SYNOPSIS},
|
|
{"approx_count_distinct_synopsis_merge", APPROX_COUNT_DISTINCT_SYNOPSIS_MERGE},
|
|
{"arbitration", ARBITRATION},
|
|
{"archivelog", ARCHIVELOG},
|
|
{"as", AS},
|
|
{"asc", ASC},
|
|
{"asensitive", ASENSITIVE},
|
|
{"ascii", ASCII},
|
|
{"asynchronous", ASYNCHRONOUS},
|
|
{"at", AT},
|
|
{"authors", AUTHORS},
|
|
{"auto", AUTO},
|
|
{"auto_increment", AUTO_INCREMENT},
|
|
{"auto_increment_mode", AUTO_INCREMENT_MODE},
|
|
{"autoextend_size", AUTOEXTEND_SIZE},
|
|
{"availability", AVAILABILITY},
|
|
{"avg", AVG},
|
|
{"avg_row_length", AVG_ROW_LENGTH},
|
|
{"backup", BACKUP},
|
|
{"backupset", BACKUPSET},
|
|
{"balance", BALANCE},
|
|
{"base", BASE},
|
|
{"baseline", BASELINE},
|
|
{"baseline_id", BASELINE_ID},
|
|
{"basic", BASIC},
|
|
{"before", BEFORE},
|
|
{"begin", BEGI},
|
|
{"between", BETWEEN},
|
|
{"bigint", BIGINT},
|
|
{"binary", BINARY},
|
|
{"binlog", BINLOG},
|
|
{"bit", BIT},
|
|
{"bit_and", BIT_AND},
|
|
{"bit_or", BIT_OR},
|
|
{"bit_xor", BIT_XOR},
|
|
{"blob", BLOB},
|
|
{"block", BLOCK},
|
|
{"block_size", BLOCK_SIZE},
|
|
{"bool", BOOL},
|
|
{"boolean", BOOLEAN},
|
|
{"bootstrap", BOOTSTRAP},
|
|
{"both", BOTH},
|
|
{"breadth", BREADTH},
|
|
{"btree", BTREE},
|
|
{"by", BY},
|
|
{"byte", BYTE},
|
|
{"buckets", BUCKETS},
|
|
{"backup_copies", BACKUP_COPIES},
|
|
{"badfile", BADFILE},
|
|
{"cache", CACHE},
|
|
{"calibration", CALIBRATION},
|
|
{"calibration_info", CALIBRATION_INFO},
|
|
{"call", CALL},
|
|
{"calc_partition_id", CALC_PARTITION_ID},
|
|
{"cancel", CANCEL},
|
|
{"cascaded", CASCADED},
|
|
{"cascade", CASCADE},
|
|
{"case", CASE},
|
|
{"cast", CAST},
|
|
{"catalog_name", CATALOG_NAME},
|
|
{"chain", CHAIN},
|
|
{"change", CHANGE},
|
|
{"changed", CHANGED},
|
|
{"char", CHARACTER},
|
|
{"character", CHARACTER},
|
|
{"charset", CHARSET},
|
|
{"check", CHECK},
|
|
{"checksum", CHECKSUM},
|
|
{"checkpoint", CHECKPOINT},
|
|
{"chunk", CHUNK},
|
|
{"cipher", CIPHER},
|
|
{"class_origin", CLASS_ORIGIN},
|
|
{"clean", CLEAN},
|
|
{"clear", CLEAR},
|
|
{"client", CLIENT},
|
|
{"close", CLOSE},
|
|
{"cluster", CLUSTER},
|
|
{"cluster_name", CLUSTER_NAME},
|
|
{"cluster_id", CLUSTER_ID},
|
|
{"coalesce", COALESCE},
|
|
{"code", CODE},
|
|
{"collate", COLLATE},
|
|
{"collation", COLLATION},
|
|
{"column_format", COLUMN_FORMAT},
|
|
{"column_name", COLUMN_NAME},
|
|
{"column", COLUMN},
|
|
{"columns", COLUMNS},
|
|
{"comment", COMMENT},
|
|
{"commit", COMMIT},
|
|
{"committed", COMMITTED},
|
|
{"compact", COMPACT},
|
|
{"complete", COMPLETE},
|
|
{"completion", COMPLETION},
|
|
{"compressed", COMPRESSED},
|
|
{"compression", COMPRESSION},
|
|
{"compute", COMPUTE},
|
|
{"concurrent", CONCURRENT},
|
|
{"condensed", CONDENSED},
|
|
{"condition", CONDITION},
|
|
{"connection", CONNECTION},
|
|
{"consistent", CONSISTENT},
|
|
{"constraint", CONSTRAINT},
|
|
{"constraint_catalog", CONSTRAINT_CATALOG},
|
|
{"constraint_name", CONSTRAINT_NAME},
|
|
{"constraint_schema", CONSTRAINT_SCHEMA},
|
|
{"contains", CONTAINS},
|
|
{"context", CONTEXT},
|
|
{"contributors", CONTRIBUTORS},
|
|
{"continue", CONTINUE},
|
|
{"connect", CONNECT},
|
|
{"convert", CONVERT},
|
|
{"copy", COPY},
|
|
{"count", COUNT},
|
|
{"cpu", CPU},
|
|
{"create", CREATE},
|
|
{"create_timestamp", CREATE_TIMESTAMP},
|
|
{"cross", CROSS},
|
|
{"ctxcat", CTXCAT},
|
|
{"cube", CUBE},
|
|
{"cume_dist", CUME_DIST},
|
|
{"curdate", CURDATE},
|
|
{"current", CURRENT},
|
|
{"current_date", CURRENT_DATE},
|
|
{"current_time", CURRENT_TIME},
|
|
{"current_timestamp", CURRENT_TIMESTAMP},
|
|
{"current_user", CURRENT_USER},
|
|
{"cursor", CURSOR},
|
|
{"cursor_name", CURSOR_NAME},
|
|
{"curtime", CURTIME},
|
|
{"ctx_id", CTX_ID},
|
|
{"cycle", CYCLE},
|
|
{"dag", DAG},
|
|
{"data", DATA},
|
|
{"database_id", DATABASE_ID},
|
|
{"datafile", DATAFILE},
|
|
{"data_table_id", DATA_TABLE_ID},
|
|
{"database", DATABASE},
|
|
{"databases", DATABASES},
|
|
{"date", DATE},
|
|
{"date_add", DATE_ADD},
|
|
{"date_sub", DATE_SUB},
|
|
{"datetime", DATETIME},
|
|
{"day", DAY},
|
|
{"day_hour", DAY_HOUR},
|
|
{"day_microsecond", DAY_MICROSECOND},
|
|
{"day_minute", DAY_MINUTE},
|
|
{"day_second", DAY_SECOND},
|
|
{"deallocate", DEALLOCATE},
|
|
{"dec", NUMBER},
|
|
{"decimal", DECIMAL},
|
|
{"declare", DECLARE},
|
|
{"decryption", DECRYPTION},
|
|
{"default", DEFAULT},
|
|
{"default_auth", DEFAULT_AUTH},
|
|
{"default_lob_inrow_threshold", DEFAULT_LOB_INROW_THRESHOLD},
|
|
{"definer", DEFINER},
|
|
{"delay", DELAY},
|
|
{"delayed", DELAYED},
|
|
{"delay_key_write", DELAY_KEY_WRITE},
|
|
{"delete", DELETE},
|
|
{"depth", DEPTH},
|
|
{"des_key_file", DES_KEY_FILE},
|
|
{"destination", DESTINATION},
|
|
{"demand", DEMAND},
|
|
{"desc", DESC},
|
|
{"describe", DESCRIBE},
|
|
{"description", DESCRIPTION},
|
|
{"deterministic", DETERMINISTIC},
|
|
{"dense_rank", DENSE_RANK},
|
|
{"diagnostics", DIAGNOSTICS},
|
|
{"disconnect", DISCONNECT},
|
|
{"directory", DIRECTORY},
|
|
{"disable", DISABLE},
|
|
{"discard", DISCARD},
|
|
{"disk", DISK},
|
|
{"diskgroup", DISKGROUP},
|
|
{"distinct", DISTINCT},
|
|
{"distinctrow", DISTINCT},
|
|
{"div", DIV},
|
|
{"do", DO},
|
|
{"double", DOUBLE},
|
|
{"drop", DROP},
|
|
{"dual", DUAL},
|
|
{"dump", DUMP},
|
|
{"dumpfile", DUMPFILE},
|
|
{"duplicate", DUPLICATE},
|
|
{"dynamic", DYNAMIC},
|
|
{"default_tablegroup", DEFAULT_TABLEGROUP},
|
|
{"each", EACH},
|
|
{"effective", EFFECTIVE},
|
|
{"empty", EMPTY},
|
|
{"else", ELSE},
|
|
{"elseif", ELSEIF},
|
|
{"enable", ENABLE},
|
|
{"enable_arbitration_service", ENABLE_ARBITRATION_SERVICE},
|
|
{"enable_extended_rowid", ENABLE_EXTENDED_ROWID},
|
|
{"enclosed", ENCLOSED},
|
|
{"encoding", ENCODING},
|
|
{"encrypted", ENCRYPTED},
|
|
{"encryption", ENCRYPTION},
|
|
{"end", END},
|
|
{"ends", ENDS},
|
|
{"enforced", ENFORCED},
|
|
{"engine", ENGINE_},
|
|
{"engines", ENGINES},
|
|
{"enum", ENUM},
|
|
{"empty_field_as_null", EMPTY_FIELD_AS_NULL},
|
|
{"entity", ENTITY},
|
|
{"error", ERROR_P},
|
|
{"error_code", ERROR_CODE},
|
|
{"errors", ERRORS},
|
|
{"escape", ESCAPE},
|
|
{"escaped", ESCAPED},
|
|
{"estimate", ESTIMATE},
|
|
{"event", EVENT},
|
|
{"events", EVENTS},
|
|
{"every", EVERY},
|
|
{"except", EXCEPT},
|
|
{"exchange", EXCHANGE},
|
|
{"excluding", EXCLUDING},
|
|
{"execute", EXECUTE},
|
|
{"exists", EXISTS},
|
|
{"exit", EXIT},
|
|
{"expansion", EXPANSION},
|
|
{"explain", EXPLAIN},
|
|
{"expire", EXPIRE},
|
|
{"expired", EXPIRED},
|
|
{"expire_info", EXPIRE_INFO},
|
|
{"export", EXPORT},
|
|
{"extended", EXTENDED},
|
|
{"extended_noaddr", EXTENDED_NOADDR},
|
|
{"extent_size", EXTENT_SIZE},
|
|
{"external", EXTERNAL},
|
|
{"extract", EXTRACT},
|
|
{"failover", FAILOVER},
|
|
{"fast", FAST},
|
|
{"faults", FAULTS},
|
|
{"fetch", FETCH},
|
|
{"fields", FIELDS},
|
|
{"field_optionally_enclosed_by", FIELD_OPTIONALLY_ENCLOSED_BY},
|
|
{"field_delimiter", FIELD_DELIMITER},
|
|
{"file", FILEX},
|
|
{"file_id", FILE_ID},
|
|
{"final_count", FINAL_COUNT},
|
|
{"first", FIRST},
|
|
{"first_value", FIRST_VALUE},
|
|
{"fixed", FIXED},
|
|
{"flashback", FLASHBACK},
|
|
{"float", FLOAT},
|
|
{"float4", FLOAT},
|
|
{"float8", DOUBLE},
|
|
{"flush", FLUSH},
|
|
{"follower", FOLLOWER},
|
|
{"for", FOR},
|
|
{"force", FORCE},
|
|
{"foreign", FOREIGN},
|
|
{"format", FORMAT},
|
|
{"found", FOUND},
|
|
{"fragmentation", FRAGMENTATION},
|
|
{"freeze", FREEZE},
|
|
{"frequency", FREQUENCY},
|
|
{"from", FROM},
|
|
{"frozen", FROZEN},
|
|
{"full", FULL},
|
|
{"fulltext", FULLTEXT},
|
|
{"function", FUNCTION},
|
|
{"following", FOLLOWING},
|
|
{"general", GENERAL},
|
|
{"generated", GENERATED},
|
|
{"geometry", GEOMETRY},
|
|
{"geomcollection", GEOMCOLLECTION},
|
|
{"geometrycollection", GEOMETRYCOLLECTION},
|
|
{"get", GET},
|
|
{"get_format", GET_FORMAT},
|
|
{"global", GLOBAL},
|
|
{"global_name", GLOBAL_NAME},
|
|
{"grant", GRANT},
|
|
{"grants", GRANTS},
|
|
{"group", GROUP},
|
|
{"grouping", GROUPING},
|
|
{"group_concat", GROUP_CONCAT},
|
|
{"gts", GTS},
|
|
{"handler", HANDLER},
|
|
{"having", HAVING},
|
|
{"hash", HASH},
|
|
{"help", HELP},
|
|
{"high_priority", HIGH_PRIORITY},
|
|
{"histogram", HISTOGRAM},
|
|
{"host", HOST},
|
|
{"hosts", HOSTS},
|
|
{"hour", HOUR},
|
|
{"hour_microsecond", HOUR_MICROSECOND},
|
|
{"hour_minute", HOUR_MINUTE},
|
|
{"hour_second", HOUR_SECOND},
|
|
{"hidden", HIDDEN},
|
|
{"hybrid_hist", HYBRID_HIST},
|
|
{"id", ID},
|
|
{"idc", IDC},
|
|
{"identified", IDENTIFIED},
|
|
{"if", IF},
|
|
{"ignore", IGNORE},
|
|
{"ignore_server_ids", IGNORE_SERVER_IDS},
|
|
{"immediate", IMMEDIATE},
|
|
{"import", IMPORT},
|
|
{"in", IN},
|
|
{"incr", INCR},
|
|
{"increment", INCREMENT},
|
|
{"incremental", INCREMENTAL},
|
|
{"index", INDEX},
|
|
{"indexes", INDEXES},
|
|
{"index_table_id", INDEX_TABLE_ID},
|
|
{"infile", INFILE},
|
|
{"info", INFO},
|
|
{"initial_size", INITIAL_SIZE},
|
|
{"inner", INNER},
|
|
{"innodb", INNODB},
|
|
{"inout", INOUT},
|
|
{"insensitive", INSENSITIVE},
|
|
{"insert_method", INSERT_METHOD},
|
|
{"install", INSTALL},
|
|
{"instance", INSTANCE},
|
|
{"int", INTEGER},
|
|
{"int1", TINYINT},
|
|
{"int2", SMALLINT},
|
|
{"int3", MEDIUMINT},
|
|
{"int4", INTEGER},
|
|
{"int8", BIGINT},
|
|
{"insert", INSERT},
|
|
{"integer", INTEGER},
|
|
{"into", INTO},
|
|
{"including", INCLUDING},
|
|
{"intersect", INTERSECT},
|
|
{"invisible", INVISIBLE},
|
|
{"invoker", INVOKER},
|
|
{"io", IO},
|
|
{"iops_weight", IOPS_WEIGHT},
|
|
{"io_after_gtids", IO_AFTER_GTIDS},
|
|
{"io_before_gtids", IO_BEFORE_GTIDS},
|
|
{"io_thread", IO_THREAD},
|
|
{"ipc", IPC},
|
|
{"is", IS},
|
|
{"issuer", ISSUER},
|
|
{"isnull", ISNULL},
|
|
{"isolate", ISOLATE},
|
|
{"isolation", ISOLATION},
|
|
{"issuer", ISSUER},
|
|
{"iterate", ITERATE},
|
|
{"job", JOB},
|
|
{"join", JOIN},
|
|
{"json", JSON},
|
|
{"json_arrayagg", JSON_ARRAYAGG},
|
|
{"json_objectagg", JSON_OBJECTAGG},
|
|
{"json_value", JSON_VALUE},
|
|
{"json_table", JSON_TABLE},
|
|
{"key", KEY},
|
|
{"keys", KEYS},
|
|
{"key_block_size", KEY_BLOCK_SIZE},
|
|
{"key_version", KEY_VERSION},
|
|
{"kill", KILL},
|
|
{"kvcache", KVCACHE},
|
|
{"ilogcache", ILOGCACHE},
|
|
{"indexed", INDEXED},
|
|
{"file_id", FILE_ID},
|
|
{"lag", LAG},
|
|
{"language", LANGUAGE},
|
|
{"last", LAST},
|
|
{"last_value", LAST_VALUE},
|
|
{"lead", LEAD},
|
|
{"leader", LEADER},
|
|
{"leading", LEADING},
|
|
{"leave", LEAVE},
|
|
{"leaves", LEAVES},
|
|
{"leak", LEAK},
|
|
{"leak_mod", LEAK_MOD},
|
|
{"leak_rate", LEAK_RATE},
|
|
{"left", LEFT},
|
|
{"less", LESS},
|
|
{"level", LEVEL},
|
|
{"link", LINK},
|
|
{"lib", LIB},
|
|
{"like", LIKE},
|
|
{"limit", LIMIT},
|
|
{"linear", LINEAR},
|
|
{"lines", LINES},
|
|
{"linestring", LINESTRING},
|
|
{"line_delimiter", LINE_DELIMITER},
|
|
{"list", BISON_LIST},
|
|
{"listagg", LISTAGG},
|
|
{"load", LOAD},
|
|
{"ln", LN},
|
|
{"lob_inrow_threshold", LOB_INROW_THRESHOLD},
|
|
{"local", LOCAL},
|
|
{"locality", LOCALITY},
|
|
{"localtime", LOCALTIME},
|
|
{"localtimestamp", LOCALTIMESTAMP},
|
|
{"location", LOCATION},
|
|
{"lock", LOCK_},
|
|
{"locked", LOCKED},
|
|
{"locks", LOCKS},
|
|
{"logfile", LOGFILE},
|
|
{"logonly_replica_num", LOGONLY_REPLICA_NUM},
|
|
{"log", LOG},
|
|
{"logs", LOGS},
|
|
{"log_restore_source", LOG_RESTORE_SOURCE},
|
|
{"long", MEDIUMTEXT},
|
|
{"longblob", LONGBLOB},
|
|
{"longtext", LONGTEXT},
|
|
{"loop", LOOP},
|
|
{"low_priority", LOW_PRIORITY},
|
|
{"ls", LS},
|
|
{"major", MAJOR},
|
|
{"manual", MANUAL},
|
|
{"master", MASTER},
|
|
{"master_bind", MASTER_BIND},
|
|
{"master_auto_position", MASTER_AUTO_POSITION},
|
|
{"master_connect_retry", MASTER_CONNECT_RETRY},
|
|
{"master_delay", MASTER_DELAY},
|
|
{"master_heartbeat_period", MASTER_HEARTBEAT_PERIOD},
|
|
{"master_host", MASTER_HOST},
|
|
{"master_log_file", MASTER_LOG_FILE},
|
|
{"master_log_pos", MASTER_LOG_POS},
|
|
{"master_password", MASTER_PASSWORD},
|
|
{"master_port", MASTER_PORT},
|
|
{"master_retry_count", MASTER_RETRY_COUNT},
|
|
{"master_server_id", MASTER_SERVER_ID},
|
|
{"master_ssl", MASTER_SSL},
|
|
{"master_ssl_ca", MASTER_SSL_CA},
|
|
{"master_ssl_capath", MASTER_SSL_CAPATH},
|
|
{"master_ssl_cert", MASTER_SSL_CERT},
|
|
{"master_ssl_cipher", MASTER_SSL_CIPHER},
|
|
{"master_ssl_crl", MASTER_SSL_CRL},
|
|
{"master_ssl_crlpath", MASTER_SSL_CRLPATH},
|
|
{"master_ssl_key", MASTER_SSL_KEY},
|
|
{"master_ssl_verify_server_cert", MASTER_SSL_VERIFY_SERVER_CERT},
|
|
{"master_user", MASTER_USER},
|
|
{"match", MATCH},
|
|
{"max", MAX},
|
|
{"maxvalue", MAXVALUE},
|
|
{"maximize", MAXIMIZE},
|
|
{"max_connections_per_hour", MAX_CONNECTIONS_PER_HOUR},
|
|
{"max_cpu", MAX_CPU},
|
|
{"log_disk_size", LOG_DISK_SIZE},
|
|
{"max_iops", MAX_IOPS},
|
|
{"memory_size", MEMORY_SIZE},
|
|
{"max_queries_per_hour", MAX_QUERIES_PER_HOUR},
|
|
{"max_rows", MAX_ROWS},
|
|
{"max_size", MAX_SIZE},
|
|
{"max_updates_per_hour", MAX_UPDATES_PER_HOUR},
|
|
{"max_used_part_id", MAX_USED_PART_ID},
|
|
{"max_user_connections", MAX_USER_CONNECTIONS},
|
|
{"medium", MEDIUM},
|
|
{"member", MEMBER},
|
|
{"mediumblob", MEDIUMBLOB},
|
|
{"mediumint", MEDIUMINT},
|
|
{"mediumtext", MEDIUMTEXT},
|
|
{"memory", MEMORY},
|
|
{"memstore_percent", MEMSTORE_PERCENT},
|
|
{"memtable", MEMTABLE},
|
|
{"merge", MERGE},
|
|
{"message_text", MESSAGE_TEXT},
|
|
{"meta", META},
|
|
{"microsecond", MICROSECOND},
|
|
{"middleint", MEDIUMINT},
|
|
{"migrate", MIGRATE},
|
|
{"migration", MIGRATION},
|
|
{"min", MIN},
|
|
{"minvalue", MINVALUE},
|
|
{"min_cpu", MIN_CPU},
|
|
{"min_iops", MIN_IOPS},
|
|
{"min_max", MIN_MAX},
|
|
{"min_rows", MIN_ROWS},
|
|
{"minor", MINOR},
|
|
{"minute", MINUTE},
|
|
{"minute_microsecond", MINUTE_MICROSECOND},
|
|
{"minute_second", MINUTE_SECOND},
|
|
{"minus", MINUS},
|
|
{"mod", MOD},
|
|
{"mode", MODE},
|
|
{"modify", MODIFY},
|
|
{"modifies", MODIFIES},
|
|
{"month", MONTH},
|
|
{"move", MOVE},
|
|
{"multilinestring", MULTILINESTRING},
|
|
{"multipoint", MULTIPOINT},
|
|
{"multipolygon", MULTIPOLYGON},
|
|
{"mutex", MUTEX},
|
|
{"mysql_errno", MYSQL_ERRNO},
|
|
{"my_name", MY_NAME},
|
|
{"name", NAME},
|
|
{"names", NAMES},
|
|
{"namespace", NAMESPACE},
|
|
{"national", NATIONAL},
|
|
{"natural", NATURAL},
|
|
{"nchar", NCHAR},
|
|
{"ndb", NDB},
|
|
{"ndbcluster", NDBCLUSTER},
|
|
{"nested", NESTED},
|
|
{"new", NEW},
|
|
{"never", NEVER},
|
|
{"next", NEXT},
|
|
{"no", NO},
|
|
{"no_write_to_binlog", NO_WRITE_TO_BINLOG},
|
|
{"noarchivelog", NOARCHIVELOG},
|
|
{"noaudit", NOAUDIT},
|
|
{"nocache", NOCACHE},
|
|
{"nocycle", NOCYCLE},
|
|
{"nomaxvalue", NOMAXVALUE},
|
|
{"nominvalue", NOMINVALUE},
|
|
{"noorder", NOORDER},
|
|
{"no_parallel", NO_PARALLEL},
|
|
{"no_rewrite", NO_REWRITE},
|
|
{"no_wait", NO_WAIT},
|
|
{"nodegroup", NODEGROUP},
|
|
{"none", NONE},
|
|
{"noparallel", NOPARALLEL},
|
|
{"normal", NORMAL},
|
|
{"now", NOW},
|
|
{"nowait", NOWAIT},
|
|
{"nulls", NULLS},
|
|
{"null_if", NULL_IF_EXETERNAL},
|
|
{"numeric", DECIMAL},
|
|
{"number", NUMBER},
|
|
{"nvarchar", NVARCHAR},
|
|
{"occur", OCCUR},
|
|
{"ntile", NTILE},
|
|
{"nth_value", NTH_VALUE},
|
|
{"obconfig_url", OBCONFIG_URL},
|
|
{"object", OBJECT},
|
|
{"object_id", OBJECT_ID},
|
|
{"of", OF},
|
|
{"off", OFF},
|
|
{"offset", OFFSET},
|
|
{"old", OLD},
|
|
{"old_key", OLD_KEY},
|
|
{"oj", OJ},
|
|
{"over", OVER},
|
|
{"old_password", OLD_PASSWORD},
|
|
{"on", ON},
|
|
{"one", ONE},
|
|
{"one_shot", ONE_SHOT},
|
|
{"only", ONLY},
|
|
{"open", OPEN},
|
|
{"optimize", OPTIMIZE},
|
|
{"option", OPTION},
|
|
{"optionally", OPTIONALLY},
|
|
{"options", OPTIONS},
|
|
{"or", OR},
|
|
{"order", ORDER},
|
|
{"ordinality", ORDINALITY},
|
|
{"orig_default", ORIG_DEFAULT},
|
|
{"out", OUT},
|
|
{"outer", OUTER},
|
|
{"outfile", OUTFILE},
|
|
{"outline", OUTLINE},
|
|
{"owner", OWNER},
|
|
{"pack_keys", PACK_KEYS},
|
|
{"page", PAGE},
|
|
{"parameters", PARAMETERS},
|
|
{"parallel", PARALLEL},
|
|
{"parser", PARSER},
|
|
{"partial", PARTIAL},
|
|
{"partition", PARTITION},
|
|
{"partition_id", PARTITION_ID},
|
|
{"partitioning", PARTITIONING},
|
|
{"partitions", PARTITIONS},
|
|
{"password", PASSWORD},
|
|
{"path", PATH},
|
|
{"pattern", PATTERN},
|
|
{"pause", PAUSE},
|
|
{"percentage", PERCENTAGE},
|
|
{"percent_rank", PERCENT_RANK},
|
|
{"performance", PERFORMANCE},
|
|
{"phase", PHASE},
|
|
{"physical", PHYSICAL},
|
|
{"plan", PLAN},
|
|
{"planregress", PLANREGRESS},
|
|
{"plugin", PLUGIN},
|
|
{"plugin_dir", PLUGIN_DIR},
|
|
{"plugins", PLUGINS},
|
|
{"plus", PLUS},
|
|
{"point", POINT},
|
|
{"policy", POLICY},
|
|
{"polygon", POLYGON},
|
|
{"pool", POOL},
|
|
{"port", PORT},
|
|
{"position", POSITION},
|
|
{"precision", PRECISION},
|
|
{"prepare", PREPARE},
|
|
{"preserve", PRESERVE},
|
|
{"prev", PREV},
|
|
{"primary", PRIMARY},
|
|
{"primary_zone", PRIMARY_ZONE},
|
|
{"privileges", PRIVILEGES},
|
|
{"procedure", PROCEDURE},
|
|
{"process", PROCESS},
|
|
{"processlist", PROCESSLIST},
|
|
{"profile", PROFILE},
|
|
{"profiles", PROFILES},
|
|
{"progressive_merge_num", PROGRESSIVE_MERGE_NUM},
|
|
{"protection", PROTECTION},
|
|
{"proxy", PROXY},
|
|
{"public", PUBLIC},
|
|
{"purge", PURGE},
|
|
{"p_entity", P_ENTITY},
|
|
{"p_chunk", P_CHUNK},
|
|
{"preceding", PRECEDING},
|
|
{"pctfree", PCTFREE},
|
|
{"ps", PS},
|
|
{"quarter", QUARTER},
|
|
{"query", QUERY},
|
|
{"quick", QUICK},
|
|
{"range", RANGE},
|
|
{"rank", RANK},
|
|
{"read", READ},
|
|
{"read_write", READ_WRITE},
|
|
{"read_consistency", READ_CONSISTENCY},
|
|
{"read_only", READ_ONLY},
|
|
{"reads", READS},
|
|
{"real", REAL},
|
|
{"rebuild", REBUILD},
|
|
{"recover", RECOVER},
|
|
{"recovery", RECOVERY},
|
|
{"recovery_window", RECOVERY_WINDOW},
|
|
{"recycle", RECYCLE},
|
|
{"recyclebin", RECYCLEBIN},
|
|
{"redo_buffer_size", REDO_BUFFER_SIZE},
|
|
{"redo_transport_options", REDO_TRANSPORT_OPTIONS},
|
|
{"redofile", REDOFILE},
|
|
{"redundancy", REDUNDANCY},
|
|
{"redundant", REDUNDANT},
|
|
{"references", REFERENCES},
|
|
{"refresh", REFRESH},
|
|
{"regexp", REGEXP},
|
|
{"region", REGION},
|
|
{"reject", REJECT},
|
|
{"relay", RELAY},
|
|
{"relay_log_file", RELAY_LOG_FILE},
|
|
{"relay_log_pos", RELAY_LOG_POS},
|
|
{"relay_thread", RELAY_THREAD},
|
|
{"relaylog", RELAYLOG},
|
|
{"release", RELEASE},
|
|
{"reload", RELOAD},
|
|
{"remap", REMAP},
|
|
{"remove", REMOVE},
|
|
{"rename", RENAME},
|
|
{"reorganize", REORGANIZE},
|
|
{"repair", REPAIR},
|
|
{"repeat", REPEAT},
|
|
{"repeatable", REPEATABLE},
|
|
{"replace", REPLACE},
|
|
{"replica", REPLICA},
|
|
{"replica_num", REPLICA_NUM},
|
|
{"replica_type", REPLICA_TYPE},
|
|
{"duplicate_scope", DUPLICATE_SCOPE},
|
|
{"replication", REPLICATION},
|
|
{"report", REPORT},
|
|
{"require", REQUIRE},
|
|
{"reset", RESET},
|
|
{"resignal", RESIGNAL},
|
|
{"resource", RESOURCE},
|
|
{"resource_pool_list", RESOURCE_POOL_LIST},
|
|
{"respect", RESPECT},
|
|
{"restart", RESTART},
|
|
{"restore", RESTORE},
|
|
{"restrict", RESTRICT},
|
|
{"resume", RESUME},
|
|
{"returning", RETURNING},
|
|
{"returned_sqlstate", RETURNED_SQLSTATE},
|
|
{"return", RETURN},
|
|
{"returns", RETURNS},
|
|
{"reverse", REVERSE},
|
|
{"revoke", REVOKE},
|
|
{"right", RIGHT},
|
|
{"rlike", REGEXP},
|
|
{"rollback", ROLLBACK},
|
|
{"rolling", ROLLING},
|
|
{"rollup", ROLLUP},
|
|
{"root", ROOT},
|
|
{"rootservice", ROOTSERVICE},
|
|
{"rootservice_list", ROOTSERVICE_LIST},
|
|
{"roottable", ROOTTABLE},
|
|
{"rotate", ROTATE},
|
|
{"routine", ROUTINE},
|
|
{"row", ROW},
|
|
{"rowid", ROWID},
|
|
{"row_count", ROW_COUNT},
|
|
{"row_format", ROW_FORMAT},
|
|
{"row_number", ROW_NUMBER},
|
|
{"rows", ROWS},
|
|
{"rtree", RTREE},
|
|
{"run", RUN},
|
|
{"sample", SAMPLE},
|
|
{"savepoint", SAVEPOINT},
|
|
{"schedule", SCHEDULE},
|
|
{"schema_name", SCHEMA_NAME},
|
|
{"scn", SCN},
|
|
{"scope", SCOPE},
|
|
{"second", SECOND},
|
|
{"second_microsecond", SECOND_MICROSECOND},
|
|
{"security", SECURITY},
|
|
{"seed", SEED},
|
|
{"sensitive", SENSITIVE},
|
|
{"sequence", SEQUENCE},
|
|
{"sequences", SEQUENCES},
|
|
{"serial", SERIAL},
|
|
{"serializable", SERIALIZABLE},
|
|
{"server", SERVER},
|
|
{"server_ip", SERVER_IP},
|
|
{"server_port", SERVER_PORT},
|
|
{"server_type", SERVER_TYPE},
|
|
{"service", SERVICE},
|
|
{"set", SET},
|
|
{"session", SESSION},
|
|
{"session_user", SESSION_USER},
|
|
{"skip_header", SKIP_HEADER},
|
|
{"skip_blank_lines", SKIP_BLANK_LINES},
|
|
{"statements", STATEMENTS},
|
|
{"statistics", STATISTICS},
|
|
{"binding", BINDING},
|
|
{"sharding", SHARDING},
|
|
{"schema", SCHEMA},
|
|
{"schemas", SCHEMAS},
|
|
{"select", SELECT},
|
|
{"set_master_cluster", SET_MASTER_CLUSTER},
|
|
{"set_slave_cluster", SET_SLAVE_CLUSTER},
|
|
{"set_tp", SET_TP},
|
|
{"separator", SEPARATOR},
|
|
{"share", SHARE},
|
|
{"show", SHOW},
|
|
{"skewonly", SKEWONLY},
|
|
{"skip_index", SKIP_INDEX},
|
|
{"shutdown", SHUTDOWN},
|
|
{"signed", SIGNED},
|
|
{"signal", SIGNAL},
|
|
{"simple", SIMPLE},
|
|
{"slave", SLAVE},
|
|
{"size", SIZE},
|
|
{"slog", SLOG},
|
|
{"slow", SLOW},
|
|
{"slot_idx", SLOT_IDX},
|
|
{"smallint", SMALLINT},
|
|
{"snapshot", SNAPSHOT},
|
|
{"socket", SOCKET},
|
|
{"some", SOME},
|
|
{"soname", SONAME},
|
|
{"sounds", SOUNDS},
|
|
{"source", SOURCE},
|
|
{"spatial", SPATIAL},
|
|
{"specific", SPECIFIC},
|
|
{"spfile", SPFILE},
|
|
{"split", SPLIT},
|
|
{"sql", SQL},
|
|
{"sqlexception", SQLEXCEPTION},
|
|
{"sqlstate", SQLSTATE},
|
|
{"sqlwarning", SQLWARNING},
|
|
{"sql_big_result", SQL_BIG_RESULT},
|
|
{"sql_calc_found_rows", SQL_CALC_FOUND_ROWS},
|
|
{"sql_small_result", SQL_SMALL_RESULT},
|
|
{"sql_after_gtids", SQL_AFTER_GTIDS},
|
|
{"sql_after_mts_gaps", SQL_AFTER_MTS_GAPS},
|
|
{"sql_before_gtids", SQL_BEFORE_GTIDS},
|
|
{"sql_buffer_result", SQL_BUFFER_RESULT},
|
|
{"sql_cache", SQL_CACHE},
|
|
{"sql_id", SQL_ID},
|
|
{"schema_id", SCHEMA_ID},
|
|
{"sql_no_cache", SQL_NO_CACHE},
|
|
{"sql_thread", SQL_THREAD},
|
|
{"sql_tsi_day", SQL_TSI_DAY},
|
|
{"sql_tsi_hour", SQL_TSI_HOUR},
|
|
{"sql_tsi_minute", SQL_TSI_MINUTE},
|
|
{"sql_tsi_month", SQL_TSI_MONTH},
|
|
{"sql_tsi_quarter", SQL_TSI_QUARTER},
|
|
{"sql_tsi_second", SQL_TSI_SECOND},
|
|
{"sql_tsi_week", SQL_TSI_WEEK},
|
|
{"sql_tsi_year", SQL_TSI_YEAR},
|
|
{"srid", SRID},
|
|
{"ssl", SSL},
|
|
{"stacked", STACKED},
|
|
{"standby", STANDBY},
|
|
{"start", START},
|
|
{"starts", STARTS},
|
|
{"starting", STARTING},
|
|
{"straight_join", STRAIGHT_JOIN},
|
|
{"stat", STAT},
|
|
{"stats_auto_recalc", STATS_AUTO_RECALC},
|
|
{"stats_persistent", STATS_PERSISTENT},
|
|
{"stats_sample_pages", STATS_SAMPLE_PAGES},
|
|
{"status", STATUS},
|
|
{"std", STD},
|
|
{"stddev", STDDEV},
|
|
{"stddev_pop", STDDEV_POP},
|
|
{"stddev_samp", STDDEV_SAMP},
|
|
{"stop", STOP},
|
|
{"storage", STORAGE},
|
|
{"storage_format_version", STORAGE_FORMAT_VERSION},
|
|
{"stored", STORED},
|
|
{"storing", STORING},
|
|
{"string", STRING},
|
|
{"strong", STRONG},
|
|
{"subclass_origin", SUBCLASS_ORIGIN},
|
|
{"subdate", SUBDATE},
|
|
{"subject", SUBJECT},
|
|
{"subpartition", SUBPARTITION},
|
|
{"subpartitions", SUBPARTITIONS},
|
|
{"substr", SUBSTR},
|
|
{"substring", SUBSTRING},
|
|
{"sum", SUM},
|
|
{"super", SUPER},
|
|
{"suspend", SUSPEND},
|
|
{"successful", SUCCESSFUL},
|
|
{"synchronous", SYNCHRONOUS},
|
|
{"synchronization", SYNCHRONIZATION},
|
|
{"sysdate", SYSDATE},
|
|
{"system", SYSTEM},
|
|
{"system_user", SYSTEM_USER},
|
|
{"statement", STATEMENT},
|
|
{"swaps", SWAPS},
|
|
{"switch", SWITCH},
|
|
{"switches", SWITCHES},
|
|
{"switchover", SWITCHOVER},
|
|
{"table", TABLE},
|
|
{"table_checksum", TABLE_CHECKSUM},
|
|
{"table_mode", TABLE_MODE},
|
|
{"table_id", TABLE_ID},
|
|
{"table_name", TABLE_NAME},
|
|
{"tablegroup", TABLEGROUP},
|
|
{"tablegroups", TABLEGROUPS},
|
|
{"tablegroup_id", TABLEGROUP_ID},
|
|
{"tables", TABLES},
|
|
{"tablespace", TABLESPACE},
|
|
{"tablet", TABLET},
|
|
{"tablet_id", TABLET_ID},
|
|
{"tablet_max_size", TABLET_MAX_SIZE},
|
|
{"task", TASK},
|
|
{"template", TEMPLATE},
|
|
{"temporary", TEMPORARY},
|
|
{"temptable", TEMPTABLE},
|
|
{"tenant", TENANT},
|
|
{"tenant_id", TENANT_ID},
|
|
{"terminated", TERMINATED},
|
|
{"text", TEXT},
|
|
{"than", THAN},
|
|
{"then", THEN},
|
|
{"time", TIME},
|
|
{"timestamp", TIMESTAMP},
|
|
{"timestampadd", TIMESTAMPADD},
|
|
{"timestampdiff", TIMESTAMPDIFF},
|
|
{"tinyblob", TINYBLOB},
|
|
{"tinyint", TINYINT},
|
|
{"tinytext", TINYTEXT},
|
|
{"tablet_size", TABLET_SIZE},
|
|
{"tp_name", TP_NAME},
|
|
{"tp_no", TP_NO},
|
|
{"trace", TRACE},
|
|
{"traditional", TRADITIONAL},
|
|
{"trailing", TRAILING},
|
|
{"transfer", TRANSFER},
|
|
{"transaction", TRANSACTION},
|
|
{"trigger", TRIGGER},
|
|
{"triggers", TRIGGERS},
|
|
{"trim", TRIM},
|
|
{"trim_space", TRIM_SPACE},
|
|
{"truncate", TRUNCATE},
|
|
{"type", TYPE},
|
|
{"types", TYPES},
|
|
{"to", TO},
|
|
{"top_k_fre_hist", TOP_K_FRE_HIST},
|
|
{"uncommitted", UNCOMMITTED},
|
|
{"undefined", UNDEFINED},
|
|
{"undo", UNDO},
|
|
{"undo_buffer_size", UNDO_BUFFER_SIZE},
|
|
{"undofile", UNDOFILE},
|
|
{"union", UNION},
|
|
{"unique", UNIQUE},
|
|
{"unicode", UNICODE},
|
|
{"uninstall", UNINSTALL},
|
|
{"unit", UNIT},
|
|
{"unit_group", UNIT_GROUP},
|
|
{"unit_num", UNIT_NUM},
|
|
{"unknown", UNKNOWN},
|
|
{"unlock", UNLOCK},
|
|
{"unlocked", UNLOCKED},
|
|
{"unsigned", UNSIGNED},
|
|
{"until", UNTIL},
|
|
{"unusual", UNUSUAL},
|
|
{"update", UPDATE},
|
|
{"upgrade", UPGRADE},
|
|
{"usage", USAGE},
|
|
{"use", USE},
|
|
{"using", USING},
|
|
{"use_bloom_filter", USE_BLOOM_FILTER},
|
|
{"use_frm", USE_FRM},
|
|
{"user", USER},
|
|
{"user_resources", USER_RESOURCES},
|
|
{"utc_date", UTC_DATE},
|
|
{"utc_time", UTC_TIME},
|
|
{"utc_timestamp", UTC_TIMESTAMP},
|
|
{"unbounded", UNBOUNDED},
|
|
{"unlimited", UNLIMITED},
|
|
{"valid", VALID},
|
|
{"validate", VALIDATE},
|
|
{"value", VALUE},
|
|
{"varbinary", VARBINARY},
|
|
{"varchar", VARCHAR},
|
|
{"varcharacter", VARCHAR},
|
|
{"variance", VARIANCE},
|
|
{"variables", VARIABLES},
|
|
{"var_pop", VAR_POP},
|
|
{"var_samp", VAR_SAMP},
|
|
{"verbose", VERBOSE},
|
|
{"verify", VERIFY},
|
|
{"materialized", MATERIALIZED},
|
|
{"validate", VALIDATE},
|
|
{"values", VALUES},
|
|
{"varying", VARYING},
|
|
{"view", VIEW},
|
|
{"virtual", VIRTUAL},
|
|
{"virtual_column_id", VIRTUAL_COLUMN_ID},
|
|
{"visible", VISIBLE},
|
|
{"wait", WAIT},
|
|
{"warnings", WARNINGS},
|
|
{"weak", WEAK},
|
|
{"week", WEEK},
|
|
{"weight_string", WEIGHT_STRING},
|
|
{"where", WHERE},
|
|
{"when", WHEN},
|
|
{"whenever", WHENEVER},
|
|
{"while", WHILE},
|
|
{"window", WINDOW},
|
|
{"with", WITH},
|
|
{"work", WORK},
|
|
{"write", WRITE},
|
|
{"wrapper", WRAPPER},
|
|
{"x509", X509},
|
|
{"xa", XA},
|
|
{"xml", XML},
|
|
{"xor", XOR},
|
|
{"year", YEAR},
|
|
{"year_month", YEAR_MONTH},
|
|
{"zone", ZONE},
|
|
{"zone_list", ZONE_LIST},
|
|
{"time_zone_info", TIME_ZONE_INFO},
|
|
{"zone_type", ZONE_TYPE},
|
|
{"zerofill", ZEROFILL},
|
|
{"audit", AUDIT},
|
|
{"PL", PL},
|
|
{"remote_oss", REMOTE_OSS},
|
|
{"throttle", THROTTLE},
|
|
{"priority", PRIORITY},
|
|
{"rt", RT},
|
|
{"network", NETWORK},
|
|
{"logical_reads", LOGICAL_READS},
|
|
{"queue_time", QUEUE_TIME},
|
|
{"obsolete", OBSOLETE},
|
|
{"bandwidth", BANDWIDTH},
|
|
{"backuppiece", BACKUPPIECE},
|
|
{"backup_backup_dest", BACKUP_BACKUP_DEST},
|
|
{"backed", BACKED},
|
|
{"pretty", PRETTY},
|
|
{"pretty_color", PRETTY_COLOR},
|
|
{"preview", PREVIEW},
|
|
{"up", UP},
|
|
{"times", TIMES},
|
|
{"backupround", BACKUPROUND},
|
|
{"recursive", RECURSIVE},
|
|
{"wash", WASH},
|
|
{"query_response_time",QUERY_RESPONSE_TIME},
|
|
{"statement_id", STATEMENT_ID},
|
|
{"TTL", TTL},
|
|
{"kv_attributes", KV_ATTRIBUTES},
|
|
{"RESOURCE_POOL", RESOURCE_POOL},
|
|
{"clone", CLONE},
|
|
};
|
|
|
|
/** https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
|
|
ALTER TABLE
|
|
ALTER USER
|
|
ANALYZE TABLE
|
|
CACHE INDEX
|
|
CALL
|
|
CHANGE MASTER
|
|
CHECKSUM {TABLE | TABLES}
|
|
COMMIT
|
|
{CREATE | DROP} INDEX
|
|
{CREATE | RENAME | DROP} DATABASE
|
|
{CREATE | DROP} TABLE
|
|
{CREATE | RENAME | DROP} USER
|
|
{CREATE | DROP} VIEW
|
|
DELETE
|
|
DO
|
|
FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
|
|
| LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
|
|
GRANT
|
|
INSERT
|
|
INSTALL PLUGIN
|
|
KILL
|
|
\LOAD INDEX INTO CACHE
|
|
OPTIMIZE TABLE
|
|
RENAME TABLE
|
|
REPAIR TABLE
|
|
REPLACE
|
|
RESET {MASTER | SLAVE | QUERY CACHE}
|
|
REVOKE
|
|
SELECT
|
|
SET
|
|
SHOW {WARNINGS | ERRORS}
|
|
SHOW BINLOG EVENTS
|
|
SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
|
|
SHOW {MASTER | BINARY} LOGS
|
|
SHOW {MASTER | SLAVE} STATUS
|
|
SLAVE {START | STOP}
|
|
TRUNCATE TABLE
|
|
UNINSTALL PLUGIN
|
|
UPDATE
|
|
*/
|
|
static const NonReservedKeyword Mysql_sql_keywords_in_pl[] =
|
|
{
|
|
{"alter", ALTER},
|
|
{"analyze", ANALYZE},
|
|
{"binary", BINARY},
|
|
{"binlog", BINLOG},
|
|
{"cache", CACHE},
|
|
{"call", CALL},
|
|
{"change", CHANGE},
|
|
{"checksum", CHECKSUM},
|
|
{"commit", COMMIT},
|
|
{"create", CREATE},
|
|
{"database", DATABASE},
|
|
{"delete", DELETE},
|
|
{"des_key_file", DES_KEY_FILE},
|
|
{"do", DO},
|
|
{"drop", DROP},
|
|
{"errors", ERRORS},
|
|
{"event", EVENT},
|
|
{"events", EVENTS},
|
|
{"flush", FLUSH},
|
|
{"function", FUNCTION},
|
|
{"get", GET},
|
|
{"grant", GRANT},
|
|
{"index", INDEX},
|
|
{"insert", INSERT},
|
|
{"install", INSTALL},
|
|
{"into", INTO},
|
|
{"kill", KILL},
|
|
{"load", LOAD},
|
|
{"lock", LOCK_},
|
|
{"logs", LOGS},
|
|
{"master", MASTER},
|
|
{"optimize", OPTIMIZE},
|
|
{"plugin", PLUGIN},
|
|
{"privileges", PRIVILEGES},
|
|
{"procedure", PROCEDURE},
|
|
{"query", QUERY},
|
|
{"read", READ},
|
|
{"rename", RENAME},
|
|
{"repair", REPAIR},
|
|
{"replace", REPLACE},
|
|
{"reset", RESET},
|
|
{"revoke", REVOKE},
|
|
{"select", SELECT},
|
|
{"set", SET},
|
|
{"show", SHOW},
|
|
{"slave", SLAVE},
|
|
{"start", START},
|
|
{"status", STATUS},
|
|
{"stop", STOP},
|
|
{"table", TABLE},
|
|
{"tables", TABLES},
|
|
{"truncate", TRUNCATE},
|
|
{"uninstall", UNINSTALL},
|
|
{"update", UPDATE},
|
|
{"user_resources", USER_RESOURCES},
|
|
{"view", VIEW},
|
|
{"warnings", WARNINGS},
|
|
{"with", WITH},
|
|
/*
|
|
* 其他在PL中出现的SQL关键字
|
|
*/
|
|
{"prepare", PREPARE},
|
|
{"execute", EXECUTE},
|
|
{"deallocate", DEALLOCATE},
|
|
{"unique", UNIQUE},
|
|
{"temporary", TEMPORARY},
|
|
{"savepoint", SAVEPOINT},
|
|
{"rollback", ROLLBACK},
|
|
{"desc", DESC},
|
|
{"describe", DESCRIBE},
|
|
{"explain", EXPLAIN},
|
|
{"release", RELEASE},
|
|
};
|
|
|
|
const NonReservedKeyword *mysql_non_reserved_keyword_lookup(const char *word)
|
|
{
|
|
return find_word(word, mysql_none_reserved_keywords_root, Mysql_none_reserved_keywords);
|
|
}
|
|
|
|
int mysql_sql_reserved_keyword_lookup(const char *word)
|
|
{
|
|
int ret = -1;
|
|
const NonReservedKeyword *res_word = find_word(word, mysql_sql_keywords_in_pl_root, Mysql_sql_keywords_in_pl);
|
|
if (NULL != res_word) {
|
|
ret = res_word->keyword_type;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
//return 0 if succ, return 1 if fail
|
|
int create_mysql_trie_tree()
|
|
{
|
|
int ret = 0;
|
|
if (0 != (ret = create_trie_tree(Mysql_none_reserved_keywords, LENGTH_OF(Mysql_none_reserved_keywords), &mysql_none_reserved_keywords_root))) {
|
|
(void)printf("ERROR create trie tree failed! \n");
|
|
} else if (0 != (ret = create_trie_tree(Mysql_sql_keywords_in_pl, LENGTH_OF(Mysql_sql_keywords_in_pl), &mysql_sql_keywords_in_pl_root))) {
|
|
(void)printf("ERROR create trie tree failed! \n");
|
|
} else { /*do nothing*/ }
|
|
return ret;
|
|
}
|
|
|
|
void __attribute__((constructor)) init_mysql_non_reserved_keywords_tree()
|
|
{
|
|
int ret = 0;
|
|
if (0 != (ret = create_mysql_trie_tree())) {
|
|
(void)printf("ERROR build mysql_non_reserved_keywords tree failed=>%d", ret);
|
|
}
|
|
}
|