diff -rNubB work/mysql-5.0.27/client/mysql.cc work_fixed/mysql-5.0.27/client/mysql.cc --- mysql.cc Thu Jun 7 11:20:26 2007 +++ mysql.cc.new Thu Jun 7 11:20:03 2007 @@ -469,6 +469,8 @@ } sprintf(histfile_tmp, "%s.TMP", histfile); } + + build_completion_hash(false, false); } #endif sprintf(buff, "%s", diff -rNubB work/mysql-5.0.27/client/Makefile.am work_fixed/mysql-5.0.27/client/Makefile.am --- client/Makefile.am Sat Oct 21 01:22:37 2006 +++ client/Makefile.am Tue Jan 30 13:15:22 2007 @@ -28,7 +28,7 @@ mysql_upgrade \ mysqltestmanagerc mysqltestmanager-pwgen noinst_HEADERS = sql_string.h completion_hash.h my_readline.h \ - client_priv.h + client_priv.h server_tokens.h mysql_SOURCES = mysql.cc readline.cc sql_string.cc completion_hash.cc mysqladmin_SOURCES = mysqladmin.cc mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) $(CXXLDFLAGS) @@ -59,6 +59,16 @@ -DDATADIR="\"$(localstatedir)\"" EXTRA_DIST = get_password.c CMakeLists.txt echo.c + +mysql.$(OBJEXT): server_tokens.h + +server_tokens.h: ../sql/lex.h + @PERL@ -n -e 's/\{\s*("[^"]*")\s*,[^}]+}/\1/;' \ + -e 's/^\s*#.*//;' \ + -e 's/^(SYMBOL|SYM_GROUP) .*//;' \ + -e 's/SYMBOL/const char* const/;' \ + -e 's!/\*!/* D''o n''ot ed''it. Th''is fi''le gen''erated fr''om $< . \n!;' \ + -p $< > $@ link_sources: for f in $(sql_src) ; do \ diff -rNubB work/mysql-5.0.27/client/mysql.cc work_fixed/mysql-5.0.27/client/mysql.cc --- client/mysql.cc Sat Oct 21 01:22:37 2006 +++ client/mysql.cc Tue Jan 30 13:19:16 2007 @@ -40,6 +40,8 @@ #include #include +#include "server_tokens.h" + #if defined(USE_LIBEDIT_INTERFACE) && defined(HAVE_LOCALE_H) #include #endif @@ -276,25 +278,6 @@ "Show warnings after every statement." }, { "nowarning", 'w', com_nowarnings, 0, "Don't show warnings after every statement." }, - /* Get bash-like expansion for some commands */ - { "create table", 0, 0, 0, ""}, - { "create database", 0, 0, 0, ""}, - { "drop", 0, 0, 0, ""}, - { "select", 0, 0, 0, ""}, - { "insert", 0, 0, 0, ""}, - { "replace", 0, 0, 0, ""}, - { "update", 0, 0, 0, ""}, - { "delete", 0, 0, 0, ""}, - { "explain", 0, 0, 0, ""}, - { "show databases", 0, 0, 0, ""}, - { "show fields from", 0, 0, 0, ""}, - { "show keys from", 0, 0, 0, ""}, - { "show tables", 0, 0, 0, ""}, - { "load data from", 0, 0, 0, ""}, - { "alter table", 0, 0, 0, ""}, - { "set option", 0, 0, 0, ""}, - { "lock tables", 0, 0, 0, ""}, - { "unlock tables", 0, 0, 0, ""}, { (char *)NULL, 0, 0, 0, ""} }; @@ -1601,11 +1584,6 @@ if (status.batch || quick || !current_db) DBUG_VOID_RETURN; // We don't need completion in batches - /* hash SQL commands */ - while (cmd->name) { - add_word(&ht,(char*) cmd->name); - cmd++; - } if (!rehash) DBUG_VOID_RETURN; @@ -1615,7 +1593,31 @@ completion_hash_clean(&ht); free_root(&hash_mem_root,MYF(0)); - /* hash MySQL functions (to be implemented) */ + /* hash client commands */ + while (cmd->name) + { + add_word(&ht, (char*) cmd->name); + cmd++; + } + + /* hash SQL tokens */ + for (unsigned int i= 0; i < (sizeof(symbols) / sizeof(char *)); i++) + { + add_word(&ht, (char *) symbols[i]); /* all uppercase (discard const qualifier) */ + + /* Also add lowercase version of word */ + char *lowercase_symbol= strdup_root(&hash_mem_root, symbols[i]); /* Don't free until hash is unused. */ + if (lowercase_symbol) + { + for (char *p= lowercase_symbol; *p != '\0'; p++) + *p= tolower(*p); + add_word(&ht, lowercase_symbol); + } + } + + /* hash MySQL functions (user funcs to be implemented) */ + for (unsigned int i= 0; i < (sizeof(sql_functions) / sizeof(char *)); i++) + add_word(&ht, (char *) sql_functions[i]); /* (discard const qualifier) */ /* hash all database names */ if (mysql_query(&mysql,"show databases") == 0) diff -rNubB work/mysql-5.0.27/client/server_tokens.h work_fixed/mysql-5.0.27/client/server_tokens.h --- client/server_tokens.h Thu Jan 1 01:00:00 1970 +++ client/server_tokens.h Tue Jan 30 13:19:16 2007 @@ -0,0 +1,786 @@ +/* Do not edit. This file generated from ../sql/lex.h . + Copyright (C) 2000-2002 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + + +/* Do not edit. This file generated from ../sql/lex.h . + This file includes all reserved words and functions */ + + + + + + + +/* Do not edit. This file generated from ../sql/lex.h . + We don't want to include sql_yacc.h into gen_lex_hash */ + + + + + + + + + + + + + + + + + +/* Do not edit. This file generated from ../sql/lex.h . + + Symbols are broken into separated arrays to allow field names with + same name as functions. + These are kept sorted for human lookup (the symbols are hashed). +*/ + +static const char* const symbols[] = { + "&&", + "<", + "<=", + "<>", + "!=", + "=", + ">", + ">=", + "<<", + ">>", + "<=>", + "ACTION", + "ADD", + "AFTER", + "AGAINST", + "AGGREGATE", + "ALL", + "ALGORITHM", + "ALTER", + "ANALYZE", + "AND", + "ANY", + "AS", + "ASC", + "ASCII", + "ASENSITIVE", + "AUTO_INCREMENT", + "AVG", + "AVG_ROW_LENGTH", + "BACKUP", + "BDB", + "BEFORE", + "BEGIN", + "BERKELEYDB", + "BETWEEN", + "BIGINT", + "BINARY", + "BINLOG", + "BIT", + "BLOB", + "BOOL", + "BOOLEAN", + "BOTH", + "BTREE", + "BY", + "BYTE", + "CACHE", + "CALL", + "CASCADE", + "CASCADED", + "CASE", + "CHAIN", + "CHANGE", + "CHANGED", + "CHAR", + "CHARACTER", + "CHARSET", + "CHECK", + "CHECKSUM", + "CIPHER", + "CLIENT", + "CLOSE", + "CODE", + "COLLATE", + "COLLATION", + "COLUMN", + "COLUMNS", + "COMMENT", + "COMMIT", + "COMMITTED", + "COMPACT", + "COMPRESSED", + "CONCURRENT", + "CONDITION", + "CONNECTION", + "CONSISTENT", + "CONSTRAINT", + "CONTAINS", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CUBE", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATA", + "DATABASE", + "DATABASES", + "DATE", + "DATETIME", + "DAY", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DEALLOCATE", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DEFINER", + "DELAYED", + "DELAY_KEY_WRITE", + "DELETE", + "DESC", + "DESCRIBE", + "DES_KEY_FILE", + "DETERMINISTIC", + "DIRECTORY", + "DISABLE", + "DISCARD", + "DISTINCT", + "DISTINCTROW", /* Do not edit. This file generated from ../sql/lex.h . + Access likes this */ + "DIV", + "DO", + "DOUBLE", + "DROP", + "DUAL", + "DUMPFILE", + "DUPLICATE", + "DYNAMIC", + "EACH", + "ELSE", + "ELSEIF", + "ENABLE", + "ENCLOSED", + "END", + "ENGINE", + "ENGINES", + "ENUM", + "ERRORS", + "ESCAPE", + "ESCAPED", + "EVENTS", + "EXECUTE", + "EXISTS", + "EXIT", + "EXPANSION", + "EXPLAIN", + "EXTENDED", + "FALSE", + "FAST", + "FETCH", + "FIELDS", + "FILE", + "FIRST", + "FIXED", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FLUSH", + "FOR", + "FORCE", + "FOREIGN", + "FOUND", + "FRAC_SECOND", + "FROM", + "FULL", + "FULLTEXT", + "FUNCTION", + "GEOMETRY", + "GEOMETRYCOLLECTION", + "GET_FORMAT", + "GLOBAL", + "GRANT", + "GRANTS", + "GROUP", + "HANDLER", + "HASH", + "HAVING", + "HELP", + "HIGH_PRIORITY", + "HOSTS", + "HOUR", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTIFIED", + "IF", + "IGNORE", + "IMPORT", + "IN", + "INDEX", + "INDEXES", + "INFILE", + "INNER", + "INNOBASE", + "INNODB", + "INOUT", + "INSENSITIVE", + "INSERT", + "INSERT_METHOD", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERVAL", + "INTO", + "IO_THREAD", + "IS", + "ISOLATION", + "ISSUER", + "ITERATE", + "INVOKER", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LANGUAGE", + "LAST", + "LEADING", + "LEAVE", + "LEAVES", + "LEFT", + "LEVEL", + "LIKE", + "LIMIT", + "LINES", + "LINESTRING", + "LOAD", + "LOCAL", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LOCKS", + "LOGS", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER", + "MASTER_CONNECT_RETRY", + "MASTER_HOST", + "MASTER_LOG_FILE", + "MASTER_LOG_POS", + "MASTER_PASSWORD", + "MASTER_PORT", + "MASTER_SERVER_ID", + "MASTER_SSL", + "MASTER_SSL_CA", + "MASTER_SSL_CAPATH", + "MASTER_SSL_CERT", + "MASTER_SSL_CIPHER", + "MASTER_SSL_KEY", + "MASTER_USER", + "MATCH", + "MAX_CONNECTIONS_PER_HOUR", + "MAX_QUERIES_PER_HOUR", + "MAX_ROWS", + "MAX_UPDATES_PER_HOUR", + "MAX_USER_CONNECTIONS", + "MEDIUM", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MERGE", + "MICROSECOND", + "MIDDLEINT", /* Do not edit. This file generated from ../sql/lex.h . + For powerbuilder */ + "MIGRATE", + "MINUTE", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MIN_ROWS", + "MOD", + "MODE", + "MODIFIES", + "MODIFY", + "MONTH", + "MULTILINESTRING", + "MULTIPOINT", + "MULTIPOLYGON", + "MUTEX", + "NAME", + "NAMES", + "NATIONAL", + "NATURAL", + "NDB", + "NDBCLUSTER", + "NCHAR", + "NEW", + "NEXT", + "NO", + "NONE", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NUMERIC", + "NVARCHAR", + "OFFSET", + "OLD_PASSWORD", + "ON", + "ONE", + "ONE_SHOT", + "OPEN", + "OPTIMIZE", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "PACK_KEYS", + "PARTIAL", + "PASSWORD", + "PHASE", + "POINT", + "POLYGON", + "PRECISION", + "PREPARE", + "PREV", + "PRIMARY", + "PRIVILEGES", + "PROCEDURE", + "PROCESS", + "PROCESSLIST", + "PURGE", + "QUARTER", + "QUERY", + "QUICK", + "RAID0", + "RAID_CHUNKS", + "RAID_CHUNKSIZE", + "RAID_TYPE", + "READ", + "READS", + "REAL", + "RECOVER", + "REDUNDANT", + "REFERENCES", + "REGEXP", + "RELAY_LOG_FILE", + "RELAY_LOG_POS", + "RELAY_THREAD", + "RELEASE", + "RELOAD", + "RENAME", + "REPAIR", + "REPEATABLE", + "REPLACE", + "REPLICATION", + "REPEAT", + "REQUIRE", + "RESET", + "RESTORE", + "RESTRICT", + "RESUME", + "RETURN", + "RETURNS", + "REVOKE", + "RIGHT", + "RLIKE", /* Do not edit. This file generated from ../sql/lex.h . + Like in mSQL2 */ + "ROLLBACK", + "ROLLUP", + "ROUTINE", + "ROW", + "ROWS", + "ROW_FORMAT", + "RTREE", + "SAVEPOINT", + "SCHEMA", + "SCHEMAS", + "SECOND", + "SECOND_MICROSECOND", + "SECURITY", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SERIAL", + "SERIALIZABLE", + "SESSION", + "SET", + "SHARE", + "SHOW", + "SHUTDOWN", + "SIGNED", + "SIMPLE", + "SLAVE", + "SNAPSHOT", + "SMALLINT", + "SOME", + "SONAME", + "SOUNDS", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_BIG_RESULT", + "SQL_BUFFER_RESULT", + "SQL_CACHE", + "SQL_CALC_FOUND_ROWS", + "SQL_NO_CACHE", + "SQL_SMALL_RESULT", + "SQL_THREAD", + "SQL_TSI_FRAC_SECOND", + "SQL_TSI_SECOND", + "SQL_TSI_MINUTE", + "SQL_TSI_HOUR", + "SQL_TSI_DAY", + "SQL_TSI_WEEK", + "SQL_TSI_MONTH", + "SQL_TSI_QUARTER", + "SQL_TSI_YEAR", + "SSL", + "START", + "STARTING", + "STATUS", + "STOP", + "STORAGE", + "STRAIGHT_JOIN", + "STRING", + "STRIPED", + "SUBJECT", + "SUPER", + "SUSPEND", + "TABLE", + "TABLES", + "TABLESPACE", + "TEMPORARY", + "TEMPTABLE", + "TERMINATED", + "TEXT", + "THEN", + "TIME", + "TIMESTAMP", + "TIMESTAMPADD", + "TIMESTAMPDIFF", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TRAILING", + "TRANSACTION", + "TRIGGER", + "TRIGGERS", + "TRUE", + "TRUNCATE", + "TYPE", + "TYPES", + "UNCOMMITTED", + "UNDEFINED", + "UNDO", + "UNICODE", + "UNION", + "UNIQUE", + "UNKNOWN", + "UNLOCK", + "UNSIGNED", + "UNTIL", + "UPDATE", + "UPGRADE", + "USAGE", + "USE", + "USER", + "USER_RESOURCES", + "USE_FRM", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUE", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARIABLES", + "VARYING", + "WARNINGS", + "WEEK", + "WHEN", + "WHERE", + "WHILE", + "VIEW", + "WITH", + "WORK", + "WRITE", + "X509", + "XOR", + "XA", + "YEAR", + "YEAR_MONTH", + "ZEROFILL", + "||" +}; + + +static const char* const sql_functions[] = { + "ABS", + "ACOS", + "ADDDATE", + "ADDTIME", + "AES_ENCRYPT", + "AES_DECRYPT", + "AREA", + "ASIN", + "ASBINARY", + "ASTEXT", + "ASWKB", + "ASWKT", + "ATAN", + "ATAN2", + "BENCHMARK", + "BIN", + "BIT_COUNT", + "BIT_OR", + "BIT_AND", + "BIT_XOR", + "CAST", + "CEIL", + "CEILING", + "BIT_LENGTH", + "CENTROID", + "CHAR_LENGTH", + "CHARACTER_LENGTH", + "COALESCE", + "COERCIBILITY", + "COMPRESS", + "CONCAT", + "CONCAT_WS", + "CONNECTION_ID", + "CONV", + "CONVERT_TZ", + "COUNT", + "COS", + "COT", + "CRC32", + "CROSSES", + "CURDATE", + "CURTIME", + "DATE_ADD", + "DATEDIFF", + "DATE_FORMAT", + "DATE_SUB", + "DAYNAME", + "DAYOFMONTH", + "DAYOFWEEK", + "DAYOFYEAR", + "DECODE", + "DEGREES", + "DES_ENCRYPT", + "DES_DECRYPT", + "DIMENSION", + "DISJOINT", + "ELT", + "ENCODE", + "ENCRYPT", + "ENDPOINT", + "ENVELOPE", + "EQUALS", + "EXTERIORRING", + "EXTRACT", + "EXP", + "EXPORT_SET", + "FIELD", /* Do not edit. This file generated from ../sql/lex.h . + For compability */ + "FIND_IN_SET", + "FLOOR", + "FORMAT", + "FOUND_ROWS", + "FROM_DAYS", + "FROM_UNIXTIME", + "GET_LOCK", + "GEOMETRYN", + "GEOMETRYTYPE", + "GEOMCOLLFROMTEXT", + "GEOMCOLLFROMWKB", + "GEOMETRYCOLLECTIONFROMTEXT", + "GEOMETRYCOLLECTIONFROMWKB", + "GEOMETRYFROMTEXT", + "GEOMETRYFROMWKB", + "GEOMFROMTEXT", + "GEOMFROMWKB", + "GLENGTH", + "GREATEST", + "GROUP_CONCAT", + "GROUP_UNIQUE_USERS", + "HEX", + "IFNULL", + "INET_ATON", + "INET_NTOA", + "INSTR", + "INTERIORRINGN", + "INTERSECTS", + "ISCLOSED", + "ISEMPTY", + "ISNULL", + "IS_FREE_LOCK", + "IS_USED_LOCK", + "LAST_INSERT_ID", + "ISSIMPLE", + "LAST_DAY", + "LCASE", + "LEAST", + "LENGTH", + "LN", + "LINEFROMTEXT", + "LINEFROMWKB", + "LINESTRINGFROMTEXT", + "LINESTRINGFROMWKB", + "LOAD_FILE", + "LOCATE", + "LOG", + "LOG2", + "LOG10", + "LOWER", + "LPAD", + "LTRIM", + "MAKE_SET", + "MAKEDATE", + "MAKETIME", + "MASTER_POS_WAIT", + "MAX", + "MBRCONTAINS", + "MBRDISJOINT", + "MBREQUAL", + "MBRINTERSECTS", + "MBROVERLAPS", + "MBRTOUCHES", + "MBRWITHIN", + "MD5", + "MID", /* Do not edit. This file generated from ../sql/lex.h . + unireg function */ + "MIN", + "MLINEFROMTEXT", + "MLINEFROMWKB", + "MPOINTFROMTEXT", + "MPOINTFROMWKB", + "MPOLYFROMTEXT", + "MPOLYFROMWKB", + "MONTHNAME", + "MULTILINESTRINGFROMTEXT", + "MULTILINESTRINGFROMWKB", + "MULTIPOINTFROMTEXT", + "MULTIPOINTFROMWKB", + "MULTIPOLYGONFROMTEXT", + "MULTIPOLYGONFROMWKB", + "NAME_CONST", + "NOW", + "NULLIF", + "NUMGEOMETRIES", + "NUMINTERIORRINGS", + "NUMPOINTS", + "OCTET_LENGTH", + "OCT", + "ORD", + "OVERLAPS", + "PERIOD_ADD", + "PERIOD_DIFF", + "PI", + "POINTFROMTEXT", + "POINTFROMWKB", + "POINTN", + "POLYFROMTEXT", + "POLYFROMWKB", + "POLYGONFROMTEXT", + "POLYGONFROMWKB", + "POSITION", + "POW", + "POWER", + "QUOTE", + "RADIANS", + "RAND", + "RELEASE_LOCK", + "REVERSE", + "ROUND", + "ROW_COUNT", + "RPAD", + "RTRIM", + "SEC_TO_TIME", + "SESSION_USER", + "SUBDATE", + "SIGN", + "SIN", + "SHA", + "SHA1", + "SLEEP", + "SOUNDEX", + "SPACE", + "SQRT", + "SRID", + "STARTPOINT", + "STD", + "STDDEV", + "STDDEV_POP", + "STDDEV_SAMP", + "STR_TO_DATE", + "STRCMP", + "SUBSTR", + "SUBSTRING", + "SUBSTRING_INDEX", + "SUBTIME", + "SUM", + "SYSDATE", + "SYSTEM_USER", + "TAN", + "TIME_FORMAT", + "TIME_TO_SEC", + "TIMEDIFF", + "TO_DAYS", + "TOUCHES", + "TRIM", + "UCASE", + "UNCOMPRESS", + "UNCOMPRESSED_LENGTH", + "UNHEX", + "UNIQUE_USERS", + "UNIX_TIMESTAMP", + "UPPER", + "UUID", + "VARIANCE", + "VAR_POP", + "VAR_SAMP", + "VERSION", + "WEEKDAY", + "WEEKOFYEAR", + "WITHIN", + "X", + "Y", + "YEARWEEK" +};