diff options
30 files changed, 192 insertions, 55 deletions
diff --git a/.bzrignore b/.bzrignore index c34c46116c5..4982af30d2f 100644 --- a/.bzrignore +++ b/.bzrignore @@ -601,3 +601,4 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl +scripts/make_win_src_distribution diff --git a/client/connect_test.c b/client/connect_test.c index e19f83dac92..fd81ad635ad 100644 --- a/client/connect_test.c +++ b/client/connect_test.c @@ -16,7 +16,6 @@ #include <stdio.h> #include <stdlib.h> -#include "my_global.h" #include "mysql.h" static void change_user(MYSQL *sock,const char *user, const char *password, diff --git a/client/insert_test.c b/client/insert_test.c index e4eb852af52..052c12bfdf0 100644 --- a/client/insert_test.c +++ b/client/insert_test.c @@ -16,7 +16,6 @@ #include <stdio.h> #include <stdlib.h> -#include "my_global.h" #include "mysql.h" #define INSERT_QUERY "insert into test (name,num) values ('item %d', %d)" diff --git a/client/select_test.c b/client/select_test.c index d7f18c0f1f0..ee2a9192865 100644 --- a/client/select_test.c +++ b/client/select_test.c @@ -19,7 +19,6 @@ #endif #include <stdio.h> #include <stdlib.h> -#include "my_global.h" #include "mysql.h" #define SELECT_QUERY "select name from test where num = %d" diff --git a/cmd-line-utils/libedit/Makefile.am b/cmd-line-utils/libedit/Makefile.am index 631c61ff350..19171f62ffb 100644 --- a/cmd-line-utils/libedit/Makefile.am +++ b/cmd-line-utils/libedit/Makefile.am @@ -22,7 +22,7 @@ noinst_HEADERS = chared.h el.h histedit.h key.h \ parse.h refresh.h sig.h sys.h \ tokenizer.h compat.h compat_conf.h fgetln.h \ hist.h map.h prompt.h search.h \ - strlcpy.h term.h tty.h + strlcpy.h libedit_term.h tty.h EXTRA_DIST = makelist diff --git a/cmd-line-utils/libedit/el.h b/cmd-line-utils/libedit/el.h index 484cbab6122..7cf17e8f069 100644 --- a/cmd-line-utils/libedit/el.h +++ b/cmd-line-utils/libedit/el.h @@ -96,7 +96,7 @@ typedef struct el_state_t { #include "tty.h" #include "prompt.h" #include "key.h" -#include "term.h" +#include "libedit_term.h" #include "refresh.h" #include "chared.h" #include "common.h" diff --git a/cmd-line-utils/libedit/key.h b/cmd-line-utils/libedit/key.h index c3a0889f901..e95731d9df5 100644 --- a/cmd-line-utils/libedit/key.h +++ b/cmd-line-utils/libedit/key.h @@ -62,6 +62,10 @@ typedef struct el_key_t { #define XK_NOD 2 #define XK_EXE 3 +#undef key_end +#undef key_clear +#undef key_print + protected int key_init(EditLine *); protected void key_end(EditLine *); protected key_value_t *key_map_cmd(EditLine *, int); diff --git a/cmd-line-utils/libedit/term.h b/cmd-line-utils/libedit/libedit_term.h index 9f03c549515..9f03c549515 100644 --- a/cmd-line-utils/libedit/term.h +++ b/cmd-line-utils/libedit/libedit_term.h diff --git a/cmd-line-utils/libedit/makelist b/cmd-line-utils/libedit/makelist index 8e9835309d6..3c3338e9875 100644 --- a/cmd-line-utils/libedit/makelist +++ b/cmd-line-utils/libedit/makelist @@ -87,6 +87,7 @@ case $FLAG in cat $FILES | $AWK ' BEGIN { printf("/* Automatically generated file, do not edit */\n"); + printf("#include \"compat.h\"\n"); printf("#include \"sys.h\"\n#include \"el.h\"\n"); printf("private const struct el_bindings_t el_func_help[] = {\n"); low = "abcdefghijklmnopqrstuvwxyz_"; @@ -169,6 +170,7 @@ case $FLAG in cat $FILES | $AWK '/el_action_t/ { print $3 }' | sort | $AWK ' BEGIN { printf("/* Automatically generated file, do not edit */\n"); + printf("#include \"compat.h\"\n"); printf("#include \"sys.h\"\n#include \"el.h\"\n"); printf("private const el_func_t el_func[] = {"); maxlen = 80; diff --git a/cmd-line-utils/libedit/read.c b/cmd-line-utils/libedit/read.c index 05f9e3da454..ffec4671271 100644 --- a/cmd-line-utils/libedit/read.c +++ b/cmd-line-utils/libedit/read.c @@ -55,6 +55,10 @@ private int read_preread(EditLine *); private int read_getcmd(EditLine *, el_action_t *, char *); private int read_char(EditLine *, char *); +#ifndef MIN +#define MIN(A,B) ((A) < (B) ? (A) : (B)) +#endif + #ifdef DEBUG_EDIT private void read_debug(EditLine *el) diff --git a/cmd-line-utils/libedit/readline.c b/cmd-line-utils/libedit/readline.c index e9c8409102c..863ee064ab0 100644 --- a/cmd-line-utils/libedit/readline.c +++ b/cmd-line-utils/libedit/readline.c @@ -52,6 +52,9 @@ #include "sys.h" #include "el.h" #include "fcns.h" /* for EL_NUM_FCNS */ +#ifdef HAVE_ALLOCA_H +#include <alloca.h> +#endif /* for rl_complete() */ #define TAB '\r' @@ -389,7 +392,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result) *result = NULL; - cmd = alloca(cmdlen + 1); + cmd = (char*) alloca(cmdlen + 1); (void) strncpy(cmd, command, cmdlen); cmd[cmdlen] = 0; @@ -422,7 +425,7 @@ _history_expand_command(const char *command, size_t cmdlen, char **result) return (-1); prefix = 0; } - search = alloca(len + 1); + search = (char*) alloca(len + 1); (void) strncpy(search, &cmd[idx], len); search[len] = '\0'; @@ -662,7 +665,7 @@ history_expand(char *str, char **output) if (str[0] == history_subst_char) { /* ^foo^foo2^ is equivalent to !!:s^foo^foo2^ */ - temp = alloca(4 + strlen(str) + 1); + temp = (char*) alloca(4 + strlen(str) + 1); temp[0] = temp[1] = history_expansion_char; temp[2] = ':'; temp[3] = 's'; @@ -1456,7 +1459,7 @@ rl_complete_internal(int what_to_do) ctemp--; len = li->cursor - ctemp; - temp = alloca(len + 1); + temp = (char*) alloca(len + 1); (void) strncpy(temp, ctemp, len); temp[len] = '\0'; diff --git a/cmd-line-utils/libedit/readline/readline.h b/cmd-line-utils/libedit/readline/readline.h index 851ade02b53..930c32d6f1c 100644 --- a/cmd-line-utils/libedit/readline/readline.h +++ b/cmd-line-utils/libedit/readline/readline.h @@ -41,7 +41,7 @@ #include <sys/types.h> #if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> -#else +#endif #ifndef __BEGIN_DECLS #if defined(__cplusplus) #define __BEGIN_DECLS extern "C" { @@ -51,7 +51,6 @@ #define __END_DECLS #endif #endif -#endif /* list of readline stuff supported by editline library's readline wrapper */ diff --git a/cmd-line-utils/libedit/sig.c b/cmd-line-utils/libedit/sig.c index 19408a0a8f2..bfb3d5c93f9 100644 --- a/cmd-line-utils/libedit/sig.c +++ b/cmd-line-utils/libedit/sig.c @@ -115,9 +115,9 @@ sig_init(EditLine *el) #undef _DO (void) sigprocmask(SIG_BLOCK, &nset, &oset); -#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(sig_t)) +#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(libedit_sig_t)) - el->el_signal = (sig_t *) el_malloc(SIGSIZE); + el->el_signal = (el_signal_t) el_malloc(SIGSIZE); if (el->el_signal == NULL) return (-1); for (i = 0; sighdl[i] != -1; i++) @@ -157,7 +157,7 @@ sig_set(EditLine *el) (void) sigprocmask(SIG_BLOCK, &nset, &oset); for (i = 0; sighdl[i] != -1; i++) { - sig_t s; + libedit_sig_t s; /* This could happen if we get interrupted */ if ((s = signal(sighdl[i], sig_handler)) != sig_handler) el->el_signal[i] = s; diff --git a/cmd-line-utils/libedit/sig.h b/cmd-line-utils/libedit/sig.h index e7231b65cf4..399e3a69437 100644 --- a/cmd-line-utils/libedit/sig.h +++ b/cmd-line-utils/libedit/sig.h @@ -62,7 +62,9 @@ _DO(SIGCONT) \ _DO(SIGWINCH) -typedef sig_t *el_signal_t; +typedef RETSIGTYPE (*libedit_sig_t)(); +typedef libedit_sig_t *el_signal_t; + protected void sig_end(EditLine*); protected int sig_init(EditLine*); diff --git a/cmd-line-utils/libedit/term.c b/cmd-line-utils/libedit/term.c index df8d1ea67cc..bcda9ac1216 100644 --- a/cmd-line-utils/libedit/term.c +++ b/cmd-line-utils/libedit/term.c @@ -43,13 +43,19 @@ * We have to declare a static variable here, since the * termcap putchar routine does not take an argument! */ + #include "sys.h" #include <stdio.h> #include <signal.h> #include <string.h> #include <stdlib.h> #include <unistd.h> +#if defined(HAVE_TERMCAP_H) #include <termcap.h> +#elif defined(HAVE_CURSES_H) && defined(HAVE_TERM_H) /* For HPUX11 */ +#include <curses.h> +#include <term.h> +#endif #include <sys/types.h> #include <sys/ioctl.h> @@ -891,7 +897,7 @@ term_set(EditLine *el, const char *term) memset(el->el_term.t_cap, 0, TC_BUFSIZE); - i = tgetent(el->el_term.t_cap, term); + i = tgetent(el->el_term.t_cap, (char*) term); if (i <= 0) { if (i == -1) @@ -921,7 +927,7 @@ term_set(EditLine *el, const char *term) Val(T_co) = tgetnum("co"); Val(T_li) = tgetnum("li"); for (t = tstr; t->name != NULL; t++) - term_alloc(el, t, tgetstr(t->name, &area)); + term_alloc(el, t, tgetstr((char*) t->name, &area)); } if (Val(T_co) < 2) @@ -1061,6 +1067,8 @@ term_reset_arrow(EditLine *el) static const char stOH[] = {033, 'O', 'H', '\0'}; static const char stOF[] = {033, 'O', 'F', '\0'}; + term_init_arrow(el); /* Init arrow struct */ + key_add(el, strA, &arrow[A_K_UP].fun, arrow[A_K_UP].type); key_add(el, strB, &arrow[A_K_DN].fun, arrow[A_K_DN].type); key_add(el, strC, &arrow[A_K_RT].fun, arrow[A_K_RT].type); @@ -1421,7 +1429,7 @@ term_echotc(EditLine *el, int argc __attribute__((unused)), const char **argv) break; } if (t->name == NULL) - scap = tgetstr(*argv, &area); + scap = tgetstr((char*) *argv, &area); if (!scap || scap[0] == '\0') { if (!silent) (void) fprintf(el->el_errfile, diff --git a/heap/_check.c b/heap/_check.c index d4c4c26b346..233cb8cb0c5 100644 --- a/heap/_check.c +++ b/heap/_check.c @@ -163,8 +163,8 @@ static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records, { memcpy(&recpos, key + (*keydef->get_key_length)(keydef,key), sizeof(byte*)); key_length= hp_rb_make_key(keydef, info->recbuf, recpos, 0); - if (ha_key_cmp(keydef->seg, info->recbuf, key, key_length, - SEARCH_FIND | SEARCH_SAME, ¬_used)) + if (ha_key_cmp(keydef->seg, (uchar*) info->recbuf, (uchar*) key, + key_length, SEARCH_FIND | SEARCH_SAME, ¬_used)) { error= 1; DBUG_PRINT("error",("Record in wrong link: key: %d Record: %lx\n", diff --git a/heap/hp_hash.c b/heap/hp_hash.c index cd70d2ab532..e315c1bbcb8 100644 --- a/heap/hp_hash.c +++ b/heap/hp_hash.c @@ -35,7 +35,8 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key, custom_arg.search_flag= SEARCH_FIND | SEARCH_SAME; if (start_key) { - custom_arg.key_length= hp_rb_pack_key(keyinfo, info->recbuf, start_key, + custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf, + (uchar*) start_key, start_key_len); start_pos= tree_record_pos(rb_tree, info->recbuf, start_search_flag, &custom_arg); @@ -47,8 +48,8 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key, if (end_key) { - custom_arg.key_length= hp_rb_pack_key(keyinfo, info->recbuf, end_key, - end_key_len); + custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf, + (uchar*) end_key, end_key_len); end_pos= tree_record_pos(rb_tree, info->recbuf, end_search_flag, &custom_arg); } @@ -370,7 +371,8 @@ int hp_rec_key_cmp(HP_KEYDEF *keydef, const byte *rec1, const byte *rec2) } if (seg->type == HA_KEYTYPE_TEXT) { - if (my_strnncoll(seg->charset,rec1+seg->start,seg->length,rec2+seg->start,seg->length)) + if (my_strnncoll(seg->charset,(uchar*) rec1+seg->start,seg->length, + (uchar*) rec2+seg->start,seg->length)) return 1; } else @@ -402,7 +404,8 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key) } if (seg->type == HA_KEYTYPE_TEXT) { - if (my_strnncoll(seg->charset,rec+seg->start,seg->length,key,seg->length)) + if (my_strnncoll(seg->charset,(uchar*) rec+seg->start, seg->length, + (uchar*) key, seg->length)) return 1; } else diff --git a/heap/hp_rkey.c b/heap/hp_rkey.c index 92d2982a457..91d762ab4db 100644 --- a/heap/hp_rkey.c +++ b/heap/hp_rkey.c @@ -38,7 +38,8 @@ int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key, custom_arg.keyseg= info->s->keydef[inx].seg; custom_arg.key_length= info->lastkey_len= - hp_rb_pack_key(keyinfo, info->recbuf, key, key_len); + hp_rb_pack_key(keyinfo, (uchar*) info->recbuf, + (uchar*) key, key_len); custom_arg.search_flag= SEARCH_FIND | SEARCH_SAME; /* for next rkey() after deletion */ if (find_flag == HA_READ_AFTER_KEY) diff --git a/include/my_global.h b/include/my_global.h index f7b97d96545..60fd8f162ae 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -110,6 +110,26 @@ #define __STDC_EXT__ 1 /* To get large file support on hpux */ #endif +/* + Fix warnings on HPUX11 + There is something really strange with HPUX11 include files as you get + error about wrongly declared symbols or missing defines if you don't + do the following: + */ +#if !defined(_XOPEN_SOURCE_EXTENDED) && ! defined(__cplusplus) +#define _XOPEN_SOURCE_EXTENDED +#endif + +/* Fix type of socklen as this is depending on the above define */ +#ifdef HPUX11 +#undef SOCKET_SIZE_TYPE +#ifdef _XOPEN_SOURCE_EXTENDED +#define SOCKET_SIZE_TYPE socklen_t +#else +#define SOCKET_SIZE_TYPE int +#endif /* _XOPEN_SOURCE_EXTENDED */ +#endif /* HPUX11 */ + #if defined(THREAD) && !defined(__WIN__) && !defined(OS2) #ifndef _POSIX_PTHREAD_SEMANTICS #define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 9f113f4c1b6..6fe199bb45e 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -4293,7 +4293,7 @@ static void store_param_str(NET *net, MYSQL_BIND *param) static void store_param_null(NET *net, MYSQL_BIND *param) { uint pos= param->param_number; - (uchar) net->buff[pos/8]|= (1 << pos & 7); + net->buff[pos/8]|= (uchar) (1 << (pos & 7)); } diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index cf166f47f35..44d75e54771 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -230,3 +230,36 @@ id_master id text1 text2 1 3 NULL bar3 1 4 foo4 bar4 drop table if exists t1,t2; +create table t1 (a int not null primary key auto_increment, b int, key(b)); +create table t2 (a int not null primary key auto_increment, b int); +insert into t1 (b) values (1),(2),(2),(3); +insert into t2 (b) values (10),(11),(12),(13); +explain (select * from t1 where a=1) union (select * from t2 where a=1); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 const PRIMARY PRIMARY 4 const 1 +2 UNION t2 const PRIMARY PRIMARY 4 const 1 +(select * from t1 where a=5) union (select * from t2 where a=1); +a b +1 10 +(select * from t1 where a=5 and a=6) union (select * from t2 where a=1); +a b +1 10 +(select t1.a,t1.b from t1,t2 where t1.a=5) union (select * from t2 where a=1); +a b +1 10 +(select * from t1 where a=1) union (select t1.a,t2.a from t1,t2 where t1.a=t2.a); +a b +1 1 +2 2 +3 3 +4 4 +explain (select * from t1 where a=1 and b=10) union (select t1.a,t2.a from t1,t2 where t1.a=t2.a); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 UNION t1 index PRIMARY PRIMARY 4 NULL 4 Using index +2 UNION t2 index PRIMARY PRIMARY 4 NULL 4 Using where; Using index +explain (select * from t1 where a=1) union (select * from t1 where b=1); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 const PRIMARY PRIMARY 4 const 1 +2 UNION t1 ref b b 5 const 1 Using where +drop table t1,t2; diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index af2dd154974..b73d9b5fdfc 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -124,3 +124,20 @@ INSERT INTO t2 (id, id_master, text1, text2) VALUES("4", "1", SELECT 1 AS id_master, 1 AS id, NULL AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master; SELECT 1 AS id_master, 1 AS id, 'ABCDE' AS text1, 'ABCDE' AS text2 UNION SELECT id_master, t2.id, text1, text2 FROM t1 LEFT JOIN t2 ON t1.id = t2.id_master; drop table if exists t1,t2; + +# +# Test of bug when using the same table multiple times +# +create table t1 (a int not null primary key auto_increment, b int, key(b)); +create table t2 (a int not null primary key auto_increment, b int); +insert into t1 (b) values (1),(2),(2),(3); +insert into t2 (b) values (10),(11),(12),(13); + +explain (select * from t1 where a=1) union (select * from t2 where a=1); +(select * from t1 where a=5) union (select * from t2 where a=1); +(select * from t1 where a=5 and a=6) union (select * from t2 where a=1); +(select t1.a,t1.b from t1,t2 where t1.a=5) union (select * from t2 where a=1); +(select * from t1 where a=1) union (select t1.a,t2.a from t1,t2 where t1.a=t2.a); +explain (select * from t1 where a=1 and b=10) union (select t1.a,t2.a from t1,t2 where t1.a=t2.a); +explain (select * from t1 where a=1) union (select * from t1 where b=1); +drop table t1,t2; diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index 7ae28e0ce77..1c6f124aac7 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -93,7 +93,7 @@ static struct my_option my_long_options[] = struct hash_lex_struct { - char first_char; + int first_char; char last_char; union{ hash_lex_struct *char_tails; @@ -121,18 +121,20 @@ void insert_into_hash(hash_lex_struct *root, const char *name, { hash_lex_struct *end, *cur, *tails; - if (!root->first_char){ + if (!root->first_char) + { root->first_char= -1; root->iresult= index; return; } - if (root->first_char==-1){ + if (root->first_char == -1) + { int index2= root->iresult; - const char *name2= - (index2<0 ? sql_functions[-index2-1] : symbols[index2]).name + len_from_begin; - root->first_char= name2[0]; - root->last_char= root->first_char; + const char *name2= (index2 < 0 ? sql_functions[-index2-1] : + symbols[index2]).name + len_from_begin; + root->first_char= (int) (uchar) name2[0]; + root->last_char= (char) root->first_char; tails= (hash_lex_struct*)malloc(sizeof(hash_lex_struct)); root->char_tails= tails; tails->first_char= -1; @@ -141,7 +143,8 @@ void insert_into_hash(hash_lex_struct *root, const char *name, size_t real_size= (root->last_char-root->first_char+1); - if (root->first_char>(*name)){ + if (root->first_char>(*name)) + { size_t new_size= root->last_char-(*name)+1; if (new_size<real_size) printf("error!!!!\n"); tails= root->char_tails; @@ -152,10 +155,11 @@ void insert_into_hash(hash_lex_struct *root, const char *name, end= tails + new_size - real_size; for (cur= tails; cur<end; cur++) cur->first_char= 0; - root->first_char= (*name); + root->first_char= (int) (uchar) *name; } - if (root->last_char<(*name)){ + if (root->last_char<(*name)) + { size_t new_size= (*name)-root->first_char+1; if (new_size<real_size) printf("error!!!!\n"); tails= root->char_tails; @@ -168,10 +172,11 @@ void insert_into_hash(hash_lex_struct *root, const char *name, root->last_char= (*name); } - insert_into_hash (root->char_tails+(*name)-root->first_char, - name+1,len_from_begin+1,index,function); + insert_into_hash(root->char_tails+(*name)-root->first_char, + name+1,len_from_begin+1,index,function); } + hash_lex_struct *root_by_len= 0; int max_len=0; @@ -235,20 +240,22 @@ void add_struct_to_map(hash_lex_struct *st) st->ithis= size_hash_map/4; size_hash_map+= 4; hash_map= (char*)realloc((char*)hash_map,size_hash_map); - hash_map[size_hash_map-4]= st->first_char==-1 ? 0 : st->first_char; - hash_map[size_hash_map-3]= - st->first_char==-1 || st->first_char==0 ? 0 : st->last_char; - if (st->first_char==-1) + hash_map[size_hash_map-4]= (char) (st->first_char == -1 ? 0 : + st->first_char); + hash_map[size_hash_map-3]= (char) (st->first_char == -1 || + st->first_char == 0 ? 0 : st->last_char); + if (st->first_char == -1) { hash_map[size_hash_map-2]= ((unsigned int)(int16)st->iresult)&255; hash_map[size_hash_map-1]= ((unsigned int)(int16)st->iresult)>>8; } - else if (st->first_char==0) + else if (st->first_char == 0) { hash_map[size_hash_map-2]= ((unsigned int)(int16)array_elements(symbols))&255; hash_map[size_hash_map-1]= ((unsigned int)(int16)array_elements(symbols))>>8; } -}; +} + void add_structs_to_map(hash_lex_struct *st, int len) { @@ -256,28 +263,36 @@ void add_structs_to_map(hash_lex_struct *st, int len) for (cur= st; cur<end; cur++) add_struct_to_map(cur); for (cur= st; cur<end; cur++) - if (cur->first_char && cur->first_char!=-1) + { + if (cur->first_char && cur->first_char != -1) add_structs_to_map(cur->char_tails,cur->last_char-cur->first_char+1); + } } void set_links(hash_lex_struct *st, int len) { hash_lex_struct *cur, *end= st+len; for (cur= st; cur<end; cur++) - if (cur->first_char!=0 && cur->first_char!=-1){ + { + if (cur->first_char != 0 && cur->first_char != -1) + { int ilink= cur->char_tails->ithis; hash_map[cur->ithis*4+2]= ilink%256; hash_map[cur->ithis*4+3]= ilink/256; set_links(cur->char_tails,cur->last_char-cur->first_char+1); } + } } + void print_hash_map(const char *name) { - printf("uchar %s[%d]= {\n",name,size_hash_map); char *cur; int i; - for (i=0, cur= hash_map; i<size_hash_map; i++, cur++){ + + printf("uchar %s[%d]= {\n",name,size_hash_map); + for (i=0, cur= hash_map; i<size_hash_map; i++, cur++) + { switch(i%4){ case 0: case 1: if (!*cur) @@ -292,6 +307,7 @@ void print_hash_map(const char *name) printf("};\n"); } + void print_find_structs() { add_structs_to_map(root_by_len,max_len); @@ -308,9 +324,10 @@ void print_find_structs() print_hash_map("symbols_map"); } + static void usage(int version) { - printf("%s Ver 3.5 Distrib %s, for %s (%s)\n", + printf("%s Ver 3.6 Distrib %s, for %s (%s)\n", my_progname, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE); if (version) return; @@ -322,6 +339,7 @@ and you are welcome to modify and redistribute it under the GPL license\n"); my_print_help(my_long_options); } + extern "C" my_bool get_one_option(int optid, const struct my_option *opt __attribute__((unused)), char *argument __attribute__((unused))) @@ -338,6 +356,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), return 0; } + static int get_options(int argc, char **argv) { int ho_error; @@ -353,6 +372,7 @@ static int get_options(int argc, char **argv) return(0); } + int check_dup_symbols(SYMBOL *s1, SYMBOL *s2) { if (s1->length!=s2->length || strncmp(s1->name,s2->name,s1->length)) @@ -367,6 +387,7 @@ your lex.h has duplicate definition for a symbol \"%s\"\n\n"; return 1; } + int check_duplicates() { SYMBOL *cur1, *cur2, *s_end, *f_end; @@ -377,21 +398,29 @@ int check_duplicates() for (cur1= symbols; cur1<s_end; cur1++) { for (cur2= cur1+1; cur2<s_end; cur2++) + { if (check_dup_symbols(cur1,cur2)) return 1; + } for (cur2= sql_functions; cur2<f_end; cur2++) + { if (check_dup_symbols(cur1,cur2)) return 1; + } } for (cur1= sql_functions; cur1<f_end; cur1++) + { for (cur2= cur1+1; cur2< f_end; cur2++) + { if (check_dup_symbols(cur1,cur2)) return 1; - + } + } return 0; } + int main(int argc,char **argv) { MY_INIT(argv[0]); @@ -443,7 +472,8 @@ int main(int argc,char **argv) for(;;){\n\ register uchar first_char= (uchar)cur_struct;\n\ \n\ - if (first_char==0){\n\ + if (first_char == 0)\n\ + {\n\ register int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return 0;\n\ register SYMBOL *res;\n\ diff --git a/sql/gstream.h b/sql/gstream.h index f26ef8899f8..a3914a534dd 100644 --- a/sql/gstream.h +++ b/sql/gstream.h @@ -26,7 +26,7 @@ public: numeric, l_bra, r_bra, - comma, + comma }; GTextReadStream(const char *buffer, int size) diff --git a/sql/item_create.cc b/sql/item_create.cc index 5c37abb230f..8b2cf52f660 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -103,10 +103,13 @@ Item *create_func_cot(Item* a) new Item_func_tan(a)); } + +#ifdef HAVE_COMPRESS Item *create_func_crc32(Item* a) { return new Item_func_crc32(a); } +#endif Item *create_func_date_format(Item* a,Item *b) { diff --git a/sql/item_create.h b/sql/item_create.h index 0c51886180f..f7542a7b29f 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -32,7 +32,9 @@ Item *create_func_connection_id(void); Item *create_func_conv(Item* a, Item *b, Item *c); Item *create_func_cos(Item* a); Item *create_func_cot(Item* a); +#ifdef HAVE_COMPRESS Item *create_func_crc32(Item* a); +#endif Item *create_func_date_format(Item* a,Item *b); Item *create_func_dayname(Item* a); Item *create_func_dayofmonth(Item* a); diff --git a/sql/item_func.cc b/sql/item_func.cc index 3954b53c063..14ceca25af5 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -27,7 +27,9 @@ #include <hash.h> #include <time.h> #include <ft_global.h> +#ifdef HAVE_COMPRESS #include <zlib.h> +#endif /* return TRUE if item is a constant */ @@ -965,6 +967,8 @@ longlong Item_func_min_max::val_int() return value; } + +#ifdef HAVE_COMPRESS longlong Item_func_crc32::val_int() { String *res=args[0]->val_str(&value); @@ -976,6 +980,7 @@ longlong Item_func_crc32::val_int() null_value=0; return (longlong) crc32(0L, (Bytef*)res->ptr(), res->length()); } +#endif /* HAVE_COMPRESS */ longlong Item_func_length::val_int() diff --git a/sql/item_func.h b/sql/item_func.h index 68804b83d26..33bfc993b5f 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -549,6 +549,8 @@ public: const char *func_name() const { return "greatest"; } }; + +#ifdef HAVE_COMPRESS class Item_func_crc32 :public Item_int_func { String value; @@ -558,7 +560,7 @@ public: const char *func_name() const { return "crc32"; } void fix_length_and_dec() { max_length=10; } }; - +#endif class Item_func_length :public Item_int_func { diff --git a/sql/lex.h b/sql/lex.h index 287439a9fe7..4e6689ca2d3 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -448,7 +448,9 @@ static SYMBOL sql_functions[] = { { "COUNT", SYM(COUNT_SYM),0,0}, { "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)}, { "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)}, +#ifdef HAVE_COMPRESS { "CRC32", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)}, +#endif { "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)}, { "CURDATE", SYM(CURDATE),0,0}, { "CURTIME", SYM(CURTIME),0,0}, diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 888aecebd8d..18a11cb2c4b 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -483,7 +483,6 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) (void) sprintf(path,"%s/%s",mysql_data_home,db); (void) unpack_dirname(path,path); field_list.push_back(item=new Item_empty_string("Name",NAME_LEN)); - item->maybe_null=1; field_list.push_back(item=new Item_empty_string("Type",10)); item->maybe_null=1; field_list.push_back(item=new Item_empty_string("Row_format",10)); |