diff options
-rw-r--r-- | client/mysql.cc | 29 | ||||
-rw-r--r-- | include/my_sys.h | 3 | ||||
-rw-r--r-- | include/mysql.h | 2 | ||||
-rw-r--r-- | libmysql/Makefile.shared | 2 | ||||
-rw-r--r-- | mysys/Makefile.am | 2 | ||||
-rw-r--r-- | mysys/charset-def.c | 93 | ||||
-rw-r--r-- | mysys/charset.c | 101 | ||||
-rw-r--r-- | mysys/my_init.c | 1 | ||||
-rw-r--r-- | scripts/mysql_create_system_tables.sh | 2 | ||||
-rw-r--r-- | scripts/mysql_fix_privilege_tables.sql | 35 | ||||
-rw-r--r-- | sql/sql_insert.cc | 10 |
11 files changed, 166 insertions, 114 deletions
diff --git a/client/mysql.cc b/client/mysql.cc index 37c83411091..e63ee1d2d75 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1474,6 +1474,7 @@ static void print_help_item(MYSQL_ROW *cur, int num_name, int num_cat, char *las tee_fprintf(PAGER, " %s\n", (*cur)[num_name]); } + static int com_server_help(String *buffer __attribute__((unused)), char *line __attribute__((unused)), char *help_arg) { @@ -1575,23 +1576,19 @@ com_help(String *buffer __attribute__((unused)), char * help_arg= strchr(line,' '); if (help_arg) - { return com_server_help(buffer,line,help_arg+1); - } - else - { - put_info("\nFor the complete MySQL Manual online visit:\n http://www.mysql.com/documentation\n", INFO_INFO); - put_info("For info on technical support from MySQL developers visit:\n http://www.mysql.com/support\n", INFO_INFO); - put_info("For info on MySQL books, utilities, consultants, etc. visit:\n http://www.mysql.com/portal\n", INFO_INFO); - put_info("List of all MySQL commands:", INFO_INFO); - if (!named_cmds) - put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO); - for (i = 0; commands[i].name; i++) - { - if (commands[i].func) - tee_fprintf(stdout, "%s\t(\\%c)\t%s\n", commands[i].name, - commands[i].cmd_char, commands[i].doc); - } + + put_info("\nFor the complete MySQL Manual online visit:\n http://www.mysql.com/documentation\n", INFO_INFO); + put_info("For info on technical support from MySQL developers visit:\n http://www.mysql.com/support\n", INFO_INFO); + put_info("For info on MySQL books, utilities, consultants, etc. visit:\n http://www.mysql.com/portal\n", INFO_INFO); + put_info("List of all MySQL commands:", INFO_INFO); + if (!named_cmds) + put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO); + for (i = 0; commands[i].name; i++) + { + if (commands[i].func) + tee_fprintf(stdout, "%s\t(\\%c)\t%s\n", commands[i].name, + commands[i].cmd_char, commands[i].doc); } if (connected && mysql_get_server_version(&mysql) >= 40100) put_info("\nFor server side help, type 'help all'\n", INFO_INFO); diff --git a/include/my_sys.h b/include/my_sys.h index 6f04b766aec..331ff3d60c9 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -220,7 +220,8 @@ extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, extern void free_charsets(void); extern char *get_charsets_dir(char *buf); extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); - +extern my_bool init_compiled_charsets(myf flags); +extern void add_compiled_collation(CHARSET_INFO *cs); /* statistics */ extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests, diff --git a/include/mysql.h b/include/mysql.h index 95f480b41c1..5672744729a 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -278,7 +278,7 @@ typedef struct st_mysql_res { #define MANAGER_CLIENT_ERR 450 #define MANAGER_INTERNAL_ERR 500 -#ifndef MYSQL_SERVER +#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) #define MYSQL_CLIENT #endif diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared index 1d431fa3624..1cffae4dc56 100644 --- a/libmysql/Makefile.shared +++ b/libmysql/Makefile.shared @@ -59,7 +59,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \ mf_loadpath.lo my_pthread.lo my_thr_init.lo \ thr_mutex.lo mulalloc.lo string.lo default.lo \ my_compress.lo array.lo my_once.lo list.lo my_net.lo \ - charset.lo hash.lo mf_iocache.lo \ + charset.lo charset-def.lo hash.lo mf_iocache.lo \ mf_iocache2.lo my_seek.lo my_sleep.lo \ my_pread.lo mf_cache.lo md5.lo sha1.lo\ my_getopt.lo my_gethostbyname.lo my_port.lo diff --git a/mysys/Makefile.am b/mysys/Makefile.am index 9e563755ebd..6ec1e1ec40d 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -50,7 +50,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\ my_getopt.c my_mkdir.c \ default.c my_compress.c checksum.c raid.cc \ my_net.c my_semaphore.c my_port.c my_sleep.c \ - charset.c my_bitmap.c my_bit.c md5.c \ + charset.c charset-def.c my_bitmap.c my_bit.c md5.c \ my_gethostbyname.c rijndael.c my_aes.c sha1.c \ my_handler.c my_netware.c EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \ diff --git a/mysys/charset-def.c b/mysys/charset-def.c new file mode 100644 index 00000000000..650431eaf76 --- /dev/null +++ b/mysys/charset-def.c @@ -0,0 +1,93 @@ +/* Copyright (C) 2000 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 */ + +#include "mysys_priv.h" + +/* + Include all compiled character sets into the client + If a client don't want to use all of them, he can define his own + init_compiled_charsets() that only adds those that he wants +*/ + +my_bool init_compiled_charsets(myf flags __attribute__((unused))) +{ + CHARSET_INFO *cs; + + add_compiled_collation(&my_charset_bin); + + add_compiled_collation(&my_charset_latin1); + add_compiled_collation(&my_charset_latin1_bin); + add_compiled_collation(&my_charset_latin1_german2_ci); + +#ifdef HAVE_CHARSET_big5 + add_compiled_collation(&my_charset_big5_chinese_ci); + add_compiled_collation(&my_charset_big5_bin); +#endif + +#ifdef HAVE_CHARSET_cp1250 + add_compiled_collation(&my_charset_cp1250_czech_ci); +#endif + +#ifdef HAVE_CHARSET_latin2 + add_compiled_collation(&my_charset_latin2_czech_ci); +#endif + +#ifdef HAVE_CHARSET_euckr + add_compiled_collation(&my_charset_euckr_korean_ci); + add_compiled_collation(&my_charset_euckr_bin); +#endif + +#ifdef HAVE_CHARSET_gb2312 + add_compiled_collation(&my_charset_gb2312_chinese_ci); + add_compiled_collation(&my_charset_gb2312_bin); +#endif + +#ifdef HAVE_CHARSET_gbk + add_compiled_collation(&my_charset_gbk_chinese_ci); + add_compiled_collation(&my_charset_gbk_bin); +#endif + +#ifdef HAVE_CHARSET_sjis + add_compiled_collation(&my_charset_sjis_japanese_ci); + add_compiled_collation(&my_charset_sjis_bin); +#endif + +#ifdef HAVE_CHARSET_tis620 + add_compiled_collation(&my_charset_tis620_thai_ci); + add_compiled_collation(&my_charset_tis620_bin); +#endif + +#ifdef HAVE_CHARSET_ucs2 + add_compiled_collation(&my_charset_ucs2_general_ci); + add_compiled_collation(&my_charset_ucs2_bin); +#endif + +#ifdef HAVE_CHARSET_ujis + add_compiled_collation(&my_charset_ujis_japanese_ci); + add_compiled_collation(&my_charset_ujis_bin); +#endif + +#ifdef HAVE_CHARSET_utf8 + add_compiled_collation(&my_charset_utf8_general_ci); + add_compiled_collation(&my_charset_utf8_bin); +#endif + + /* Copy compiled charsets */ + for (cs=compiled_charsets; cs->name; cs++) + add_compiled_collation(cs); + + return FALSE; +} diff --git a/mysys/charset.c b/mysys/charset.c index 7d0516ac81b..e97ac0675d6 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -21,9 +21,18 @@ #include <my_dir.h> #include <my_xml.h> +typedef struct +{ + int nchars; + MY_UNI_IDX uidx; +} uni_idx; + +#define PLANE_SIZE 0x100 +#define PLANE_NUM 0x100 +#define PLANE_NUMBER(x) (((x)>>8) % PLANE_NUM) -/* +/* The code below implements this functionality: - Initializing charset related structures @@ -38,6 +47,7 @@ my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2) return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname)); } + static void set_max_sort_char(CHARSET_INFO *cs) { uchar max_char; @@ -110,37 +120,21 @@ static void init_state_maps(CHARSET_INFO *cs) state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX; state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN; state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR; - - } + static void simple_cs_init_functions(CHARSET_INFO *cs) { - if (cs->state & MY_CS_BINSORT) - { cs->coll= &my_collation_8bit_bin_handler; - } else - { cs->coll= &my_collation_8bit_simple_ci_handler; - } cs->cset= &my_charset_8bit_handler; cs->mbmaxlen = 1; } -typedef struct -{ - int nchars; - MY_UNI_IDX uidx; -} uni_idx; - -#define PLANE_SIZE 0x100 -#define PLANE_NUM 0x100 -#define PLANE_NUMBER(x) (((x)>>8) % PLANE_NUM) - static int pcmp(const void * f, const void * s) { const uni_idx *F= (const uni_idx*) f; @@ -401,82 +395,13 @@ char *get_charsets_dir(char *buf) CHARSET_INFO *all_charsets[256]; CHARSET_INFO *default_charset_info = &my_charset_latin1; -static void add_compiled_collation(CHARSET_INFO *cs) +void add_compiled_collation(CHARSET_INFO *cs) { all_charsets[cs->number]= cs; cs->state|= MY_CS_AVAILABLE; } -static my_bool init_compiled_charsets(myf flags __attribute__((unused))) -{ - CHARSET_INFO *cs; - - add_compiled_collation(&my_charset_bin); - - add_compiled_collation(&my_charset_latin1); - add_compiled_collation(&my_charset_latin1_bin); - add_compiled_collation(&my_charset_latin1_german2_ci); - -#ifdef HAVE_CHARSET_big5 - add_compiled_collation(&my_charset_big5_chinese_ci); - add_compiled_collation(&my_charset_big5_bin); -#endif - -#ifdef HAVE_CHARSET_cp1250 - add_compiled_collation(&my_charset_cp1250_czech_ci); -#endif - -#ifdef HAVE_CHARSET_latin2 - add_compiled_collation(&my_charset_latin2_czech_ci); -#endif - -#ifdef HAVE_CHARSET_euckr - add_compiled_collation(&my_charset_euckr_korean_ci); - add_compiled_collation(&my_charset_euckr_bin); -#endif - -#ifdef HAVE_CHARSET_gb2312 - add_compiled_collation(&my_charset_gb2312_chinese_ci); - add_compiled_collation(&my_charset_gb2312_bin); -#endif - -#ifdef HAVE_CHARSET_gbk - add_compiled_collation(&my_charset_gbk_chinese_ci); - add_compiled_collation(&my_charset_gbk_bin); -#endif - -#ifdef HAVE_CHARSET_sjis - add_compiled_collation(&my_charset_sjis_japanese_ci); - add_compiled_collation(&my_charset_sjis_bin); -#endif - -#ifdef HAVE_CHARSET_tis620 - add_compiled_collation(&my_charset_tis620_thai_ci); - add_compiled_collation(&my_charset_tis620_bin); -#endif - -#ifdef HAVE_CHARSET_ucs2 - add_compiled_collation(&my_charset_ucs2_general_ci); - add_compiled_collation(&my_charset_ucs2_bin); -#endif - -#ifdef HAVE_CHARSET_ujis - add_compiled_collation(&my_charset_ujis_japanese_ci); - add_compiled_collation(&my_charset_ujis_bin); -#endif - -#ifdef HAVE_CHARSET_utf8 - add_compiled_collation(&my_charset_utf8_general_ci); - add_compiled_collation(&my_charset_utf8_bin); -#endif - - /* Copy compiled charsets */ - for (cs=compiled_charsets; cs->name; cs++) - add_compiled_collation(cs); - - return FALSE; -} #ifdef __NETWARE__ my_bool STDCALL init_available_charsets(myf myflags) diff --git a/mysys/my_init.c b/mysys/my_init.c index a72652f266b..4a7e9194dae 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -130,7 +130,6 @@ void my_end(int infoflag) DBUG_PRINT("error",("%s",errbuff[0])); } } - free_charsets(); my_once_free(); if (infoflag & MY_GIVE_INFO || info_file != stderr) { diff --git a/scripts/mysql_create_system_tables.sh b/scripts/mysql_create_system_tables.sh index c4cdc7b52d7..a65004bec4c 100644 --- a/scripts/mysql_create_system_tables.sh +++ b/scripts/mysql_create_system_tables.sh @@ -150,7 +150,7 @@ then INSERT INTO user (host,user) values ('$hostname','');" else i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);" - if test "$windows" -eq 0 + if test "$windows" = "0" then i_u="$i_u INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); diff --git a/scripts/mysql_fix_privilege_tables.sql b/scripts/mysql_fix_privilege_tables.sql index 220bf4036db..de5779b9ac0 100644 --- a/scripts/mysql_fix_privilege_tables.sql +++ b/scripts/mysql_fix_privilege_tables.sql @@ -99,3 +99,38 @@ ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL; ALTER TABLE host ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL; + +# +# Create some possible missing tables +# +CREATE TABLE IF NOT EXISTS help_topic ( +help_topic_id int unsigned not null, +name varchar(64) not null, +help_category_id smallint unsigned not null, +description text not null, +example text not null, +url varchar(128) not null, +primary key (help_topic_id), unique index (name) +) comment='help topics'; + +CREATE TABLE IF NOT EXISTS help_category ( +help_category_id smallint unsigned not null, +name varchar(64) not null, +parent_category_id smallint unsigned null, +url varchar(128) not null, +primary key (help_category_id), +unique index (name) +) comment='help categories'; + +CREATE TABLE IF NOT EXISTS help_relation ( +help_topic_id int unsigned not null references help_topic, +help_keyword_id int unsigned not null references help_keyword, +primary key (help_keyword_id, help_topic_id) +) comment='keyword-topic relation'; + +CREATE TABLE IF NOT EXISTS help_keyword ( +help_keyword_id int unsigned not null, +name varchar(64) not null, +primary key (help_keyword_id), +unique index (name) +) comment='help keywords'; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index af28d48ed8a..d523d868514 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -172,13 +172,15 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, } } if ((table= delayed_get_table(thd,table_list)) && !thd->is_fatal_error) - if (table_list->next && table) + { + res= 0; + if (table_list->next) /* if sub select */ res= open_and_lock_tables(thd, table_list->next); - else - res= (table == 0); + } else { - lock_type=TL_WRITE; + /* Too many delayed insert threads; Use a normal insert */ + table_list->lock_type= lock_type= TL_WRITE; res= open_and_lock_tables(thd, table_list); } } |