Below is the list of changes that have just been committed into a local
5.0 repository of cmiller. When cmiller does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-12-28 13:54:47-05:00, cmiller@stripped +3 -0
Bug#24624: MySQL client ignores its own completion table
The built-in tiny list of known tokens is inserted just before we clear
the data. In addition, the list of commands is embarassingly small.
This reorders the statements so that the hash is cleared /before/
inserting these tokens.
At compile-time, gets a list of tokens that /this version/ of the server
knows about. This has the disadvantage that if the client is used against
an earlier version of the server, the completion hash of functions and
tokens might not represent the ones available at /that server/. Hopefully,
our grammar doesn't change enough to make this a problem.
A future enhancement could implement SHOW GRAMMAR to get all the possible
tokens that the destination server implements.
client/Makefile.am@stripped, 2006-12-28 13:54:37-05:00, cmiller@stripped +6 -1
When necessary, generate a new server_tokens.h file from the lex.h file
from the server code.
client/mysql.cc@stripped, 2006-12-28 13:54:38-05:00, cmiller@stripped +27 -25
Get a list of tokens that a user should expect to expand.
client/server_tokens.h@stripped, 2006-12-28 13:54:39-05:00, cmiller@stripped
+786 -0
A rarely-altered generated list of SQL tokens, directly from the parser.
We check this in so that people don't need Perl to compile the server. It
is only necessary when one updates the sql/lex.h file.
client/server_tokens.h@stripped, 2006-12-28 13:54:39-05:00, cmiller@stripped +0
-0
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: cmiller
# Host: calliope.local
# Root: /Volumes/Source/src/mysql-5.0-maint
--- 1.61/client/Makefile.am 2006-11-23 15:07:39 -05:00
+++ 1.62/client/Makefile.am 2006-12-28 13:54:37 -05:00
@@ -29,7 +29,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)
@@ -60,6 +60,11 @@
-DDATADIR="\"$(localstatedir)\""
EXTRA_DIST = get_password.c CMakeLists.txt
+
+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 \
--- 1.229/client/mysql.cc 2006-12-04 13:18:07 -05:00
+++ 1.230/client/mysql.cc 2006-12-28 13:54:38 -05:00
@@ -40,6 +40,8 @@
#include <signal.h>
#include <violite.h>
+#include "server_tokens.h"
+
#if defined(USE_LIBEDIT_INTERFACE) && defined(HAVE_LOCALE_H)
#include <locale.h>
#endif
@@ -280,25 +282,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, ""}
};
@@ -1633,11 +1616,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;
@@ -1647,7 +1625,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)
--- New file ---
+++ client/server_tokens.h 06/12/28 13:54:39
/* 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"
};
| Thread |
|---|
| • bk commit into 5.0 tree (cmiller:1.2360) BUG#24624 | Chad MILLER | 29 Dec |