diff --git a/dialect/keyword.go b/dialect/keyword.go index 352c67ef..f30fc5a0 100644 --- a/dialect/keyword.go +++ b/dialect/keyword.go @@ -380,6 +380,9 @@ type DatabaseDriver string const ( DatabaseDriverMySQL DatabaseDriver = "mysql" + DatabaseDriverMySQL8 DatabaseDriver = "mysql8" + DatabaseDriverMySQL57 DatabaseDriver = "mysql57" + DatabaseDriverMySQL56 DatabaseDriver = "mysql56" DatabaseDriverPostgreSQL DatabaseDriver = "postgresql" DatabaseDriverSQLite3 DatabaseDriver = "sqlite3" ) @@ -387,7 +390,13 @@ const ( func DataBaseKeywords(driver DatabaseDriver) []string { switch driver { case DatabaseDriverMySQL: + return mysql8Keyword + case DatabaseDriverMySQL8: + return mysql8Keyword + case DatabaseDriverMySQL57: return mysql57Keyword + case DatabaseDriverMySQL56: + return mysql56Keyword case DatabaseDriverPostgreSQL: return postgresql13Keywords case DatabaseDriverSQLite3: @@ -400,7 +409,13 @@ func DataBaseKeywords(driver DatabaseDriver) []string { func DataBaseFunctions(driver DatabaseDriver) []string { switch driver { case DatabaseDriverMySQL: + return mysql8Function + case DatabaseDriverMySQL8: + return mysql8Function + case DatabaseDriverMySQL57: return mysql57function + case DatabaseDriverMySQL56: + return mysql56Function case DatabaseDriverPostgreSQL: return []string{} case DatabaseDriverSQLite3: diff --git a/dialect/mysql.go b/dialect/mysql.go index 2e75c564..c8f06462 100644 --- a/dialect/mysql.go +++ b/dialect/mysql.go @@ -1,60 +1,42 @@ package dialect var mysql8Keyword = []string{ - "ACCESSIBLE", "ACCOUNT", "ACTION", - "ACTIVE", "ADD", "ADMIN", "AFTER", - "AGAINST", "AGGREGATE", "ALGORITHM", "ALL", "ALTER", - "ALWAYS", - "ANALYSE", "ANALYZE", - "AND", - "ANY", - "ARRAY", + "ARCHIVE", "AS", "ASC", - "ASCII", - "ASENSITIVE", "AT", "ATTRIBUTE", + "AUTOCOMMIT", "AUTOEXTEND_SIZE", "AUTO_INCREMENT", - "AVG", "AVG_ROW_LENGTH", "BACKUP", "BEFORE", "BEGIN", - "BETWEEN", - "BIGINT", "BINARY", "BINLOG", - "BIT", - "BLOB", - "BLOCK", "BOOL", "BOOLEAN", - "BOTH", "BTREE", - "BUCKETS", "BY", "BYTE", "CACHE", "CALL", "CASCADE", - "CASCADED", "CASE", "CATALOG_NAME", "CHAIN", "CHANGE", - "CHANGED", "CHANNEL", "CHAR", "CHARACTER", @@ -72,7 +54,6 @@ var mysql8Keyword = []string{ "COLLATION", "COLUMN", "COLUMNS", - "COLUMN_FORMAT", "COLUMN_NAME", "COMMENT", "COMMIT", @@ -90,19 +71,12 @@ var mysql8Keyword = []string{ "CONSTRAINT_CATALOG", "CONSTRAINT_NAME", "CONSTRAINT_SCHEMA", - "CONTAINS", - "CONTEXT", "CONTINUE", - "CONVERT", - "CPU", + "COUNT", "CREATE", "CROSS", - "CUBE", - "CUME_DIST", + "CSV", "CURRENT", - "CURRENT_DATE", - "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "CURSOR_NAME", @@ -111,12 +85,7 @@ var mysql8Keyword = []string{ "DATABASES", "DATAFILE", "DATE", - "DATETIME", "DAY", - "DAY_HOUR", - "DAY_MICROSECOND", - "DAY_MINUTE", - "DAY_SECOND", "DEALLOCATE", "DEC", "DECIMAL", @@ -128,55 +97,41 @@ var mysql8Keyword = []string{ "DELAYED", "DELAY_KEY_WRITE", "DELETE", - "DENSE_RANK", "DESC", "DESCRIBE", "DESCRIPTION", - "DES_KEY_FILE", - "DETERMINISTIC", "DIAGNOSTICS", "DIRECTORY", "DISABLE", "DISCARD", - "DISK", "DISTINCT", "DISTINCTROW", - "DIV", "DO", - "DOUBLE", "DROP", "DUAL", "DUMPFILE", "DUPLICATE", "DYNAMIC", - "EACH", "ELSE", "ELSEIF", - "EMPTY", "ENABLE", "ENCLOSED", "ENCRYPTION", "END", "ENDS", - "ENFORCED", "ENGINE", "ENGINES", - "ENGINE_ATTRIBUTE", - "ENUM", "ERROR", "ERRORS", - "ESCAPE", "ESCAPED", "EVENT", "EVENTS", "EVERY", "EXCEPT", "EXCHANGE", - "EXCLUDE", "EXECUTE", "EXISTS", "EXIT", - "EXPANSION", "EXPIRE", "EXPLAIN", "EXPORT", @@ -185,78 +140,57 @@ var mysql8Keyword = []string{ "FAILED_LOGIN_ATTEMPTS", "FALSE", "FAST", - "FAULTS", + "FEDERATED", "FETCH", "FIELDS", "FILE", "FILE_BLOCK_SIZE", "FILTER", "FIRST", - "FIRST_VALUE", "FIXED", - "FLOAT", "FLOAT4", "FLOAT8", "FLUSH", - "FOLLOWING", - "FOLLOWS", "FOR", "FORCE", "FOREIGN", "FORMAT", - "FOUND", "FROM", "FULL", "FULLTEXT", "FUNCTION", "GENERAL", - "GENERATED", - "GEOMCOLLECTION", - "GEOMETRY", - "GEOMETRYCOLLECTION", "GET", - "GET_FORMAT", - "GET_MASTER_PUBLIC_KEY", - "GET_SOURCE_PUBLIC_KEY", "GLOBAL", "GRANT", "GRANTS", "GROUP", - "GROUPING", - "GROUPS", - "GROUP_REPLICATION", "HANDLER", - "HASH", "HAVING", + "HEAP", "HELP", + "HELP_DATE", + "HELP_VERSION", "HIGH_PRIORITY", - "HISTOGRAM", "HISTORY", "HOST", "HOSTS", - "HOUR", - "HOUR_MICROSECOND", - "HOUR_MINUTE", - "HOUR_SECOND", "IDENTIFIED", "IF", "IGNORE", "IGNORE_SERVER_IDS", "IMPORT", "IN", - "INACTIVE", "INDEX", "INDEXES", "INFILE", "INITIAL_SIZE", "INNER", - "INOUT", - "INSENSITIVE", + "INNODB", "INSERT", "INSERT_METHOD", "INSTALL", "INSTANCE", - "INT", "INT1", "INT2", "INT3", @@ -266,55 +200,31 @@ var mysql8Keyword = []string{ "INTERVAL", "INTO", "INVISIBLE", - "INVOKER", - "IO", - "IO_AFTER_GTIDS", - "IO_BEFORE_GTIDS", "IO_THREAD", - "IPC", - "IS", "ISOLATION", "ISSUER", "ITERATE", "JOIN", "JSON", - "JSON_TABLE", - "JSON_VALUE", "KEY", - "KEYRING", "KEYS", "KEY_BLOCK_SIZE", "KILL", - "LAG", - "LANGUAGE", "LAST", - "LAST_VALUE", - "LATERAL", - "LEAD", - "LEADING", "LEAVE", "LEAVES", "LEFT", - "LESS", "LEVEL", "LIKE", "LIMIT", - "LINEAR", "LINES", - "LINESTRING", - "LIST", "LOAD", "LOCAL", - "LOCALTIME", - "LOCALTIMESTAMP", "LOCK", - "LOCKED", - "LOCKS", "LOGFILE", "LOGS", "LONG", - "LONGBLOB", - "LONGTEXT", + "LONGBINARY", "LOOP", "LOW_PRIORITY", "MASTER", @@ -322,19 +232,15 @@ var mysql8Keyword = []string{ "MASTER_BIND", "MASTER_COMPRESSION_ALGORITHMS", "MASTER_CONNECT_RETRY", - "MASTER_DELAY", "MASTER_HEARTBEAT_PERIOD", "MASTER_HOST", "MASTER_LOG_FILE", "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", - "MASTER_PUBLIC_KEY_PATH", "MASTER_RETRY_COUNT", - "MASTER_SERVER_ID", "MASTER_SSL", "MASTER_SSL_CA", - "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", "MASTER_SSL_CIPHER", "MASTER_SSL_CRL", @@ -345,8 +251,6 @@ var mysql8Keyword = []string{ "MASTER_TLS_VERSION", "MASTER_USER", "MASTER_ZSTD_COMPRESSION_LEVEL", - "MATCH", - "MAXVALUE", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", "MAX_ROWS", @@ -354,29 +258,16 @@ var mysql8Keyword = []string{ "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", "MEDIUM", - "MEDIUMBLOB", - "MEDIUMINT", - "MEDIUMTEXT", - "MEMBER", "MEMORY", "MERGE", "MESSAGE_TEXT", - "MICROSECOND", "MIDDLEINT", - "MIGRATE", - "MINUTE", - "MINUTE_MICROSECOND", - "MINUTE_SECOND", "MIN_ROWS", - "MOD", "MODE", - "MODIFIES", "MODIFY", - "MONTH", - "MULTILINESTRING", - "MULTIPOINT", - "MULTIPOLYGON", + "MRG_MYISAM", "MUTEX", + "MYISAM", "MYSQL_ERRNO", "NAME", "NAMES", @@ -385,32 +276,21 @@ var mysql8Keyword = []string{ "NCHAR", "NDB", "NDBCLUSTER", - "NESTED", "NETWORK_NAMESPACE", "NEVER", - "NEW", "NEXT", "NO", "NODEGROUP", "NONE", "NOT", - "NOWAIT", - "NO_WAIT", "NO_WRITE_TO_BINLOG", - "NTH_VALUE", - "NTILE", "NULL", - "NULLS", "NUMBER", "NUMERIC", "NVARCHAR", - "OF", - "OFF", "OFFSET", - "OJ", "OLD", "ON", - "ONE", "ONLY", "OPEN", "OPTIMIZE", @@ -421,36 +301,23 @@ var mysql8Keyword = []string{ "OPTIONS", "OR", "ORDER", - "ORDINALITY", "ORGANIZATION", - "OTHERS", - "OUT", "OUTER", "OUTFILE", - "OVER", "OWNER", "PACK_KEYS", - "PAGE", "PARSER", "PARTIAL", "PARTITION", "PARTITIONING", - "PARTITIONS", "PASSWORD", "PASSWORD_LOCK_TIME", - "PATH", - "PERCENT_RANK", "PERSIST", "PERSIST_ONLY", - "PHASE", "PLUGIN", "PLUGINS", "PLUGIN_DIR", - "POINT", - "POLYGON", "PORT", - "PRECEDES", - "PRECEDING", "PRECISION", "PREPARE", "PRESERVE", @@ -465,34 +332,23 @@ var mysql8Keyword = []string{ "PROFILES", "PROXY", "PURGE", - "QUARTER", "QUERY", "QUICK", "RANDOM", - "RANGE", - "RANK", "READ", - "READS", - "READ_ONLY", - "READ_WRITE", "REAL", "REBUILD", "RECOVER", - "RECURSIVE", - "REDOFILE", - "REDO_BUFFER_SIZE", + "REDO_LOG", "REDUNDANT", "REFERENCE", "REFERENCES", - "REGEXP", "RELAY", "RELAYLOG", "RELAY_LOG_FILE", "RELAY_LOG_POS", - "RELAY_THREAD", "RELEASE", "RELOAD", - "REMOTE", "REMOVE", "RENAME", "REORGANIZE", @@ -511,52 +367,30 @@ var mysql8Keyword = []string{ "REPLICATE_WILD_IGNORE_TABLE", "REPLICATION", "REQUIRE", - "REQUIRE_ROW_FORMAT", "RESET", "RESIGNAL", "RESOURCE", - "RESPECT", "RESTART", - "RESTORE", "RESTRICT", - "RESUME", "RETAIN", "RETURN", "RETURNED_SQLSTATE", - "RETURNING", "RETURNS", "REUSE", - "REVERSE", "REVOKE", "RIGHT", - "RLIKE", "ROLE", "ROLLBACK", - "ROLLUP", - "ROTATE", - "ROUTINE", "ROW", "ROWS", "ROW_COUNT", "ROW_FORMAT", - "ROW_NUMBER", - "RTREE", "SAVEPOINT", "SCHEDULE", "SCHEMA", "SCHEMAS", "SCHEMA_NAME", - "SECOND", - "SECONDARY", - "SECONDARY_ENGINE", - "SECONDARY_ENGINE_ATTRIBUTE", - "SECONDARY_LOAD", - "SECONDARY_UNLOAD", - "SECOND_MICROSECOND", - "SECURITY", "SELECT", - "SENSITIVE", - "SEPARATOR", "SERIAL", "SERIALIZABLE", "SERVER", @@ -566,71 +400,24 @@ var mysql8Keyword = []string{ "SHOW", "SHUTDOWN", "SIGNAL", - "SIGNED", - "SIMPLE", - "SKIP", "SLAVE", "SLOW", - "SMALLINT", "SNAPSHOT", "SOCKET", - "SOME", "SONAME", - "SOUNDS", - "SOURCE", - "SOURCE_AUTO_POSITION", - "SOURCE_BIND", - "SOURCE_COMPRESSION_ALGORITHMS", - "SOURCE_CONNECT_RETRY", - "SOURCE_DELAY", - "SOURCE_HEARTBEAT_PERIOD", - "SOURCE_HOST", - "SOURCE_LOG_FILE", - "SOURCE_LOG_POS", - "SOURCE_PASSWORD", - "SOURCE_PORT", - "SOURCE_PUBLIC_KEY_PATH", - "SOURCE_RETRY_COUNT", - "SOURCE_SSL", - "SOURCE_SSL_CA", - "SOURCE_SSL_CAPATH", - "SOURCE_SSL_CERT", - "SOURCE_SSL_CIPHER", - "SOURCE_SSL_CRL", - "SOURCE_SSL_CRLPATH", - "SOURCE_SSL_KEY", - "SOURCE_SSL_VERIFY_SERVER_CERT", - "SOURCE_TLS_CIPHERSUITES", - "SOURCE_TLS_VERSION", - "SOURCE_USER", - "SOURCE_ZSTD_COMPRESSION_LEVEL", "SPATIAL", - "SPECIFIC", - "SQL", - "SQLEXCEPTION", "SQLSTATE", - "SQLWARNING", "SQL_AFTER_GTIDS", "SQL_AFTER_MTS_GAPS", "SQL_BEFORE_GTIDS", "SQL_BIG_RESULT", "SQL_BUFFER_RESULT", - "SQL_CACHE", "SQL_CALC_FOUND_ROWS", + "SQL_LOG_BIN", "SQL_NO_CACHE", "SQL_SMALL_RESULT", "SQL_THREAD", - "SQL_TSI_DAY", - "SQL_TSI_HOUR", - "SQL_TSI_MINUTE", - "SQL_TSI_MONTH", - "SQL_TSI_QUARTER", - "SQL_TSI_SECOND", - "SQL_TSI_WEEK", - "SQL_TSI_YEAR", - "SRID", "SSL", - "STACKED", "START", "STARTING", "STARTS", @@ -642,58 +429,37 @@ var mysql8Keyword = []string{ "STORAGE", "STORED", "STRAIGHT_JOIN", - "STREAM", "STRING", "SUBCLASS_ORIGIN", "SUBJECT", - "SUBPARTITION", - "SUBPARTITIONS", "SUPER", - "SUSPEND", - "SWAPS", - "SWITCHES", "SYSTEM", "TABLE", "TABLES", "TABLESPACE", - "TABLE_CHECKSUM", "TABLE_NAME", "TEMPORARY", - "TEMPTABLE", "TERMINATED", - "TEXT", - "THAN", "THEN", "THREAD_PRIORITY", - "TIES", "TIME", "TIMESTAMP", - "TIMESTAMPADD", - "TIMESTAMPDIFF", - "TINYBLOB", - "TINYINT", - "TINYTEXT", "TLS", "TO", - "TRAILING", + "TRADITIONAL", "TRANSACTION", + "TREE", "TRIGGER", "TRIGGERS", "TRUE", "TRUNCATE", "TYPE", - "TYPES", "UNBOUNDED", "UNCOMMITTED", - "UNDEFINED", "UNDO", - "UNDOFILE", - "UNDO_BUFFER_SIZE", - "UNICODE", "UNINSTALL", "UNION", "UNIQUE", - "UNKNOWN", "UNLOCK", "UNSIGNED", "UNTIL", @@ -705,15 +471,10 @@ var mysql8Keyword = []string{ "USER_RESOURCES", "USE_FRM", "USING", - "UTC_DATE", - "UTC_TIME", - "UTC_TIMESTAMP", - "VALIDATION", "VALUE", "VALUES", - "VARBINARY", - "VARCHAR", "VARCHARACTER", + "VARIABLE", "VARIABLES", "VARYING", "VCPU", @@ -722,631 +483,1131 @@ var mysql8Keyword = []string{ "VISIBLE", "WAIT", "WARNINGS", - "WEEK", - "WEIGHT_STRING", "WHEN", "WHERE", "WHILE", - "WINDOW", "WITH", - "WITHOUT", "WORK", "WRAPPER", "WRITE", "X509", "XA", - "XID", - "XML", - "XOR", - "YEAR", - "YEAR_MONTH", "ZEROFILL", - "ZONE", } -var mysql57Keyword = []string{ - "ACCOUNT", - "ACTION", - "ADD", - "AFTER", - "AGGREGATE", - "ALGORITHM", - "ALL", - "ALTER", - "ANALYSE", - "ANALYZE", - "ARCHIVE", - "AS", +var mysql8Function = []string{ + "%", + "&", + "(JSON", + "*", + "+", + "-", + "->", + "->>", + "/", + ":=", + "<", + "<<", + "<=", + "<=>", + "<>", + "=", + ">", + ">=", + ">>", + "ABS", + "ACOS", + "ADDDATE", + "ADDTIME", + "AES_DECRYPT", + "AES_ENCRYPT", + "AGAINST", + "AND", + "ANY_VALUE", + "ARRAY", "ASC", - "AT", - "AUTOCOMMIT", - "AUTOEXTEND_SIZE", - "AUTO_INCREMENT", - "AVG_ROW_LENGTH", - "BEFORE", - "BEGIN", + "ASCII", + "ASIN", + "ASYMMETRIC_DECRYPT", + "ASYMMETRIC_DERIVE", + "ASYMMETRIC_ENCRYPT", + "ASYMMETRIC_SIGN", + "ASYMMETRIC_VERIFY", + "ATAN", + "ATAN2", + "AVG", + "BENCHMARK", + "BETWEEN", + "BIN", "BINARY", - "BINLOG", - "BOOL", + "BIN_TO_UUID", + "BIT_AND", + "BIT_COUNT", + "BIT_LENGTH", + "BIT_OR", + "BIT_XOR", "BOOLEAN", - "BTREE", + "BOTH", "BY", - "BYTE", - "CACHE", - "CALL", - "CASCADE", + "CAN_ACCESS_COLUMN", + "CAN_ACCESS_DATABASE", + "CAN_ACCESS_TABLE", + "CAN_ACCESS_USER", + "CAN_ACCESS_VIEW", "CASE", - "CATALOG_NAME", - "CHAIN", - "CHANGE", - "CHANNEL", + "CAST", + "CEIL", + "CEILING", "CHAR", - "CHARACTER", + "CHARACTER_LENGTH", "CHARSET", - "CHECK", - "CHECKSUM", - "CIPHER", - "CLASS_ORIGIN", - "CLIENT", - "CLOSE", + "CHAR_LENGTH", "COALESCE", - "CODE", - "COLLATE", + "COERCIBILITY", "COLLATION", - "COLUMN", - "COLUMNS", - "COLUMN_NAME", - "COMMENT", - "COMMIT", - "COMMITTED", - "COMPACT", - "COMPLETION", - "COMPRESSED", - "COMPRESSION", - "CONCURRENT", - "CONDITION", - "CONNECTION", - "CONSISTENT", - "CONSTRAINT", - "CONSTRAINT_CATALOG", - "CONSTRAINT_NAME", - "CONSTRAINT_SCHEMA", - "CONTINUE", + "COMPRESS", + "CONCAT", + "CONCAT_WS", + "CONNECTION_ID", + "CONV", + "CONVERT", + "CONVERT_TZ", + "COS", + "COT", "COUNT", - "CREATE", - "CROSS", - "CSV", + "CRC32", + "CREATE_ASYMMETRIC_PRIV_KEY", + "CREATE_ASYMMETRIC_PUB_KEY", + "CREATE_DH_PARAMETERS", + "CREATE_DIGEST", + "CUME_DIST", + "CURDATE", + "CURRENT_DATE", + "CURRENT_ROLE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", "CURRENT_USER", - "CURSOR", - "CURSOR_NAME", - "DATA", + "CURTIME", "DATABASE", - "DATABASES", - "DATAFILE", "DATE", - "DEALLOCATE", - "DEC", + "DATEDIFF", + "DATETIME", + "DATE_ADD", + "DATE_FORMAT", + "DATE_SUB", + "DAY", + "DAYNAME", + "DAYOFMONTH", + "DAYOFWEEK", + "DAYOFYEAR", + "DAY_HOUR", + "DAY_MINUTE", + "DAY_SECOND", "DECIMAL", - "DECLARE", "DEFAULT", - "DEFAULT_AUTH", - "DEFINER", - "DELAYED", - "DELAY_KEY_WRITE", - "DELETE", + "DEGREES", + "DENSE_RANK", "DESC", - "DESCRIBE", - "DES_KEY_FILE", - "DIAGNOSTICS", - "DIRECTORY", - "DISABLE", - "DISCARD", "DISTINCT", - "DISTINCTROW", - "DO", - "DROP", - "DUAL", - "DUMPFILE", - "DUPLICATE", - "DYNAMIC", + "DIV", "ELSE", - "ELSEIF", - "ENABLE", - "ENCLOSED", - "ENCRYPTION", + "ELT", "END", - "ENDS", - "ENGINE", - "ENGINES", - "ERROR", - "ERRORS", - "ESCAPED", - "EVENT", - "EVENTS", - "EVERY", - "EXCHANGE", - "EXECUTE", - "EXISTS", - "EXIT", - "EXPIRE", - "EXPLAIN", - "EXPORT", - "EXTENDED", - "EXTENT_SIZE", - "FALSE", - "FAST", - "FEDERATED", - "FETCH", - "FIELDS", - "FILE", - "FILE_BLOCK_SIZE", - "FILTER", - "FIRST", - "FIXED", - "FLOAT4", - "FLOAT8", - "FLUSH", - "FOR", - "FORCE", - "FOREIGN", + "ESCAPE", + "EXP", + "EXPANSION", + "EXPORT_SET", + "EXTRACT", + "EXTRACTION)", + "EXTRACTVALUE", + "FIELD", + "FIND_IN_SET", + "FIRST_VALUE", + "FLOOR", "FORMAT", + "FORMAT_BYTES", + "FORMAT_PICO_TIME", + "FOUND_ROWS", "FROM", - "FULL", - "FULLTEXT", + "FROM_BASE64", + "FROM_DAYS", + "FROM_UNIXTIME", "FUNCTION", - "GENERAL", - "GET", - "GLOBAL", - "GRANT", - "GRANTS", - "GROUP", - "HANDLER", - "HAVING", - "HEAP", - "HELP", - "HELP_DATE", - "HELP_VERSION", - "HIGH_PRIORITY", - "HOST", - "HOSTS", - "IDENTIFIED", + "GEOMCOLLECTION", + "GEOMETRYCOLLECTION", + "GET_DD_COLUMN_PRIVILEGES", + "GET_DD_CREATE_OPTIONS", + "GET_DD_INDEX_SUB_PART_LENGTH", + "GET_FORMAT", + "GET_LOCK", + "GREATEST", + "GROUPING", + "GROUP_CONCAT", + "GTID_SUBSET", + "GTID_SUBTRACT", + "HEX", + "HOUR", + "HOUR_MINUTE", + "HOUR_SECOND", + "ICU_VERSION", "IF", - "IGNORE", - "IGNORE_SERVER_IDS", - "IMPORT", + "IFNULL", "IN", - "INDEX", - "INDEXES", - "INFILE", - "INITIAL_SIZE", - "INNER", - "INNODB", + "INET6_ATON", + "INET6_NTOA", + "INET_ATON", + "INET_NTOA", + "INLINE", "INSERT", - "INSERT_METHOD", - "INSTALL", - "INSTANCE", - "INT1", - "INT2", - "INT3", - "INT4", - "INT8", + "INSTR", "INTEGER", + "INTERNAL_AUTO_INCREMENT", + "INTERNAL_AVG_ROW_LENGTH", + "INTERNAL_CHECKSUM", + "INTERNAL_CHECK_TIME", + "INTERNAL_DATA_FREE", + "INTERNAL_DATA_LENGTH", + "INTERNAL_DD_CHAR_LENGTH", + "INTERNAL_GET_COMMENT_OR_ERROR", + "INTERNAL_GET_ENABLED_ROLE_JSON", + "INTERNAL_GET_HOSTNAME", + "INTERNAL_GET_USERNAME", + "INTERNAL_GET_VIEW_WARNING_OR_ERROR", + "INTERNAL_INDEX_COLUMN_CARDINALITY", + "INTERNAL_INDEX_LENGTH", + "INTERNAL_IS_ENABLED_ROLE", + "INTERNAL_IS_MANDATORY_ROLE", + "INTERNAL_KEYS_DISABLED", + "INTERNAL_MAX_DATA_LENGTH", + "INTERNAL_TABLE_ROWS", + "INTERNAL_UPDATE_TIME", "INTERVAL", - "INTO", - "IO_THREAD", - "ISOLATION", - "ISSUER", - "ITERATE", - "JOIN", + "IS", + "ISNULL", + "IS_FREE_LOCK", + "IS_IPV4", + "IS_IPV4_COMPAT", + "IS_IPV4_MAPPED", + "IS_IPV6", + "IS_USED_LOCK", + "IS_UUID", + "IS_VISIBLE_DD_OBJECT", "JSON", - "KEY", - "KEYS", - "KEY_BLOCK_SIZE", - "KILL", - "LAST", - "LEAVE", - "LEAVES", + "JSON_ARRAY", + "JSON_ARRAYAGG", + "JSON_ARRAY_APPEND", + "JSON_ARRAY_INSERT", + "JSON_CONTAINS", + "JSON_CONTAINS_PATH", + "JSON_DEPTH", + "JSON_EXTRACT", + "JSON_INSERT", + "JSON_KEYS", + "JSON_LENGTH", + "JSON_MERGE", + "JSON_MERGE_PATCH", + "JSON_MERGE_PRESERVE", + "JSON_OBJECT", + "JSON_OBJECTAGG", + "JSON_OVERLAPS", + "JSON_PRETTY", + "JSON_QUOTE", + "JSON_REMOVE", + "JSON_REPLACE", + "JSON_SCHEMA_VALID", + "JSON_SCHEMA_VALIDATION_REPORT", + "JSON_SEARCH", + "JSON_SET", + "JSON_STORAGE_FREE", + "JSON_STORAGE_SIZE", + "JSON_TABLE", + "JSON_TYPE", + "JSON_UNQUOTE", + "JSON_VALID", + "JSON_VALUE", + "LAG", + "LAST_DAY", + "LAST_INSERT_ID", + "LAST_VALUE", + "LCASE", + "LEAD", + "LEADING", + "LEAST", "LEFT", - "LEVEL", + "LENGTH", "LIKE", - "LIMIT", - "LINES", - "LOAD", - "LOCAL", - "LOCK", - "LOGFILE", - "LOGS", - "LONG", - "LONGBINARY", - "LOOP", - "LOW_PRIORITY", - "MASTER", - "MASTER_AUTO_POSITION", - "MASTER_BIND", - "MASTER_CONNECT_RETRY", - "MASTER_HEARTBEAT_PERIOD", - "MASTER_HOST", - "MASTER_LOG_FILE", - "MASTER_LOG_POS", - "MASTER_PASSWORD", - "MASTER_PORT", - "MASTER_RETRY_COUNT", - "MASTER_SSL", - "MASTER_SSL_CA", - "MASTER_SSL_CERT", - "MASTER_SSL_CIPHER", - "MASTER_SSL_CRL", - "MASTER_SSL_CRLPATH", - "MASTER_SSL_KEY", - "MASTER_SSL_VERIFY_SERVER_CERT", - "MASTER_TLS_VERSION", - "MASTER_USER", - "MAX_CONNECTIONS_PER_HOUR", - "MAX_QUERIES_PER_HOUR", - "MAX_ROWS", - "MAX_SIZE", - "MAX_UPDATES_PER_HOUR", - "MAX_USER_CONNECTIONS", - "MEDIUM", - "MEMORY", - "MERGE", - "MESSAGE_TEXT", - "MIDDLEINT", - "MIN_ROWS", + "LINESTRING", + "LN", + "LOAD_FILE", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCATE", + "LOG", + "LOG10", + "LOG2", + "LOWER", + "LPAD", + "LTRIM", + "MAKEDATE", + "MAKETIME", + "MAKE_SET", + "MASTER_POS_WAIT", + "MATCH", + "MAX", + "MBRCONTAINS", + "MBRCOVEREDBY", + "MBRCOVERS", + "MBRDISJOINT", + "MBREQUALS", + "MBRINTERSECTS", + "MBROVERLAPS", + "MBRTOUCHES", + "MBRWITHIN", + "MD5", + "MEMBER", + "MICROSECOND", + "MID", + "MIN", + "MINUTE", + "MINUTE_SECOND", + "MOD", "MODE", - "MODIFY", - "MRG_MYISAM", - "MUTEX", - "MYISAM", - "MYSQL_ERRNO", - "NAME", - "NAMES", - "NATIONAL", - "NATURAL", - "NCHAR", - "NDB", - "NDBCLUSTER", - "NEVER", - "NEXT", - "NO", - "NODEGROUP", - "NONE", + "MONTH", + "MONTHNAME", + "MULTILINESTRING", + "MULTIPOINT", + "MULTIPOLYGON", + "NAME_CONST", "NOT", - "NO_WRITE_TO_BINLOG", + "NOW", + "NTH_VALUE", + "NTILE", "NULL", - "NUMBER", - "NUMERIC", - "NVARCHAR", - "OFFSET", - "ON", - "ONLY", - "OPEN", - "OPTIMIZE", - "OPTIMIZER_COSTS", - "OPTION", - "OPTIONALLY", - "OPTIONS", + "NULLIF", + "OCT", + "OCTET_LENGTH", + "OF", + "OR", + "ORD", "ORDER", - "OUTER", - "OUTFILE", - "OWNER", - "PACK_KEYS", - "PARSER", - "PARTIAL", - "PARTITION", - "PARTITIONING", - "PARTITIONS", - "PASSWORD", - "PLUGIN", - "PLUGINS", - "PLUGIN_DIR", - "PORT", - "PRECISION", - "PREPARE", - "PRESERVE", - "PREV", - "PRIMARY", - "PRIVILEGES", - "PROCEDURE", - "PROCESS", - "PROCESSLIST", - "PROFILE", - "PROFILES", - "PROXY", - "PURGE", + "PATH)", + "PERCENT_RANK", + "PERIOD_ADD", + "PERIOD_DIFF", + "PI", + "POINT", + "POLYGON", + "POSITION", + "POW", + "POWER", + "PS_CURRENT_THREAD_ID", + "PS_THREAD_ID", + "QUARTER", "QUERY", - "QUICK", - "READ", - "REAL", - "REBUILD", - "RECOVER", - "REDUNDANT", - "REFERENCES", - "RELAY", - "RELAYLOG", - "RELAY_LOG_FILE", - "RELAY_LOG_POS", - "RELEASE", - "RELOAD", - "REMOVE", - "RENAME", - "REORGANIZE", - "REPAIR", + "QUOTE", + "RADIANS", + "RAND", + "RANDOM_BYTES", + "RANK", + "REGEXP", + "REGEXP_INSTR", + "REGEXP_LIKE", + "REGEXP_REPLACE", + "REGEXP_SUBSTR", + "RELEASE_ALL_LOCKS", + "RELEASE_LOCK", "REPEAT", - "REPEATABLE", "REPLACE", - "REPLICATE_DO_DB", - "REPLICATE_DO_TABLE", - "REPLICATE_IGNORE_DB", - "REPLICATE_IGNORE_TABLE", - "REPLICATE_REWRITE_DB", - "REPLICATE_WILD_DO_TABLE", - "REPLICATE_WILD_IGNORE_TABLE", - "REPLICATION", - "REQUIRE", - "RESET", - "RESIGNAL", - "RESTRICT", - "RETURN", - "RETURNED_SQLSTATE", - "RETURNS", - "REVOKE", + "REVERSE", "RIGHT", - "ROLLBACK", - "ROWS", + "RLIKE", + "ROLES_GRAPHML", + "ROUND", "ROW_COUNT", - "ROW_FORMAT", - "SAVEPOINT", - "SCHEDULE", + "ROW_NUMBER", + "RPAD", + "RTRIM", "SCHEMA", - "SCHEMAS", - "SCHEMA_NAME", - "SECURITY", - "SELECT", - "SERIAL", - "SERIALIZABLE", - "SERVER", - "SESSION", - "SET", - "SHARE", - "SHOW", - "SHUTDOWN", - "SIGNAL", - "SLAVE", - "SLOW", - "SNAPSHOT", - "SOCKET", - "SONAME", - "SPATIAL", - "SQLSTATE", - "SQL_AFTER_GTIDS", - "SQL_AFTER_MTS_GAPS", - "SQL_BEFORE_GTIDS", - "SQL_BIG_RESULT", - "SQL_BUFFER_RESULT", - "SQL_CACHE", - "SQL_CALC_FOUND_ROWS", - "SQL_LOG_BIN", - "SQL_NO_CACHE", - "SQL_SLAVE_SKIP_COUNTER", - "SQL_SMALL_RESULT", - "SQL_THREAD", - "SSL", - "START", - "STARTING", - "STARTS", - "STATS_AUTO_RECALC", - "STATS_PERSISTENT", - "STATS_SAMPLE_PAGES", - "STATUS", - "STOP", - "STORAGE", - "STORED", - "STRAIGHT_JOIN", - "STRING", - "SUBCLASS_ORIGIN", - "SUBJECT", - "SUPER", - "TABLE", - "TABLES", - "TABLESPACE", - "TABLE_NAME", - "TEMPORARY", - "TERMINATED", + "SECOND", + "SEC_TO_TIME", + "SEPARATOR", + "SESSION_USER", + "SHA", + "SHA1", + "SHA2", + "SIGN", + "SIGNED", + "SIN", + "SLEEP", + "SOUNDEX", + "SOUNDS", + "SPACE", + "SQRT", + "STATEMENT_DIGEST", + "STATEMENT_DIGEST_TEXT", + "STD", + "STDDEV", + "STDDEV_POP", + "STDDEV_SAMP", + "STRCMP", + "STR_TO_DATE", + "ST_AREA", + "ST_ASBINARY", + "ST_ASGEOJSON", + "ST_ASTEXT", + "ST_ASWKB", + "ST_ASWKT", + "ST_BUFFER", + "ST_BUFFER_STRATEGY", + "ST_CENTROID", + "ST_CONTAINS", + "ST_CONVEXHULL", + "ST_CROSSES", + "ST_DIFFERENCE", + "ST_DIMENSION", + "ST_DISJOINT", + "ST_DISTANCE", + "ST_DISTANCE_SPHERE", + "ST_ENDPOINT", + "ST_ENVELOPE", + "ST_EQUALS", + "ST_EXTERIORRING", + "ST_FRECHETDISTANCE", + "ST_GEOHASH", + "ST_GEOMCOLLFROMTEXT", + "ST_GEOMCOLLFROMWKB", + "ST_GEOMETRYCOLLECTIONFROMTEXT", + "ST_GEOMETRYCOLLECTIONFROMWKB", + "ST_GEOMETRYFROMTEXT", + "ST_GEOMETRYFROMWKB", + "ST_GEOMETRYN", + "ST_GEOMETRYTYPE", + "ST_GEOMFROMGEOJSON", + "ST_GEOMFROMTEXT", + "ST_GEOMFROMWKB", + "ST_HAUSDORFFDISTANCE", + "ST_INTERIORRINGN", + "ST_INTERSECTION", + "ST_INTERSECTS", + "ST_ISCLOSED", + "ST_ISEMPTY", + "ST_ISSIMPLE", + "ST_ISVALID", + "ST_LATFROMGEOHASH", + "ST_LATITUDE", + "ST_LENGTH", + "ST_LINEFROMTEXT", + "ST_LINEFROMWKB", + "ST_LINEINTERPOLATEPOINT", + "ST_LINEINTERPOLATEPOINTS", + "ST_LINESTRINGFROMTEXT", + "ST_LINESTRINGFROMWKB", + "ST_LONGFROMGEOHASH", + "ST_LONGITUDE", + "ST_MAKEENVELOPE", + "ST_MLINEFROMTEXT", + "ST_MLINEFROMWKB", + "ST_MPOINTFROMTEXT", + "ST_MPOINTFROMWKB", + "ST_MPOLYFROMTEXT", + "ST_MPOLYFROMWKB", + "ST_MULTILINESTRINGFROMTEXT", + "ST_MULTILINESTRINGFROMWKB", + "ST_MULTIPOINTFROMTEXT", + "ST_MULTIPOINTFROMWKB", + "ST_MULTIPOLYGONFROMTEXT", + "ST_MULTIPOLYGONFROMWKB", + "ST_NUMGEOMETRIES", + "ST_NUMINTERIORRING", + "ST_NUMINTERIORRINGS", + "ST_NUMPOINTS", + "ST_OVERLAPS", + "ST_POINTATDISTANCE", + "ST_POINTFROMGEOHASH", + "ST_POINTFROMTEXT", + "ST_POINTFROMWKB", + "ST_POINTN", + "ST_POLYFROMTEXT", + "ST_POLYFROMWKB", + "ST_POLYGONFROMTEXT", + "ST_POLYGONFROMWKB", + "ST_SIMPLIFY", + "ST_SRID", + "ST_STARTPOINT", + "ST_SWAPXY", + "ST_SYMDIFFERENCE", + "ST_TOUCHES", + "ST_TRANSFORM", + "ST_UNION", + "ST_VALIDATE", + "ST_WITHIN", + "ST_X", + "ST_Y", + "SUBDATE", + "SUBSTR", + "SUBSTRING", + "SUBSTRING_INDEX", + "SUBTIME", + "SUM", + "SYSDATE", + "SYSTEM_USER", + "TAN", "THEN", "TIME", + "TIMEDIFF", "TIMESTAMP", - "TO", - "TRADITIONAL", - "TRANSACTION", - "TRIGGER", - "TRIGGERS", - "TRUE", + "TIMESTAMPADD", + "TIMESTAMPDIFF", + "TIMEZONE", + "TIME_FORMAT", + "TIME_TO_SEC", + "TO_BASE64", + "TO_DAYS", + "TO_SECONDS", + "TRAILING", + "TRIM", "TRUNCATE", - "TYPE", - "UNCOMMITTED", - "UNDO", - "UNINSTALL", - "UNION", - "UNIQUE", - "UNLOCK", + "UCASE", + "UNCOMPRESS", + "UNCOMPRESSED_LENGTH", + "UNHEX", + "UNIX_TIMESTAMP", "UNSIGNED", - "UNTIL", - "UPDATE", - "UPGRADE", - "USAGE", - "USE", + "UPDATEXML", + "UPPER", "USER", - "USER_RESOURCES", - "USE_FRM", - "USING", - "VALUE", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "UUID", + "UUID_SHORT", + "UUID_TO_BIN", + "VALIDATE_PASSWORD_STRENGTH", "VALUES", - "VARCHARACTER", - "VARIABLE", - "VARIABLES", - "VARYING", - "VIEW", - "VIRTUAL", - "WAIT", - "WARNINGS", + "VARIANCE", + "VAR_POP", + "VAR_SAMP", + "VERSION", + "WAIT_FOR_EXECUTED_GTID_SET", + "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", + "WEEK", + "WEEKDAY", + "WEEKOFYEAR", + "WEIGHT_STRING", "WHEN", - "WHERE", - "WHILE", "WITH", - "WORK", - "WRAPPER", - "WRITE", - "X509", - "XA", - "ZEROFILL", + "XOR", + "YEAR", + "YEARWEEK", + "YEAR_MONTH", + "^", + "|", + "~", } -var mysql57function = []string{ - "AES_DECRYPT", - "AES_ENCRYPT", - "AGAINST", - "AND", - "ANY_VALUE", - "AREA", - "ASBINARY", +var mysql57Keyword = []string{ + "ACCOUNT", + "ACTION", + "ADD", + "AFTER", + "AGGREGATE", + "ALGORITHM", + "ALL", + "ALTER", + "ANALYSE", + "ANALYZE", + "ARCHIVE", + "AS", "ASC", - "ASTEXT", - "ASWKB", - "ASWKT", - "BETWEEN", - "BIGINT", + "AT", + "AUTOCOMMIT", + "AUTOEXTEND_SIZE", + "AUTO_INCREMENT", + "AVG_ROW_LENGTH", + "BEFORE", + "BEGIN", "BINARY", + "BINLOG", + "BOOL", "BOOLEAN", - "BOTH", - "BUFFER", + "BTREE", "BY", + "BYTE", + "CACHE", + "CALL", + "CASCADE", "CASE", - "CEIL", - "CEILING", - "CENTROID", + "CATALOG_NAME", + "CHAIN", + "CHANGE", + "CHANNEL", "CHAR", - "CONTAINS", - "CONVERT", - "CONVEXHULL", + "CHARACTER", + "CHARSET", + "CHECK", + "CHECKSUM", + "CIPHER", + "CLASS_ORIGIN", + "CLIENT", + "CLOSE", + "COALESCE", + "CODE", + "COLLATE", + "COLLATION", + "COLUMN", + "COLUMNS", + "COLUMN_NAME", + "COMMENT", + "COMMIT", + "COMMITTED", + "COMPACT", + "COMPLETION", + "COMPRESSED", + "COMPRESSION", + "CONCURRENT", + "CONDITION", + "CONNECTION", + "CONSISTENT", + "CONSTRAINT", + "CONSTRAINT_CATALOG", + "CONSTRAINT_NAME", + "CONSTRAINT_SCHEMA", + "CONTINUE", "COUNT", - "CREATE_DH_PARAMETERS", - "CROSSES", + "CREATE", + "CROSS", + "CSV", + "CURRENT_USER", + "CURSOR", + "CURSOR_NAME", + "DATA", + "DATABASE", + "DATABASES", + "DATAFILE", "DATE", - "DATETIME", - "DATE_ADD", - "DATE_SUB", - "DAY", - "DAY_HOUR", - "DAY_MINUTE", - "DAY_SECOND", + "DEALLOCATE", + "DEC", "DECIMAL", + "DECLARE", + "DEFAULT", + "DEFAULT_AUTH", + "DEFINER", + "DELAYED", + "DELAY_KEY_WRITE", + "DELETE", "DESC", - "DIMENSION", - "DISJOINT", - "DISTANCE", + "DESCRIBE", + "DES_KEY_FILE", + "DIAGNOSTICS", + "DIRECTORY", + "DISABLE", + "DISCARD", "DISTINCT", + "DISTINCTROW", + "DO", + "DROP", + "DUAL", + "DUMPFILE", + "DUPLICATE", + "DYNAMIC", "ELSE", + "ELSEIF", + "ENABLE", + "ENCLOSED", + "ENCRYPTION", "END", - "ENDPOINT", - "ENVELOPE", - "EQUALS", - "ESCAPE", - "EXPANSION", - "EXTERIORRING", - "EXTRACTION)", - "FLOOR", + "ENDS", + "ENGINE", + "ENGINES", + "ERROR", + "ERRORS", + "ESCAPED", + "EVENT", + "EVENTS", + "EVERY", + "EXCHANGE", + "EXECUTE", + "EXISTS", + "EXIT", + "EXPIRE", + "EXPLAIN", + "EXPORT", + "EXTENDED", + "EXTENT_SIZE", + "FALSE", + "FAST", + "FEDERATED", + "FETCH", + "FIELDS", + "FILE", + "FILE_BLOCK_SIZE", + "FILTER", + "FIRST", + "FIXED", + "FLOAT4", + "FLOAT8", + "FLUSH", + "FOR", + "FORCE", + "FOREIGN", + "FORMAT", "FROM", - "GEOMCOLLFROMTEXT", - "GEOMCOLLFROMWKB", - "GEOMETRYCOLLECTION", - "GEOMETRYCOLLECTIONFROMTEXT", - "GEOMETRYCOLLECTIONFROMWKB", - "GEOMETRYFROMTEXT", - "GEOMETRYFROMWKB", - "GEOMETRYN", - "GEOMETRYTYPE", - "GEOMFROMTEXT", - "GEOMFROMWKB", - "GLENGTH", - "HOUR", - "HOUR_MINUTE", - "HOUR_SECOND", + "FULL", + "FULLTEXT", + "FUNCTION", + "GENERAL", + "GET", + "GLOBAL", + "GRANT", + "GRANTS", + "GROUP", + "HANDLER", + "HAVING", + "HEAP", + "HELP", + "HELP_DATE", + "HELP_VERSION", + "HIGH_PRIORITY", + "HOST", + "HOSTS", + "IDENTIFIED", "IF", + "IGNORE", + "IGNORE_SERVER_IDS", + "IMPORT", "IN", - "INLINE", + "INDEX", + "INDEXES", + "INFILE", + "INITIAL_SIZE", + "INNER", + "INNODB", "INSERT", + "INSERT_METHOD", + "INSTALL", + "INSTANCE", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", "INTEGER", - "INTERIORRINGN", - "INTERSECTS", "INTERVAL", - "IS", - "ISCLOSED", - "ISEMPTY", - "ISSIMPLE", + "INTO", + "IO_THREAD", + "ISOLATION", + "ISSUER", + "ITERATE", + "JOIN", "JSON", - "JSON_APPEND", - "JSON_ARRAY", - "JSON_ARRAYAGG", - "JSON_ARRAY_APPEND", - "JSON_ARRAY_INSERT", - "JSON_CONTAINS", - "JSON_CONTAINS_PATH", - "JSON_DEPTH", - "JSON_EXTRACT", - "JSON_INSERT", - "JSON_KEYS", - "JSON_LENGTH", - "JSON_MERGE", - "JSON_MERGE_PATCH", - "JSON_MERGE_PRESERVE", - "JSON_OBJECT", - "JSON_OBJECTAGG", - "JSON_PRETTY", - "JSON_QUOTE", - "JSON_REMOVE", - "JSON_REPLACE", - "JSON_SEARCH", - "JSON_SET", - "JSON_STORAGE_SIZE", - "JSON_TYPE", - "JSON_UNQUOTE", - "JSON_VALID", - "LEADING", + "KEY", + "KEYS", + "KEY_BLOCK_SIZE", + "KILL", + "LAST", + "LEAVE", + "LEAVES", + "LEFT", + "LEVEL", "LIKE", - "LINEFROMTEXT", - "LINEFROMWKB", - "LINESTRING", - "LINESTRINGFROMTEXT", - "LINESTRINGFROMWKB", - "MATCH", - "MBRCONTAINS", - "MBRDISJOINT", - "MBREQUAL", - "MBRINTERSECTS", - "MBROVERLAPS", - "MBRTOUCHES", - "MBRWITHIN", - "MINUTE", - "MINUTE_SECOND", - "MLINEFROMTEXT", - "MLINEFROMWKB", - "MOD", - "MODE", - "MONTH", - "MPOINTFROMTEXT", - "MPOINTFROMWKB", - "MPOLYFROMTEXT", - "MPOLYFROMWKB", - "MULTILINESTRING", - "MULTILINESTRINGFROMTEXT", - "MULTILINESTRINGFROMWKB", - "MULTIPOINT", - "MULTIPOINTFROMTEXT", - "MULTIPOINTFROMWKB", - "MULTIPOLYGON", - "MULTIPOLYGONFROMTEXT", - "MULTIPOLYGONFROMWKB", + "LIMIT", + "LINES", + "LOAD", + "LOCAL", + "LOCK", + "LOGFILE", + "LOGS", + "LONG", + "LONGBINARY", + "LOOP", + "LOW_PRIORITY", + "MASTER", + "MASTER_AUTO_POSITION", + "MASTER_BIND", + "MASTER_CONNECT_RETRY", + "MASTER_HEARTBEAT_PERIOD", + "MASTER_HOST", + "MASTER_LOG_FILE", + "MASTER_LOG_POS", + "MASTER_PASSWORD", + "MASTER_PORT", + "MASTER_RETRY_COUNT", + "MASTER_SSL", + "MASTER_SSL_CA", + "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", + "MASTER_SSL_CRL", + "MASTER_SSL_CRLPATH", + "MASTER_SSL_KEY", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MASTER_TLS_VERSION", + "MASTER_USER", + "MAX_CONNECTIONS_PER_HOUR", + "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", + "MAX_SIZE", + "MAX_UPDATES_PER_HOUR", + "MAX_USER_CONNECTIONS", + "MEDIUM", + "MEMORY", + "MERGE", + "MESSAGE_TEXT", + "MIDDLEINT", + "MIN_ROWS", + "MODE", + "MODIFY", + "MRG_MYISAM", + "MUTEX", + "MYISAM", + "MYSQL_ERRNO", + "NAME", + "NAMES", + "NATIONAL", + "NATURAL", + "NCHAR", + "NDB", + "NDBCLUSTER", + "NEVER", + "NEXT", + "NO", + "NODEGROUP", + "NONE", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NUMBER", + "NUMERIC", + "NVARCHAR", + "OFFSET", + "ON", + "ONLY", + "OPEN", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OPTIONS", + "ORDER", + "OUTER", + "OUTFILE", + "OWNER", + "PACK_KEYS", + "PARSER", + "PARTIAL", + "PARTITION", + "PARTITIONING", + "PARTITIONS", + "PASSWORD", + "PLUGIN", + "PLUGINS", + "PLUGIN_DIR", + "PORT", + "PRECISION", + "PREPARE", + "PRESERVE", + "PREV", + "PRIMARY", + "PRIVILEGES", + "PROCEDURE", + "PROCESS", + "PROCESSLIST", + "PROFILE", + "PROFILES", + "PROXY", + "PURGE", + "QUERY", + "QUICK", + "READ", + "REAL", + "REBUILD", + "RECOVER", + "REDUNDANT", + "REFERENCES", + "RELAY", + "RELAYLOG", + "RELAY_LOG_FILE", + "RELAY_LOG_POS", + "RELEASE", + "RELOAD", + "REMOVE", + "RENAME", + "REORGANIZE", + "REPAIR", + "REPEAT", + "REPEATABLE", + "REPLACE", + "REPLICATE_DO_DB", + "REPLICATE_DO_TABLE", + "REPLICATE_IGNORE_DB", + "REPLICATE_IGNORE_TABLE", + "REPLICATE_REWRITE_DB", + "REPLICATE_WILD_DO_TABLE", + "REPLICATE_WILD_IGNORE_TABLE", + "REPLICATION", + "REQUIRE", + "RESET", + "RESIGNAL", + "RESTRICT", + "RETURN", + "RETURNED_SQLSTATE", + "RETURNS", + "REVOKE", + "RIGHT", + "ROLLBACK", + "ROWS", + "ROW_COUNT", + "ROW_FORMAT", + "SAVEPOINT", + "SCHEDULE", + "SCHEMA", + "SCHEMAS", + "SCHEMA_NAME", + "SECURITY", + "SELECT", + "SERIAL", + "SERIALIZABLE", + "SERVER", + "SESSION", + "SET", + "SHARE", + "SHOW", + "SHUTDOWN", + "SIGNAL", + "SLAVE", + "SLOW", + "SNAPSHOT", + "SOCKET", + "SONAME", + "SPATIAL", + "SQLSTATE", + "SQL_AFTER_GTIDS", + "SQL_AFTER_MTS_GAPS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_BUFFER_RESULT", + "SQL_CACHE", + "SQL_CALC_FOUND_ROWS", + "SQL_LOG_BIN", + "SQL_NO_CACHE", + "SQL_SLAVE_SKIP_COUNTER", + "SQL_SMALL_RESULT", + "SQL_THREAD", + "SSL", + "START", + "STARTING", + "STARTS", + "STATS_AUTO_RECALC", + "STATS_PERSISTENT", + "STATS_SAMPLE_PAGES", + "STATUS", + "STOP", + "STORAGE", + "STORED", + "STRAIGHT_JOIN", + "STRING", + "SUBCLASS_ORIGIN", + "SUBJECT", + "SUPER", + "TABLE", + "TABLES", + "TABLESPACE", + "TABLE_NAME", + "TEMPORARY", + "TERMINATED", + "THEN", + "TIME", + "TIMESTAMP", + "TO", + "TRADITIONAL", + "TRANSACTION", + "TRIGGER", + "TRIGGERS", + "TRUE", + "TRUNCATE", + "TYPE", + "UNCOMMITTED", + "UNDO", + "UNINSTALL", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UNTIL", + "UPDATE", + "UPGRADE", + "USAGE", + "USE", + "USER", + "USER_RESOURCES", + "USE_FRM", + "USING", + "VALUE", + "VALUES", + "VARCHARACTER", + "VARIABLE", + "VARIABLES", + "VARYING", + "VIEW", + "VIRTUAL", + "WAIT", + "WARNINGS", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WORK", + "WRAPPER", + "WRITE", + "X509", + "XA", + "ZEROFILL", +} + +var mysql57function = []string{ + "AES_DECRYPT", + "AES_ENCRYPT", + "AGAINST", + "AND", + "ANY_VALUE", + "AREA", + "ASBINARY", + "ASC", + "ASTEXT", + "ASWKB", + "ASWKT", + "BETWEEN", + "BIGINT", + "BINARY", + "BOOLEAN", + "BOTH", + "BUFFER", + "BY", + "CASE", + "CEIL", + "CEILING", + "CENTROID", + "CHAR", + "CONTAINS", + "CONVERT", + "CONVEXHULL", + "COUNT", + "CREATE_DH_PARAMETERS", + "CROSSES", + "DATE", + "DATETIME", + "DATE_ADD", + "DATE_SUB", + "DAY", + "DAY_HOUR", + "DAY_MINUTE", + "DAY_SECOND", + "DECIMAL", + "DESC", + "DIMENSION", + "DISJOINT", + "DISTANCE", + "DISTINCT", + "ELSE", + "END", + "ENDPOINT", + "ENVELOPE", + "EQUALS", + "ESCAPE", + "EXPANSION", + "EXTERIORRING", + "EXTRACTION)", + "FLOOR", + "FROM", + "GEOMCOLLFROMTEXT", + "GEOMCOLLFROMWKB", + "GEOMETRYCOLLECTION", + "GEOMETRYCOLLECTIONFROMTEXT", + "GEOMETRYCOLLECTIONFROMWKB", + "GEOMETRYFROMTEXT", + "GEOMETRYFROMWKB", + "GEOMETRYN", + "GEOMETRYTYPE", + "GEOMFROMTEXT", + "GEOMFROMWKB", + "GLENGTH", + "HOUR", + "HOUR_MINUTE", + "HOUR_SECOND", + "IF", + "IN", + "INLINE", + "INSERT", + "INTEGER", + "INTERIORRINGN", + "INTERSECTS", + "INTERVAL", + "IS", + "ISCLOSED", + "ISEMPTY", + "ISSIMPLE", + "JSON", + "JSON_APPEND", + "JSON_ARRAY", + "JSON_ARRAYAGG", + "JSON_ARRAY_APPEND", + "JSON_ARRAY_INSERT", + "JSON_CONTAINS", + "JSON_CONTAINS_PATH", + "JSON_DEPTH", + "JSON_EXTRACT", + "JSON_INSERT", + "JSON_KEYS", + "JSON_LENGTH", + "JSON_MERGE", + "JSON_MERGE_PATCH", + "JSON_MERGE_PRESERVE", + "JSON_OBJECT", + "JSON_OBJECTAGG", + "JSON_PRETTY", + "JSON_QUOTE", + "JSON_REMOVE", + "JSON_REPLACE", + "JSON_SEARCH", + "JSON_SET", + "JSON_STORAGE_SIZE", + "JSON_TYPE", + "JSON_UNQUOTE", + "JSON_VALID", + "LEADING", + "LIKE", + "LINEFROMTEXT", + "LINEFROMWKB", + "LINESTRING", + "LINESTRINGFROMTEXT", + "LINESTRINGFROMWKB", + "MATCH", + "MBRCONTAINS", + "MBRDISJOINT", + "MBREQUAL", + "MBRINTERSECTS", + "MBROVERLAPS", + "MBRTOUCHES", + "MBRWITHIN", + "MINUTE", + "MINUTE_SECOND", + "MLINEFROMTEXT", + "MLINEFROMWKB", + "MOD", + "MODE", + "MONTH", + "MPOINTFROMTEXT", + "MPOINTFROMWKB", + "MPOLYFROMTEXT", + "MPOLYFROMWKB", + "MULTILINESTRING", + "MULTILINESTRINGFROMTEXT", + "MULTILINESTRINGFROMWKB", + "MULTIPOINT", + "MULTIPOINTFROMTEXT", + "MULTIPOINTFROMWKB", + "MULTIPOLYGON", + "MULTIPOLYGONFROMTEXT", + "MULTIPOLYGONFROMWKB", "NOT", "NULL", "NUMGEOMETRIES", @@ -1466,609 +1727,964 @@ var mysql57function = []string{ "THEN", "TIME", "TIMESTAMP", - "TOUCHES", - "TRAILING", + "TOUCHES", + "TRAILING", + "UNSIGNED", + "WHEN", + "WITH", + "WITHIN", + "X", + "Y", + "YEAR", + "YEAR_MONTH", +} + +var mysql56Keyword = []string{ + "ACTION", + "ADD", + "AFTER", + "AGGREGATE", + "ALGORITHM", + "ALL", + "ALTER", + "ANALYSE", + "ANALYZE", + "ARCHIVE", + "AS", + "ASC", + "AT", + "AUTHORS", + "AUTOCOMMIT", + "AUTOEXTEND_SIZE", + "AUTO_INCREMENT", + "AVG_ROW_LENGTH", + "BEFORE", + "BEGIN", + "BINARY", + "BINLOG", + "BOOL", + "BOOLEAN", + "BTREE", + "BY", + "BYTE", + "CACHE", + "CALL", + "CASCADE", + "CASE", + "CATALOG_NAME", + "CHAIN", + "CHANGE", + "CHAR", + "CHARACTER", + "CHARSET", + "CHECK", + "CHECKSUM", + "CIPHER", + "CLASS_ORIGIN", + "CLIENT", + "CLOSE", + "COALESCE", + "CODE", + "COLLATE", + "COLLATION", + "COLUMN", + "COLUMNS", + "COLUMN_NAME", + "COMMENT", + "COMMIT", + "COMMITTED", + "COMPACT", + "COMPLETION", + "COMPRESSED", + "CONCURRENT", + "CONDITION", + "CONNECTION", + "CONSISTENT", + "CONSTRAINT", + "CONSTRAINT_CATALOG", + "CONSTRAINT_NAME", + "CONSTRAINT_SCHEMA", + "CONTINUE", + "CONTRIBUTORS", + "COUNT", + "CREATE", + "CROSS", + "CSV", + "CURRENT_USER", + "CURSOR", + "CURSOR_NAME", + "DATA", + "DATABASE", + "DATABASES", + "DATAFILE", + "DATE", + "DEALLOCATE", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DEFAULT_AUTH", + "DEFINER", + "DELAYED", + "DELAY_KEY_WRITE", + "DELETE", + "DESC", + "DESCRIBE", + "DES_KEY_FILE", + "DIAGNOSTICS", + "DIRECTORY", + "DISABLE", + "DISCARD", + "DISTINCT", + "DISTINCTROW", + "DO", + "DROP", + "DUAL", + "DUMPFILE", + "DUPLICATE", + "DYNAMIC", + "ELSE", + "ELSEIF", + "ENABLE", + "ENCLOSED", + "END", + "ENDS", + "ENGINE", + "ENGINES", + "ERROR", + "ERRORS", + "ESCAPED", + "EVENT", + "EVENTS", + "EVERY", + "EXCHANGE", + "EXECUTE", + "EXISTS", + "EXIT", + "EXPIRE", + "EXPLAIN", + "EXPORT", + "EXTENDED", + "EXTENT_SIZE", + "FALSE", + "FAST", + "FEDERATED", + "FETCH", + "FIELDS", + "FILE", + "FIRST", + "FIXED", + "FLOAT4", + "FLOAT8", + "FLUSH", + "FOR", + "FORCE", + "FOREIGN", + "FORMAT", + "FROM", + "FULL", + "FULLTEXT", + "FUNCTION", + "GENERAL", + "GET", + "GLOBAL", + "GRANT", + "GRANTS", + "GROUP", + "HANDLER", + "HAVING", + "HEAP", + "HELP", + "HELP_DATE", + "HELP_VERSION", + "HIGH_PRIORITY", + "HOST", + "HOSTS", + "IDENTIFIED", + "IF", + "IGNORE", + "IGNORE_SERVER_IDS", + "IMPORT", + "IN", + "INDEX", + "INDEXES", + "INFILE", + "INITIAL_SIZE", + "INNER", + "INNODB", + "INSERT", + "INSERT_METHOD", + "INSTALL", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERVAL", + "INTO", + "IO_THREAD", + "ISOLATION", + "ISSUER", + "ITERATE", + "JOIN", + "JSON", + "KEY", + "KEYS", + "KEY_BLOCK_SIZE", + "KILL", + "LAST", + "LEAVE", + "LEAVES", + "LEFT", + "LEVEL", + "LIKE", + "LIMIT", + "LINES", + "LOAD", + "LOCAL", + "LOCK", + "LOGFILE", + "LOGS", + "LONG", + "LONGBINARY", + "LOOP", + "LOW_PRIORITY", + "MASTER", + "MASTER_AUTO_POSITION", + "MASTER_BIND", + "MASTER_CONNECT_RETRY", + "MASTER_HEARTBEAT_PERIOD", + "MASTER_HOST", + "MASTER_LOG_FILE", + "MASTER_LOG_POS", + "MASTER_PASSWORD", + "MASTER_PORT", + "MASTER_RETRY_COUNT", + "MASTER_SSL", + "MASTER_SSL_CA", + "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", + "MASTER_SSL_CRL", + "MASTER_SSL_CRLPATH", + "MASTER_SSL_KEY", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MASTER_USER", + "MAX_CONNECTIONS_PER_HOUR", + "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", + "MAX_SIZE", + "MAX_UPDATES_PER_HOUR", + "MAX_USER_CONNECTIONS", + "MEDIUM", + "MEMORY", + "MERGE", + "MESSAGE_TEXT", + "MIDDLEINT", + "MIN_ROWS", + "MODE", + "MODIFY", + "MRG_MYISAM", + "MUTEX", + "MYISAM", + "MYSQL_ERRNO", + "NAME", + "NAMES", + "NATIONAL", + "NATURAL", + "NCHAR", + "NDB", + "NDBCLUSTER", + "NEXT", + "NO", + "NODEGROUP", + "NONE", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NUMBER", + "NUMERIC", + "NVARCHAR", + "OFFSET", + "ON", + "ONLY", + "OPEN", + "OPTIMIZE", + "OPTION", + "OPTIONALLY", + "OPTIONS", + "ORDER", + "OUTER", + "OUTFILE", + "OWNER", + "PACK_KEYS", + "PARSER", + "PARTIAL", + "PARTITION", + "PARTITIONS", + "PASSWORD", + "PLUGIN", + "PLUGINS", + "PLUGIN_DIR", + "PORT", + "PRECISION", + "PREPARE", + "PRESERVE", + "PREV", + "PRIMARY", + "PRIVILEGES", + "PROCEDURE", + "PROCESS", + "PROCESSLIST", + "PROFILE", + "PROFILES", + "PROXY", + "PURGE", + "QUERY", + "QUICK", + "READ", + "REAL", + "REBUILD", + "RECOVER", + "REDUNDANT", + "REFERENCES", + "RELAY", + "RELAYLOG", + "RELAY_LOG_FILE", + "RELAY_LOG_POS", + "RELEASE", + "RELOAD", + "REMOVE", + "RENAME", + "REORGANIZE", + "REPAIR", + "REPEAT", + "REPEATABLE", + "REPLACE", + "REPLICATION", + "REQUIRE", + "RESET", + "RESIGNAL", + "RESTRICT", + "RETURN", + "RETURNED_SQLSTATE", + "RETURNS", + "REVOKE", + "RIGHT", + "ROLLBACK", + "ROWS", + "ROW_COUNT", + "ROW_FORMAT", + "SAVEPOINT", + "SCHEDULE", + "SCHEMA", + "SCHEMAS", + "SCHEMA_NAME", + "SECURITY", + "SELECT", + "SERIAL", + "SERIALIZABLE", + "SERVER", + "SESSION", + "SET", + "SHARE", + "SHOW", + "SHUTDOWN", + "SIGNAL", + "SLAVE", + "SLOW", + "SNAPSHOT", + "SOCKET", + "SONAME", + "SPATIAL", + "SQLSTATE", + "SQL_AFTER_GTIDS", + "SQL_AFTER_MTS_GAPS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_BUFFER_RESULT", + "SQL_CACHE", + "SQL_CALC_FOUND_ROWS", + "SQL_LOG_BIN", + "SQL_NO_CACHE", + "SQL_SLAVE_SKIP_COUNTER", + "SQL_SMALL_RESULT", + "SQL_THREAD", + "SSL", + "START", + "STARTING", + "STARTS", + "STATS_AUTO_RECALC", + "STATS_PERSISTENT", + "STATS_SAMPLE_PAGES", + "STATUS", + "STOP", + "STORAGE", + "STRAIGHT_JOIN", + "STRING", + "SUBCLASS_ORIGIN", + "SUBJECT", + "SUPER", + "TABLE", + "TABLES", + "TABLESPACE", + "TABLE_NAME", + "TEMPORARY", + "TERMINATED", + "THEN", + "TIME", + "TIMESTAMP", + "TO", + "TRADITIONAL", + "TRANSACTION", + "TRIGGER", + "TRIGGERS", + "TRUE", + "TRUNCATE", + "TYPE", + "UNCOMMITTED", + "UNDO", + "UNINSTALL", + "UNION", + "UNIQUE", + "UNLOCK", "UNSIGNED", + "UNTIL", + "UPDATE", + "UPGRADE", + "USAGE", + "USE", + "USER", + "USER_RESOURCES", + "USE_FRM", + "USING", + "VALUE", + "VALUES", + "VARCHARACTER", + "VARIABLE", + "VARIABLES", + "VARYING", + "VIEW", + "WAIT", + "WARNINGS", "WHEN", + "WHERE", + "WHILE", "WITH", - "WITHIN", - "X", - "Y", - "YEAR", - "YEAR_MONTH", + "WORK", + "WRAPPER", + "WRITE", + "X509", + "XA", + "ZEROFILL", } -var mysql56Keyword = []string{ - "ACCESSIBLE", - "ACTION", - "ADD", - "AFTER", +var mysql56Function = []string{ + "%", + "&", + "(JSON", + "*", + "+", + "-", + "->", + "->>", + "/", + ":=", + "<", + "<<", + "<=", + "<=>", + "<>", + "=", + ">", + ">=", + ">>", + "ABS", + "ACOS", + "ADDDATE", + "ADDTIME", + "AES_DECRYPT", + "AES_ENCRYPT", "AGAINST", - "AGGREGATE", - "ALGORITHM", - "ALL", - "ALTER", - "ANALYSE", - "ANALYZE", "AND", - "ANY", - "AS", + "ANY_VALUE", + "ARRAY", "ASC", "ASCII", - "ASENSITIVE", - "AT", - "AUTHORS", - "AUTOEXTEND_SIZE", - "AUTO_INCREMENT", + "ASIN", + "ASYMMETRIC_DECRYPT", + "ASYMMETRIC_DERIVE", + "ASYMMETRIC_ENCRYPT", + "ASYMMETRIC_SIGN", + "ASYMMETRIC_VERIFY", + "ATAN", + "ATAN2", "AVG", - "AVG_ROW_LENGTH", - "BACKUP", - "BEFORE", - "BEGIN", + "BENCHMARK", "BETWEEN", - "BIGINT", - "BINARY", - "BINLOG", - "BIT", - "BLOB", - "BLOCK", - "BOOL", + "BIN", + "BINARY", + "BIN_TO_UUID", + "BIT_AND", + "BIT_COUNT", + "BIT_LENGTH", + "BIT_OR", + "BIT_XOR", "BOOLEAN", "BOTH", - "BTREE", "BY", - "BYTE", - "CACHE", - "CALL", - "CASCADE", - "CASCADED", + "CAN_ACCESS_COLUMN", + "CAN_ACCESS_DATABASE", + "CAN_ACCESS_TABLE", + "CAN_ACCESS_USER", + "CAN_ACCESS_VIEW", "CASE", - "CATALOG_NAME", - "CHAIN", - "CHANGE", - "CHANGED", + "CAST", + "CEIL", + "CEILING", "CHAR", - "CHARACTER", + "CHARACTER_LENGTH", "CHARSET", - "CHECK", - "CHECKSUM", - "CIPHER", - "CLASS_ORIGIN", - "CLIENT", - "CLOSE", + "CHAR_LENGTH", "COALESCE", - "CODE", - "COLLATE", + "COERCIBILITY", "COLLATION", - "COLUMN", - "COLUMNS", - "COLUMN_FORMAT", - "COLUMN_NAME", - "COMMENT", - "COMMIT", - "COMMITTED", - "COMPACT", - "COMPLETION", - "COMPRESSED", - "CONCURRENT", - "CONDITION", - "CONNECTION", - "CONSISTENT", - "CONSTRAINT", - "CONSTRAINT_CATALOG", - "CONSTRAINT_NAME", - "CONSTRAINT_SCHEMA", - "CONTAINS", - "CONTEXT", - "CONTINUE", - "CONTRIBUTORS", + "COMPRESS", + "CONCAT", + "CONCAT_WS", + "CONNECTION_ID", + "CONV", "CONVERT", - "CPU", - "CREATE", - "CROSS", - "CUBE", - "CURRENT", + "CONVERT_TZ", + "COS", + "COT", + "COUNT", + "CRC32", + "CREATE_ASYMMETRIC_PRIV_KEY", + "CREATE_ASYMMETRIC_PUB_KEY", + "CREATE_DH_PARAMETERS", + "CREATE_DIGEST", + "CUME_DIST", + "CURDATE", "CURRENT_DATE", + "CURRENT_ROLE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", - "CURSOR", - "CURSOR_NAME", - "DATA", + "CURTIME", "DATABASE", - "DATABASES", - "DATAFILE", "DATE", + "DATEDIFF", "DATETIME", + "DATE_ADD", + "DATE_FORMAT", + "DATE_SUB", "DAY", + "DAYNAME", + "DAYOFMONTH", + "DAYOFWEEK", + "DAYOFYEAR", "DAY_HOUR", - "DAY_MICROSECOND", "DAY_MINUTE", "DAY_SECOND", - "DEALLOCATE", - "DEC", "DECIMAL", - "DECLARE", "DEFAULT", - "DEFAULT_AUTH", - "DEFINER", - "DELAYED", - "DELAY_KEY_WRITE", - "DELETE", + "DEGREES", + "DENSE_RANK", "DESC", - "DESCRIBE", - "DES_KEY_FILE", - "DETERMINISTIC", - "DIAGNOSTICS", - "DIRECTORY", - "DISABLE", - "DISCARD", - "DISK", "DISTINCT", - "DISTINCTROW", "DIV", - "DO", - "DOUBLE", - "DROP", - "DUAL", - "DUMPFILE", - "DUPLICATE", - "DYNAMIC", - "EACH", "ELSE", - "ELSEIF", - "ENABLE", - "ENCLOSED", + "ELT", "END", - "ENDS", - "ENGINE", - "ENGINES", - "ENUM", - "ERROR", - "ERRORS", "ESCAPE", - "ESCAPED", - "EVENT", - "EVENTS", - "EVERY", - "EXCHANGE", - "EXECUTE", - "EXISTS", - "EXIT", + "EXP", "EXPANSION", - "EXPIRE", - "EXPLAIN", - "EXPORT", - "EXTENDED", - "EXTENT_SIZE", - "FALSE", - "FAST", - "FAULTS", - "FETCH", - "FIELDS", - "FILE", - "FIRST", - "FIXED", - "FLOAT", - "FLOAT4", - "FLOAT8", - "FLUSH", - "FOR", - "FORCE", - "FOREIGN", + "EXPORT_SET", + "EXTRACT", + "EXTRACTION)", + "EXTRACTVALUE", + "FIELD", + "FIND_IN_SET", + "FIRST_VALUE", + "FLOOR", "FORMAT", - "FOUND", + "FORMAT_BYTES", + "FORMAT_PICO_TIME", + "FOUND_ROWS", "FROM", - "FULL", - "FULLTEXT", + "FROM_BASE64", + "FROM_DAYS", + "FROM_UNIXTIME", "FUNCTION", - "GENERAL", - "GEOMETRY", + "GEOMCOLLECTION", "GEOMETRYCOLLECTION", - "GET", + "GET_DD_COLUMN_PRIVILEGES", + "GET_DD_CREATE_OPTIONS", + "GET_DD_INDEX_SUB_PART_LENGTH", "GET_FORMAT", - "GLOBAL", - "GRANT", - "GRANTS", - "GROUP", - "HANDLER", - "HASH", - "HAVING", - "HELP", - "HIGH_PRIORITY", - "HOST", - "HOSTS", + "GET_LOCK", + "GREATEST", + "GROUPING", + "GROUP_CONCAT", + "GTID_SUBSET", + "GTID_SUBTRACT", + "HEX", "HOUR", - "HOUR_MICROSECOND", "HOUR_MINUTE", "HOUR_SECOND", - "IDENTIFIED", + "ICU_VERSION", "IF", - "IGNORE", - "IGNORE_SERVER_IDS", - "IMPORT", + "IFNULL", "IN", - "INDEX", - "INDEXES", - "INFILE", - "INITIAL_SIZE", - "INNER", - "INOUT", - "INSENSITIVE", + "INET6_ATON", + "INET6_NTOA", + "INET_ATON", + "INET_NTOA", + "INLINE", "INSERT", - "INSERT_METHOD", - "INSTALL", - "INT", - "INT1", - "INT2", - "INT3", - "INT4", - "INT8", + "INSTR", "INTEGER", + "INTERNAL_AUTO_INCREMENT", + "INTERNAL_AVG_ROW_LENGTH", + "INTERNAL_CHECKSUM", + "INTERNAL_CHECK_TIME", + "INTERNAL_DATA_FREE", + "INTERNAL_DATA_LENGTH", + "INTERNAL_DD_CHAR_LENGTH", + "INTERNAL_GET_COMMENT_OR_ERROR", + "INTERNAL_GET_ENABLED_ROLE_JSON", + "INTERNAL_GET_HOSTNAME", + "INTERNAL_GET_USERNAME", + "INTERNAL_GET_VIEW_WARNING_OR_ERROR", + "INTERNAL_INDEX_COLUMN_CARDINALITY", + "INTERNAL_INDEX_LENGTH", + "INTERNAL_IS_ENABLED_ROLE", + "INTERNAL_IS_MANDATORY_ROLE", + "INTERNAL_KEYS_DISABLED", + "INTERNAL_MAX_DATA_LENGTH", + "INTERNAL_TABLE_ROWS", + "INTERNAL_UPDATE_TIME", "INTERVAL", - "INTO", - "INVOKER", - "IO", - "IO_AFTER_GTIDS", - "IO_BEFORE_GTIDS", - "IO_THREAD", - "IPC", "IS", - "ISOLATION", - "ISSUER", - "ITERATE", - "JOIN", - "KEY", - "KEYS", - "KEY_BLOCK_SIZE", - "KILL", - "LANGUAGE", - "LAST", + "ISNULL", + "IS_FREE_LOCK", + "IS_IPV4", + "IS_IPV4_COMPAT", + "IS_IPV4_MAPPED", + "IS_IPV6", + "IS_USED_LOCK", + "IS_UUID", + "IS_VISIBLE_DD_OBJECT", + "JSON", + "JSON_ARRAY", + "JSON_ARRAYAGG", + "JSON_ARRAY_APPEND", + "JSON_ARRAY_INSERT", + "JSON_CONTAINS", + "JSON_CONTAINS_PATH", + "JSON_DEPTH", + "JSON_EXTRACT", + "JSON_INSERT", + "JSON_KEYS", + "JSON_LENGTH", + "JSON_MERGE", + "JSON_MERGE_PATCH", + "JSON_MERGE_PRESERVE", + "JSON_OBJECT", + "JSON_OBJECTAGG", + "JSON_OVERLAPS", + "JSON_PRETTY", + "JSON_QUOTE", + "JSON_REMOVE", + "JSON_REPLACE", + "JSON_SCHEMA_VALID", + "JSON_SCHEMA_VALIDATION_REPORT", + "JSON_SEARCH", + "JSON_SET", + "JSON_STORAGE_FREE", + "JSON_STORAGE_SIZE", + "JSON_TABLE", + "JSON_TYPE", + "JSON_UNQUOTE", + "JSON_VALID", + "JSON_VALUE", + "LAG", + "LAST_DAY", + "LAST_INSERT_ID", + "LAST_VALUE", + "LCASE", + "LEAD", "LEADING", - "LEAVE", - "LEAVES", + "LEAST", "LEFT", - "LESS", - "LEVEL", + "LENGTH", "LIKE", - "LIMIT", - "LINEAR", - "LINES", "LINESTRING", - "LIST", - "LOAD", - "LOCAL", + "LN", + "LOAD_FILE", "LOCALTIME", "LOCALTIMESTAMP", - "LOCK", - "LOCKS", - "LOGFILE", - "LOGS", - "LONG", - "LONGBLOB", - "LONGTEXT", - "LOOP", - "LOW_PRIORITY", - "MASTER", - "MASTER_AUTO_POSITION", - "MASTER_BIND", - "MASTER_CONNECT_RETRY", - "MASTER_DELAY", - "MASTER_HEARTBEAT_PERIOD", - "MASTER_HOST", - "MASTER_LOG_FILE", - "MASTER_LOG_POS", - "MASTER_PASSWORD", - "MASTER_PORT", - "MASTER_RETRY_COUNT", - "MASTER_SERVER_ID", - "MASTER_SSL", - "MASTER_SSL_CA", - "MASTER_SSL_CAPATH", - "MASTER_SSL_CERT", - "MASTER_SSL_CIPHER", - "MASTER_SSL_CRL", - "MASTER_SSL_CRLPATH", - "MASTER_SSL_KEY", - "MASTER_SSL_VERIFY_SERVER_CERT", - "MASTER_USER", + "LOCATE", + "LOG", + "LOG10", + "LOG2", + "LOWER", + "LPAD", + "LTRIM", + "MAKEDATE", + "MAKETIME", + "MAKE_SET", + "MASTER_POS_WAIT", "MATCH", - "MAXVALUE", - "MAX_CONNECTIONS_PER_HOUR", - "MAX_QUERIES_PER_HOUR", - "MAX_ROWS", - "MAX_SIZE", - "MAX_UPDATES_PER_HOUR", - "MAX_USER_CONNECTIONS", - "MEDIUM", - "MEDIUMBLOB", - "MEDIUMINT", - "MEDIUMTEXT", - "MEMORY", - "MERGE", - "MESSAGE_TEXT", + "MAX", + "MBRCONTAINS", + "MBRCOVEREDBY", + "MBRCOVERS", + "MBRDISJOINT", + "MBREQUALS", + "MBRINTERSECTS", + "MBROVERLAPS", + "MBRTOUCHES", + "MBRWITHIN", + "MD5", + "MEMBER", "MICROSECOND", - "MIDDLEINT", - "MIGRATE", + "MID", + "MIN", "MINUTE", - "MINUTE_MICROSECOND", "MINUTE_SECOND", - "MIN_ROWS", "MOD", "MODE", - "MODIFIES", - "MODIFY", "MONTH", + "MONTHNAME", "MULTILINESTRING", - "MULTIPOINT", - "MULTIPOLYGON", - "MUTEX", - "MYSQL_ERRNO", - "NAME", - "NAMES", - "NATIONAL", - "NATURAL", - "NCHAR", - "NDB", - "NDBCLUSTER", - "NEW", - "NEXT", - "NO", - "NODEGROUP", - "NONE", + "MULTIPOINT", + "MULTIPOLYGON", + "NAME_CONST", "NOT", - "NO_WAIT", - "NO_WRITE_TO_BINLOG", + "NOW", + "NTH_VALUE", + "NTILE", "NULL", - "NUMBER", - "NUMERIC", - "NVARCHAR", - "OFFSET", - "OLD_PASSWORD", - "ON", - "ONE", - "ONE_SHOT", - "ONLY", - "OPEN", - "OPTIMIZE", - "OPTION", - "OPTIONALLY", - "OPTIONS", + "NULLIF", + "OCT", + "OCTET_LENGTH", + "OF", "OR", + "ORD", "ORDER", - "OUT", - "OUTER", - "OUTFILE", - "OWNER", - "PACK_KEYS", - "PAGE", - "PARSER", - "PARTIAL", - "PARTITION", - "PARTITIONING", - "PARTITIONS", - "PASSWORD", - "PHASE", - "PLUGIN", - "PLUGINS", - "PLUGIN_DIR", + "PATH)", + "PERCENT_RANK", + "PERIOD_ADD", + "PERIOD_DIFF", + "PI", "POINT", "POLYGON", - "PORT", - "PRECISION", - "PREPARE", - "PRESERVE", - "PREV", - "PRIMARY", - "PRIVILEGES", - "PROCEDURE", - "PROCESSLIST", - "PROFILE", - "PROFILES", - "PROXY", - "PURGE", + "POSITION", + "POW", + "POWER", + "PS_CURRENT_THREAD_ID", + "PS_THREAD_ID", "QUARTER", "QUERY", - "QUICK", - "RANGE", - "READ", - "READS", - "READ_ONLY", - "READ_WRITE", - "REAL", - "REBUILD", - "RECOVER", - "REDOFILE", - "REDO_BUFFER_SIZE", - "REDUNDANT", - "REFERENCES", + "QUOTE", + "RADIANS", + "RAND", + "RANDOM_BYTES", + "RANK", "REGEXP", - "RELAY", - "RELAYLOG", - "RELAY_LOG_FILE", - "RELAY_LOG_POS", - "RELAY_THREAD", - "RELEASE", - "RELOAD", - "REMOVE", - "RENAME", - "REORGANIZE", - "REPAIR", + "REGEXP_INSTR", + "REGEXP_LIKE", + "REGEXP_REPLACE", + "REGEXP_SUBSTR", + "RELEASE_ALL_LOCKS", + "RELEASE_LOCK", "REPEAT", - "REPEATABLE", "REPLACE", - "REPLICATION", - "REQUIRE", - "RESET", - "RESIGNAL", - "RESTORE", - "RESTRICT", - "RESUME", - "RETURN", - "RETURNED_SQLSTATE", - "RETURNS", "REVERSE", - "REVOKE", "RIGHT", "RLIKE", - "ROLLBACK", - "ROLLUP", - "ROUTINE", - "ROW", - "ROWS", + "ROLES_GRAPHML", + "ROUND", "ROW_COUNT", - "ROW_FORMAT", - "RTREE", - "SAVEPOINT", - "SCHEDULE", + "ROW_NUMBER", + "RPAD", + "RTRIM", "SCHEMA", - "SCHEMAS", - "SCHEMA_NAME", "SECOND", - "SECOND_MICROSECOND", - "SECURITY", - "SELECT", - "SENSITIVE", + "SEC_TO_TIME", "SEPARATOR", - "SERIAL", - "SERIALIZABLE", - "SERVER", - "SESSION", - "SET", - "SHARE", - "SHOW", - "SHUTDOWN", - "SIGNAL", + "SESSION_USER", + "SHA", + "SHA1", + "SHA2", + "SIGN", "SIGNED", - "SIMPLE", - "SLAVE", - "SLOW", - "SMALLINT", - "SNAPSHOT", - "SOCKET", - "SOME", - "SONAME", + "SIN", + "SLEEP", + "SOUNDEX", "SOUNDS", - "SOURCE", - "SPATIAL", - "SPECIFIC", - "SQL", - "SQLEXCEPTION", - "SQLSTATE", - "SQLWARNING", - "SQL_AFTER_GTIDS", - "SQL_AFTER_MTS_GAPS", - "SQL_BEFORE_GTIDS", - "SQL_BIG_RESULT", - "SQL_BUFFER_RESULT", - "SQL_CACHE", - "SQL_CALC_FOUND_ROWS", - "SQL_NO_CACHE", - "SQL_SMALL_RESULT", - "SQL_THREAD", - "SQL_TSI_DAY", - "SQL_TSI_HOUR", - "SQL_TSI_MINUTE", - "SQL_TSI_MONTH", - "SQL_TSI_QUARTER", - "SQL_TSI_SECOND", - "SQL_TSI_WEEK", - "SQL_TSI_YEAR", - "SSL", - "START", - "STARTING", - "STARTS", - "STATS_AUTO_RECALC", - "STATS_PERSISTENT", - "STATS_SAMPLE_PAGES", - "STATUS", - "STOP", - "STORAGE", - "STRAIGHT_JOIN", - "STRING", - "SUBCLASS_ORIGIN", - "SUBJECT", - "SUBPARTITION", - "SUBPARTITIONS", - "SUPER", - "SUSPEND", - "SWAPS", - "SWITCHES", - "TABLE", - "TABLES", - "TABLESPACE", - "TABLE_CHECKSUM", - "TABLE_NAME", - "TEMPORARY", - "TEMPTABLE", - "TERMINATED", - "TEXT", - "THAN", + "SPACE", + "SQRT", + "STATEMENT_DIGEST", + "STATEMENT_DIGEST_TEXT", + "STD", + "STDDEV", + "STDDEV_POP", + "STDDEV_SAMP", + "STRCMP", + "STR_TO_DATE", + "ST_AREA", + "ST_ASBINARY", + "ST_ASGEOJSON", + "ST_ASTEXT", + "ST_ASWKB", + "ST_ASWKT", + "ST_BUFFER", + "ST_BUFFER_STRATEGY", + "ST_CENTROID", + "ST_CONTAINS", + "ST_CONVEXHULL", + "ST_CROSSES", + "ST_DIFFERENCE", + "ST_DIMENSION", + "ST_DISJOINT", + "ST_DISTANCE", + "ST_DISTANCE_SPHERE", + "ST_ENDPOINT", + "ST_ENVELOPE", + "ST_EQUALS", + "ST_EXTERIORRING", + "ST_FRECHETDISTANCE", + "ST_GEOHASH", + "ST_GEOMCOLLFROMTEXT", + "ST_GEOMCOLLFROMWKB", + "ST_GEOMETRYCOLLECTIONFROMTEXT", + "ST_GEOMETRYCOLLECTIONFROMWKB", + "ST_GEOMETRYFROMTEXT", + "ST_GEOMETRYFROMWKB", + "ST_GEOMETRYN", + "ST_GEOMETRYTYPE", + "ST_GEOMFROMGEOJSON", + "ST_GEOMFROMTEXT", + "ST_GEOMFROMWKB", + "ST_HAUSDORFFDISTANCE", + "ST_INTERIORRINGN", + "ST_INTERSECTION", + "ST_INTERSECTS", + "ST_ISCLOSED", + "ST_ISEMPTY", + "ST_ISSIMPLE", + "ST_ISVALID", + "ST_LATFROMGEOHASH", + "ST_LATITUDE", + "ST_LENGTH", + "ST_LINEFROMTEXT", + "ST_LINEFROMWKB", + "ST_LINEINTERPOLATEPOINT", + "ST_LINEINTERPOLATEPOINTS", + "ST_LINESTRINGFROMTEXT", + "ST_LINESTRINGFROMWKB", + "ST_LONGFROMGEOHASH", + "ST_LONGITUDE", + "ST_MAKEENVELOPE", + "ST_MLINEFROMTEXT", + "ST_MLINEFROMWKB", + "ST_MPOINTFROMTEXT", + "ST_MPOINTFROMWKB", + "ST_MPOLYFROMTEXT", + "ST_MPOLYFROMWKB", + "ST_MULTILINESTRINGFROMTEXT", + "ST_MULTILINESTRINGFROMWKB", + "ST_MULTIPOINTFROMTEXT", + "ST_MULTIPOINTFROMWKB", + "ST_MULTIPOLYGONFROMTEXT", + "ST_MULTIPOLYGONFROMWKB", + "ST_NUMGEOMETRIES", + "ST_NUMINTERIORRING", + "ST_NUMINTERIORRINGS", + "ST_NUMPOINTS", + "ST_OVERLAPS", + "ST_POINTATDISTANCE", + "ST_POINTFROMGEOHASH", + "ST_POINTFROMTEXT", + "ST_POINTFROMWKB", + "ST_POINTN", + "ST_POLYFROMTEXT", + "ST_POLYFROMWKB", + "ST_POLYGONFROMTEXT", + "ST_POLYGONFROMWKB", + "ST_SIMPLIFY", + "ST_SRID", + "ST_STARTPOINT", + "ST_SWAPXY", + "ST_SYMDIFFERENCE", + "ST_TOUCHES", + "ST_TRANSFORM", + "ST_UNION", + "ST_VALIDATE", + "ST_WITHIN", + "ST_X", + "ST_Y", + "SUBDATE", + "SUBSTR", + "SUBSTRING", + "SUBSTRING_INDEX", + "SUBTIME", + "SUM", + "SYSDATE", + "SYSTEM_USER", + "TAN", "THEN", "TIME", + "TIMEDIFF", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", - "TINYBLOB", - "TINYINT", - "TINYTEXT", - "TO", + "TIMEZONE", + "TIME_FORMAT", + "TIME_TO_SEC", + "TO_BASE64", + "TO_DAYS", + "TO_SECONDS", "TRAILING", - "TRANSACTION", - "TRIGGER", - "TRIGGERS", - "TRUE", + "TRIM", "TRUNCATE", - "TYPE", - "TYPES", - "UNCOMMITTED", - "UNDEFINED", - "UNDO", - "UNDOFILE", - "UNDO_BUFFER_SIZE", - "UNICODE", - "UNINSTALL", - "UNION", - "UNIQUE", - "UNKNOWN", - "UNLOCK", + "UCASE", + "UNCOMPRESS", + "UNCOMPRESSED_LENGTH", + "UNHEX", + "UNIX_TIMESTAMP", "UNSIGNED", - "UNTIL", - "UPDATE", - "UPGRADE", - "USAGE", - "USE", + "UPDATEXML", + "UPPER", "USER", - "USER_RESOURCES", - "USE_FRM", - "USING", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", - "VALUE", + "UUID", + "UUID_SHORT", + "UUID_TO_BIN", + "VALIDATE_PASSWORD_STRENGTH", "VALUES", - "VARBINARY", - "VARCHAR", - "VARCHARACTER", - "VARIABLES", - "VARYING", - "VIEW", - "WAIT", - "WARNINGS", + "VARIANCE", + "VAR_POP", + "VAR_SAMP", + "VERSION", + "WAIT_FOR_EXECUTED_GTID_SET", + "WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS", "WEEK", + "WEEKDAY", + "WEEKOFYEAR", "WEIGHT_STRING", "WHEN", - "WHERE", - "WHILE", "WITH", - "WORK", - "WRAPPER", - "WRITE", - "X509", - "XA", - "XML", "XOR", "YEAR", + "YEARWEEK", "YEAR_MONTH", - "ZEROFILL", + "^", + "|", + "~", } diff --git a/doc/develop.md b/doc/develop.md new file mode 100644 index 00000000..7fbe8ac0 --- /dev/null +++ b/doc/develop.md @@ -0,0 +1,36 @@ +## Start test databases + +```sh +docker-compose up -d +``` + +## MySQL setup + +```sh +wget https://downloads.mysql.com/docs/world.sql.gz +gzip world.sql.gz + +# MySQL 5.6 +mysql -u root -proot -h 127.0.0.1 -P 13305 < world.sql +# MySQL 5.7 +mysql -u root -proot -h 127.0.0.1 -P 13306 < world.sql +# MySQL 8 +mysql -u root -proot -h 127.0.0.1 -P 13307 < world.sql +rm world.sql +``` + +## Export keyword & function list + +```sh +mysql -u root -proot -h 127.0.0.1 -P 13305 -D mysql < help_categories.sql > ./export/help_categories_mysql56.txt +mysql -u root -proot -h 127.0.0.1 -P 13306 -D mysql < help_categories.sql > ./export/help_categories_mysql57.txt +mysql -u root -proot -h 127.0.0.1 -P 13307 -D mysql < help_categories.sql > ./export/help_categories_mysql8.txt +# Export keyword list +mysql -u root -proot -h 127.0.0.1 -P 13305 -D mysql < help_keywords_mysql56.sql > ./export/help_keywords_mysql56.txt +mysql -u root -proot -h 127.0.0.1 -P 13306 -D mysql < help_keywords_mysql57.sql > ./export/help_keywords_mysql57.txt +mysql -u root -proot -h 127.0.0.1 -P 13307 -D mysql < help_keywords_mysql8.sql > ./export/help_keywords_mysql8.txt +# Export function list +mysql -u root -proot -h 127.0.0.1 -P 13305 -D mysql < help_functions_mysql56.sql > ./export/help_functions_mysql56.txt +mysql -u root -proot -h 127.0.0.1 -P 13306 -D mysql < help_functions_mysql57.sql > ./export/help_functions_mysql57.txt +mysql -u root -proot -h 127.0.0.1 -P 13307 -D mysql < help_functions_mysql8.sql > ./export/help_functions_mysql8.txt +``` diff --git a/docker-compose.yml b/docker-compose.yml index c3b7575a..71265adb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,22 @@ version: '3' services: - mysql: + mysql8: + image: mysql:8 + container_name: sqls_mysql8 + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: world + MYSQL_USER: docker + MYSQL_PASSWORD: docker + TZ: 'Asia/Tokyo' + command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + volumes: + - ./.docker/mysql/data:/var/lib/mysql8 + ports: + - 13307:3306 + mysql57: image: mysql:5.7 - container_name: sqls_mysql + container_name: sqls_mysql57 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: world @@ -11,13 +25,26 @@ services: TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - - ./.docker/mysql/data:/var/lib/mysql + - ./.docker/mysql/data:/var/lib/mysql57 ports: - 13306:3306 - restart: always - db: + mysql56: + image: mysql:5.6 + container_name: sqls_mysql56 + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: world + MYSQL_USER: docker + MYSQL_PASSWORD: docker + TZ: 'Asia/Tokyo' + command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + volumes: + - ./.docker/mysql/data:/var/lib/mysql56 + ports: + - 13305:3306 + postgres12: image: postgres:12-alpine - container_name: sqls_postgres + container_name: sqls_postgres12 ports: - "15432:5432" environment: @@ -28,4 +55,3 @@ services: - DATABASE_HOST=localhost volumes: - ./.docker/postgres/data:/var/lib/postgresql/data - restart: always diff --git a/internal/database/config.go b/internal/database/config.go index 99ff2c8e..407508be 100644 --- a/internal/database/config.go +++ b/internal/database/config.go @@ -39,7 +39,12 @@ func (c *DBConfig) Validate() error { } switch c.Driver { - case dialect.DatabaseDriverMySQL, dialect.DatabaseDriverPostgreSQL: + case + dialect.DatabaseDriverMySQL, + dialect.DatabaseDriverMySQL8, + dialect.DatabaseDriverMySQL57, + dialect.DatabaseDriverMySQL56, + dialect.DatabaseDriverPostgreSQL: if c.DataSourceName == "" && c.Proto == "" { return errors.New("required: connections[].dataSourceName or connections[].proto") } diff --git a/internal/database/driver.go b/internal/database/driver.go index 4f11d2e6..0891700e 100644 --- a/internal/database/driver.go +++ b/internal/database/driver.go @@ -18,6 +18,7 @@ type Factory func(*sql.DB) DBRepository type DBConnection struct { Conn *sql.DB SSHConn *ssh.Client + Driver dialect.DatabaseDriver } func (db *DBConnection) Close() error { diff --git a/internal/database/mysql.go b/internal/database/mysql.go index b8a5b4e5..f39c317c 100644 --- a/internal/database/mysql.go +++ b/internal/database/mysql.go @@ -15,7 +15,13 @@ import ( func init() { RegisterOpen("mysql", mysqlOpen) + RegisterOpen("mysql8", mysqlOpen) + RegisterOpen("mysql57", mysqlOpen) + RegisterOpen("mysql56", mysqlOpen) RegisterFactory("mysql", NewMySQLDBRepository) + RegisterFactory("mysql8", NewMySQLDBRepository) + RegisterFactory("mysql57", NewMySQLDBRepository) + RegisterFactory("mysql56", NewMySQLDBRepository) } func mysqlOpen(dbConnCfg *DBConfig) (*DBConnection, error) { @@ -52,6 +58,7 @@ func mysqlOpen(dbConnCfg *DBConfig) (*DBConnection, error) { return &DBConnection{ Conn: conn, SSHConn: sshConn, + Driver: dbConnCfg.Driver, }, nil } @@ -119,7 +126,8 @@ func genMysqlConfig(connCfg *DBConfig) (*mysql.Config, error) { } type MySQLDBRepository struct { - Conn *sql.DB + Conn *sql.DB + driver dialect.DatabaseDriver } func NewMySQLDBRepository(conn *sql.DB) DBRepository { @@ -127,7 +135,7 @@ func NewMySQLDBRepository(conn *sql.DB) DBRepository { } func (db *MySQLDBRepository) Driver() dialect.DatabaseDriver { - return dialect.DatabaseDriverMySQL + return db.driver } func (db *MySQLDBRepository) CurrentDatabase(ctx context.Context) (string, error) { diff --git a/internal/handler/completion.go b/internal/handler/completion.go index 6e4271f7..1c52c746 100644 --- a/internal/handler/completion.go +++ b/internal/handler/completion.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" - "github.com/lighttiger2505/sqls/dialect" "github.com/lighttiger2505/sqls/internal/completer" "github.com/lighttiger2505/sqls/internal/lsp" "github.com/sourcegraph/jsonrpc2" @@ -26,13 +25,12 @@ func (s *Server) handleTextDocumentCompletion(ctx context.Context, conn *jsonrpc return nil, fmt.Errorf("document not found: %s", params.TextDocument.URI) } - var driver dialect.DatabaseDriver - connectionCfg := s.topConnection() - if connectionCfg != nil { - driver = connectionCfg.Driver - } c := completer.NewCompleter(s.worker.Cache()) - c.Driver = driver + if s.dbConn != nil { + c.Driver = s.dbConn.Driver + } else { + c.Driver = "" + } completionItems, err := c.Complete(f.Text, params, s.getConfig().LowercaseKeywords) if err != nil { return nil, err diff --git a/script/help_categories.sql b/script/help_categories.sql new file mode 100644 index 00000000..0adcde63 --- /dev/null +++ b/script/help_categories.sql @@ -0,0 +1,7 @@ +SELECT hc1.help_category_id, + hc1.name, + hc2.help_category_id, + hc2.name +FROM help_category AS hc1 +JOIN help_category AS hc2 ON hc1.help_category_id = hc2.parent_category_id +ORDER BY hc1.help_category_id diff --git a/script/help_functions_mysql56.sql b/script/help_functions_mysql56.sql new file mode 100644 index 00000000..7c89d3a5 --- /dev/null +++ b/script/help_functions_mysql56.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id IN (4, 8, 21) +order by keyword_name diff --git a/script/help_functions_mysql57.sql b/script/help_functions_mysql57.sql new file mode 100644 index 00000000..0571ffde --- /dev/null +++ b/script/help_functions_mysql57.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id IN (6, 9, 20) +order by keyword_name diff --git a/script/help_functions_mysql8.sql b/script/help_functions_mysql8.sql new file mode 100644 index 00000000..5fa92913 --- /dev/null +++ b/script/help_functions_mysql8.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id IN (4, 7, 22) +order by keyword_name diff --git a/script/help_keywords_mysql56.sql b/script/help_keywords_mysql56.sql new file mode 100644 index 00000000..2bdd2c4e --- /dev/null +++ b/script/help_keywords_mysql56.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id NOT IN (4, 8, 21) +order by keyword_name diff --git a/script/help_keywords_mysql57.sql b/script/help_keywords_mysql57.sql new file mode 100644 index 00000000..8c82cfad --- /dev/null +++ b/script/help_keywords_mysql57.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id NOT IN (6, 9, 20) +order by keyword_name diff --git a/script/help_keywords_mysql8.sql b/script/help_keywords_mysql8.sql new file mode 100644 index 00000000..a32f39c4 --- /dev/null +++ b/script/help_keywords_mysql8.sql @@ -0,0 +1,7 @@ +SELECT distinct hk.name as keyword_name +FROM help_keyword AS hk +LEFT JOIN help_relation AS hr ON hr.help_keyword_id = hk.help_keyword_id +LEFT JOIN help_topic AS ht ON ht.help_topic_id = hr.help_topic_id +LEFT JOIN help_category AS hc ON hc.help_category_id = ht.help_category_id +where hc.parent_category_id NOT IN (4, 7, 22) +order by keyword_name