From fa115a0f2cb76106471bb3da0deae805cced557e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Dec 2006 21:45:57 +0400 Subject: [PATCH 01/10] bug #22372 (LOAD DATA crashes the table with the geometry field) The problem is that the GEOMETRY NOT NULL can't automatically set any value as a default one. We always tried to complete LOAD DATA command even if there's not enough data in file. That doesn't work for GEOMETRY NOT NULL. Now Field_*::reset() returns an error sign and it's checked in mysql_load() mysql-test/r/gis.result: test result mysql-test/t/gis.test: testcase sql/field.cc: reset() now returns error sign sql/field.h: Field_*::reset() now returns error sign if the field can't be reset sql/sql_load.cc: check if field can't be reset and return error if it's so --- mysql-test/r/gis.result | 6 +++ mysql-test/t/gis.test | 11 +++- sql/field.cc | 3 +- sql/field.h | 113 ++++++++++++++++++++++------------------ sql/sql_load.cc | 14 ++++- 5 files changed, 92 insertions(+), 55 deletions(-) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index f7066e7edca..ce2b5deadbd 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -671,3 +671,9 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is def asbinary(g) 252 8192 0 Y 128 0 63 asbinary(g) drop table t1; +create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); +alter table t1 disable keys; +load data infile '../../std_data/bad_gis_data.dat' into table t1; +ERROR 01000: Data truncated; NULL supplied to NOT NULL column 'b' at row 1 +alter table t1 enable keys; +drop table t1; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index b66b97c2c41..1ae4f0ae62f 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -363,11 +363,18 @@ drop table t1; select (asWKT(geomfromwkb((0x000000000140240000000000004024000000000000)))); select (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440)))); -# End of 4.1 tests - --enable_metadata create table t1 (g GEOMETRY); select * from t1; select asbinary(g) from t1; --disable_metadata drop table t1; + +create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); +alter table t1 disable keys; +--error 1263 +load data infile '../../std_data/bad_gis_data.dat' into table t1; +alter table t1 enable keys; +drop table t1; + +# End of 4.1 tests diff --git a/sql/field.cc b/sql/field.cc index 757c62cccd1..e88b8b313e2 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -1137,10 +1137,11 @@ void Field_null::sql_type(String &res) const This is an number stored as a pre-space (or pre-zero) string ****************************************************************************/ -void +int Field_decimal::reset(void) { Field_decimal::store("0",1,&my_charset_bin); + return 0; } void Field_decimal::overflow(bool negative) diff --git a/sql/field.h b/sql/field.h index 79fb7ff76d1..e4991ba1961 100644 --- a/sql/field.h +++ b/sql/field.h @@ -126,7 +126,7 @@ public: bool eq(Field *field) { return ptr == field->ptr && null_ptr == field->null_ptr; } virtual bool eq_def(Field *field); virtual uint32 pack_length() const { return (uint32) field_length; } - virtual void reset(void) { bzero(ptr,pack_length()); } + virtual int reset(void) { bzero(ptr,pack_length()); return 0; } virtual void reset_fields() {} virtual void set_default() { @@ -387,10 +387,10 @@ public: enum_field_types type() const { return FIELD_TYPE_DECIMAL;} enum ha_base_keytype key_type() const { return zerofill ? HA_KEYTYPE_BINARY : HA_KEYTYPE_NUM; } - void reset(void); - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); + int reset(void); + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -418,10 +418,10 @@ public: enum_field_types type() const { return FIELD_TYPE_TINY;} enum ha_base_keytype key_type() const { return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { ptr[0]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -454,10 +454,10 @@ public: enum_field_types type() const { return FIELD_TYPE_SHORT;} enum ha_base_keytype key_type() const { return unsigned_flag ? HA_KEYTYPE_USHORT_INT : HA_KEYTYPE_SHORT_INT;} - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { ptr[0]=ptr[1]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -488,7 +488,7 @@ public: int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr); int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; } + int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -521,10 +521,10 @@ public: enum_field_types type() const { return FIELD_TYPE_LONG;} enum ha_base_keytype key_type() const { return unsigned_flag ? HA_KEYTYPE_ULONG_INT : HA_KEYTYPE_LONG_INT; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; } double val_real(void); longlong val_int(void); bool send_binary(Protocol *protocol); @@ -559,10 +559,14 @@ public: enum_field_types type() const { return FIELD_TYPE_LONGLONG;} enum ha_base_keytype key_type() const { return unsigned_flag ? HA_KEYTYPE_ULONGLONG : HA_KEYTYPE_LONGLONG; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) + { + ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; + return 0; + } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -594,10 +598,10 @@ public: {} enum_field_types type() const { return FIELD_TYPE_FLOAT;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_FLOAT; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { bzero(ptr,sizeof(float)); } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { bzero(ptr,sizeof(float)); return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -628,10 +632,10 @@ public: {} enum_field_types type() const { return FIELD_TYPE_DOUBLE;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_DOUBLE; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { bzero(ptr,sizeof(double)); } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { bzero(ptr,sizeof(double)); return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -658,9 +662,9 @@ public: enum_field_types type() const { return FIELD_TYPE_NULL;} int store(const char *to, uint length, CHARSET_INFO *cs) { null[0]=1; return 0; } - int store(double nr) { null[0]=1; return 0; } - int store(longlong nr) { null[0]=1; return 0; } - void reset(void) {} + int store(double nr) { null[0]=1; return 0; } + int store(longlong nr) { null[0]=1; return 0; } + int reset(void) { return 0; } double val_real(void) { return 0.0;} longlong val_int(void) { return 0;} String *val_str(String *value,String *value2) @@ -687,7 +691,7 @@ public: int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr); int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; } + int reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -763,10 +767,10 @@ public: enum_field_types type() const { return FIELD_TYPE_DATE;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; } enum Item_result cmp_type () const { return INT_RESULT; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -795,7 +799,7 @@ public: int store(double nr); int store(longlong nr); void store_time(TIME *ltime,timestamp_type type); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; } + int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -826,10 +830,10 @@ public: enum_field_types type() const { return FIELD_TYPE_TIME;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_INT24; } enum Item_result cmp_type () const { return INT_RESULT; } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(double nr); - int store(longlong nr); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=0; } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(double nr); + int store(longlong nr); + int reset(void) { ptr[0]=ptr[1]=ptr[2]=0; return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -867,7 +871,11 @@ public: int store(double nr); int store(longlong nr); void store_time(TIME *ltime,timestamp_type type); - void reset(void) { ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; } + int reset(void) + { + ptr[0]=ptr[1]=ptr[2]=ptr[3]=ptr[4]=ptr[5]=ptr[6]=ptr[7]=0; + return 0; + } double val_real(void); longlong val_int(void); String *val_str(String*,String *); @@ -905,9 +913,13 @@ public: enum ha_base_keytype key_type() const { return binary() ? HA_KEYTYPE_BINARY : HA_KEYTYPE_TEXT; } bool zero_pack() const { return 0; } - void reset(void) { charset()->cset->fill(charset(),ptr,field_length,' '); } - int store(const char *to,uint length,CHARSET_INFO *charset); - int store(longlong nr); + int reset(void) + { + charset()->cset->fill(charset(),ptr,field_length,' '); + return 0; + } + int store(const char *to,uint length,CHARSET_INFO *charset); + int store(longlong nr); int store(double nr) { return Field_str::store(nr); } /* QQ: To be deleted */ double val_real(void); longlong val_int(void); @@ -948,7 +960,7 @@ public: enum ha_base_keytype key_type() const { return binary() ? HA_KEYTYPE_VARBINARY : HA_KEYTYPE_VARTEXT; } bool zero_pack() const { return 0; } - void reset(void) { bzero(ptr,field_length+2); } + int reset(void) { bzero(ptr,field_length+2); return 0; } uint32 pack_length() const { return (uint32) field_length+2; } uint32 key_length() const { return (uint32) field_length; } int store(const char *to,uint length,CHARSET_INFO *charset); @@ -1017,7 +1029,7 @@ public: { return (uint32) (((ulonglong) 1 << (packlength*8)) -1); } - void reset(void) { bzero(ptr, packlength+sizeof(char*)); } + int reset(void) { bzero(ptr, packlength+sizeof(char*)); return 0; } void reset_fields() { bzero((char*) &value,sizeof(value)); } void store_length(uint32 number); inline uint32 get_length(uint row_offset=0) @@ -1093,6 +1105,7 @@ public: int store(const char *to, uint length, CHARSET_INFO *charset); int store(double nr) { return 1; } int store(longlong nr) { return 1; } + int reset(void) { return !maybe_null(); } void get_key_image(char *buff,uint length, CHARSET_INFO *cs,imagetype type); void set_key_image(char *buff,uint length, CHARSET_INFO *cs); @@ -1123,7 +1136,7 @@ public: int store(const char *to,uint length,CHARSET_INFO *charset); int store(double nr); int store(longlong nr); - void reset() { bzero(ptr,packlength); } + int reset() { bzero(ptr,packlength); return 0; } double val_real(void); longlong val_int(void); String *val_str(String*,String *); diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 48862506729..5710f9c4c97 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -527,7 +527,12 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, (enclosed_length && length == 4 && !memcmp(pos,"NULL",4)) || (length == 1 && read_info.found_null)) { - field->reset(); + if (field->reset()) + { + my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0), field->field_name, + thd->row_count); + DBUG_RETURN(1); + } field->set_null(); if (!field->maybe_null()) { @@ -560,7 +565,12 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, for (; sql_field ; sql_field=(Item_field*) it++) { sql_field->field->set_null(); - sql_field->field->reset(); + if (sql_field->field->reset()) + { + my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),sql_field->field->field_name, + thd->row_count); + DBUG_RETURN(1); + } thd->cuted_fields++; push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_TOO_FEW_RECORDS, From 63fce3a24e33407d58a17ec2946caa08e6c1b537 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Dec 2006 21:47:29 +0400 Subject: [PATCH 02/10] bug #22372 datafile added to be used in gis.test mysql-test/std_data/bad_gis_data.dat: New BitKeeper file ``mysql-test/std_data/bad_gis_data.dat'' --- mysql-test/std_data/bad_gis_data.dat | 1 + 1 file changed, 1 insertion(+) create mode 100644 mysql-test/std_data/bad_gis_data.dat diff --git a/mysql-test/std_data/bad_gis_data.dat b/mysql-test/std_data/bad_gis_data.dat new file mode 100644 index 00000000000..257cc5642cb --- /dev/null +++ b/mysql-test/std_data/bad_gis_data.dat @@ -0,0 +1 @@ +foo From 7341315d7404d1a79d9fad85d8b0aad6855b88b5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Dec 2006 09:11:56 +0400 Subject: [PATCH 03/10] merging mysql-test/r/gis.result: result fixed sql/field.cc: Field_*::reset() now returns int sql/sql_load.cc: merging fix --- mysql-test/r/gis.result | 32 ++++++++++++++++---------------- sql/field.cc | 3 ++- sql/sql_load.cc | 2 +- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index c4c073f047a..92386535119 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -673,6 +673,22 @@ POINT(10 10) select (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440)))); (asWKT(geomfromwkb((0x010100000000000000000024400000000000002440)))) POINT(10 10) +create table t1 (g GEOMETRY); +select * from t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def test t1 t1 g g 255 4294967295 0 Y 144 0 63 +g +select asbinary(g) from t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def asbinary(g) 252 8192 0 Y 128 0 63 +asbinary(g) +drop table t1; +create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); +alter table t1 disable keys; +load data infile '../../std_data/bad_gis_data.dat' into table t1; +ERROR 22004: Column was set to data type implicit default; NULL supplied for NOT NULL column 'b' at row 1 +alter table t1 enable keys; +drop table t1; create table t1 (s1 geometry not null,s2 char(100)); create trigger t1_bu before update on t1 for each row set new.s1 = null; insert into t1 values (null,null); @@ -696,22 +712,6 @@ alter table t1 add primary key pti(pt); ERROR 42000: BLOB/TEXT column 'pt' used in key specification without a key length alter table t1 add primary key pti(pt(20)); drop table t1; -create table t1 (g GEOMETRY); -select * from t1; -Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def test t1 t1 g g 255 4294967295 0 Y 144 0 63 -g -select asbinary(g) from t1; -Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr -def asbinary(g) 252 8192 0 Y 128 0 63 -asbinary(g) -drop table t1; -create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); -alter table t1 disable keys; -load data infile '../../std_data/bad_gis_data.dat' into table t1; -ERROR 01000: Data truncated; NULL supplied to NOT NULL column 'b' at row 1 -alter table t1 enable keys; -drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; Field Type Null Key Default Extra diff --git a/sql/field.cc b/sql/field.cc index f1896344349..590246c51b2 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2218,9 +2218,10 @@ Field_new_decimal::Field_new_decimal(uint32 len_arg, } -void Field_new_decimal::reset(void) +int Field_new_decimal::reset(void) { store_value(&decimal_zero); + return 0; } diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 093e88bf82f..018db006276 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -753,7 +753,7 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, Field *field= ((Item_field *)item)->field; if (field->reset()) { - my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),sql_field->field->field_name, + my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),field->field_name, thd->row_count); DBUG_RETURN(1); } From e8be5f6d50cf87ca36f77c08a6ab76688aca411d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Dec 2006 15:22:43 +0400 Subject: [PATCH 04/10] merging fix mysql-test/r/gis.result: result fixed mysql-test/t/gis.test: path to datafile fixed --- mysql-test/r/gis.result | 2 +- mysql-test/t/gis.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index 92386535119..870e160e563 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -685,7 +685,7 @@ asbinary(g) drop table t1; create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); alter table t1 disable keys; -load data infile '../../std_data/bad_gis_data.dat' into table t1; +load data infile '../std_data_ln/bad_gis_data.dat' into table t1; ERROR 22004: Column was set to data type implicit default; NULL supplied for NOT NULL column 'b' at row 1 alter table t1 enable keys; drop table t1; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index a9840c9b3b4..95fdf642b94 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -385,7 +385,7 @@ drop table t1; create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); alter table t1 disable keys; --error 1263 -load data infile '../../std_data/bad_gis_data.dat' into table t1; +load data infile '../std_data_ln/bad_gis_data.dat' into table t1; alter table t1 enable keys; drop table t1; From c29d22c96dd972c890cce5fc3a27138c50a4ce37 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Dec 2006 15:02:32 +0100 Subject: [PATCH 05/10] BUG#24780 use --sysconfdir in scripts scripts/Makefile.am: pass --sysconfdir to scripts scripts/mysqlaccess.sh: use --sysconfdir instead of hardcoded /etc scripts/mysqld_multi.sh: use --sysconfdir instead of hardcoded /etc --- scripts/Makefile.am | 1 + scripts/mysqlaccess.sh | 6 +++--- scripts/mysqld_multi.sh | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 30ba75c551d..0f8e80b4efa 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -111,6 +111,7 @@ SUFFIXES = .sh -e 's!@''pkglibdir''@!$(pkglibdir)!g' \ -e 's!@''pkgincludedir''@!$(pkgincludedir)!g' \ -e 's!@''pkgdatadir''@!$(pkgdatadir)!g' \ + -e 's!@''sysconfdir''@!$(sysconfdir)!g' \ -e 's!@''CC''@!@CC@!'\ -e 's!@''CXX''@!@CXX@!'\ -e 's!@''GXX''@!@GXX@!'\ diff --git a/scripts/mysqlaccess.sh b/scripts/mysqlaccess.sh index 654b43a8a99..22e9d121f9a 100644 --- a/scripts/mysqlaccess.sh +++ b/scripts/mysqlaccess.sh @@ -462,8 +462,8 @@ MySQLaccess::Report::Print_Header(); if (-f "./$script_conf") { require "./$script_conf"; } - elsif (-f "/etc/$script_conf") { - require "/etc/$script_conf"; + elsif (-f "@sysconfdir@/$script_conf") { + require "@sysconfdir@/$script_conf"; } # **************************** @@ -929,7 +929,7 @@ sub MergeConfigFile { # ================================= sub MergeConfigFiles { my ($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid $<; - MergeConfigFile("/etc/my.cnf"); + MergeConfigFile("@sysconfdir@/my.cnf"); MergeConfigFile("$dir/.my.cnf"); } diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh index 4a6f380494f..ce778c03206 100644 --- a/scripts/mysqld_multi.sh +++ b/scripts/mysqld_multi.sh @@ -429,9 +429,9 @@ sub find_groups } else { - if (-f "/etc/my.cnf" && -r "/etc/my.cnf") + if (-f "@sysconfdir@/my.cnf" && -r "@sysconfdir@/my.cnf") { - open(MY_CNF, ") && close(MY_CNF); + open(MY_CNF, "<@sysconfdir@/my.cnf") && (@tmp=) && close(MY_CNF); } for ($i = 0; ($line = shift @tmp); $i++) { @@ -658,7 +658,7 @@ sub example # (as per Linux/Unix standard). You may even replace the # /etc/init.d/mysql.server script with it. # -# Before using, you must create a my.cnf file either in /etc/my.cnf +# Before using, you must create a my.cnf file either in @sysconfdir@/my.cnf # or /root/.my.cnf and add the [mysqld_multi] and [mysqld#] groups. # # The script can be found from support-files/mysqld_multi.server.sh From 60b3a86ad4b8b3ba3a0626191d106a20f0b2e871 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Dec 2006 16:06:29 +0100 Subject: [PATCH 06/10] do not autorelease build ids when a child of mysql-test-run.pl dies mysql-test/lib/mtr_unique.pl: do not autorelease build ids when a child dies --- mysql-test/lib/mtr_unique.pl | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mysql-test/lib/mtr_unique.pl b/mysql-test/lib/mtr_unique.pl index a8fb320c773..3adc8413576 100644 --- a/mysql-test/lib/mtr_unique.pl +++ b/mysql-test/lib/mtr_unique.pl @@ -10,10 +10,16 @@ use Fcntl ':flock'; # Requested IDs are stored in a hash and released upon END. # my %mtr_unique_assigned_ids = (); +my $mtr_unique_pid; +BEGIN { + $mtr_unique_pid = $$ unless defined $mtr_unique_pid; +} END { - while(my ($id,$file) = each(%mtr_unique_assigned_ids)) { - print "Autoreleasing $file:$id\n"; - mtr_release_unique_id($file, $id); + if($mtr_unique_pid == $$) { + while(my ($id,$file) = each(%mtr_unique_assigned_ids)) { + print "Autoreleasing $file:$id\n"; + mtr_release_unique_id($file, $id); + } } } From f67380eb6aca63927bebe5fafc7ec0db6e58d914 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 12 Dec 2006 13:55:40 +0100 Subject: [PATCH 07/10] BUG#24902 in 5.0 mysql-test/Makefile.am: BUG#24902 --- mysql-test/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 72998d786b9..eff2ae740f5 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -98,7 +98,7 @@ install-data-local: $(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(DESTDIR)$(testdir)/std_data $(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data $(INSTALL_DATA) $(srcdir)/std_data/*.frm $(DESTDIR)$(testdir)/std_data - $(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(distdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(DESTDIR)$(testdir)/std_data $(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data $(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(DESTDIR)$(testdir)/lib $(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib From 007357e7cda5efb3fdd12ad37b069a0f5c35daf4 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 14 Dec 2006 22:30:32 +0100 Subject: [PATCH 08/10] support-files/mysql.spec.sh The Docs team has two new manpages for the "server" RPM: "my_print_defaults" and "mysql_tzinfo_to_sql". support-files/mysql.spec.sh: The Docs team has two new manpages for the "server" RPM: "my_print_defaults" and "mysql_tzinfo_to_sql". --- support-files/mysql.spec.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index b14ffd24894..083b89d9275 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -549,6 +549,7 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* %doc %attr(644, root, man) %{_mandir}/man1/isamchk.1* %doc %attr(644, root, man) %{_mandir}/man1/isamlog.1* +%doc %attr(644, root, man) %{_mandir}/man1/my_print_defaults.1* %doc %attr(644, root, man) %{_mandir}/man1/myisam_ftdump.1* %doc %attr(644, root, man) %{_mandir}/man1/myisamchk.1* %doc %attr(644, root, man) %{_mandir}/man1/myisamlog.1* @@ -560,6 +561,7 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_privilege_tables.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/pack_isam.1* %doc %attr(644, root, man) %{_mandir}/man1/perror.1* @@ -724,6 +726,11 @@ fi # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Thu Dec 14 2006 Joerg Bruehe + +- Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" + in the server RPM. + * Thu Nov 16 2006 Joerg Bruehe - Explicitly note that the "MySQL-shared" RPMs (as built by MySQL AB) From 13eeee6f3f3f84026d67a01115ef77d676bf7aff Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 14 Dec 2006 22:41:26 +0100 Subject: [PATCH 09/10] support-files/mysql.spec.sh The "mysqlmanager" man page got moved from section 1 to 8. support-files/mysql.spec.sh: The "mysqlmanager" man page got moved from section 1 to 8. --- support-files/mysql.spec.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 1c5baddf74a..1bf983cb02c 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -588,7 +588,7 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* -%doc %attr(644, root, man) %{_mandir}/man1/mysqlmanager.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqlmanager.8* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* @@ -759,6 +759,7 @@ fi - Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" in the server RPM. +- The "mysqlmanager" man page got moved from section 1 to 8. * Thu Nov 16 2006 Joerg Bruehe From 6dd079a6c1450a8e0407e3160792e9d54ddd2c84 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 15 Dec 2006 13:18:16 +0100 Subject: [PATCH 10/10] Raise version number after cloning 5.0.32 --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index f6a6eedac70..5657cb1be93 100644 --- a/configure.in +++ b/configure.in @@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! # remember to also change ndb version below and update version.c in ndb -AM_INIT_AUTOMAKE(mysql, 5.0.32) +AM_INIT_AUTOMAKE(mysql, 5.0.34) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10