diff options
-rw-r--r-- | BitKeeper/etc/gone | 38 | ||||
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rwxr-xr-x | Build-tools/Do-compile | 11 | ||||
-rw-r--r-- | Docs/manual.texi | 44 | ||||
-rw-r--r-- | client/mysqlcheck.c | 16 | ||||
-rw-r--r-- | innobase/pars/lexyy.c | 9 | ||||
-rw-r--r-- | innobase/pars/pars0grm.c | 2 | ||||
-rw-r--r-- | libmysqld/lib_sql.cc | 1 | ||||
-rw-r--r-- | myisam/ft_boolean_search.c | 3 | ||||
-rw-r--r-- | myisam/ft_nlq_search.c | 22 | ||||
-rw-r--r-- | myisam/ft_parser.c | 12 | ||||
-rw-r--r-- | myisam/ftdefs.h | 2 | ||||
-rw-r--r-- | myisam/mi_create.c | 2 | ||||
-rw-r--r-- | myisam/mi_delete_all.c | 9 | ||||
-rw-r--r-- | mysql-test/t/bdb-crash.test | 1 | ||||
-rw-r--r-- | mysys/my_init.c | 6 | ||||
-rw-r--r-- | scripts/mysql_convert_table_format.sh | 2 | ||||
-rw-r--r-- | scripts/mysqld_multi.sh | 6 | ||||
-rw-r--r-- | scripts/mysqlhotcopy.sh | 6 | ||||
-rw-r--r-- | sql/item_func.cc | 23 | ||||
-rw-r--r-- | sql/log_event.h | 29 | ||||
-rw-r--r-- | sql/mysqld.cc | 1 | ||||
-rw-r--r-- | sql/nt_servc.cc | 91 | ||||
-rw-r--r-- | sql/nt_servc.h | 2 | ||||
-rw-r--r-- | sql/sql_base.cc | 1 | ||||
-rw-r--r-- | sql/sql_class.h | 3 | ||||
-rw-r--r-- | sql/sql_table.cc | 14 | ||||
-rw-r--r-- | sql/sql_update.cc | 18 |
28 files changed, 300 insertions, 75 deletions
diff --git a/BitKeeper/etc/gone b/BitKeeper/etc/gone index 5f2b9e1209d..204044a2cc5 100644 --- a/BitKeeper/etc/gone +++ b/BitKeeper/etc/gone @@ -199,7 +199,9 @@ BK|sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686|19700101030959|02022|660fb BK|sql-bench/Results/ATIS-mysql-Linux_2.2.10_i686|19700101030959|02025|3fa4d167cceff7e8 BK|sql-bench/Results/ATIS-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02312|84ca3b85ff306133 BK|sql-bench/Results/ATIS-mysql-Linux_2.2.14_i686_xeon|19700101030959|02044|3e820c28bf4af63a +BK|sql-bench/Results/ATIS-mysql-SunOS_5.5.1_sun4u|19700101030959|02031|dfb4c5f6b6db3b49 BK|sql-bench/Results/ATIS-mysql-SunOS_5.6_sun4m|19700101030959|02032|62028e0375b3b8b +BK|sql-bench/Results/ATIS-mysql-SunOS_5.7_sun4u|19700101030959|02034|be0d9789776c5ed7 BK|sql-bench/Results/ATIS-mysql_3.21-Linux_2.0.35_i686|19700101030959|02036|c25425e045ca8dfc BK|sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02304|cbe120d860296d2f BK|sql-bench/Results/ATIS-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02027|a74e7b82d3908fa9 @@ -263,7 +265,9 @@ BK|sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686|19700101030959|02050|f6fdd6 BK|sql-bench/Results/RUN-mysql-Linux_2.2.10_i686|19700101030959|02041|712f52be5d195406 BK|sql-bench/Results/RUN-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02038|8ee87b26b91c86fe BK|sql-bench/Results/RUN-mysql-Linux_2.2.14_i686_xeon|19700101030959|02055|17854e751e1d9d1d +BK|sql-bench/Results/RUN-mysql-SunOS_5.5.1_sun4u|19700101030959|02058|afbba182428e20df BK|sql-bench/Results/RUN-mysql-SunOS_5.6_sun4m|19700101030959|02059|eafc8188345e262b +BK|sql-bench/Results/RUN-mysql-SunOS_5.7_sun4u|19700101030959|02061|86e1dc0e25a8b8f BK|sql-bench/Results/RUN-mysql_3.21-Linux_2.0.35_i686|19700101030959|02064|ea8672d8473435 BK|sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02310|a902e1a967d79c42 BK|sql-bench/Results/RUN-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02030|413ab3b8a99e61e9 @@ -273,7 +277,9 @@ BK|sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686|19700101030959|0207 BK|sql-bench/Results/alter-table-mysql-Linux_2.2.10_i686|19700101030959|02081|93b78a85b720a186 BK|sql-bench/Results/alter-table-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02314|4ae4b989301df98b BK|sql-bench/Results/alter-table-mysql-Linux_2.2.14_i686_xeon|19700101030959|02057|64cc4b874cd6fabf +BK|sql-bench/Results/alter-table-mysql-SunOS_5.5.1_sun4u|19700101030959|02087|9d7e75667fcb29ec BK|sql-bench/Results/alter-table-mysql-SunOS_5.6_sun4m|19700101030959|02088|8a1bd6589a189890 +BK|sql-bench/Results/alter-table-mysql-SunOS_5.7_sun4u|19700101030959|02090|ce74c2f623d3bb3 BK|sql-bench/Results/alter-table-mysql_3.21-Linux_2.0.35_i686|19700101030959|02092|762639f2560976bd BK|sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02316|1390155aad5b6e86 BK|sql-bench/Results/alter-table-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02317|9090bebb62ef164b @@ -283,7 +289,9 @@ BK|sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686|19700101030959|02106 BK|sql-bench/Results/big-tables-mysql-Linux_2.2.10_i686|19700101030959|02109|99daa1c5370d077d BK|sql-bench/Results/big-tables-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02315|2804ec3c95be436a BK|sql-bench/Results/big-tables-mysql-Linux_2.2.14_i686_xeon|19700101030959|02074|290c2c3de9d8e6b +BK|sql-bench/Results/big-tables-mysql-SunOS_5.5.1_sun4u|19700101030959|02115|7d7b6c0bf58b9b79 BK|sql-bench/Results/big-tables-mysql-SunOS_5.6_sun4m|19700101030959|02116|f351a7f3e1e2257e +BK|sql-bench/Results/big-tables-mysql-SunOS_5.7_sun4u|19700101030959|02118|ebc379b231312bbe BK|sql-bench/Results/big-tables-mysql_3.21-Linux_2.0.35_i686|19700101030959|02120|190e827e569c99a4 BK|sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02318|c5eabcb89ceac698 BK|sql-bench/Results/big-tables-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02319|856d503725373684 @@ -293,7 +301,9 @@ BK|sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686|19700101030959|02134|c0 BK|sql-bench/Results/connect-mysql-Linux_2.2.10_i686|19700101030959|02137|c92505d77e19d5ec BK|sql-bench/Results/connect-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02084|e7e2959b7387251f BK|sql-bench/Results/connect-mysql-Linux_2.2.14_i686_xeon|19700101030959|02071|ea19dc3ec55b3618 +BK|sql-bench/Results/connect-mysql-SunOS_5.5.1_sun4u|19700101030959|02142|a9493110fe62e0b1 BK|sql-bench/Results/connect-mysql-SunOS_5.6_sun4m|19700101030959|02143|a10e3ddfa26a3e7f +BK|sql-bench/Results/connect-mysql-SunOS_5.7_sun4u|19700101030959|02145|c67beb9e9d2cf32e BK|sql-bench/Results/connect-mysql_3.21-Linux_2.0.35_i686|19700101030959|02146|650abd213e6828c6 BK|sql-bench/Results/connect-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02320|ce69cc65bc827b5c BK|sql-bench/Results/connect-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02066|f801e08429a4f7c6 @@ -303,7 +313,9 @@ BK|sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686|19700101030959|02158|515 BK|sql-bench/Results/create-mysql-Linux_2.2.10_i686|19700101030959|02161|9e7822f66df6aa76 BK|sql-bench/Results/create-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02102|34ded91c5fc25de9 BK|sql-bench/Results/create-mysql-Linux_2.2.14_i686_xeon|19700101030959|02139|50d15991293030ef +BK|sql-bench/Results/create-mysql-SunOS_5.5.1_sun4u|19700101030959|02166|bbb5de66fc56de7b BK|sql-bench/Results/create-mysql-SunOS_5.6_sun4m|19700101030959|02221|9233114ae6f8c5f +BK|sql-bench/Results/create-mysql-SunOS_5.7_sun4u|19700101030959|02223|7ee13bfcafeab498 BK|sql-bench/Results/create-mysql_3.21-Linux_2.0.35_i686|19700101030959|02225|df1b037d17b33587 BK|sql-bench/Results/create-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02321|e985e71d552ff09e BK|sql-bench/Results/create-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02099|483dcf223d5abf81 @@ -313,7 +325,9 @@ BK|sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686|19700101030959|02239|fd0 BK|sql-bench/Results/insert-mysql-Linux_2.2.10_i686|19700101030959|02242|763edf9aec633f51 BK|sql-bench/Results/insert-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02130|5be3d6f299738a31 BK|sql-bench/Results/insert-mysql-Linux_2.2.14_i686_xeon|19700101030959|02141|c683ee4b9d214298 +BK|sql-bench/Results/insert-mysql-SunOS_5.5.1_sun4u|19700101030959|02247|8a9ae41f9a79f79 BK|sql-bench/Results/insert-mysql-SunOS_5.6_sun4m|19700101030959|02248|3402d060ae20e19 +BK|sql-bench/Results/insert-mysql-SunOS_5.7_sun4u|19700101030959|02250|78efa132c6e252b9 BK|sql-bench/Results/insert-mysql_3.21-Linux_2.0.35_i686|19700101030959|02252|60c0965dff31db07 BK|sql-bench/Results/insert-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02322|ed252140ff399961 BK|sql-bench/Results/insert-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02114|29a3b8a1ca8aa9d @@ -323,7 +337,9 @@ BK|sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686|19700101030959|02265|ed3 BK|sql-bench/Results/select-mysql-Linux_2.2.10_i686|19700101030959|02268|a2e264d777b787d BK|sql-bench/Results/select-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02227|308117295c3bc096 BK|sql-bench/Results/select-mysql-Linux_2.2.14_i686_xeon|19700101030959|02152|ead3f11b46ac626f +BK|sql-bench/Results/select-mysql-SunOS_5.5.1_sun4u|19700101030959|02273|c9a1a498a052e268 BK|sql-bench/Results/select-mysql-SunOS_5.6_sun4m|19700101030959|02274|4da215905bce988d +BK|sql-bench/Results/select-mysql-SunOS_5.7_sun4u|19700101030959|02276|632c92971c61e34a BK|sql-bench/Results/select-mysql_3.21-Linux_2.0.35_i686|19700101030959|02278|5fadbac5f98696a BK|sql-bench/Results/select-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02323|e8c0871a668a610d BK|sql-bench/Results/select-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02127|963a98ed526e2be4 @@ -333,7 +349,9 @@ BK|sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686|19700101030959|02290| BK|sql-bench/Results/wisconsin-mysql-Linux_2.2.10_i686|19700101030959|02288|301a82b12a84922b BK|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02280|d01900af34fb33b8 BK|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_i686_xeon|19700101030959|02154|7525b23938631801 +BK|sql-bench/Results/wisconsin-mysql-SunOS_5.5.1_sun4u|19700101030959|02297|379705afa2e12378 BK|sql-bench/Results/wisconsin-mysql-SunOS_5.6_sun4m|19700101030959|02298|ec61b14072715dc8 +BK|sql-bench/Results/wisconsin-mysql-SunOS_5.7_sun4u|19700101030959|02300|f27927f8c64ea8ad BK|sql-bench/Results/wisconsin-mysql_3.21-Linux_2.0.35_i686|19700101030959|02302|31703d40ea6b4f66 BK|sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02324|ec075a89dbdbbe6a BK|sql-bench/Results/wisconsin-pg-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02325|233d5aa529979990 @@ -652,6 +670,7 @@ mwagner@evoq.home.mwagner.org|Docs/Books/prof.eps|20001231203220|15779|dc69b0395 mwagner@evoq.home.mwagner.org|Docs/Books/pthreads.eps|20001231203220|18899|d60ad51891ef4c49 mwagner@evoq.home.mwagner.org|Docs/Books/realmen.eps|20001231203220|22075|1ceb4839e835dad4 mwagner@evoq.home.mwagner.org|Docs/Books/sql-99.eps|20001231203220|25230|cec4ae16fee4c640 +mwagner@evoq.home.mwagner.org|mysql-test/chew_on_this/select.res|20001014084759|41327|1295456b9394876 mwagner@evoq.home.mwagner.org|mysql-test/chew_on_this/select.res|20001014084759|41327|1295456b93948768 mwagner@evoq.home.mwagner.org|mysql-test/chew_on_this/select.tst|20001013104933|54568|2e626fa07144d2c8 mwagner@evoq.home.mwagner.org|mysql-test/mybin/start-mysqld|20001016055648|54840|9c8f21a7ab97793a @@ -726,6 +745,8 @@ mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000029.xml|20001017133713| mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000030.xml|20001017133600|63205|c2b25781eefaee9 mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/README|20001013051514|26509|cd4bb681e5a0cd10 mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/mysqltest.xsl|20001013051514|27425|1b8f6ec4f1b5f634 +mwagner@work.mysql.com|mysql-test/r/3.23/sel000001.result|20001010091454|28284|383913ae4505ec86 +mwagner@work.mysql.com|mysql-test/r/3.23/sel000002.result|20001010091454|29230|d1787e6fd5dbc1cc nick@nick.leippe.com|mysql-test/r/rpl_empty_master_crash.result|20020531235552|47718|615f521be2132141 nick@nick.leippe.com|mysql-test/t/rpl_empty_master_crash.test|20020531235552|52328|99464e737639ccc6 sasha@mysql.sashanet.com|BitKeeper/etc/logging_ok|20000801000905|12967|5b7d847a2158554 @@ -733,19 +754,36 @@ sasha@mysql.sashanet.com|build-tags|20011125054855|05181|7afb7e785b80f97 sasha@mysql.sashanet.com|build-tags|20011201050944|25384|b6f6fff142121618 sasha@mysql.sashanet.com|libmysql_r/acconfig.h|20001128060846|51084|65f1202b3b5c345f sasha@mysql.sashanet.com|mysql-test/README.gcov|20001012045950|28177|5a6da067a30780ce +sasha@mysql.sashanet.com|mysql-test/README.gcov|20001214012355|41825|2de7575ca81155e5 sasha@mysql.sashanet.com|mysql-test/README|20001010001022|12739|108667adaeabe3f5 sasha@mysql.sashanet.com|mysql-test/r/3.23/alt000001.result|20001122072330|24729|393103dbf15f35c9 +sasha@mysql.sashanet.com|mysql-test/r/3.23/ins000001.result|20001018175743|49824|f45c599efdf8352b sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000001.a.result|20001118063528|39426|2987b17db06808c3 sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000001.b.result|20001118063528|44057|62e1fa91167cacc3 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000002.result|20001118063528|46039|109f5ceed1e0d64 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000003.result|20001118063528|48148|68d6ee00beaa011 sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.a.result|20001118063528|50132|3415f066cb91c460 sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.b.result|20001118063528|52094|352b35351551485 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000005.result|20001118063528|54071|a50962bc2340ab9a +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000006.result|20001118063528|56081|5653051e8ce6b4aa +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000007.result|20001121063807|21606|e0c3b6134e0884da +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000008.result|20001121063807|23636|c5cfee19ca5a7da9 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000009.result|20001121063807|25633|ed8042446ab97926 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000010.result|20001122072330|29430|3228109b8965b0f8 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000011.result|20001125024912|48851|c29dce30aa97f265 +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000012.result|20001126062901|05938|35d6596da7b90fc5 sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000012.status.result|20001126062901|09395|bbbd650b5beea32f +sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000013.result|20001202171150|03876|ac5024e6cf6daac6 sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000013.status.result|20001202171150|06069|6bee190c298cc9fd +sasha@mysql.sashanet.com|mysql-test/r/3.23/sel000003.result|20001011230020|64653|d7b657b1e3a286a7 +sasha@mysql.sashanet.com|mysql-test/r/3.23/sel000100.res|20001205131218|23520|84ed46856cb3a69f sasha@mysql.sashanet.com|mysql-test/r/3.23/shw000001.result|20001121234128|16652|8b20b03d8319b9a5 sasha@mysql.sashanet.com|mysql-test/r/binlog-backup-restore.result|20010424233926|16010|605de78abda64d27 sasha@mysql.sashanet.com|mysql-test/r/df_crash.result|20010406010433|59989|4a3dbee64843953d sasha@mysql.sashanet.com|mysql-test/r/identity.result|20010910233028|16331|e41453a364242503 sasha@mysql.sashanet.com|mysql-test/r/mrg000002.result|20001212152450|11492|745be0854aaaaf5e +sasha@mysql.sashanet.com|mysql-test/r/slave-running.result|20001208141122|24303|f73e49462cf59e1f +sasha@mysql.sashanet.com|mysql-test/r/slave-stopped.result|20001208141122|28916|25c134b1a4f1993a sasha@mysql.sashanet.com|mysql-test/std_data/m.MRG|20001212152450|17736|3f5632c37af00f18 sasha@mysql.sashanet.com|mysql-test/std_data/m.frm|20001212152450|13897|e351dfe0b6824c0c sasha@mysql.sashanet.com|mysql-test/std_data/select-key.master|20001009234916|07315|e6b83af25df0ce5 diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 5f7bbf0e9ee..aec1275d516 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -20,6 +20,7 @@ heikki@donna.mysql.fi heikki@hundin.mysql.fi heikki@rescue. heikki@work.mysql.com +hf@genie.(none) jani@dsl-jkl1657.dial.inet.fi jani@hynda.(none) jani@hynda.mysql.fi diff --git a/Build-tools/Do-compile b/Build-tools/Do-compile index 9f62b617056..a29bd99191d 100755 --- a/Build-tools/Do-compile +++ b/Build-tools/Do-compile @@ -215,7 +215,14 @@ if ($opt_stage <= 1) # Only enable InnoDB when requested (required to be able to # build the "Classic" packages that do not include InnoDB) - $opt_config_options.= " --without-innodb" if (!$opt_innodb); + if ($opt_innodb) + { + $opt_config_options.= " --with-innodb"; + } + else + { + $opt_config_options.= " --without-innodb"; + } if ($opt_with_other_libc) { @@ -314,7 +321,7 @@ if (!$opt_no_test) } if ($opt_innodb) { - $extra.=" --innodb_data_file_path=ibdata1:100M"; + $extra.=" --innodb_data_file_path=ibdata1:100M:autoextend"; } safe_system("./bin/mysqld --no-defaults --basedir . --datadir ./data --skip-locking $extra >> $log 2>&1 &"); sleep(2); diff --git a/Docs/manual.texi b/Docs/manual.texi index c53bd24ac86..c39da1e37d1 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -9934,7 +9934,9 @@ Error in accept: Protocol error @end example You might try starting the server with the @code{--set-variable back_log=50} -option as a workaround for this. @xref{Command-line options}. +option as a workaround for this. Please note that @code{--set-variable} is +deprecated since @strong{MySQL 4.0}, just use @code{--back_log=50} instead. +@xref{Command-line options}. If you are linking your own MySQL client, you might get the following error when you try to execute it: @@ -14390,7 +14392,9 @@ Only use one thread (for debugging under Linux). @xref{Debugging server}. Give a variable a value. @code{--help} lists variables. You can find a full description for all variables in the @code{SHOW VARIABLES} section in this manual. @xref{SHOW VARIABLES}. The tuning server parameters section includes -information of how to optimise these. @xref{Server parameters}. +information of how to optimize these. Please note that @code{--set-variable} +is deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead. +@xref{Server parameters}. In MySQL 4.0.2 one can set a variable directly with @code{--variable-name=option} and @code{set-variable} is not anymore needed @@ -14611,7 +14615,9 @@ This is equivalent to @code{--option=value} on the command-line. @item set-variable = variable=value This is equivalent to @code{--set-variable variable=value} on the command-line. -This syntax must be used to set a @code{mysqld} variable. +This syntax must be used to set a @code{mysqld} variable. Please note that +@code{--set-variable} is deprecated since @strong{MySQL 4.0}, just use +@code{--variable=value} instead. @end table The @code{client} group allows you to specify options that apply to all @@ -18164,8 +18170,10 @@ Output debug log. The @code{debug_options} string often is @item -? or --help Display a help message and exit. @item -O var=option, --set-variable var=option -Set the value of a variable. The possible variables and their default values -for myisamchk can be examined with @code{myisamchk --help}: +Set the value of a variable. Please note that @code{--set-variable} is +deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead. +The possible variables and their default values for myisamchk can be examined +with @code{myisamchk --help}: @multitable @columnfractions .20 .10 @item @strong{Variable} @tab @strong{Value} @item key_buffer_size @tab 523264 @@ -22104,6 +22112,8 @@ Don't write column names in results. @cindex @code{set-variable}, @code{mysql} option @item -O, --set-variable var=option Give a variable a value. @code{--help} lists variables. +Please note that @code{--set-variable} is deprecated since +@strong{MySQL 4.0}, just use @code{--var=option} instead. @cindex @code{one-database}, @code{mysql} option @item -o, --one-database @@ -22181,7 +22191,8 @@ Wait and retry if connection is down instead of aborting. @end table You can also set the following variables with @code{-O} or -@code{--set-variable}: +@code{--set-variable}; please note that @code{--set-variable} is +deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead: @cindex timeout, @code{connect_timeout} variable @cindex @code{connect_timeout} variable @@ -22874,6 +22885,8 @@ The MySQL user name to use when connecting to the server. The default value is your Unix login name. @item -O var=option, --set-variable var=option Set the value of a variable. The possible variables are listed below. +Please note that @code{--set-variable} is deprecated since +@strong{MySQL 4.0}, just use @code{--var=option} instead. @item -v, --verbose Verbose mode. Print out more information on what the program does. @item -V, --version @@ -27396,6 +27409,9 @@ thread_stack current value: 131072 wait_timeout current value: 28800 @end example +Please note that @code{--set-variable} is deprecated since +@strong{MySQL 4.0}, just use @code{--var=option} instead. + If there is a @code{mysqld} server currently running, you can see what values it actually is using for the variables by executing this command: @@ -45679,7 +45695,7 @@ will be active. static char *server_args[] = @{ "this_program", /* this string is not used */ "--datadir=.", - "--set-variable=key_buffer_size=32M" + "--key_buffer_size=32M" @}; static char *server_groups[] = @{ "embedded", @@ -47995,6 +48011,8 @@ use big packets so that you run out of memory. If you are using the @code{mysql} client, you may specify a bigger buffer by starting the client with @code{mysql --set-variable=max_allowed_packet=8M}. Other clients have different methods to set this variable. +Please note that @code{--set-variable} is deprecated since +@strong{MySQL 4.0}, just use @code{--max-allowed-packet=8M} instead. You can use the option file to set @code{max_allowed_packet} to a larger size in @code{mysqld}. For example, if you are expecting to store the @@ -50797,6 +50815,8 @@ each individual 4.0.x release. @appendixsubsec Changes in release 4.0.5 @itemize @item +Small code improvement in multi-table updates +@item Fixed a newly introduced bug that caused @code{ORDER BY ... LIMIT #} to not return all rows. @item @@ -50826,6 +50846,12 @@ original @code{--ignore-spaces} in @code{mysqlclient}. (Both syntaxes will work). @item Don't require @code{UPDATE} privilege when using @code{REPLACE}. +@item +Allow braces in joins in all positions. Formerly, things like +@code{SELECT * FROM (t2 LEFT JOIN t3 USING (a)), t1} worked, but +not @code{SELECT * FROM t1, (t2 LEFT JOIN t3 USING (a))}. Note that +braces are simply removed, they do not change the way the join is +executed. @end itemize @node News-4.0.4, News-4.0.3, News-4.0.5, News-4.0.x @@ -51654,6 +51680,8 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.54 @itemize @item +Fixed a problem with BDB and @code{ALTER TABLE}. +@item Fixed reference to freed memory when doing complicated @code{GROUP BY ... ORDER BY} queries. Symptom was that @code{mysqld} died in function @code{send_fields}. @@ -51689,8 +51717,6 @@ Small fix in @code{safe_mysqld} for some shells. @item Fixed that @code{FLUSH STATUS} doesn't reset @code{Delayed_insert_threads}. @item -Fixed that @code{SHOW STATUS} doesn't reset @code{Delayed_insert_threads}. -@item Fixed core dump bug when using the @code{BINARY} cast on a @code{NULL} value. @item Fixed race condition when someone did a @code{GRANT} at the same time a new diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 394555f37a9..24b67a60255 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -16,7 +16,7 @@ /* By Jani Tolonen, 2001-04-20, MySQL Development Team */ -#define CHECK_VERSION "2.4.1" +#define CHECK_VERSION "2.4.2" #include "client_priv.h" #include <m_ctype.h> @@ -463,7 +463,7 @@ static int handle_request_for_tables(char *tables, uint length) if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) return 1; - sprintf(query, "%s TABLE `%s` %s", op, tables, options); + sprintf(query, "%s TABLE %s %s", op, tables, options); if (mysql_query(sock, query)) { sprintf(message, "when executing '%s TABLE `%s` %s", op, tables,options); @@ -493,12 +493,9 @@ static void print_result() if (status) { - if (found_error) - { - if (what_to_do != DO_REPAIR && opt_auto_repair && - (!opt_fast || strcmp(row[3],"OK"))) - insert_dynamic(&tables4repair, row[0]); - } + if (found_error && opt_auto_repair && what_to_do != DO_REPAIR && + (!opt_fast || strcmp(row[3],"OK"))) + insert_dynamic(&tables4repair, prev); found_error=0; if (opt_silent) continue; @@ -515,6 +512,9 @@ static void print_result() strmov(prev, row[0]); putchar('\n'); } + if (found_error && opt_auto_repair && what_to_do != DO_REPAIR && + (!opt_fast || strcmp(row[3],"OK"))) + insert_dynamic(&tables4repair, prev); mysql_free_result(res); } diff --git a/innobase/pars/lexyy.c b/innobase/pars/lexyy.c index f7edc9d195f..782fca35f66 100644 --- a/innobase/pars/lexyy.c +++ b/innobase/pars/lexyy.c @@ -4,6 +4,8 @@ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ */ +#include "univ.i" + #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 @@ -607,13 +609,18 @@ How to make the InnoDB parser and lexer C files: 6. Remove the #include of unistd.h from about line 2500 of lexyy.c +7. Move #include <math.h> in pars0grm.c after #include "univ.i" to remove + a large file compilation error on AIX. + +8. Move #include "univ.i" in lexyy.c to the file start to remove a large + file compilation error on AIX. + These instructions seem to work at least with bison-1.28 and flex-2.5.4 on Linux. *******************************************************/ #line 36 "pars0lex.l" #define YYSTYPE que_node_t* -#include "univ.i" #include "pars0pars.h" #include "pars0grm.h" #include "pars0sym.h" diff --git a/innobase/pars/pars0grm.c b/innobase/pars/pars0grm.c index 05b75398084..ce575063610 100644 --- a/innobase/pars/pars0grm.c +++ b/innobase/pars/pars0grm.c @@ -102,6 +102,8 @@ que_node_t */ #include "que0que.h" #include "row0sel.h" +#include <math.h> + #define YYSTYPE que_node_t* /* #define __STDC__ */ diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 42ad0021542..09681fa3a63 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -107,6 +107,7 @@ void start_embedded_conn1(NET * net) thd->command=COM_SLEEP; thd->version=refresh_version; thd->set_time(); + bzero(thd->scramble, sizeof(thd->scramble)); init_sql_alloc(&thd->mem_root,8192,8192); check_connections1(thd); diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c index fadffc0535e..2b9b6cedcf6 100644 --- a/myisam/ft_boolean_search.c +++ b/myisam/ft_boolean_search.c @@ -202,7 +202,8 @@ static void _ftb_init_index_search(FT_INFO *ftb) MI_KEYDEF *keyinfo; my_off_t keyroot; - if (ftb->state != READY || ftb->keynr == NO_SUCH_KEY) + if ((ftb->state != READY && ftb->state !=INDEX_DONE) || + ftb->keynr == NO_SUCH_KEY) return; ftb->state=INDEX_SEARCH; diff --git a/myisam/ft_nlq_search.c b/myisam/ft_nlq_search.c index f3fa8865bc6..7225896c69e 100644 --- a/myisam/ft_nlq_search.c +++ b/myisam/ft_nlq_search.c @@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #error #endif + DBUG_ENTER("walk_and_match"); + word->weight=LWS_FOR_QUERY; keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0); @@ -112,7 +114,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) #else #error #endif - if(tmp_weight==0) return doc_cnt; /* stopword, doc_cnt should be 0 */ + if(tmp_weight==0) DBUG_RETURN(doc_cnt); /* stopword, doc_cnt should be 0 */ #ifdef EVAL_RUN cnt=*(byte *)(aio->info->lastkey+keylen); @@ -122,7 +124,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) /* saving document matched into dtree */ if (!(selem=tree_insert(&aio->dtree, &sdoc, 0, aio->dtree.custom_arg))) - return 1; + DBUG_RETURN(1); sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem); @@ -153,21 +155,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) if (doc_cnt) { word->weight*=GWS_IN_USE; - if (word->weight < 0) - word->weight=0; + if (word->weight < 0) word->weight=0; + } - return 0; + DBUG_RETURN(0); } static int walk_and_copy(FT_SUPERDOC *from, uint32 count __attribute__((unused)), FT_DOC **to) { + DBUG_ENTER("walk_and_copy"); from->doc.weight+=from->tmp_weight*from->word_ptr->weight; (*to)->dpos=from->doc.dpos; (*to)->weight=from->doc.weight; (*to)++; - return 0; + DBUG_RETURN(0); } @@ -185,12 +188,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, FT_DOC *dptr; FT_INFO *dlist=NULL; my_off_t saved_lastpos=info->lastpos; + DBUG_ENTER("ft_init_nlq_search"); /* black magic ON */ if ((int) (keynr = _mi_check_index(info,keynr)) < 0) - return NULL; + DBUG_RETURN(NULL); if (_mi_readinfo(info,F_RDLCK,1)) - return NULL; + DBUG_RETURN(NULL); /* black magic OFF */ aio.info=info; @@ -237,7 +241,7 @@ err2: err: info->lastpos=saved_lastpos; - return dlist; + DBUG_RETURN(dlist); } diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c index 583518089ba..29a48352cd6 100644 --- a/myisam/ft_parser.c +++ b/myisam/ft_parser.c @@ -190,6 +190,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) { byte *doc=*start; int mwc; + DBUG_ENTER("ft_simple_get_word"); while (doc<end) { @@ -211,32 +212,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) !is_stopword(word->pos, word->len)) { *start=doc; - return 1; + DBUG_RETURN(1); } } - return 0; + DBUG_RETURN(0); } void ft_parse_init(TREE *wtree, CHARSET_INFO *cs) { + DBUG_ENTER("ft_parse_init"); if (!is_tree_inited(wtree)) init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs); + DBUG_VOID_RETURN; } int ft_parse(TREE *wtree, byte *doc, int doclen) { byte *end=doc+doclen; FT_WORD w; + DBUG_ENTER("ft_parse"); while (ft_simple_get_word(&doc,end,&w)) { if (!tree_insert(wtree, &w, 0, wtree->custom_arg)) goto err; } - return 0; + DBUG_RETURN(0); err: delete_tree(wtree); - return 1; + DBUG_RETURN(1); } diff --git a/myisam/ftdefs.h b/myisam/ftdefs.h index 22a81ca4f9c..592b60a0133 100644 --- a/myisam/ftdefs.h +++ b/myisam/ftdefs.h @@ -78,7 +78,7 @@ extern ulong collstat; /* Mysterious, but w/o (double) GWS_IDF performs better :-o */ #define GWS_IDF log(aio->info->state->records/doc_cnt) #define GWS_IDF1 log((double)aio->info->state->records/doc_cnt) -#define GWS_PROB log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) +#define GWS_PROB ((aio->info->state->records > doc_cnt) ? log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) : 0 ) #define GWS_FREQ (1.0/doc_cnt) #define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2) #define GWS_CUBIC pow(log((double)aio->info->state->records/doc_cnt),3) diff --git a/myisam/mi_create.c b/myisam/mi_create.c index 0fe983bf115..8087d17904a 100644 --- a/myisam/mi_create.c +++ b/myisam/mi_create.c @@ -404,7 +404,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, length+=key_length; keydef->block_length= MI_BLOCK_SIZE(length,pointer,MI_MAX_KEYPTR_SIZE); if (keydef->block_length > MI_MAX_KEY_BLOCK_LENGTH || - length > MI_MAX_KEY_LENGTH) + length >= MI_MAX_KEY_BUFF) { my_errno=HA_WRONG_CREATE_OPTION; goto err; diff --git a/myisam/mi_delete_all.c b/myisam/mi_delete_all.c index 7e4239bc7d1..45e56626d59 100644 --- a/myisam/mi_delete_all.c +++ b/myisam/mi_delete_all.c @@ -15,7 +15,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Remove all rows from a MyISAM table */ -/* This only clears the status information and truncates the data file */ +/* This clears the status information and truncates files */ #include "myisamdef.h" @@ -49,14 +49,15 @@ int mi_delete_all_rows(MI_INFO *info) state->key_root[i]= HA_OFFSET_ERROR; myisam_log_command(MI_LOG_DELETE_ALL,info,(byte*) 0,0,0); - VOID(_mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE)); - if (my_chsize(info->dfile, 0, 0, MYF(MY_WME))) - goto err; /* If we are using delayed keys or if the user has done changes to the tables since it was locked then there may be key blocks in the key cache */ flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED); + if (my_chsize(info->dfile, 0, 0, MYF(MY_WME)) || + my_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)) ) + goto err; + VOID(_mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE)); allow_break(); /* Allow SIGHUP & SIGINT */ DBUG_RETURN(0); diff --git a/mysql-test/t/bdb-crash.test b/mysql-test/t/bdb-crash.test index cdbc2dbe0e4..0005b631a46 100644 --- a/mysql-test/t/bdb-crash.test +++ b/mysql-test/t/bdb-crash.test @@ -1,4 +1,5 @@ -- source include/have_bdb.inc + # test for bug reported by Mark Steele drop table if exists t1; diff --git a/mysys/my_init.c b/mysys/my_init.c index ee39f7201ca..2f5088d5b9e 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -217,6 +217,10 @@ static void my_win_init(void) setlocale(LC_CTYPE, ""); /* To get right sortorder */ + /* Clear the OS system variable TZ and avoid the 100% CPU usage */ + _putenv( "TZ=" ); + _tzset(); + /* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0, KEY_READ,&hSoftMysql) != ERROR_SUCCESS) @@ -240,7 +244,7 @@ static void my_win_init(void) /* Inserisce i dati come variabili d'ambiente */ my_env=strdup(EnvString); /* variable for putenv must be allocated ! */ - putenv(EnvString) ; + putenv(my_env) ; dimNameValueBuffer = dimName ; dimDataValueBuffer = dimData ; diff --git a/scripts/mysql_convert_table_format.sh b/scripts/mysql_convert_table_format.sh index 6b9a75228d3..c1955e632fb 100644 --- a/scripts/mysql_convert_table_format.sh +++ b/scripts/mysql_convert_table_format.sh @@ -64,7 +64,7 @@ foreach $table (@ARGV) { if (uc($row->[1]) eq uc($opt_type)) { - print "$table is alread of type $opt_type; Ignored\n"; + print "$table is already of type $opt_type; Ignored\n"; next; } } diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh index 1366a9ea713..b868006ee40 100644 --- a/scripts/mysqld_multi.sh +++ b/scripts/mysqld_multi.sh @@ -4,7 +4,7 @@ use Getopt::Long; use POSIX qw(strftime); $|=1; -$VER="2.3"; +$VER="2.4"; $opt_config_file = undef(); $opt_example = 0; @@ -508,8 +508,8 @@ sub example [mysqld_multi] mysqld = @bindir@/mysqld_safe mysqladmin = @bindir@/mysqladmin -user = multi_admin -password = multipass +user = root +password = your_password [mysqld2] socket = /tmp/mysql.sock2 diff --git a/scripts/mysqlhotcopy.sh b/scripts/mysqlhotcopy.sh index d808ffdcaef..bc23c0e5d95 100644 --- a/scripts/mysqlhotcopy.sh +++ b/scripts/mysqlhotcopy.sh @@ -559,15 +559,15 @@ sub copy_files { my @cp = ($method); # add option to preserve mod time etc of copied files # not critical, but nice to have - push @cp, "-p" if $^O =~ m/^(solaris|linux|freebsd)$/; + push @cp, "-p" if $^O =~ m/^(solaris|linux|freebsd|darwin)$/; # add recursive option for scp - push @cp, "-r" if $^O =~ /m^(solaris|linux|freebsd)$/ && $method =~ /^scp\b/; + push @cp, "-r" if $^O =~ /m^(solaris|linux|freebsd|darwin)$/ && $method =~ /^scp\b/; my @non_raid = map { "'$_'" } grep { ! m:/\d{2}/[^/]+$: } @$files; # add files to copy and the destination directory -+ safe_system( @cp, @non_raid, "'$target'" ); + safe_system( @cp, @non_raid, "'$target'" ); foreach my $rd ( @$raid_dirs ) { my @raid = map { "'$_'" } grep { m:$rd/: } @$files; diff --git a/sql/item_func.cc b/sql/item_func.cc index 882aa7b5b75..6fce3df683a 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2180,8 +2180,9 @@ err: void Item_func_match::init_search(bool no_order) { + DBUG_ENTER("Item_func_match::init_search"); if (ft_handler) - return; + DBUG_VOID_RETURN; if (key == NO_SUCH_KEY) concat=new Item_func_concat_ws(new Item_string(" ",1, @@ -2194,7 +2195,7 @@ void Item_func_match::init_search(bool no_order) master->init_search(no_order); ft_handler=master->ft_handler; join_key=master->join_key; - return; + DBUG_VOID_RETURN; } String *ft_tmp= 0; @@ -2214,10 +2215,9 @@ void Item_func_match::init_search(bool no_order) join_key && !no_order); if (join_key) - { table->file->ft_handler=ft_handler; - return; - } + + DBUG_VOID_RETURN; } @@ -2367,13 +2367,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const double Item_func_match::val() { + DBUG_ENTER("Item_func_match::val"); if (ft_handler == NULL) - return -1.0; + DBUG_RETURN(-1.0); if (join_key) { if (table->file->ft_handler) - return ft_handler->please->get_relevance(ft_handler); + DBUG_RETURN(ft_handler->please->get_relevance(ft_handler)); join_key=0; } @@ -2381,12 +2382,12 @@ double Item_func_match::val() { String *a= concat->val_str(&value); if ((null_value= (a == 0))) - return 0; - return ft_handler->please->find_relevance(ft_handler, - (byte *)a->ptr(), a->length()); + DBUG_RETURN(0); + DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, + (byte *)a->ptr(), a->length())); } else - return ft_handler->please->find_relevance(ft_handler, record, 0); + DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, record, 0)); } diff --git a/sql/log_event.h b/sql/log_event.h index ad0a44f9b4a..db6ea0e6759 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -516,6 +516,35 @@ class Rand_log_event: public Log_event #ifndef MYSQL_CLIENT Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg) :Log_event(thd_arg),seed1(seed1_arg),seed2(seed2_arg) + {} + void pack_info(String* packet); + int exec_event(struct st_relay_log_info* rli); +#else + void print(FILE* file, bool short_form = 0, char* last_db = 0); +#endif + + Rand_log_event(const char* buf, bool old_format); + ~Rand_log_event() {} + Log_event_type get_type_code() { return RAND_EVENT;} + int get_data_size() { return sizeof(ulonglong) * 2; } + int write_data(IO_CACHE* file); + bool is_valid() { return 1; } +}; + +/***************************************************************************** + * + * Rand log event class + * + ****************************************************************************/ +class Rand_log_event: public Log_event +{ + public: + ulonglong seed1; + ulonglong seed2; + +#ifndef MYSQL_CLIENT + Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg) + :Log_event(thd_arg),seed1(seed1_arg),seed2(seed2_arg) {} void pack_info(String* packet); int exec_event(struct st_relay_log_info* rli); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index e91ede0bf71..c57e0fc38d1 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2416,6 +2416,7 @@ static void create_new_thread(THD *thd) for (uint i=0; i < 8 ; i++) // Generate password teststring thd->scramble[i]= (char) (rnd(&sql_rand)*94+33); thd->scramble[8]=0; + thd->real_id=pthread_self(); // Keep purify happy /* Start a new thread to handle connection */ diff --git a/sql/nt_servc.cc b/sql/nt_servc.cc index 129df9864e2..2d0eae125d6 100644 --- a/sql/nt_servc.cc +++ b/sql/nt_servc.cc @@ -426,7 +426,17 @@ BOOL NTService::SeekStatus(LPCSTR szInternName, int OperationType) // open a connection to the SCM if (!(scm = OpenSCManager(0, 0,SC_MANAGER_CREATE_SERVICE))) - printf("There is a problem with the Service Control Manager!\n"); + { + DWORD ret_error=GetLastError(); + if (ret_error == ERROR_ACCESS_DENIED) + { + printf("Install/Remove of the Service Denied!\n"); + if(!is_super_user()) + printf("That operation should be made by an user with Administrator privileges!\n"); + } + else + printf("There is a problem for to open the Service Control Manager!\n"); + } else { if (OperationType == 1) @@ -507,3 +517,82 @@ BOOL NTService::got_service_option(char **argv, char *service_option) return TRUE; return FALSE; } +/* ------------------------------------------------------------------------ + -------------------------------------------------------------------------- */ +BOOL NTService::is_super_user() +{ + HANDLE hAccessToken; + UCHAR InfoBuffer[1024]; + PTOKEN_GROUPS ptgGroups=(PTOKEN_GROUPS)InfoBuffer; + DWORD dwInfoBufferSize; + PSID psidAdministrators; + SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY; + UINT x; + BOOL ret_value=FALSE; + + if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,&hAccessToken )) + { + if(GetLastError() != ERROR_NO_TOKEN) + return FALSE; + + if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hAccessToken)) + return FALSE; + } + + ret_value= GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer, + 1024, &dwInfoBufferSize); + + CloseHandle(hAccessToken); + + if(!ret_value ) + return FALSE; + + if(!AllocateAndInitializeSid(&siaNtAuthority, 2, + SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, + 0, 0, 0, 0, 0, 0, + &psidAdministrators)) + return FALSE; + + ret_value = FALSE; + + for(x=0;x<ptgGroups->GroupCount;x++) + { + if( EqualSid(psidAdministrators, ptgGroups->Groups[x].Sid) ) + { + ret_value = TRUE; + break; + } + + } + FreeSid(psidAdministrators); + return ret_value; +} +/* ------------------------------------------------------------------------ + -------------------------------------------------------------------------- */ +BOOL NTService::IsService(LPCSTR ServiceName) +{ + BOOL ret_value=FALSE; + SC_HANDLE service, scm; + + if (scm = OpenSCManager(0, 0,SC_MANAGER_ENUMERATE_SERVICE)) + { + if ((service = OpenService(scm,ServiceName, SERVICE_ALL_ACCESS ))) + { + ret_value=TRUE; + CloseServiceHandle(service); + } + CloseServiceHandle(scm); + } + return ret_value; +} +/* ------------------------------------------------------------------------ + -------------------------------------------------------------------------- */ +BOOL NTService::got_service_option(char **argv, char *service_option) +{ + char *option; + for (option= argv[1]; *option; option++) + if (!strcmp(option, service_option)) + return TRUE; + return FALSE; +} diff --git a/sql/nt_servc.h b/sql/nt_servc.h index ab3238e0f41..6d74eaccea2 100644 --- a/sql/nt_servc.h +++ b/sql/nt_servc.h @@ -54,7 +54,7 @@ class NTService BOOL Remove(LPCSTR szInternName); BOOL IsService(LPCSTR ServiceName); BOOL got_service_option(char **argv, char *service_option); - + BOOL is_super_user(); void Stop(void); //to be called from app. to stop service protected: diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 46afddf0967..d9818053e89 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1689,6 +1689,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db, ha_open_options, tmp_table)) { + my_free((char*) tmp_table,MYF(0)); DBUG_RETURN(0); } diff --git a/sql/sql_class.h b/sql/sql_class.h index 09946822dca..e38a33f9ea7 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -499,8 +499,7 @@ public: uint8 query_cache_type; // type of query cache processing bool slave_thread; bool set_query_id,locked,count_cuted_fields,some_tables_deleted; - bool no_errors, allow_sum_func, password; - bool fatal_error; + bool no_errors, allow_sum_func, password, fatal_error; bool query_start_used,last_insert_id_used,insert_id_used,rand_used; ulonglong rand_saved_seed1, rand_saved_seed2; bool system_thread,in_lock_tables,global_read_lock; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8b8da327b81..5187351258e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2023,16 +2023,24 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, #ifdef HAVE_BERKELEY_DB if (old_db_type == DB_TYPE_BERKELEY_DB) { - (void) berkeley_flush_logs(); /* For the alter table to be properly flushed to the logs, we have to open the new table. If not, we get a problem on server shutdown. */ - if (!open_tables(thd, table_list)) // Should always succeed + char path[FN_REFLEN]; + (void) sprintf(path,"%s/%s/%s",mysql_data_home,new_db,table_name); + fn_format(path,path,"","",4); + table=open_temporary_table(thd, path, new_db, tmp_name,0); + if (table) { - close_thread_table(thd, &table_list->table); + intern_close_table(table); + my_free((char*) table, MYF(0)); } + else + sql_print_error("Warning: Could not open BDB table %s.%s after rename\n", + new_db,table_name); + (void) berkeley_flush_logs(); } #endif table_list->table=0; // For query cache diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 83fb6804fe1..e8d4af94640 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -445,7 +445,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u) else *int_ptr++=counter; } - if (!num_updated) + if (!num_updated--) { net_printf(thd, ER_NOT_SUPPORTED_YET, "SET CLAUSE MUST CONTAIN TABLE.FIELD REFERENCE"); DBUG_RETURN(1); @@ -455,11 +455,11 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u) Here, I have to allocate the array of temporary tables I have to treat a case of num_updated=1 differently in send_data() method. */ - if (num_updated > 1) + if (num_updated) { - tmp_tables = (TABLE **) sql_calloc(sizeof(TABLE *) * (num_updated - 1)); - infos = (COPY_INFO *) sql_calloc(sizeof(COPY_INFO) * (num_updated - 1)); - fields_by_tables = (List_item **)sql_calloc(sizeof(List_item *) * num_updated); + tmp_tables = (TABLE **) sql_calloc(sizeof(TABLE *) * num_updated); + infos = (COPY_INFO *) sql_calloc(sizeof(COPY_INFO) * num_updated); + fields_by_tables = (List_item **)sql_calloc(sizeof(List_item *) * (num_updated + 1)); unsigned int counter; List<Item> *temp_fields; for (table_ref=update_tables, counter = 0; table_ref; table_ref=table_ref->next) @@ -555,7 +555,7 @@ multi_update::~multi_update() table->time_stamp=save_time_stamps[counter]; } if (tmp_tables) - for (uint counter = 0; counter < num_updated-1; counter++) + for (uint counter = 0; counter < num_updated; counter++) if (tmp_tables[counter]) free_tmp_table(thd,tmp_tables[counter]); } @@ -567,7 +567,7 @@ bool multi_update::send_data(List<Item> &values) for (uint counter = 0; counter < fields.elements; counter++) real_values.pop(); // We have skipped fields .... - if (num_updated == 1) + if (!num_updated) { for (table_being_updated=update_tables ; table_being_updated ; @@ -688,7 +688,7 @@ void multi_update::send_error(uint errcode,const char *err) if ((table_being_updated->table->file->has_transactions() && table_being_updated == update_tables) || !not_trans_safe) ha_rollback_stmt(thd); - else if (do_update && num_updated > 1) + else if (do_update && num_updated) VOID(do_updates(true)); } @@ -775,7 +775,7 @@ bool multi_update::send_eof() thd->proc_info="updating the reference tables"; /* Does updates for the last n - 1 tables, returns 0 if ok */ - int error = (num_updated > 1) ? do_updates(false) : 0; /* do_updates returns 0 if success */ + int error = (num_updated) ? do_updates(false) : 0; /* do_updates returns 0 if success */ /* reset used flags */ #ifndef NOT_USED |