From 2f45202dcfbd430054bd7518e863d6eb56c6093c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Oct 2002 09:26:19 +0200 Subject: [PATCH 001/267] BK automatic LOD removal. BitKeeper/etc/skipkeys: auto add BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/gone | 2324 +++++++++++++++++++------------------- BitKeeper/etc/logging_ok | 3 +- BitKeeper/etc/skipkeys | 7 + 3 files changed, 1172 insertions(+), 1162 deletions(-) create mode 100644 BitKeeper/etc/skipkeys diff --git a/BitKeeper/etc/gone b/BitKeeper/etc/gone index 03c7cacb8bc..5f2b9e1209d 100644 --- a/BitKeeper/etc/gone +++ b/BitKeeper/etc/gone @@ -1,8 +1,27 @@ BK|Build-tools/Do-compile-all|19700101030959|00060|f119832ce3aca102 +BK|Docs/Attic/myisam.doc|19700101030959|00502|519bb06ecc870298 +BK|Docs/Flags/island.eps|19700101030959|00181|8cec5a55768bc59e +BK|Docs/Flags/island.gif|19700101030959|00142|e274d5e96ee0975a +BK|Docs/Flags/island.txt|19700101030959|00220|301ede0f81c5f3e1 +BK|Docs/Flags/kroatia.eps|19700101030959|00185|f50fcd444e7efceb +BK|Docs/Flags/kroatia.gif|19700101030959|00146|bea7bbe0316d462d +BK|Docs/Flags/kroatia.txt|19700101030959|00224|dde7f89f25d616b2 +BK|Docs/Flags/south-africa1.eps|19700101030959|00193|111e4f92f4562e9d +BK|Docs/Flags/south-africa1.gif|19700101030959|00154|1ea38de5a535f732 +BK|Docs/Flags/south-africa1.txt|19700101030959|00232|87a53fdcd2149c6e +BK|client/Attic/libmysql.c|19700101030959|00582|72949a7043113807 +BK|client/Attic/net.c|19700101030959|00583|c18042da6fa4e693 BK|client/mysql-test.c|19700101030959|00560|809ade45d58e28ab +BK|client/violite.c|19700101030959|00561|afa871b4aab14371 BK|config.h.in|19700101030959|00050|aecae693cca472c +BK|extra/Attic/print_defaults.c|19700101030959|01513|362952979aa7b330 +BK|include/Attic/config-win32.h|19700101030959|00116|65db818ec7e8f21b +BK|include/Attic/m_ctype.h.in|19700101030959|00114|f671e3c2d611ba97 +BK|include/Attic/mysql_com.h.in|19700101030959|00115|85b1ea7ced528c32 BK|include/my_global.h|19700101030959|00105|f657f708961a4632 BK|libmysql/acconfig.h|19700101030959|02604|7b620dbd69ea6074 +BK|libmysql/configure.in|19700101030959|02603|c6fc04d4e3d6e291 +BK|libmysql/violite.c|19700101030959|02600|984c09cffe14a11b BK|mit-pthreads/config.flags|19700101030959|00594|dcec5296ef811cd6 BK|mit-pthreads/machdep/i386-sco-3.2v5/__math.h|19700101030959|01011|79d9a37715f2c7fe BK|mit-pthreads/machdep/i386-sco-3.2v5/__signal.h|19700101030959|01012|45332b2a56f62580 @@ -32,9 +51,15 @@ BK|mit-pthreads/machdep/sco-3.2v5/socket.h|19700101030959|00980|1b409f3f1fcbbf7a BK|mit-pthreads/machdep/sco-3.2v5/syscall.h|19700101030959|00981|c69bd58eba4d5076 BK|mit-pthreads/machdep/sco-3.2v5/timers.h|19700101030959|00982|4907a958151368ed BK|mit-pthreads/machdep/sco-3.2v5/trash.can|19700101030959|00983|7eecac9fc944ade2 +BK|mit-pthreads/pg++|19700101030959|00597|3beac0502025d766 +BK|mit-pthreads/pgcc|19700101030959|00596|154a03d0c1a0a600 +BK|myisam/Attic/ft_global.h|19700101030959|01673|fe46fb515f1e375 BK|myisam/common_words|19700101030959|01665|13c10ef32aaa7537 +BK|myisam/ft_search.c|19700101030959|01642|c011cb6e8041bb59 BK|myisam/mi_test_all|19700101030959|01666|ae7a366c45527b4e +BK|mysql.proj|19700101030959|00071|3e34edc585d18be8 BK|mysys/mf_reccache.c|19700101030959|01419|f8191c8485e158fe +BK|mysys/test_vsnprintf.c|19700101030959|01502|e3d568aca62dc81e BK|sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql|19700101030959|02361|6a0a837742a861bb BK|sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686|19700101030959|02348|e87091e2a6dce931 BK|sql-bench/Results-linux/ATIS-mysql-Linux_2.0.33_i586-cmp-access,mysql|19700101030959|02326|70981cb1dd58d3fb @@ -161,10 +186,21 @@ BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.12_20smp_i686|1970010103095 BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.13_SMP_alpha|19700101030959|02347|ad7babd436f26841 BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql|19700101030959|02442|74b238eca114dbbe BK|sql-bench/Results-linux/wisconsin-mysql_fast-Linux_2.2.13_SMP_alpha|19700101030959|02451|6ad065fe4c6b4fa9 +BK|sql-bench/Results-win32/ATIS-mysql-win98|19700101030959|02523|cd0705815d3af451 +BK|sql-bench/Results-win32/RUN-mysql-win98|19700101030959|02526|7f09e396772a8665 +BK|sql-bench/Results-win32/alter-table-mysql-win98|19700101030959|02529|e8743982f790462 +BK|sql-bench/Results-win32/big-tables-mysql-win98|19700101030959|02532|99a1882effebbdf2 +BK|sql-bench/Results-win32/connect-mysql-win98|19700101030959|02535|2a11d5e3dfc0bc67 +BK|sql-bench/Results-win32/create-mysql-win98|19700101030959|02538|f66c2cb2909c4792 +BK|sql-bench/Results-win32/insert-mysql-win98|19700101030959|02541|6d6cafc85a6c837 +BK|sql-bench/Results-win32/select-mysql-win98|19700101030959|02544|f370fac2d66a9faf +BK|sql-bench/Results-win32/wisconsin-mysql-win98|19700101030959|02547|8b3da9c5c5d2365b +BK|sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686|19700101030959|02022|660fb76ed6ccfb6f 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.6_sun4m|19700101030959|02032|62028e0375b3b8b +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 BK|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02313|8c6fc2968f78773 @@ -223,77 +259,258 @@ BK|sql-bench/Results/Attic/wisconsin-mysql-Linux_2.2.1_i686-cmp-mysql,pg|1970010 BK|sql-bench/Results/Attic/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02218|b4e89cdac0620cba BK|sql-bench/Results/Attic/wisconsin-pg-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02219|7d641554f51cf45a BK|sql-bench/Results/Attic/wisconsin-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02220|db31ec971b4c5051 +BK|sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686|19700101030959|02050|f6fdd64859e11de9 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.6_sun4m|19700101030959|02059|eafc8188345e262b +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 BK|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02046|a910a9b3fde431e1 BK|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02165|e0f060fdbf92325e +BK|sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686|19700101030959|02073|f6f7ccd7b3c35f97 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.6_sun4m|19700101030959|02088|8a1bd6589a189890 +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 BK|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02094|4e02d36dc17ecbfa BK|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02233|b8721431b356177 +BK|sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686|19700101030959|02106|baa649caba113497 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.6_sun4m|19700101030959|02116|f351a7f3e1e2257e +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 BK|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02122|a442a8aff47fae20 BK|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02235|e5a33639e51290fd +BK|sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686|19700101030959|02134|c0c26d4320182d85 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.6_sun4m|19700101030959|02143|a10e3ddfa26a3e7f +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 BK|sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02086|1d95d36fd717990 BK|sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02244|f6ab4d00b0ae09c1 +BK|sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686|19700101030959|02158|51581b24f45e0f5c 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.6_sun4m|19700101030959|02221|9233114ae6f8c5f +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 BK|sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02112|a140e5e229a53b7b BK|sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02246|177fd39cc1d298a8 +BK|sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686|19700101030959|02239|fd082017c7c57a6 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.6_sun4m|19700101030959|02248|3402d060ae20e19 +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 BK|sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02148|e65dd14f2ed9abbf BK|sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02259|b5bf77586c18d2b5 +BK|sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686|19700101030959|02265|ed3687e713ff0571 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.6_sun4m|19700101030959|02274|4da215905bce988d +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 BK|sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02254|f9ab7726ff14ea90 BK|sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02261|188d6b5b72d8e0a +BK|sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686|19700101030959|02290|8147dc16a1dc6c47 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.6_sun4m|19700101030959|02298|ec61b14072715dc8 +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 BK|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02295|ec361eee4f4128cd BK|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02270|ef201ca14f635c57 +BK|sql/Attic/lex_hash.h|19700101030959|01912|14f912771118b50c +BK|sql/Attic/mini_client.c|19700101030959|01910|9a3778c387d06a81 +BK|sql/Attic/mini_client_errors.c|19700101030959|01909|29edad51a5d0b068 +BK|sql/Attic/mybinlogdump.cc|19700101030959|01908|5dbdd2bde98d6169 +BK|sql/Attic/net_serv.c|19700101030959|01911|52dabcd773a39e10 +BK|sql/ha_hash.h|19700101030959|01902|27e36916116beb3e +BK|sql/share/czech/errmsg.sys|19700101030959|01828|93104a2bd5c732a +BK|sql/share/danish/errmsg.sys|19700101030959|01831|3a6d0fb8451a3313 +BK|sql/share/dutch/errmsg.sys|19700101030959|01833|b5aff4d08478bafd +BK|sql/share/english/errmsg.sys|19700101030959|01834|f29bd4ea5aaf54c8 +BK|sql/share/estonia/errmsg.sys|19700101030959|01836|83b86d7ed4cdd5d0 +BK|sql/share/french/errmsg.sys|19700101030959|01838|9f024dc5e6fe50f5 +BK|sql/share/german/errmsg.sys|19700101030959|01840|1ea60675399c84c +BK|sql/share/greek/errmsg.sys|19700101030959|01842|fedf585fa73e7cf1 +BK|sql/share/hungarian/errmsg.sys|19700101030959|01845|aff82c16a77fc800 +BK|sql/share/italian/errmsg.sys|19700101030959|01846|c5108ecb850b79a +BK|sql/share/japanese/errmsg.sys|19700101030959|01848|302478c84697dc00 +BK|sql/share/korean/errmsg.sys|19700101030959|01850|a30e3687ae75a7c9 +BK|sql/share/norwegian-ny/.cvsignore|19700101030959|01855|469064b5190d703d +BK|sql/share/norwegian/.cvsignore|19700101030959|01853|a91d63182f0b2366 +BK|sql/share/polish/errmsg.sys|19700101030959|01857|126b03af92054f0f +BK|sql/share/portuguese/errmsg.sys|19700101030959|01859|c0187322f8c9d805 +BK|sql/share/romania/errmsg.sys|19700101030959|01871|e08aa93bae96d25e BK|sql/share/romanian/errmsg.sys|19700101030959|01869|9d8282efb437e8cc BK|sql/share/romanian/errmsg.txt|19700101030959|01870|2c64fb13a8f104ad +BK|sql/share/russian/errmsg.sys|19700101030959|01860|72688df0beeabcb3 +BK|sql/share/slovak/errmsg.sys|19700101030959|01862|148510616ae825cf +BK|sql/share/spanish/errmsg.sys|19700101030959|01865|10c8f32da39070b2 +BK|sql/share/swedish/errmsg.sys|19700101030959|01866|dd772e93db859993 +BK|sql/violite.c|19700101030959|01738|d7b85be615595ace +BK|strings/Attic/bootstrap-ctype.c|19700101030959|01360|6d2a8cda2d6a35ff +BK|strings/Attic/ct_init.c|19700101030959|01338|f0948bdd35ceedc3 +BK|strings/Attic/ctype-cp1251.c|19700101030959|01339|cdf74b9168408b3 +BK|strings/Attic/ctype-cp1257.c|19700101030959|01340|732611cbc74aeafc +BK|strings/Attic/ctype-croat.c|19700101030959|01341|d2d805ee6f10cbcc +BK|strings/Attic/ctype-danish.c|19700101030959|01342|dc5451066eb272ae +BK|strings/Attic/ctype-dec8.c|19700101030959|01343|68f257dd2202d0c7 +BK|strings/Attic/ctype-dos.c|19700101030959|01344|f77bd08acf13a8c1 +BK|strings/Attic/ctype-estonia.c|19700101030959|01345|fc8a69424f7cb66b +BK|strings/Attic/ctype-german1.c|19700101030959|01346|f7830c509bb358f7 +BK|strings/Attic/ctype-greek.c|19700101030959|01347|90acdff1195209ca +BK|strings/Attic/ctype-hebrew.c|19700101030959|01348|d3b4a000d51e76dc +BK|strings/Attic/ctype-hp8.c|19700101030959|01349|749e1be0f028d349 +BK|strings/Attic/ctype-hungarian.c|19700101030959|01350|5cf0bf7fa0312637 +BK|strings/Attic/ctype-koi8_ru.c|19700101030959|01351|8ff4188c642c9bd +BK|strings/Attic/ctype-koi8_ukr.c|19700101030959|01352|a04aa14a6d62335a +BK|strings/Attic/ctype-latin1.c|19700101030959|01353|cc63880f19c2303e +BK|strings/Attic/ctype-latin2.c|19700101030959|01354|31895c4b83654342 +BK|strings/Attic/ctype-swe7.c|19700101030959|01355|bb1b012225d7d02c +BK|strings/Attic/ctype-usa7.c|19700101030959|01356|d19d859dca5675f +BK|strings/Attic/ctype-win1250.c|19700101030959|01357|1ce7a24255780a1 +BK|strings/Attic/ctype-win1251.c|19700101030959|01358|762607f4fd7d52ad +BK|strings/Attic/ctype-win1251ukr.c|19700101030959|01359|b5a7cca889bbef58 +BK|strings/Attic/ctype.c.in|19700101030959|01361|8bf48d4bcbc5f675 +BK|strings/Attic/memory.h|19700101030959|01336|450f586e82a26d99 +BK|strings/Attic/ptr_cmp.c|19700101030959|01337|57e682a26e769597 +BK|strings/READ-ME|19700101030959|01362|ed6c5184d4bf6b7c +BK|support-files/Attic/my-example.cnf.sh|19700101030959|02584|87a7e1f4d24b62a9 +BK|support-files/Attic/my-huge.cfg.sh|19700101030959|02585|589bdcd2d2c4360b +BK|support-files/Attic/my-large.cfg.sh|19700101030959|02586|842c8e76253c9396 +BK|support-files/Attic/my-medium.cfg.sh|19700101030959|02587|c49880d26ef0648e +BK|support-files/Attic/my-small.cfg.sh|19700101030959|02588|85023c559a1d96c +BK|tests/fork3_test.pl|19700101030959|01947|c4a7bffb4f8e813c +BK|tests/fork_test.pl|19700101030959|01945|3d3535329ed8cd5e +BK|vio/Vio.cc|19700101030959|00003|60737ce02ab2bc25 +BK|vio/Vio.h|19700101030959|00004|f4416b2949647602 +BK|vio/VioAcceptorFd.cc|19700101030959|00005|a5a08947a31f88de +BK|vio/VioAcceptorFd.h|19700101030959|00006|7f9c4358477ba9a3 +BK|vio/VioConnectorFd.cc|19700101030959|00007|ddbd7821c43c83a2 +BK|vio/VioConnectorFd.h|19700101030959|00008|58bc11cdc885b951 +BK|vio/VioFd.cc|19700101030959|00009|6e444647affef63b +BK|vio/VioFd.h|19700101030959|00010|8294293a88c7b4b8 +BK|vio/VioPipe.cc|19700101030959|00011|12cf83b9a2f48f6c +BK|vio/VioPipe.h|19700101030959|00012|21cebbe61a1da546 +BK|vio/VioSSL.cc|19700101030959|00013|6e85340b11fa42a8 +BK|vio/VioSSL.h|19700101030959|00014|70d367b7ec8cac3e +BK|vio/VioSSLAcceptorFd.cc|19700101030959|00015|4c828f3688ed74ec +BK|vio/VioSSLFactoriesFd.cc|19700101030959|00016|89f6bf5073937947 +BK|vio/VioSSLFactoriesFd.h|19700101030959|00017|1d63ae149a63f85 +BK|vio/VioSocket.cc|19700101030959|00018|71c615783f29b5e1 +BK|vio/VioSocket.h|19700101030959|00019|a26d535bd5a1a6 +BK|vio/version.cc|19700101030959|00020|7237acf12bed4a97 +BK|vio/vio-global.h|19700101030959|00021|c261412c01b2f4 +BK|vio/vioelitexx.cc|19700101030959|00022|3eaba70da792a7fc +BK|vio/violite.h|19700101030959|00023|58d2942a52ea7a83 +BK|vio/viotypes.h|19700101030959|00027|f5a38e7326bd50f3 +Sinisa@sinisa.nasamreza.org|=6|20010818122920|53462|33f33b0a159dc5d5 +Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522121240|20995|360af2095c88cb8c +Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522133259|25000|4b5fbc60d0d9754f +Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133300|08911|21904fbd1c95cb1 +Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133624|23665|445526a8a20de101 +Sinisa@sinisa.nasamreza.org|scripts/mysql_new_fix_privilege_tables.sh|20011226144909|43765|b1664b401375eece +arjen@co3064164-a.bitbike.com|BitKeeper/etc/logging_ok|20011212060636|33009 +arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614|692b647b +arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d +ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 +ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 +jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec +jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 +miguel@hegel.local|zlib/ChangeLog|20020319032513|28917|5d5425fc84737083 miguel@hegel.local|zlib/Make_vms.com|20020319032513|57151|35050a50ec612bbf miguel@hegel.local|zlib/Makefile.riscos|20020319032513|63798|8ab53f195fe429af +miguel@hegel.local|zlib/adler32.c|20020319032513|04487|f98728c6da1ac164 +miguel@hegel.local|zlib/algorithm.txt|20020319032513|12903|fbc4dda3d31c2005 miguel@hegel.local|zlib/amiga/Makefile.pup|20020319032513|19225|6a9ee8128d11541f miguel@hegel.local|zlib/amiga/Makefile.sas|20020319032513|25562|d7128ac7e0946f0b +miguel@hegel.local|zlib/compress.c|20020319032513|32512|70bccb304651dba9 +miguel@hegel.local|zlib/contrib/README.contrib|20020319032514|04353|24cb75bee0a061fb +miguel@hegel.local|zlib/contrib/asm386/gvmat32.asm|20020319032514|12654|31093c1a846dfdc7 +miguel@hegel.local|zlib/contrib/asm386/gvmat32c.c|20020319032514|19182|2a8eba5481c46eab +miguel@hegel.local|zlib/contrib/asm386/mkgvmt32.bat|20020319032514|25425|422cbe16a6e74695 +miguel@hegel.local|zlib/contrib/asm386/zlibvc.def|20020319032514|31637|605ee23b8a4a6a1a +miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsp|20020319032514|38372|a1c6749052ce48a +miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsw|20020319032514|44870|3209982720f131ab +miguel@hegel.local|zlib/contrib/asm586/match.s|20020319032514|51538|dc1a34b5eb2a7c11 +miguel@hegel.local|zlib/contrib/asm586/readme.586|20020319032514|57815|f60bfeefb27217d +miguel@hegel.local|zlib/contrib/asm686/match.s|20020319032514|64199|4164951e8e19f116 +miguel@hegel.local|zlib/contrib/asm686/readme.686|20020319032514|04933|15e2bf4653b71f3e +miguel@hegel.local|zlib/contrib/delphi/zlib.mak|20020319032514|11153|7b97eb8cf290a42 +miguel@hegel.local|zlib/contrib/delphi/zlibdef.pas|20020319032514|18918|658cb04db561e3db +miguel@hegel.local|zlib/contrib/delphi2/d_zlib.bpr|20020319032514|25335|c267d77cc2e2a2c8 +miguel@hegel.local|zlib/contrib/delphi2/d_zlib.cpp|20020319032514|31641|d6f37620ac7b27fa +miguel@hegel.local|zlib/contrib/delphi2/readme.txt|20020319032515|03494|65d16837f8579e23 +miguel@hegel.local|zlib/contrib/delphi2/zlib.bpg|20020319032515|09768|93c030edcca1838 +miguel@hegel.local|zlib/contrib/delphi2/zlib.bpr|20020319032515|16113|7a2fa98af2345144 +miguel@hegel.local|zlib/contrib/delphi2/zlib.cpp|20020319032515|22372|4257437d415259e2 +miguel@hegel.local|zlib/contrib/delphi2/zlib.pas|20020319032515|28965|3c94d3f5262cbbdd +miguel@hegel.local|zlib/contrib/delphi2/zlib32.bpr|20020319032515|35585|41ac53acb8008ff7 +miguel@hegel.local|zlib/contrib/delphi2/zlib32.cpp|20020319032515|41979|3b0f51435e880afe +miguel@hegel.local|zlib/contrib/iostream/test.cpp|20020319032515|48225|a2ea8d4d7c66cf71 +miguel@hegel.local|zlib/contrib/iostream/zfstream.cpp|20020319032515|55262|dce18d1a5d7096b7 +miguel@hegel.local|zlib/contrib/iostream/zfstream.h|20020319032515|61553|2b4d88acc2d3b714 +miguel@hegel.local|zlib/contrib/iostream2/zstream.h|20020319032515|02537|351f26518ea48196 +miguel@hegel.local|zlib/contrib/iostream2/zstream_test.cpp|20020319032515|08848|63f635d540de8c48 +miguel@hegel.local|zlib/contrib/minizip/ChangeLogUnzip|20020319032515|15183|50464416f4a3768f +miguel@hegel.local|zlib/contrib/minizip/miniunz.c|20020319032515|21943|6a80009b319b1b9e +miguel@hegel.local|zlib/contrib/minizip/minizip.c|20020319032515|28588|97181367a7bc47d8 +miguel@hegel.local|zlib/contrib/minizip/readme.txt|20020319032516|00611|7547b986c067c008 +miguel@hegel.local|zlib/contrib/minizip/unzip.c|20020319032516|07891|c66c95e17321206d +miguel@hegel.local|zlib/contrib/minizip/unzip.def|20020319032516|14456|b4162b8c833ab6c7 +miguel@hegel.local|zlib/contrib/minizip/unzip.h|20020319032516|21001|bac981086af91a30 +miguel@hegel.local|zlib/contrib/minizip/zip.c|20020319032516|27911|e82bf7774e1ece95 +miguel@hegel.local|zlib/contrib/minizip/zip.def|20020319032516|34413|e9bda2081d65c22e +miguel@hegel.local|zlib/contrib/minizip/zip.h|20020319032516|40925|17fd39ccb4ea294c +miguel@hegel.local|zlib/contrib/minizip/zlibvc.def|20020319032516|47259|6dc42f99d2d55cad +miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsp|20020319032516|54044|ec35fd54c9b49987 +miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsw|20020319032516|60515|17f28194a5cd80ea miguel@hegel.local|zlib/contrib/untgz/makefile.w32|20020319032516|01267|2c584f05a16db4ba +miguel@hegel.local|zlib/contrib/untgz/untgz.c|20020319032516|07726|b74e9dde74642756 +miguel@hegel.local|zlib/contrib/visual-basic.txt|20020319032516|14096|cd461e762199bb09 +miguel@hegel.local|zlib/crc32.c|20020319032516|20397|b327da5b8cf9eae8 +miguel@hegel.local|zlib/deflate.c|20020319032516|26978|e22894a54233bc25 +miguel@hegel.local|zlib/deflate.h|20020319032516|33700|3a012bc1f5dfbc74 +miguel@hegel.local|zlib/descrip.mms|20020319032517|08063|7d61d33062ef53ec +miguel@hegel.local|zlib/example.c|20020319032517|14327|490f57a4a9440dfa +miguel@hegel.local|zlib/faq|20020319032517|20799|b0d0840d3b9faf07 +miguel@hegel.local|zlib/gzio.c|20020319032517|27098|e02d23e656c19359 +miguel@hegel.local|zlib/index|20020319032517|33542|5443c9f841db4a47 +miguel@hegel.local|zlib/infblock.c|20020319032517|39853|540cc1b743be5f58 +miguel@hegel.local|zlib/infblock.h|20020319032517|46202|4526bc327b4160ab +miguel@hegel.local|zlib/infcodes.c|20020319032517|52620|dffb42fdf2fb2372 +miguel@hegel.local|zlib/infcodes.h|20020319032517|58960|3a02220a89c9a4fa +miguel@hegel.local|zlib/inffast.c|20020319032517|65269|bf247ff4aa2bf54b +miguel@hegel.local|zlib/inffast.h|20020319032517|06651|215e4a4ccfc886fc +miguel@hegel.local|zlib/inffixed.h|20020319032517|12923|e86ef8e2efe23f77 +miguel@hegel.local|zlib/inflate.c|20020319032517|19311|fb22a3a1ab6fb1a0 +miguel@hegel.local|zlib/inftrees.c|20020319032517|25758|4fcb97357cdbc40 +miguel@hegel.local|zlib/inftrees.h|20020319032517|32227|ffcbe51816466e5c +miguel@hegel.local|zlib/infutil.c|20020319032518|05244|a9b414f0f4ea0868 +miguel@hegel.local|zlib/infutil.h|20020319032518|12977|13089e09be34788c +miguel@hegel.local|zlib/maketree.c|20020319032518|19299|7f281aef3547fee +miguel@hegel.local|zlib/minigzip.c|20020319032518|25601|37f8eacb80c7f8fc miguel@hegel.local|zlib/msdos/Makefile.b32|20020319032518|33760|86772037f3344353 miguel@hegel.local|zlib/msdos/Makefile.bor|20020319032518|40099|7aa9edaac099cdb9 miguel@hegel.local|zlib/msdos/Makefile.dj2|20020319032518|46371|ca26f5fe96e3e999 @@ -302,11 +519,32 @@ miguel@hegel.local|zlib/msdos/Makefile.msc|20020319032518|59050|1bb69abdddf390f2 miguel@hegel.local|zlib/msdos/Makefile.tc|20020319032518|65341|2a9dff916115ae77 miguel@hegel.local|zlib/msdos/Makefile.w32|20020319032518|06083|8d84523c1dcdc0f7 miguel@hegel.local|zlib/msdos/Makefile.wat|20020319032518|12471|82f8714d825e97e3 +miguel@hegel.local|zlib/msdos/zlib.def|20020319032518|18787|165cd7dcff6ac9f +miguel@hegel.local|zlib/msdos/zlib.rc|20020319032518|25240|f8a286fa8371ee09 miguel@hegel.local|zlib/nt/Makefile.emx|20020319032518|31715|7e9fcf6f5ad2e51a miguel@hegel.local|zlib/nt/Makefile.gcc|20020319032519|03630|351fa8bd15c704b9 miguel@hegel.local|zlib/nt/Makefile.nt|20020319032519|09990|ee461a3dd393a061 +miguel@hegel.local|zlib/nt/zlib.dnt|20020319032519|16279|22a0ed3b86ff8c2 miguel@hegel.local|zlib/os2/Makefile.os2|20020319032519|22554|7a05f2a27812703a +miguel@hegel.local|zlib/os2/zlib.def|20020319032519|28842|1166a95d83c5f52c +miguel@hegel.local|zlib/readme|20020319032519|35257|80a41fc822f5f4 +miguel@hegel.local|zlib/trees.c|20020319032519|43770|4fbd4d005e26d38 +miguel@hegel.local|zlib/trees.h|20020319032519|50674|87161133bc2155fd +miguel@hegel.local|zlib/uncompr.c|20020319032519|57111|82eac43195d1222c +miguel@hegel.local|zlib/zconf.h|20020319032519|63437|c6b6b636c7e88d90 +miguel@hegel.local|zlib/zlib.3|20020319032519|04298|ec5cb4f64476f6a +miguel@hegel.local|zlib/zlib.dsp|20020319032519|12016|6eec436fab260061 +miguel@hegel.local|zlib/zlib.html|20020319032519|31060|7a635f4ac95fc56b +miguel@hegel.local|zlib/zlib.h|20020319032519|20598|fbec7833981c782f +miguel@hegel.local|zlib/zutil.c|20020319032520|05372|6f0d1763c5deb409 +miguel@hegel.local|zlib/zutil.h|20020319032520|12556|1e431b0173278fb2 +mikef@nslinux.bedford.progress.com|mysql-test/include/have_gemini.inc|20010321203410|40631|42f94f0dfd0f7b18 +mikef@nslinux.bedford.progress.com|mysql-test/r/have_gemini.require|20010321203410|47052|206702c48b2e206b +monty@donna.mysql.com|innobase/ib_config.h.in|20010217121901|07616|9e57db8504e55b7 +monty@donna.mysql.com|innobase/ib_config.h|20010217121901|04019|7539e26ffc614439 monty@donna.mysql.com|myisam/mi_debug.c|20000829092809|23459|873a6e7d6ff8297c +monty@donna.mysql.com|mysql-test/include/have_default_master.inc|20010104005638|23980|a54c86e65a6c4af +monty@donna.mysql.com|mysql-test/r/have_default_master.require|20010104005638|27332|1465255ffdaf82f monty@donna.mysql.com|sql-bench/Results-linux/ATIS-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|34755|45d7837423db243f monty@donna.mysql.com|sql-bench/Results-linux/ATIS-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|37262|2274651e29d38b07 monty@donna.mysql.com|sql-bench/Results-linux/RUN-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|39831|a6ef8229d40b75d1 @@ -325,7 +563,97 @@ monty@donna.mysql.com|sql-bench/Results-linux/select-mysql_dbug-Linux_2.2.14_my_ monty@donna.mysql.com|sql-bench/Results-linux/select-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|07610|cffd7d282a90113a monty@donna.mysql.com|sql-bench/Results-linux/wisconsin-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|10615|8dcd7271a9137341 monty@donna.mysql.com|sql-bench/Results-linux/wisconsin-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|13213|4398328883aa75da +monty@donna.mysql.com|sql-bench/Results/ATIS-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14134|cf0d806760eefef2 +monty@donna.mysql.com|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14777|e625af7f600bf930 +monty@donna.mysql.com|sql-bench/Results/RUN-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15344|d922a0fcc1009130 +monty@donna.mysql.com|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15933|840503a555e420ec +monty@donna.mysql.com|sql-bench/Results/alter-table-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|16525|2f516d2c108a9e05 +monty@donna.mysql.com|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17106|6e532c1936df1737 +monty@donna.mysql.com|sql-bench/Results/big-tables-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17709|6d8209bf72b663ed +monty@donna.mysql.com|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18309|c87333d6fe04433e +monty@donna.mysql.com|sql-bench/Results/connect-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18910|7ed15d6fd1a5944c +monty@donna.mysql.com|sql-bench/Results/connect-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|19522|ab58fffa30dce97e +monty@donna.mysql.com|sql-bench/Results/create-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20136|241c337935ae1524 +monty@donna.mysql.com|sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20766|4e5a2ab4907748d4 +monty@donna.mysql.com|sql-bench/Results/insert-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22042|27b7a557c3cb07a +monty@donna.mysql.com|sql-bench/Results/insert-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22723|a85a6f0477c13f83 +monty@donna.mysql.com|sql-bench/Results/select-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|23395|8ef771713f89e1 +monty@donna.mysql.com|sql-bench/Results/select-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24071|4f7795c27eaab86b +monty@donna.mysql.com|sql-bench/Results/wisconsin-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24748|6a468dcd3e6f5405 +monty@donna.mysql.com|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|25437|24a02e007a58bf73 +monty@donna.mysql.fi|sql/violite.c|20010523223654|08838|53d4251a69d3c +monty@hundin.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|32241|dd306b2e583ebde4 +monty@hundin.mysql.fi|sql-bench/Results/ATIS-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|59551|d002b0bc548ff8b3 +monty@hundin.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|35759|11038a44f73070e7 +monty@hundin.mysql.fi|sql-bench/Results/RUN-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|63204|e938a858bd12aa8d +monty@hundin.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|39143|662b96bc66bc91b6 +monty@hundin.mysql.fi|sql-bench/Results/alter-table-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|01419|14360865bbba479f +monty@hundin.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|42711|788ad492867b1226 +monty@hundin.mysql.fi|sql-bench/Results/big-tables-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|05113|b6be70bb51013cad +monty@hundin.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|46284|5316add301edb60 +monty@hundin.mysql.fi|sql-bench/Results/connect-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|08804|1b715c6fd72e913e +monty@hundin.mysql.fi|sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|49804|26e09af61f88d8c9 +monty@hundin.mysql.fi|sql-bench/Results/create-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|12309|f3b1d326092bf44 +monty@hundin.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|53328|fd2699adb3190d07 +monty@hundin.mysql.fi|sql-bench/Results/insert-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|15984|a0143553cccb54e2 +monty@hundin.mysql.fi|sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|56860|b01175ad38fd12b6 +monty@hundin.mysql.fi|sql-bench/Results/select-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|19688|4ffc9cf4be665ea2 +monty@hundin.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|60398|8ba598d217450157 +monty@hundin.mysql.fi|sql-bench/Results/wisconsin-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|23386|1ed1dc6abd24e7e3 +monty@hundin.mysql.fi|support-files/make_mysql_pkg.sh|20010915122456|03682|c616a18bed4b9c2 +monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|04677|f761da5546f0d362 +monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|07879|2ac8fe298953d43 +monty@narttu.mysql.com|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|09727|79ac0482599eace1 +monty@narttu.mysql.com|sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171904|13285|a88e954bc8de5460 +monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|11725|dfc480becae45236 +monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|13605|ee94f987797ca948 +monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|15583|a2a77f37b689cd63 +monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|17580|28b688e2cd4b6bb3 +monty@narttu.mysql.com|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|19531|7dd5ac726f86cf0b +monty@narttu.mysql.com|sql-bench/Results/connect-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|21574|1cf5d5f0d70a3fa0 +monty@narttu.mysql.com|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|23516|441a6aefd381e319 +monty@narttu.mysql.com|sql-bench/Results/create-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|25516|fc207468e871ff69 +monty@narttu.mysql.com|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|27509|d12a7edef05d7185 +monty@narttu.mysql.com|sql-bench/Results/insert-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|29606|975e26cac59161fa +monty@narttu.mysql.com|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|33684|ddcf36cdf3f72e8c +monty@narttu.mysql.com|sql-bench/Results/select-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|35818|34a39fbcb58d8945 +monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|37931|2db07249379f36 +monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|40155|8101a5823c17e58a +monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha|20001014001004|08145|21ddf9425cbdd58 +monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|06287|d275df58a04737c8 +monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha|20001014001004|13092|583091e05a25fb6 +monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|21374|d4766c7f8e70d7a2 +monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha|20001014001004|15829|6c20c9ef46f82241 +monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|25875|155a83b53c0e9d6 +monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha|20001014001004|18602|e8cc899bb933532f +monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|30548|f1127add9307098b +monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha|20001014001004|21372|84df7c6446e51e26 +monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|00237|45d2cdf9bea9cc37 +monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha|20001014001004|23947|2c9af91e9771f618 +monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|04134|d46860c29c5d51ee +monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha|20001014001004|26814|688809eb8ea77b3d +monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|07880|e1771e0a164bc310 +monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha|20001014001004|29737|db59425a7f4aa93f +monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|11605|ee2a063d66a183d +monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha|20001014001004|32465|fc410754151d622c +monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|15116|b7552710d35202b6 +monty@work.mysql.com|fs/fsck.mysql|20010411110350|07619|87170d4358b50d60 +monty@work.mysql.com|libmysqld/README|20010411110351|24268|434e9cae5fa9a4c4 +monty@work.mysql.com|libmysqld/WHITEPAPER|20010411110351|28263|da1226799debcf3f +mwagner@cash.mwagner.org|Docs/include.de.texi|20020223092123|06028|112aac21b3489888 +mwagner@evoq.home.mwagner.org|Docs/Books/algor.eps|20001231203219|20480|481984607c98d715 +mwagner@evoq.home.mwagner.org|Docs/Books/dbi.eps|20001231203219|30594|6ad58f9457e2a564 +mwagner@evoq.home.mwagner.org|Docs/Books/dubois.eps|20001231203219|33725|aa3d9c08bbcc149b +mwagner@evoq.home.mwagner.org|Docs/Books/ecomm.eps|20001231203220|02445|58ae914b5d5ea49 +mwagner@evoq.home.mwagner.org|Docs/Books/in_21.eps|20001231203220|05743|83a7604251d68ebd +mwagner@evoq.home.mwagner.org|Docs/Books/manual.eps|20001231203220|09365|2a7145f88960c7ec +mwagner@evoq.home.mwagner.org|Docs/Books/msql.eps|20001231203220|12487|ffe7d62847663250 +mwagner@evoq.home.mwagner.org|Docs/Books/prof.eps|20001231203220|15779|dc69b039543a57d7 +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|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 mwagner@evoq.home.mwagner.org|mysql-test/mybin/stop-mysqld|20001016055653|20710|89a1194045f05d1c mwagner@evoq.home.mwagner.org|mysql-test/mybin/translate-tests|20001018130217|00206|3869c1fdf0a5ea1a @@ -365,7 +693,44 @@ mwagner@evoq.home.mwagner.org|mysql-test/var/lib/README|20001009213643|15351|3b6 mwagner@evoq.home.mwagner.org|mysql-test/var/log/README|20001009213643|16203|df5481fdbe6e5b6e mwagner@evoq.home.mwagner.org|mysql-test/var/run/README|20001009213643|17062|acb305e4c2ed5990 mwagner@evoq.home.mwagner.org|mysql-test/var/tmp/README|20001009213643|17904|b32d866bfd50e72e +mwagner@evoq.home.mwagner.org|mysql-test/xml/README|20001013051440|12362|877d76bcd19f7193 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000001.xml|20001013051507|22498|f0eb64c0346366db +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000002.xml|20001013074610|25702|8cd06da5293a7147 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000003.xml|20001013074610|26659|1a622b8d30d7ade8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000004.xml|20001017133600|56955|515488ef221523d9 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000005.xml|20001017133618|09973|a6344e46ba572dc3 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000006.xml|20001017133623|51441|8ad8f44f49b21246 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000007.xml|20001017133625|48163|bfcb6d85276be7e8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000008.xml|20001017133627|18273|1d6082f0905c51b6 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000009.xml|20001017133629|19814|8677613dc624cb0c +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000010.xml|20001017133713|64368|9b98c9cce8fac145 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000011.xml|20001017133713|00331|432156d127cbd22f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000012.xml|20001017133713|01909|a410d08dc4cfee11 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000013.xml|20001017133713|03416|2717cbfbe5730174 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000014.xml|20001017133713|05036|bcf55df6a036bd8f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000015.xml|20001017133749|30814|b72689a8f9b21372 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000016.xml|20001017133713|07087|32f1ef2e3d214be0 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000017.xml|20001017133713|08762|81423597605ff77f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000018.xml|20001017133713|10435|82e2e7bde83f56d8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000019.xml|20001017133713|12133|c0f0b05e481b90e7 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000020.xml|20001017133713|13843|8849bbf91a4fd5ec +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000021.xml|20001017133713|15460|2763b87c1549ba87 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000022.xml|20001017133713|17202|da2083ef423ae39a +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000023.xml|20001017133713|20719|11993b379b9838be +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000024.xml|20001017133713|22352|dd067aa28220fa4c +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000025.xml|20001017133713|24071|3e766aa1e43b303 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000026.xml|20001017133713|25860|15145e496417646f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000027.xml|20001017133713|27519|95e7de3e9934b570 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000028.xml|20001017133713|29282|c72bfec6600949b +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000029.xml|20001017133713|31058|3aba1eb23ef86c9e +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 +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 +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|20001010001022|12739|108667adaeabe3f5 @@ -377,1244 +742,881 @@ sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.b.result|20001118063528|520 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.status.result|20001202171150|06069|6bee190c298cc9fd 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/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 sasha@mysql.sashanet.com|mysql-test/std_data/simple-select.master|20001009234916|08299|6f3eb98812926caf +sasha@mysql.sashanet.com|mysql-test/t/3.23/alt000001.test|20001122072330|31588|633aed61c4bad94c +sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000004.test|20001103140433|32471|daf9ad4a1a31cd3c +sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000005.test|20001103140433|36002|982fde89a4d6d886 sasha@mysql.sashanet.com|mysql-test/t/3.23/select-key.test|20001009234859|21197|5d785cef5c02c070 +sasha@mysql.sashanet.com|mysql-test/t/3.23/shw000001.test|20001121234128|21322|770d96a2c1c65b20 sasha@mysql.sashanet.com|mysql-test/t/3.23/simple-select.test|20001009234859|26291|71f98293e1dc65 +sasha@mysql.sashanet.com|mysql-test/t/binlog-backup-restore.test|20010424233926|25316|d5b0b9bd83738a9f +sasha@mysql.sashanet.com|mysql-test/t/df_crash.test|20010406010433|65180|4c365178fe437f6 +sasha@mysql.sashanet.com|mysql-test/t/fulltext_join.test|20010730234357|20865|e347c8f04405c916 +sasha@mysql.sashanet.com|mysql-test/t/identity.test|20010910233028|36116|326f469b59105404 sasha@mysql.sashanet.com|mysql-test/t/include/master-slave.inc|20001118030458|01636|556fd038c3a3d54 +sasha@mysql.sashanet.com|mysql-test/t/mrg000002.test|20001212152450|20137|16b3a176adc0f311 +sasha@mysql.sashanet.com|mysql-test/t/rpl000018-master.sh|20010127223331|13256|bc8072e13b26b005 +sasha@mysql.sashanet.com|sounds/compilation_finished.au.gz|20010814034002|63992|70bd14095a918139 +sasha@mysql.sashanet.com|vio/test-ssl|20010828000105|24508|ed0a50364f2a51d7 sasha@work.mysql.com|BitKeeper/etc/logging_ok|20001214015456|29919|32b6551b8288c2fa serg@serg.mysql.com|mysql-test/r/3.23/mrg000001.dummy.result|20001206231604|05053|bf7e6d609f22b897 serg@serg.mysql.com|mysql-test/r/3.23/mrg000001.result|20001206231609|46662|db2ef2e717ab8332 -BK|Docs/Attic/myisam.doc|19700101030959|00502|519bb06ecc870298 -BK|Docs/Flags/island.eps|19700101030959|00181|8cec5a55768bc59e -BK|libmysql/violite.c|19700101030959|02600|984c09cffe14a11b -BK|mysql.proj|19700101030959|00071|3e34edc585d18be8 -BK|sql-bench/Results-win32/wisconsin-mysql-win98|19700101030959|02547|8b3da9c5c5d2365b -BK|sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686|19700101030959|02134|c0c26d4320182d85 -BK|sql-bench/Results/create-mysql_3.21-Linux_2.0.35_i686|19700101030959|02225|df1b037d17b33587 -BK|sql/share/estonia/errmsg.sys|19700101030959|01836|83b86d7ed4cdd5d0 -BK|sql/share/french/errmsg.sys|19700101030959|01838|9f024dc5e6fe50f5 -BK|sql/share/romania/errmsg.sys|19700101030959|01871|e08aa93bae96d25e -BK|strings/Attic/bootstrap-ctype.c|19700101030959|01360|6d2a8cda2d6a35ff -BK|strings/Attic/ctype-dos.c|19700101030959|01344|f77bd08acf13a8c1 -BK|strings/Attic/ctype-estonia.c|19700101030959|01345|fc8a69424f7cb66b -BK|strings/Attic/ctype-german1.c|19700101030959|01346|f7830c509bb358f7 -BK|strings/Attic/ctype-hp8.c|19700101030959|01349|749e1be0f028d349 -BK|strings/Attic/ctype-koi8_ru.c|19700101030959|01351|8ff4188c642c9bd -BK|strings/READ-ME|19700101030959|01362|ed6c5184d4bf6b7c -BK|support-files/Attic/my-large.cfg.sh|19700101030959|02586|842c8e76253c9396 -BK|vio/VioSSL.cc|19700101030959|00013|6e85340b11fa42a8 -BK|vio/VioSocket.h|19700101030959|00019|a26d535bd5a1a6 -BK|vio/viotypes.h|19700101030959|00027|f5a38e7326bd50f3 -Sinisa@sinisa.nasamreza.org|=6|20010818122920|53462|33f33b0a159dc5d5 -Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522133259|25000|4b5fbc60d0d9754f -Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133300|08911|21904fbd1c95cb1 -ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 -jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec -miguel@hegel.local|zlib/contrib/asm386/gvmat32.asm|20020319032514|12654|31093c1a846dfdc7 -miguel@hegel.local|zlib/contrib/asm386/gvmat32c.c|20020319032514|19182|2a8eba5481c46eab -miguel@hegel.local|zlib/contrib/asm586/match.s|20020319032514|51538|dc1a34b5eb2a7c11 -miguel@hegel.local|zlib/contrib/delphi2/d_zlib.cpp|20020319032514|31641|d6f37620ac7b27fa -miguel@hegel.local|zlib/contrib/delphi2/zlib.cpp|20020319032515|22372|4257437d415259e2 -miguel@hegel.local|zlib/crc32.c|20020319032516|20397|b327da5b8cf9eae8 -miguel@hegel.local|zlib/inffast.c|20020319032517|65269|bf247ff4aa2bf54b -miguel@hegel.local|zlib/inffixed.h|20020319032517|12923|e86ef8e2efe23f77 -miguel@hegel.local|zlib/msdos/zlib.def|20020319032518|18787|165cd7dcff6ac9f -miguel@hegel.local|zlib/trees.c|20020319032519|43770|4fbd4d005e26d38 -miguel@hegel.local|zlib/uncompr.c|20020319032519|57111|82eac43195d1222c -miguel@hegel.local|zlib/zlib.dsp|20020319032519|12016|6eec436fab260061 -miguel@hegel.local|zlib/zlib.html|20020319032519|31060|7a635f4ac95fc56b -monty@donna.mysql.com|mysql-test/include/have_default_master.inc|20010104005638|23980|a54c86e65a6c4af -monty@donna.mysql.com|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14777|e625af7f600bf930 -monty@donna.mysql.com|sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20766|4e5a2ab4907748d4 -monty@donna.mysql.fi|sql/violite.c|20010523223654|08838|53d4251a69d3c -monty@hundin.mysql.fi|sql-bench/Results/RUN-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|63204|e938a858bd12aa8d -monty@hundin.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|42711|788ad492867b1226 -monty@hundin.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|46284|5316add301edb60 -monty@narttu.mysql.com|sql-bench/Results/insert-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|29606|975e26cac59161fa -monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha|20001014001004|18602|e8cc899bb933532f -mwagner@cash.mwagner.org|Docs/include.de.texi|20020223092123|06028|112aac21b3489888 -mwagner@evoq.home.mwagner.org|Docs/Books/dubois.eps|20001231203219|33725|aa3d9c08bbcc149b -mwagner@evoq.home.mwagner.org|Docs/Books/in_21.eps|20001231203220|05743|83a7604251d68ebd -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|mysql-test/xml/tests/sel000006.xml|20001017133623|51441|8ad8f44f49b21246 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000013.xml|20001017133713|03416|2717cbfbe5730174 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000021.xml|20001017133713|15460|2763b87c1549ba87 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000026.xml|20001017133713|25860|15145e496417646f -nick@nick.leippe.com|mysql-test/t/rpl_empty_master_crash.test|20020531235552|52328|99464e737639ccc6 -sasha@mysql.sashanet.com|mysql-test/r/df_crash.result|20010406010433|59989|4a3dbee64843953d -sasha@mysql.sashanet.com|mysql-test/std_data/m.MRG|20001212152450|17736|3f5632c37af00f18 -sasha@mysql.sashanet.com|mysql-test/t/3.23/alt000001.test|20001122072330|31588|633aed61c4bad94c -sasha@mysql.sashanet.com|mysql-test/t/binlog-backup-restore.test|20010424233926|25316|d5b0b9bd83738a9f -sasha@mysql.sashanet.com|vio/test-ssl|20010828000105|24508|ed0a50364f2a51d7 +serg@serg.mysql.com|mysql-test/r/ft0000001.a.result|20001211130756|05199|3d17aff15fa5a9f1 +serg@serg.mysql.com|mysql-test/r/ft0000001.b.result|20001211130756|10153|505c4c00a0bddfc4 +serg@serg.mysql.com|mysql-test/r/ft0000001.c.result|20001211130756|14950|1040289a75243a92 serg@serg.mysql.com|mysql-test/r/ft0000001.d.result|20001211130756|19773|7c549555fbc7663e serg@serg.mysql.com|mysql-test/r/ft0000001.e.result|20001212121413|40468|c58d30fd7fe86f4f -serg@serg.mysql.com|mysql-test/t/sel000015.test|20001211130731|27841|7442bf9cbc96fe07 -serg@serg.mysql.com|mysql-test/t/sel000024.test|20001211130731|07099|849f47e6cbdc4fe3 -tim@threads.polyesthetic.msg|bdb/build_win32/db_int.h|20010305004134|30736|9ee5645850a336a0 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_btrec.dsp|20010305004135|08710|c87137287d8d67dc -tim@threads.polyesthetic.msg|bdb/build_win32/ex_env.dsp|20010305004135|09533|1732d5e41efda77 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_lock.dsp|20010305004135|14943|257abf03544f6270 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_qam|20010305004137|28066|6eecf6833de0af98 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_txn|20010305004137|29072|1ff22b797deb0e1b -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_rename.html|20010305004144|37128|36796ad9e106c3f0 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_hash.html|20010305004144|09702|73f14897664d9d08 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_q_extentsize.html|20010305004144|13496|f2fe41a5d8c46658 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_pad.html|20010305004144|16373|8a1de721eb6fc53f -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_sync.html|20010305004144|19394|7a067029b6e1496b -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbt.html|20010305004144|04896|ae7a81c9c5f574f6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_close.html|20010305004144|28399|a8e722cbb66c9d7b -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_conflicts.html|20010305004145|07137|58d9f7179bc864a3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_server.html|20010305004145|31969|c13b793b525d504b -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tmp_dir.html|20010305004145|34771|b563e87af5431824 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_verbose.html|20010305004145|38421|344f5119536cae0 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_file.html|20010305004145|48705|574444b46b801f9c -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_map.html|20010305004144|16369|d90bbc8462ef43a6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_realloc.html|20010305004144|19375|e8e78e57c005c7c4 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_pindex.html|20010305004147|08181|9ff6b69b56f988dd -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_append_recno.html|20010305004146|08075|a158b1fdba756ce -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errcall.html|20010305004146|10727|28a7a1fa2b3b73ee -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_nelem.html|20010305004146|19017|1829bc583d9c7554 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_delim.html|20010305004146|22753|81d9df93c3511df3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_len.html|20010305004146|23672|e09bb30e40208dfb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_remove.html|20010305004146|38809|5efece7ecdfc4df7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_region_init.html|20010305004146|59589|2d70678382bbbf9a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lsn_class.html|20010305004145|24210|34809f73e15540ad -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fclose.html|20010305004146|22608|cc4a5776ac69d660 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_abort.html|20010305004147|01091|81177bcb2e5f4502 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_checkpoint.html|20010305004147|02999|173930473e76d008 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_key_range.html|20010305004147|31461|8834de5873a6acb5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_stat.html|20010305004147|57008|bc253f0883e9c82b -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbenv_class.html|20010305004147|12326|92c7a4a6c22090c7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errcall.html|20010305004147|07189|4e206d08cbb39ab7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_detect.html|20010305004147|15549|9fc15a1a95b0dfa1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_lockers.html|20010305004147|18755|7896265ea77829b3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_rec_init.html|20010305004147|25237|1fdb2c5fc3b6407 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_recover.html|20010305004148|00983|40280da113fc9d2b -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_timestamp.html|20010305004148|02804|457eeb135f1f8bc0 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_strerror.html|20010305004148|04588|fceebaa94cf9aafd -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_stat.html|20010305004148|10140|71b81d8567befc43 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_flush.html|20010305004148|14794|1691d6a3c8cc284e -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fclose.html|20010305004148|20518|d08f0c134361f802 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_prepare.html|20010305004148|33784|510a245c80e715c -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get.html|20010305004148|42753|127bd361ee695c71 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_is_byteswapped.html|20010305004148|45596|8fb9e2c58051c769 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_stat.html|20010305004148|51363|3bb57be2de907fd2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_commit.html|20010305004148|64051|25150b20b84cd519 -tim@threads.polyesthetic.msg|bdb/docs/images/api.gif|20010305004148|02578|dec2d4fe5f39dffe -tim@threads.polyesthetic.msg|bdb/docs/images/ref.gif|20010305004148|06650|add30c753dc1972d -tim@threads.polyesthetic.msg|bdb/docs/ref/am/open.html|20010305004148|23468|c9a7e23579a5e93a -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_recnum.html|20010305004149|20770|f081f10254e86e75 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_hash.html|20010305004149|25978|3a0174586fbcfcdf -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_nelem.html|20010305004149|26871|979995db477052ad -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/apis.html|20010305004149|36488|a84570e410b11a6a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/intro.html|20010305004149|49652|f261022c26987d7f -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/osf1.html|20010305004149|53358|9d4ebabfe3af8970 -tim@threads.polyesthetic.msg|bdb/docs/ref/cam/intro.html|20010305004149|04558|4c497b1a18c4c7f5 -tim@threads.polyesthetic.msg|bdb/docs/ref/install/file.html|20010305004150|21159|d4ba2317db7c064b -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.txt|20010305004150|21985|3894a46ea11ce25a -tim@threads.polyesthetic.msg|bdb/docs/ref/java/faq.html|20010305004150|27218|7ca2474ba1f6676f -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/cam_conv.html|20010305004150|31862|63844ff6fa95f0c -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/nondb.html|20010305004150|36156|863fe076a46378d7 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/twopl.html|20010305004150|39650|b3f3aee667bc381d -tim@threads.polyesthetic.msg|bdb/docs/ref/log/limits.html|20010305004150|43198|26fac1e32387b7c9 -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/intro.html|20010305004150|13549|ad16bc20623e1192 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/errors.html|20010305004150|19994|be11ff6410e1db2c -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/app.html|20010305004151|42111|6dc3c82982164fa8 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/intro.html|20010305004151|49773|22096cea9fe159ac -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/other.html|20010305004151|63311|4991722636b3a46d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_register.html|20010305004151|23513|399320e965adf598 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_stat.html|20010305004151|33181|516f1870c6127351 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/value_set.html|20010305004151|34118|f0b0c770a81b90b6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_paniccall.html|20010305004152|46636|8f9741244fb6e9f6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tmp.html|20010305004152|50733|ef3450f6fa89f2dc -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/txn_check.html|20010305004152|51549|2405b25bc92cc476 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/renumber.html|20010305004152|60219|d6cd798434da81aa -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/toc.html|20010305004152|61902|9c94c533ada43c1a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade/process.html|20010305004151|64704|78f9ca966a587234 -tim@threads.polyesthetic.msg|bdb/include/db_auto.h|20010305004137|26350|994ddc84db334345 -tim@threads.polyesthetic.msg|bdb/include/hash_auto.h|20010305004138|09216|1b79cdd426d7ef25 -tim@threads.polyesthetic.msg|bdb/include/rpc_client_ext.h|20010305004138|28220|85436ca9b5691338 -tim@threads.polyesthetic.msg|bdb/rpc_client/db_server_clnt.c|20010305004141|41933|b548b860f765c597 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_xdr.c|20010305004141|53794|336ef020b4a22c05 -tim@threads.polyesthetic.msg|bdb/txn/txn_auto.c|20010305004143|19863|6eb282f016f606d9 -BK|sql-bench/Results-win32/connect-mysql-win98|19700101030959|02535|2a11d5e3dfc0bc67 -BK|sql-bench/Results-win32/select-mysql-win98|19700101030959|02544|f370fac2d66a9faf -BK|sql-bench/Results/ATIS-mysql_3.21-Linux_2.0.35_i686|19700101030959|02036|c25425e045ca8dfc -BK|sql-bench/Results/alter-table-mysql_3.21-Linux_2.0.35_i686|19700101030959|02092|762639f2560976bd -BK|sql/Attic/mini_client.c|19700101030959|01910|9a3778c387d06a81 -BK|sql/Attic/mybinlogdump.cc|19700101030959|01908|5dbdd2bde98d6169 -BK|strings/Attic/ctype-croat.c|19700101030959|01341|d2d805ee6f10cbcc -BK|strings/Attic/ctype-hungarian.c|19700101030959|01350|5cf0bf7fa0312637 -BK|strings/Attic/ctype-latin1.c|19700101030959|01353|cc63880f19c2303e -BK|strings/Attic/ctype-latin2.c|19700101030959|01354|31895c4b83654342 -BK|strings/Attic/ctype-win1250.c|19700101030959|01357|1ce7a24255780a1 -BK|support-files/Attic/my-example.cnf.sh|19700101030959|02584|87a7e1f4d24b62a9 -BK|support-files/Attic/my-small.cfg.sh|19700101030959|02588|85023c559a1d96c -BK|vio/VioConnectorFd.cc|19700101030959|00007|ddbd7821c43c83a2 -BK|vio/VioSSLFactoriesFd.cc|19700101030959|00016|89f6bf5073937947 -Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133624|23665|445526a8a20de101 -miguel@hegel.local|zlib/contrib/delphi2/readme.txt|20020319032515|03494|65d16837f8579e23 -miguel@hegel.local|zlib/contrib/iostream2/zstream.h|20020319032515|02537|351f26518ea48196 -miguel@hegel.local|zlib/infcodes.h|20020319032517|58960|3a02220a89c9a4fa -miguel@hegel.local|zlib/inflate.c|20020319032517|19311|fb22a3a1ab6fb1a0 -miguel@hegel.local|zlib/infutil.c|20020319032518|05244|a9b414f0f4ea0868 -miguel@hegel.local|zlib/nt/zlib.dnt|20020319032519|16279|22a0ed3b86ff8c2 -miguel@hegel.local|zlib/zlib.3|20020319032519|04298|ec5cb4f64476f6a -monty@donna.mysql.com|mysql-test/r/have_default_master.require|20010104005638|27332|1465255ffdaf82f -monty@hundin.mysql.fi|sql-bench/Results/ATIS-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|59551|d002b0bc548ff8b3 -monty@hundin.mysql.fi|sql-bench/Results/connect-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|08804|1b715c6fd72e913e -monty@hundin.mysql.fi|sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|49804|26e09af61f88d8c9 -monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|13605|ee94f987797ca948 -monty@narttu.mysql.com|sql-bench/Results/select-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|35818|34a39fbcb58d8945 -monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|37931|2db07249379f36 -monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|40155|8101a5823c17e58a -monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha|20001014001004|13092|583091e05a25fb6 -monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha|20001014001004|15829|6c20c9ef46f82241 -monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|07880|e1771e0a164bc310 -monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha|20001014001004|32465|fc410754151d622c -mwagner@evoq.home.mwagner.org|Docs/Books/dbi.eps|20001231203219|30594|6ad58f9457e2a564 -mwagner@evoq.home.mwagner.org|Docs/Books/ecomm.eps|20001231203220|02445|58ae914b5d5ea49 -mwagner@evoq.home.mwagner.org|Docs/Books/msql.eps|20001231203220|12487|ffe7d62847663250 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000009.xml|20001017133629|19814|8677613dc624cb0c -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000029.xml|20001017133713|31058|3aba1eb23ef86c9e -sasha@mysql.sashanet.com|mysql-test/t/rpl000018-master.sh|20010127223331|13256|bc8072e13b26b005 -serg@serg.mysql.com|mysql-test/t/sel000007.test|20001211130730|24336|f431e4f4739a24c3 -serg@serg.mysql.com|mysql-test/t/sel000021.test|20001211130731|57561|94dd47de2872264a -tim@threads.polyesthetic.msg|bdb/build_vxworks/db_int.h|20010305004134|18702|40ba51edce41403f -tim@threads.polyesthetic.msg|bdb/build_win32/db_tcl.dsp|20010305004135|02285|5ad951d774e41520 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_lock.dsp|20010305004135|10303|286d2566e786dde -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_env.dsp|20010305004135|14159|b0bf2649a4c797ac -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_mpool.dsp|20010305004135|15715|d17a5d09f09f5217 -tim@threads.polyesthetic.msg|bdb/build_win32/include.tcl|20010305004135|17284|f8bffb5e2510f229 -tim@threads.polyesthetic.msg|bdb/db/db_auto.c|20010305004136|32432|3186e950cc321ae7 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.tags|20010305004137|19101|7a5b14d33d4078cc -tim@threads.polyesthetic.msg|bdb/dist/config.guess|20010305004136|14678|ead1d91caeaa748c -tim@threads.polyesthetic.msg|bdb/dist/template/rec_btree|20010305004137|23131|65d6b0b2f5b7a6d2 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_db|20010305004137|25141|52c5797539878fca -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_append_recno.html|20010305004144|38070|bdf0130e642f74fa -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_prefix.html|20010305004144|41420|d6e443a7e47c9b3a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errpfx.html|20010305004144|05859|756b9b73dd28b8d9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_feedback.html|20010305004144|06786|90d495e78318a332 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_source.html|20010305004144|17353|6d12ac12652acc31 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_stat.html|20010305004144|18351|578f6f99f8e247ff -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max.html|20010305004145|08849|a2dc11fa8b2f1c9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_pageyield.html|20010305004145|28418|8aa4a6cb2f18cad7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_rec_init.html|20010305004145|30192|bf7da051ef6689ba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_max.html|20010305004145|35672|71a739e46faf33a9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_vec.html|20010305004145|45892|cc79e33b82b7a275 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_register.html|20010305004145|52499|5381c1fad82d6527 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_stat.html|20010305004145|53440|36b87b19ee2c5bba -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_close.html|20010305004144|08984|8981d16589844161 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_seek.html|20010305004144|21048|fdf1b31d3f6c7473 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unlink.html|20010305004144|22800|c42b13fd26f2e90 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_cursor.html|20010305004145|29241|4f0225f98f4a11c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_del.html|20010305004145|31220|43fa05f2dfa86dbc -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_join.html|20010305004146|02717|9c4819679501ad6e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_remove.html|20010305004146|06326|8c537fc5e326293b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_ffactor.html|20010305004146|17155|a67084c644c38114 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_pad.html|20010305004146|24627|f2e0c2c2c3806a97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_stat.html|20010305004146|26537|3473827de856d680 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_verify.html|20010305004146|29479|14db455da528229d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_class.html|20010305004145|15353|2a31b398c37d674b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_get.html|20010305004146|34739|36e2dbe65e3442e3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_rec_init.html|20010305004146|58586|77916e00d1361c7b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_server.html|20010305004146|60631|bb74806839e8eb58 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_max.html|20010305004146|01212|910d1c17dd000729 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/get_errno.html|20010305004145|22249|e1a57c1c5f1d2695 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_compare.html|20010305004146|13902|3225b4c32016c9b1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_get.html|20010305004146|17104|aee6162219c71617 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_trickle.html|20010305004146|34409|c9df8540b9ebc898 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_begin.html|20010305004147|02053|3a2d1488ec9d8655 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_class.html|20010305004145|26179|5e57abe095aceca9 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_class.html|20010305004147|09609|b957a4d2b77acb1e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_append_recno.html|20010305004147|36282|d28bf857803b93a2 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_len.html|20010305004147|53997|8448826ea78c630e -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_open.html|20010305004147|02873|2df0f0ef544da715 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_data_dir.html|20010305004147|06162|b7b3f35e96804650 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_dir.html|20010305004147|12366|484cad2123994e14 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lsn_class.html|20010305004147|20619|b1458208b6c81016 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fput.html|20010305004148|23268|6ba75e517a259703 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_del.html|20010305004148|41829|400c7a72fb10d6f4 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_join.html|20010305004148|43762|1c737805c2c49cf9 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/count.html|20010305004148|11236|8fd8daf2e2cbd7c7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curclose.html|20010305004148|12231|8b6b8442fc8382f7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curput.html|20010305004148|16324|c7e4fa0a68170c3d -tim@threads.polyesthetic.msg|bdb/docs/ref/am/cursor.html|20010305004148|17350|6dbcdb3b7d552f58 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/sync.html|20010305004148|33751|381722c07c9d8825 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/byteorder.html|20010305004149|21617|999a22f727e2dae0 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/dup.html|20010305004149|23371|523731632fca7343 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/extentsize.html|20010305004149|24263|fdcfb5572974545c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/malloc.html|20010305004149|29537|cb0e6d7e9448d93e -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.html|20010305004149|37519|ab5254bc99af0d5c -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/script.html|20010305004149|39400|6796fd0a63161a0c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/flags.html|20010305004149|46003|a739404f90eb8c3d -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/install.html|20010305004149|48752|660222dd1feffc4 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/irix.html|20010305004149|50564|95833aedc3a82f0 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/printlog.html|20010305004149|09591|9fa9894f839fad95 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/runtime.html|20010305004149|10629|d50f2fea4a8e58c -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/format.html|20010305004149|13995|9fa10ca3c7ae6751 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/intro.html|20010305004149|19435|96dd1090729e06b -tim@threads.polyesthetic.msg|bdb/docs/ref/env/remote.html|20010305004149|23518|52a3a79fdff8f7bd -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbisnot.html|20010305004149|29466|5ce7aed7ce41c9e6 -tim@threads.polyesthetic.msg|bdb/docs/ref/java/conf.html|20010305004150|26401|ef560bcf13a71cd5 -tim@threads.polyesthetic.msg|bdb/docs/ref/log/config.html|20010305004150|41449|aedc53caf49c51c9 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/scope.html|20010305004150|59326|2987f97781410bc1 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/embedded.html|20010305004150|03865|d25b9719d24df88c -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/witold.html|20010305004150|65330|ad6c866cf48734b5 -tim@threads.polyesthetic.msg|bdb/docs/ref/sendmail/intro.html|20010305004150|16532|ecac45d7e2bcf51c -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/close.html|20010305004150|18046|1fe3a82f28e7ed32 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/keydata.html|20010305004150|23810|530b1581aeba63ca -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/put.html|20010305004150|25774|bdd2629c212af471 -tim@threads.polyesthetic.msg|bdb/docs/ref/toc.html|20010305004148|08788|ab1fa294d5ef4b69 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/reclimit.html|20010305004151|53098|5f54174bf6026bd5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/recovery.html|20010305004151|53956|6e3a0c07b997c3b2 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/throughput.html|20010305004151|55655|8a7d5a958df7f91a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/intro.html|20010305004151|02261|8bfd3804a2da1598 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv_cxx.html|20010305004151|09872|7f4fd0ebace36d8e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/disk.html|20010305004151|11685|eb79d1157ef44d3c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/java.html|20010305004151|17120|300acccbb633e335 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/jump_set.html|20010305004151|18936|718c098a91db9dba -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_notheld.html|20010305004151|20761|ed6853b6daa5531b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/open.html|20010305004151|27357|8b1e2a969e97069a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/intro.html|20010305004152|41719|64592a50b1c634d6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_tx_recover.html|20010305004152|47442|ada65907ba98eee8 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/toc.html|20010305004152|49908|af1a24798980ad1 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/incomplete.html|20010305004152|56914|af86a649a878a124 -tim@threads.polyesthetic.msg|bdb/hash/hash_auto.c|20010305004137|61459|d17c6a6ed4f181d1 -tim@threads.polyesthetic.msg|bdb/include/clib_ext.h|20010305004137|19207|ed9d9f7965f0e1d3 -tim@threads.polyesthetic.msg|bdb/rpc_server/gen_db_server.c|20010305004141|54931|d5602f9bd5c930e -BK|Docs/Flags/island.gif|19700101030959|00142|e274d5e96ee0975a -BK|Docs/Flags/south-africa1.txt|19700101030959|00232|87a53fdcd2149c6e -BK|client/Attic/net.c|19700101030959|00583|c18042da6fa4e693 -BK|extra/Attic/print_defaults.c|19700101030959|01513|362952979aa7b330 -BK|sql-bench/Results-win32/RUN-mysql-win98|19700101030959|02526|7f09e396772a8665 -BK|sql-bench/Results-win32/insert-mysql-win98|19700101030959|02541|6d6cafc85a6c837 -BK|sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686|19700101030959|02050|f6fdd64859e11de9 -BK|sql-bench/Results/big-tables-mysql_3.21-Linux_2.0.35_i686|19700101030959|02120|190e827e569c99a4 -BK|sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686|19700101030959|02158|51581b24f45e0f5c -Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522121240|20995|360af2095c88cb8c -arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614|692b647b -ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 -miguel@hegel.local|zlib/algorithm.txt|20020319032513|12903|fbc4dda3d31c2005 -miguel@hegel.local|zlib/contrib/README.contrib|20020319032514|04353|24cb75bee0a061fb -miguel@hegel.local|zlib/contrib/asm386/zlibvc.def|20020319032514|31637|605ee23b8a4a6a1a -miguel@hegel.local|zlib/contrib/delphi2/zlib.bpg|20020319032515|09768|93c030edcca1838 -miguel@hegel.local|zlib/contrib/delphi2/zlib.bpr|20020319032515|16113|7a2fa98af2345144 -miguel@hegel.local|zlib/contrib/minizip/unzip.h|20020319032516|21001|bac981086af91a30 -miguel@hegel.local|zlib/contrib/minizip/zip.c|20020319032516|27911|e82bf7774e1ece95 -miguel@hegel.local|zlib/zutil.h|20020319032520|12556|1e431b0173278fb2 -monty@donna.mysql.com|innobase/ib_config.h.in|20010217121901|07616|9e57db8504e55b7 -monty@donna.mysql.com|innobase/ib_config.h|20010217121901|04019|7539e26ffc614439 -monty@narttu.mysql.com|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|27509|d12a7edef05d7185 -mwagner@evoq.home.mwagner.org|Docs/Books/manual.eps|20001231203220|09365|2a7145f88960c7ec -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000025.xml|20001017133713|24071|3e766aa1e43b303 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000030.xml|20001017133600|63205|c2b25781eefaee9 -serg@serg.mysql.com|mysql-test/t/sel000006.test|20001211130730|19922|291cc6c8d85e51df -serg@serg.mysql.com|mysql-test/t/sel000016.test|20001211130731|32739|f495235f14c47ec -tim@threads.polyesthetic.msg|bdb/build_win32/db_stat.dsp|20010305004135|00560|f77417f5d9984986 -tim@threads.polyesthetic.msg|bdb/dist/config.sub|20010305004136|16944|17e9990a298261a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_remove.html|20010305004144|36184|668fa1d67a4f6941 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_malloc.html|20010305004144|01594|3581879fef5af695 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_flags.html|20010305004145|03778|b2a1f3c8498e6d95 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_detect.html|20010305004145|07983|d9ed73495defdc19 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_lockers.html|20010305004145|24923|f22d5d4640436efe -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_locks.html|20010305004145|09704|1baf2d63a6fb418d -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tas_spins.html|20010305004145|33848|91c7091deca3d97f -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fclose.html|20010305004145|55335|b52c7d599d83c26 -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_abort.html|20010305004145|65162|a53425dd70214619 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_index.html|20010305004145|07331|a0bc165de8a0554c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_feedback.html|20010305004146|15263|a08620d86f05ec8c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_malloc.html|20010305004145|12423|b0aa5802da5bef4d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_dup.html|20010305004146|33708|75df863b4bc13aaa -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_close.html|20010305004146|36778|5cc705b97b86972c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_cachesize.html|20010305004146|39807|b82ed49a47415fec -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_detect.html|20010305004146|49591|13e53300b722cf1e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_panicstate.html|20010305004146|57577|ad2d38e398cafd31 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_get.html|20010305004146|61648|527d63a8526f336c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_put.html|20010305004146|18207|66077da9630fa8c2 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_sync.html|20010305004146|33235|253961279934d3c8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_hash.html|20010305004147|48174|c6eb825c706a9548 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_detect.html|20010305004148|06490|14d4e7c7dca0dad7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fsync.html|20010305004148|25118|e767b233fe7730a2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_put.html|20010305004148|57122|290ecb1275d4270 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_open.html|20010305004148|59088|39b63925d45a637e -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_pindex.html|20010305004148|00553|259f0e062eee63c7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/ops.html|20010305004148|25566|9b24db9ba4f45724 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_compare.html|20010305004149|18156|c1e847e651704c89 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_minkey.html|20010305004149|19013|b4708e561be92b83 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/intro.html|20010305004149|27745|dd1647202258ee28 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/recno.html|20010305004149|32283|c2ae722138309e95 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/select.html|20010305004149|34120|57b1c99f6a8ea93f -tim@threads.polyesthetic.msg|bdb/docs/ref/distrib/layout.html|20010305004149|12589|5aeb292fbd987cf8 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/error.html|20010305004149|18447|acbbdb848c9fe70f -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/terrain.html|20010305004149|33850|b396d6447a59435f -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/intro.html|20010305004150|34434|e1e07e71f3198be -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/program.html|20010305004151|23138|2f5bf497ae226ed5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/archival.html|20010305004151|42978|7631314d840be181 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/logfile.html|20010305004151|50590|1c3002fcb6581e8c -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/read.html|20010305004151|52265|fc8b056380e09887 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/func.html|20010305004151|15332|c06e5bc63ddf7a64 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/logalloc.html|20010305004152|43372|30563c544b8ddd54 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/contact.html|20010305004152|04402|55b4da3d7bf7655b -tim@threads.polyesthetic.msg|bdb/docs/utility/db_archive.html|20010305004152|07446|ab2c66e01b3e3626 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_recover.html|20010305004152|12771|1b63f2acdc0b0af7 -tim@threads.polyesthetic.msg|bdb/include/env_ext.h|20010305004138|05832|33a5fdef1aeecefd -tim@threads.polyesthetic.msg|bdb/include/txn_ext.h|20010305004138|34549|9db24c14f204890c -BK|Docs/Flags/kroatia.eps|19700101030959|00185|f50fcd444e7efceb -BK|Docs/Flags/south-africa1.gif|19700101030959|00154|1ea38de5a535f732 -BK|sql-bench/Results/insert-mysql_3.21-Linux_2.0.35_i686|19700101030959|02252|60c0965dff31db07 -BK|sql-bench/Results/select-mysql_3.21-Linux_2.0.35_i686|19700101030959|02278|5fadbac5f98696a -BK|sql/share/danish/errmsg.sys|19700101030959|01831|3a6d0fb8451a3313 -BK|sql/share/dutch/errmsg.sys|19700101030959|01833|b5aff4d08478bafd -BK|sql/share/italian/errmsg.sys|19700101030959|01846|c5108ecb850b79a -BK|sql/share/portuguese/errmsg.sys|19700101030959|01859|c0187322f8c9d805 -BK|vio/VioAcceptorFd.cc|19700101030959|00005|a5a08947a31f88de -BK|vio/vio-global.h|19700101030959|00021|c261412c01b2f4 -miguel@hegel.local|zlib/ChangeLog|20020319032513|28917|5d5425fc84737083 -miguel@hegel.local|zlib/compress.c|20020319032513|32512|70bccb304651dba9 -miguel@hegel.local|zlib/contrib/asm386/mkgvmt32.bat|20020319032514|25425|422cbe16a6e74695 -miguel@hegel.local|zlib/contrib/delphi2/zlib32.bpr|20020319032515|35585|41ac53acb8008ff7 -miguel@hegel.local|zlib/contrib/delphi2/zlib32.cpp|20020319032515|41979|3b0f51435e880afe -miguel@hegel.local|zlib/contrib/minizip/ChangeLogUnzip|20020319032515|15183|50464416f4a3768f -miguel@hegel.local|zlib/index|20020319032517|33542|5443c9f841db4a47 -miguel@hegel.local|zlib/infblock.c|20020319032517|39853|540cc1b743be5f58 -mikef@nslinux.bedford.progress.com|mysql-test/r/have_gemini.require|20010321203410|47052|206702c48b2e206b -monty@donna.mysql.com|sql-bench/Results/ATIS-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14134|cf0d806760eefef2 -monty@donna.mysql.com|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18309|c87333d6fe04433e -monty@donna.mysql.com|sql-bench/Results/connect-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|19522|ab58fffa30dce97e -monty@donna.mysql.com|sql-bench/Results/insert-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22042|27b7a557c3cb07a -monty@donna.mysql.com|sql-bench/Results/wisconsin-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24748|6a468dcd3e6f5405 -monty@hundin.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|35759|11038a44f73070e7 -monty@hundin.mysql.fi|sql-bench/Results/big-tables-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|05113|b6be70bb51013cad -monty@hundin.mysql.fi|sql-bench/Results/select-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|19688|4ffc9cf4be665ea2 -monty@hundin.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|60398|8ba598d217450157 -monty@hundin.mysql.fi|support-files/make_mysql_pkg.sh|20010915122456|03682|c616a18bed4b9c2 -monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|04677|f761da5546f0d362 -monty@narttu.mysql.com|sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171904|13285|a88e954bc8de5460 -monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|17580|28b688e2cd4b6bb3 -monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha|20001014001004|21372|84df7c6446e51e26 -monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|00237|45d2cdf9bea9cc37 -monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|15116|b7552710d35202b6 -mwagner@evoq.home.mwagner.org|Docs/Books/sql-99.eps|20001231203220|25230|cec4ae16fee4c640 -mwagner@evoq.home.mwagner.org|mysql-test/chew_on_this/select.tst|20001013104933|54568|2e626fa07144d2c8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000002.xml|20001013074610|25702|8cd06da5293a7147 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000008.xml|20001017133627|18273|1d6082f0905c51b6 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000018.xml|20001017133713|10435|82e2e7bde83f56d8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000022.xml|20001017133713|17202|da2083ef423ae39a -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000027.xml|20001017133713|27519|95e7de3e9934b570 -sasha@mysql.sashanet.com|mysql-test/r/mrg000002.result|20001212152450|11492|745be0854aaaaf5e -sasha@mysql.sashanet.com|mysql-test/t/fulltext_join.test|20010730234357|20865|e347c8f04405c916 +serg@serg.mysql.com|mysql-test/r/ft0000002.a.result|20001212120058|27306|a89b4db1db19f944 serg@serg.mysql.com|mysql-test/r/ft0000002.b.result|20001212120058|34425|5de41ce15ae1cedb +serg@serg.mysql.com|mysql-test/r/ft0000002.c.result|20001212120059|07173|cd66b90918a87531 +serg@serg.mysql.com|mysql-test/t/3.23/mrg000001.test|20001206231615|27540|e0327f9d1e6cb4e +serg@serg.mysql.com|mysql-test/t/sel000006.test|20001211130730|19922|291cc6c8d85e51df +serg@serg.mysql.com|mysql-test/t/sel000007.test|20001211130730|24336|f431e4f4739a24c3 +serg@serg.mysql.com|mysql-test/t/sel000008.test|20001211130730|28581|b338ef585cadf7ae +serg@serg.mysql.com|mysql-test/t/sel000009.test|20001211130730|33139|a455c38f5c942cd1 +serg@serg.mysql.com|mysql-test/t/sel000010.test|20001211130731|03554|ca07085ae92255f1 +serg@serg.mysql.com|mysql-test/t/sel000011.test|20001211130731|08373|c2a971726c9d18d6 +serg@serg.mysql.com|mysql-test/t/sel000012.test|20001211130731|13215|ae64bff363c42e92 +serg@serg.mysql.com|mysql-test/t/sel000013.test|20001211130731|18090|ce8aa504ba4f74ba +serg@serg.mysql.com|mysql-test/t/sel000014.test|20001211130731|22977|74cb8c70f1d73fcc +serg@serg.mysql.com|mysql-test/t/sel000015.test|20001211130731|27841|7442bf9cbc96fe07 +serg@serg.mysql.com|mysql-test/t/sel000016.test|20001211130731|32739|f495235f14c47ec serg@serg.mysql.com|mysql-test/t/sel000017.test|20001211130731|37659|7c39f2b45a6aa780 serg@serg.mysql.com|mysql-test/t/sel000018.test|20001211130731|42584|16207f3ad74de75e -serg@serg.mysql.com|mysql-test/t/sel000022.test|20001211130731|62553|6e3e5435e66875e9 -serg@serg.mysql.com|mysql-test/t/sel000023.test|20001211130731|02042|7bdfcfaa278f837d -serg@serg.mysql.com|mysql-test/t/sel000025.test|20001211130731|12136|65b32b4b67e4c77 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.eps|20020228162345|64529|31ade79a89683616 -tim@cane.mysql.fi|mysql-test/r/delete.result|20001221095802|20463|e866a6678e29f186 -tim@threads.polyesthetic.msg|bdb/build_win32/db_deadlock.dsp|20010305004134|28374|befd45d29eaeb672 -tim@threads.polyesthetic.msg|bdb/build_win32/db_dump.dsp|20010305004134|29985|e07d2a82708b61 -tim@threads.polyesthetic.msg|bdb/build_win32/db_recover.dsp|20010305004134|34274|835c32ab73359256 -tim@threads.polyesthetic.msg|bdb/build_win32/db_static.dsp|20010305004135|01425|78ea414467defc70 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_access.dsp|20010305004135|07926|8dd6017efffae14e -tim@threads.polyesthetic.msg|bdb/build_win32/ex_mpool.dsp|20010305004135|11076|9eb937bc70c1573 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_access.dsp|20010305004135|12614|31e87b6228470681 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.def|20010305004137|13920|bb65b471d09f7c58 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.srcfiles|20010305004137|18056|ae884700cd110cbf -tim@threads.polyesthetic.msg|bdb/dist/template/rec_crdel|20010305004137|24191|58795c0c5232f80d -tim@threads.polyesthetic.msg|bdb/docs/api_c/c_index.html|20010305004143|28133|1a854fa55012906 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_del.html|20010305004144|11427|e8bffcf9be371317 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get.html|20010305004144|29265|7e0018b93ee31eba -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_type.html|20010305004144|31538|d66aa1642a4d20e2 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_open.html|20010305004144|34314|59dfa6e5198c382e -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_realloc.html|20010305004144|03204|a9be244baf966892 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_verify.html|20010305004144|21372|cf80f5ba845eac2e -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_remove.html|20010305004144|31547|a71d5e1ca41324a7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_cachesize.html|20010305004144|32567|f4c341d3f2c09469 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errcall.html|20010305004145|00341|ba09eec1ba15f15f -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_objects.html|20010305004145|25791|1a428bbee06cb5cc -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mp_mmapsize.html|20010305004145|26668|21f27997f00accfe -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mutexlocks.html|20010305004145|27540|85bbd53b877cafe1 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_paniccall.html|20010305004144|07360|97a1d58189199453 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fget.html|20010305004145|56294|460714b5c2e3e1c5 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_register.html|20010305004145|61165|8b9dff9b5043da58 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_malloc.html|20010305004144|15535|5579a0604e14e1e7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_rename.html|20010305004144|20199|3f8c7b6674cda105 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_write.html|20010305004144|24518|63567be42d586fde -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_commit.html|20010305004145|02592|8950b5e11c8b0778 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errpfx.html|20010305004146|14381|1f26e7b0bb5a067f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_sync.html|20010305004146|27538|dadf1f745e44faa7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errpfx.html|20010305004146|42728|d26da4bab9538234 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_dir.html|20010305004146|46674|c08aac264e7faa97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_pageyield.html|20010305004146|56583|db4e5bdf71e171c0 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_version.html|20010305004146|06444|1cff25c44cbea934 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/pindex.src|20010305004145|09392|d65361c4acfcef06 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_commit.html|20010305004147|03924|65afb8caf9c470ae -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/what.html|20010305004145|27185|a64f42c697273c44 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_close.html|20010305004147|24101|21595167f4fdbe88 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_del.html|20010305004147|25922|f4f15b362b114506 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_remove.html|20010305004147|34343|49d3b8c7e5a5b000 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_class.html|20010305004147|11473|8ee03c40ae0dbcb8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_put.html|20010305004147|00700|da0f0fa974385abd -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_shm_key.html|20010305004147|28699|8c576698882f0edc -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tas_spins.html|20010305004147|30425|2f9963827fbcb3f -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_archive.html|20010305004148|11996|b4a9483dbb5a2b58 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_compare.html|20010305004148|12947|756622b42572ecb -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_put.html|20010305004148|16729|ad7e9f382abde491 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_stat.html|20010305004148|18608|d186a08662046aba -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_join.html|20010305004148|46525|cb3eb61ed17a1f8 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_remove.html|20010305004148|60117|9090900413ff0280 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/pindex.src|20010305004148|39123|f8754fff24f2cb24 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/error.html|20010305004148|19390|45ac854e68196844 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/verify.html|20010305004149|01382|badaeba91bda50e1 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_prefix.html|20010305004149|19903|4e7602aa68d50fe1 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/utilities.html|20010305004149|40326|54d7014fab332c7a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sco.html|20010305004149|55174|e25f6271a1b753d0 -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/utility.html|20010305004149|15969|8fc100fdb58adb3c -tim@threads.polyesthetic.msg|bdb/docs/ref/env/create.html|20010305004149|17402|9f454cb1910df0b8 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/naming.html|20010305004149|20447|1f041789686cc8a0 -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.le.txt|20010305004150|23615|528ef76418c8b45c -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/data.html|20010305004149|26092|33fbf7496c58cf63 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/distrib.html|20010305004149|30742|84b56709310017f2 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/products.html|20010305004149|32785|f37221772a3b589d -tim@threads.polyesthetic.msg|bdb/docs/ref/java/compat.html|20010305004150|25581|b39d173789bbf70d -tim@threads.polyesthetic.msg|bdb/docs/ref/program/dbsizes.html|20010305004150|52571|d70da530573b9b38 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/errorret.html|20010305004150|55412|23491397d7e704e9 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/recimp.html|20010305004150|60288|bbdb0feb7d467a80 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/version.html|20010305004150|62172|d266e819d1531df8 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/hash_usenix.ps|20010305004150|05408|11cad226b0aa012b -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/refs.html|20010305004150|64422|30490b237ba9b61 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/handles.html|20010305004150|21935|18a14f4a50e7bad0 -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/using.html|20010305004151|23908|28856d8c72d0660b -tim@threads.polyesthetic.msg|bdb/docs/ref/test/run.html|20010305004151|39305|63c0398e7e2a29e2 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/toc.html|20010305004151|04069|670791f294a61494 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db.html|20010305004151|07207|e7d63f4bb8e989e8 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_stat.html|20010305004151|24428|20b5898ba061557d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/memp_stat.html|20010305004151|25363|79e1141c63f7357 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/xa.html|20010305004152|00602|1af042e462ab829 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/config.html|20010305004152|38401|d2ace28f39ab0f8d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/sysmem.html|20010305004152|48282|3d088eb0ef1b27e0 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/legal.html|20010305004152|02616|7388af4c578cacf6 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_checkpoint.html|20010305004152|08309|c040e4424edcc451 -tim@threads.polyesthetic.msg|bdb/include/common_ext.h|20010305004137|20146|35c8aab64ee3b8fd -tim@threads.polyesthetic.msg|bdb/include/log_auto.h|20010305004138|13513|8d52dd0884d03051 -tim@threads.polyesthetic.msg|bdb/include/os_ext.h|20010305004138|20730|a1771032b4d2d53b -tim@threads.polyesthetic.msg|bdb/include/rpc_server_ext.h|20010305004138|29091|952741fb85de2b80 -tonu@x3.internalnet|include/vio.h|20010520213124|42404|c62fd2b86c03da7d -BK|Docs/Flags/kroatia.gif|19700101030959|00146|bea7bbe0316d462d -BK|Docs/Flags/kroatia.txt|19700101030959|00224|dde7f89f25d616b2 -BK|mit-pthreads/pgcc|19700101030959|00596|154a03d0c1a0a600 -BK|sql-bench/Results-win32/ATIS-mysql-win98|19700101030959|02523|cd0705815d3af451 -BK|sql-bench/Results-win32/big-tables-mysql-win98|19700101030959|02532|99a1882effebbdf2 -BK|sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686|19700101030959|02022|660fb76ed6ccfb6f -BK|sql-bench/Results/RUN-mysql_3.21-Linux_2.0.35_i686|19700101030959|02064|ea8672d8473435 -BK|sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686|19700101030959|02106|baa649caba113497 -BK|sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686|19700101030959|02265|ed3687e713ff0571 -BK|sql/Attic/lex_hash.h|19700101030959|01912|14f912771118b50c -BK|sql/share/czech/errmsg.sys|19700101030959|01828|93104a2bd5c732a -BK|sql/share/greek/errmsg.sys|19700101030959|01842|fedf585fa73e7cf1 -BK|sql/share/slovak/errmsg.sys|19700101030959|01862|148510616ae825cf -BK|sql/violite.c|19700101030959|01738|d7b85be615595ace -BK|strings/Attic/ctype-cp1251.c|19700101030959|01339|cdf74b9168408b3 -BK|strings/Attic/ctype-dec8.c|19700101030959|01343|68f257dd2202d0c7 -BK|vio/VioConnectorFd.h|19700101030959|00008|58bc11cdc885b951 -BK|vio/VioPipe.cc|19700101030959|00011|12cf83b9a2f48f6c -BK|vio/VioSSLAcceptorFd.cc|19700101030959|00015|4c828f3688ed74ec -BK|vio/version.cc|19700101030959|00020|7237acf12bed4a97 -arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d -miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsw|20020319032514|44870|3209982720f131ab -miguel@hegel.local|zlib/contrib/asm686/match.s|20020319032514|64199|4164951e8e19f116 -miguel@hegel.local|zlib/contrib/iostream/zfstream.h|20020319032515|61553|2b4d88acc2d3b714 -miguel@hegel.local|zlib/contrib/minizip/zip.def|20020319032516|34413|e9bda2081d65c22e -miguel@hegel.local|zlib/contrib/minizip/zlibvc.def|20020319032516|47259|6dc42f99d2d55cad -miguel@hegel.local|zlib/contrib/untgz/untgz.c|20020319032516|07726|b74e9dde74642756 -miguel@hegel.local|zlib/contrib/visual-basic.txt|20020319032516|14096|cd461e762199bb09 -miguel@hegel.local|zlib/deflate.h|20020319032516|33700|3a012bc1f5dfbc74 -miguel@hegel.local|zlib/inftrees.c|20020319032517|25758|4fcb97357cdbc40 -miguel@hegel.local|zlib/trees.h|20020319032519|50674|87161133bc2155fd -monty@hundin.mysql.fi|sql-bench/Results/alter-table-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|01419|14360865bbba479f -monty@narttu.mysql.com|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|23516|441a6aefd381e319 -monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|21374|d4766c7f8e70d7a2 -monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|25875|155a83b53c0e9d6 -monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha|20001014001004|26814|688809eb8ea77b3d -monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|11605|ee2a063d66a183d -monty@work.mysql.com|fs/fsck.mysql|20010411110350|07619|87170d4358b50d60 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000001.xml|20001013051507|22498|f0eb64c0346366db -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000004.xml|20001017133600|56955|515488ef221523d9 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000005.xml|20001017133618|09973|a6344e46ba572dc3 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000014.xml|20001017133713|05036|bcf55df6a036bd8f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000019.xml|20001017133713|12133|c0f0b05e481b90e7 -mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/README|20001013051514|26509|cd4bb681e5a0cd10 -sasha@mysql.sashanet.com|mysql-test/std_data/m.frm|20001212152450|13897|e351dfe0b6824c0c -sasha@mysql.sashanet.com|mysql-test/t/3.23/shw000001.test|20001121234128|21322|770d96a2c1c65b20 -sasha@mysql.sashanet.com|mysql-test/t/mrg000002.test|20001212152450|20137|16b3a176adc0f311 -serg@serg.mysql.com|mysql-test/r/ft0000002.c.result|20001212120059|07173|cd66b90918a87531 -serg@serg.mysql.com|mysql-test/t/sel000026.test|20001211130731|17211|d8aa2d614f23b1 -serg@serg.mysql.com|mysql-test/t/sel000029.test|20001211130731|32917|6aae34dbb3ee86d9 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.gif|20020228162348|36945|364ca7338682f71 -tim@threads.polyesthetic.msg|bdb/build_win32/db_archive.dsp|20010305004134|25535|e3da826e91bb086 -tim@threads.polyesthetic.msg|bdb/build_win32/db_printlog.dsp|20010305004134|32975|163f6e1073a5f396 -tim@threads.polyesthetic.msg|bdb/build_win32/db_verify.dsp|20010305004135|04464|e9a4938542f86cea -tim@threads.polyesthetic.msg|bdb/build_win32/ex_tpcb.dsp|20010305004135|11838|644b38dae8b38152 -tim@threads.polyesthetic.msg|bdb/build_win32/libdb.rc|20010305004135|20964|906f4936ec6a8398 -tim@threads.polyesthetic.msg|bdb/dist/template/db_server_proc|20010305004137|21042|2e8b49d42aefab55 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_err.html|20010305004143|33003|3696088bd85eeda3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_byteswapped.html|20010305004144|30478|bcab4145183a7be2 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_put.html|20010305004144|35267|ea78709ffb6cd7e8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_cachesize.html|20010305004144|02131|47a3c8ca486eb013 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errcall.html|20010305004144|04030|faf92be4ee8bc634 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_flags.html|20010305004144|07758|4cd3700ae4387d22 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_close.html|20010305004144|22419|a3ad4ea563bafc42 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_create.html|20010305004144|05736|3e73dd35fe5dcc8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_data_dir.html|20010305004144|33569|437cec65e441c60 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_bsize.html|20010305004145|04625|1eb03c137a42e80f -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_get.html|20010305004145|42084|63399d204f1885fa -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_put.html|20010305004145|44022|f5bc2f52e55f16e1 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_stat.html|20010305004145|44954|d9a98bb949070b -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fput.html|20010305004145|58291|4a7aace7db01ee15 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fset.html|20010305004145|59241|ecb97931b222568d -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fsync.html|20010305004145|60192|a95ab802bb28646f -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_free.html|20010305004144|13076|ed61d2dfea9e069e -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_open.html|20010305004144|17474|8c812591efc8abe6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unmap.html|20010305004144|23658|d85790692f3b536e -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_stat.html|20010305004145|04637|f57a656bfbac12bf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_type.html|20010305004146|01846|398668783c4070db -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_compare.html|20010305004146|08946|d888d1ebe056bc6b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_minkey.html|20010305004146|09837|d6181e52342005c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_lorder.html|20010305004146|19980|a46750a29588268c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_del.html|20010305004146|32671|424fc0ebb3b4c5cf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_data_dir.html|20010305004146|40779|9176f081597e4f27 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errfile.html|20010305004145|18322|f9543c9e65ed6a1d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_error_stream.html|20010305004145|19317|a4101c1d68559fa2 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max.html|20010305004146|50580|52ac3c4ca2876de -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_id.html|20010305004146|08539|b3c7995efbe12c16 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_stat.html|20010305004146|10635|2112ceb0894b34d8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_vec.html|20010305004146|11739|c55deaa5173a3323 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_unregister.html|20010305004146|21535|8fa1fe691751d6ad -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_type.html|20010305004147|29592|4cfb6f09cbe0b8ae -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_open.html|20010305004147|32409|bfc13736b96ac509 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_put.html|20010305004147|33389|c476abe5599f21cf -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_compare.html|20010305004147|37206|e972f964d042b35e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_minkey.html|20010305004147|38144|c7e1f184bdca25fa -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_feedback.html|20010305004147|45141|69b4c07b3dbe383 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_ffactor.html|20010305004147|47226|edcc10024104d57e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_q_extentsize.html|20010305004147|52035|6ac26239fc538cb -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_sync.html|20010305004147|58064|42391f7d5f200b90 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_count.html|20010305004147|62108|9c239575f4550756 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_dup.html|20010305004147|64103|aa141014c4d7f9b0 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_get.html|20010305004147|65144|e66e387b83681e73 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_close.html|20010305004147|01809|c4e2ec77d7d14d4f -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_remove.html|20010305004147|04039|e92277e3dfd9bba1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_conflicts.html|20010305004147|14497|8951eb975a90918b -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mp_mmapsize.html|20010305004147|20894|b7dea9108fa65dfa -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_server.html|20010305004147|27545|d901cdab9698605d -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_max.html|20010305004147|33999|70f356b8b67782fe -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_class.html|20010305004147|19738|880aa614d1469304 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_register.html|20010305004148|17668|c68fc6fb22dd594a -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_stat.html|20010305004148|27008|4628462474db62b4 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_sync.html|20010305004148|27969|5b401daadc7261eb -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_checkpoint.html|20010305004148|31832|2565ac892d04b63d -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_open.html|20010305004148|47486|f588cc9bc694cbf0 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_put.html|20010305004148|48549|380c7caeced55512 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_dup.html|20010305004148|55139|325121689412d70b -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_index.html|20010305004148|61088|443e6b9a10ef4139 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_abort.html|20010305004148|63068|8cc23b6ef6f457d2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/version.html|20010305004148|65038|eeb51f4de1bbfe8e -tim@threads.polyesthetic.msg|bdb/docs/index.html|20010305004143|26935|450dd5db21a9bb64 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/close.html|20010305004148|10227|ed6f7427edc0431 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curget.html|20010305004148|15271|d7dd42affcd54073 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_ffactor.html|20010305004149|25120|5eb87b7ce99f3362 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/smallpic.gif|20010305004149|42169|fdf77055d7e711 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/hpux.html|20010305004149|47818|d34942564699608 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/linux.html|20010305004149|51464|f9f2d09dc6df75e -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/notes.html|20010305004149|52391|97e9b52853db15ea -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sunos.html|20010305004149|58008|fc41965e9d95985c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/ultrix.html|20010305004149|59865|a1dd780edcde11f6 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/notes.html|20010305004149|01764|4058bf968f287f7 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/intro.html|20010305004149|06616|57ef29f26341ea -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.be.txt|20010305004150|22805|cf7d25e758432ab6 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/what.html|20010305004150|00539|dd70b9e6e085725d -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/dead.html|20010305004150|33535|f5c7debd9ba739bb -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/max.html|20010305004150|35299|f0fb32ebc251f636 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/notxn.html|20010305004150|37003|beec805d9f05e2bc -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/stdmode.html|20010305004150|38797|4048a052ea129ca3 -tim@threads.polyesthetic.msg|bdb/docs/ref/mp/intro.html|20010305004150|45138|34937731cafcf1b1 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/mt.html|20010305004150|57429|552ab570b657fc0e -tim@threads.polyesthetic.msg|bdb/docs/ref/program/namespace.html|20010305004150|58394|182f8f762343bdc1 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/intro.html|20010305004150|22878|7544c4688623a54c -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/error.html|20010305004151|21581|37b817c57777b460 -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/intro.html|20010305004151|20749|d66c6c398e2ace0b -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/deadlock.html|20010305004151|46421|34914b9dc6b01703 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/put.html|20010305004151|51420|8cc785aeecff8535 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/term.html|20010305004151|54819|d6f3fa4fc5a630ec -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/transapp.txt|20010305004151|57368|337576ea2aae23b0 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/why.html|20010305004151|56525|c941c1a56a0adbaf -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/config.html|20010305004151|59874|c7337cb30f9bf66 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/system.html|20010305004151|03146|eae0256a127c3c89 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/close.html|20010305004151|05457|c79c866b393785cc -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbinfo.html|20010305004151|10780|7529af7145c0680a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/envopen.html|20010305004151|14369|5e768fd180f471e4 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_detect.html|20010305004151|19846|fb307b10156762ca -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_commit.html|20010305004151|32241|e1debf9ea769426c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/disk.html|20010305004152|39192|2abdaf9059265ba9 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/callback.html|20010305004152|53656|64a2b2b85cc253c1 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/license.html|20010305004152|03483|9371001bbf0ba2dd -tim@threads.polyesthetic.msg|bdb/docs/utility/index.html|20010305004152|05717|66c82ee036c1b369 -tim@threads.polyesthetic.msg|bdb/qam/qam_auto.c|20010305004141|31764|361954d3f149feb0 -tim@threads.polyesthetic.msg|bdb/test/logtrack.list|20010305004142|05743|7f4f1382b37d98e5 -BK|Docs/Flags/south-africa1.eps|19700101030959|00193|111e4f92f4562e9d -BK|sql-bench/Results-win32/create-mysql-win98|19700101030959|02538|f66c2cb2909c4792 -BK|sql-bench/Results/wisconsin-mysql_3.21-Linux_2.0.35_i686|19700101030959|02302|31703d40ea6b4f66 -BK|sql/share/english/errmsg.sys|19700101030959|01834|f29bd4ea5aaf54c8 -BK|sql/share/german/errmsg.sys|19700101030959|01840|1ea60675399c84c -BK|sql/share/korean/errmsg.sys|19700101030959|01850|a30e3687ae75a7c9 -miguel@hegel.local|zlib/contrib/delphi/zlib.mak|20020319032514|11153|7b97eb8cf290a42 -miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsp|20020319032516|54044|ec35fd54c9b49987 -miguel@hegel.local|zlib/faq|20020319032517|20799|b0d0840d3b9faf07 -miguel@hegel.local|zlib/zlib.h|20020319032519|20598|fbec7833981c782f -monty@donna.mysql.com|sql-bench/Results/big-tables-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17709|6d8209bf72b663ed -monty@hundin.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|32241|dd306b2e583ebde4 -monty@hundin.mysql.fi|sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|56860|b01175ad38fd12b6 -monty@hundin.mysql.fi|sql-bench/Results/wisconsin-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|23386|1ed1dc6abd24e7e3 -monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|15583|a2a77f37b689cd63 -monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|04134|d46860c29c5d51ee -monty@work.mysql.com|libmysqld/WHITEPAPER|20010411110351|28263|da1226799debcf3f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000007.xml|20001017133625|48163|bfcb6d85276be7e8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000016.xml|20001017133713|07087|32f1ef2e3d214be0 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000023.xml|20001017133713|20719|11993b379b9838be -sasha@mysql.sashanet.com|mysql-test/t/identity.test|20010910233028|36116|326f469b59105404 -serg@serg.mysql.com|mysql-test/r/ft0000001.a.result|20001211130756|05199|3d17aff15fa5a9f1 -serg@serg.mysql.com|mysql-test/r/ft0000001.c.result|20001211130756|14950|1040289a75243a92 -serg@serg.mysql.com|mysql-test/t/3.23/mrg000001.test|20001206231615|27540|e0327f9d1e6cb4e -serg@serg.mysql.com|mysql-test/t/sel000009.test|20001211130730|33139|a455c38f5c942cd1 serg@serg.mysql.com|mysql-test/t/sel000019.test|20001211130731|47552|8fd63c8dc6be8dbc serg@serg.mysql.com|mysql-test/t/sel000020.test|20001211130731|52532|c5758ad18a6dff1e -tim@threads.polyesthetic.msg|bdb/dist/build/chk.offt|20010305004137|16371|25759c9294db634e -tim@threads.polyesthetic.msg|bdb/dist/template/rec_log|20010305004137|27185|3fe6d62c43bc553a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_fd.html|20010305004144|28004|15a01776b340a959 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_key_range.html|20010305004144|33389|1060761b1e359d85 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_paniccall.html|20010305004144|02405|ac7f63325b4499ce -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_del.html|20010305004144|24335|2685f75d28e4ad99 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_open.html|20010305004144|29421|e4c9706220a4cd9b -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_id.html|20010305004145|43025|c9ee776f928a38f -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_archive.html|20010305004145|46850|490428ce45f9f918 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_flush.html|20010305004145|49632|bb8bc4fc43c9f63d -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fopen.html|20010305004145|57267|d032a963a0103472 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_stat.html|20010305004145|62160|55a9521fe04b03bd -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_sync.html|20010305004145|63168|b387035a94c20c50 -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_begin.html|20010305004145|00608|557b34fd3e7363 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_close.html|20010305004145|28189|cc570e65ac7d22f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get.html|20010305004145|34357|3b6e6005f3f17f2a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_cachesize.html|20010305004146|12541|3befdbaf98d5a04e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_dup_compare.html|20010305004146|13472|91f36955a213e0f4 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_pagesize.html|20010305004146|20914|b8d544ec3e102c6c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_count.html|20010305004146|31395|bc025b8894450525 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbenv_class.html|20010305004145|16297|5ab8aaf8a531f76b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_open.html|20010305004146|37756|66ac1ae7fa67ca4a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errcall.html|20010305004146|41745|bae25b45b0196773 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_locks.html|20010305004146|51576|bbde4ffbcc607f61 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_objects.html|20010305004146|53572|c47424e4d13d5327 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_stat.html|20010305004146|20379|dc2d4ffe7950fc09 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fput.html|20010305004146|26004|7ee8cda6287dee81 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_stat.html|20010305004146|31867|d370717a78971be1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_stat.html|20010305004147|06751|e8e25f86f8541696 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_max.html|20010305004147|13429|c9f705492162e175 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_region_init.html|20010305004147|26379|30534afa94cbf54e -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_put.html|20010305004148|09226|5af89e4cbf29c694 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_trickle.html|20010305004148|28912|4d5c4e83a4a5c638 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_class.html|20010305004147|23221|c7bb2a3393ca9488 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_stat.html|20010305004148|34772|9a6ef8c262f218f9 -tim@threads.polyesthetic.msg|bdb/docs/images/sleepycat.gif|20010305004148|07668|ea63aaaa508ef096 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/get.html|20010305004148|20425|96c9c9a01c32d16 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/put.html|20010305004148|28752|8e18b0af61eb7f0f -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.gif|20010305004149|41251|fe43e7415b3bbdb0 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/freebsd.html|20010305004149|46918|8ed2a42e1668004c -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/text.html|20010305004149|14998|88b57a73860b423 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/page.html|20010305004150|37863|d56876b2565cbee -tim@threads.polyesthetic.msg|bdb/docs/ref/perl/intro.html|20010305004150|47570|ce7e794e619e1e1d -tim@threads.polyesthetic.msg|bdb/docs/ref/pindex.src|20010305004149|02223|7d74723f9fd25801 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/environ.html|20010305004150|54494|dc4a48aa531bd399 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/solaris.txt|20010305004150|63135|8b6bb29de0d58ffe -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/faq.html|20010305004151|22367|f8433900f7f85400 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/disk.html|20010305004151|01410|94dc4e6e3668e613 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/cxx.html|20010305004151|06323|7f3bfc9bba854d48 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/btstat.html|20010305004152|37584|40a76aef8b25a948 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tcl.html|20010305004152|49096|f5c85b09c33bda4 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/intro.html|20010305004152|57734|984a9f7dd07e0c14 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/set_flags.html|20010305004152|61061|213809ca8d7802d0 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/intro.html|20010305004152|00728|8ac020ffb869e9a8 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_deadlock.html|20010305004152|09191|f23f99911c3e5784 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_verify.html|20010305004152|15424|4fee9bfa2f9ab41a -tim@threads.polyesthetic.msg|bdb/include/hash_ext.h|20010305004138|10079|5b31ff8413481606 -tim@threads.polyesthetic.msg|bdb/include/qam_auto.h|20010305004138|24568|96f6c045fd0d6cab -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_svc.c|20010305004141|50897|35804eb82b953f49 -BK|Docs/Flags/island.txt|19700101030959|00220|301ede0f81c5f3e1 -BK|client/violite.c|19700101030959|00561|afa871b4aab14371 -BK|include/Attic/config-win32.h|19700101030959|00116|65db818ec7e8f21b -BK|sql-bench/Results/connect-mysql_3.21-Linux_2.0.35_i686|19700101030959|02146|650abd213e6828c6 -BK|sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686|19700101030959|02239|fd082017c7c57a6 -BK|sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686|19700101030959|02290|8147dc16a1dc6c47 -BK|sql/ha_hash.h|19700101030959|01902|27e36916116beb3e -BK|sql/share/hungarian/errmsg.sys|19700101030959|01845|aff82c16a77fc800 -BK|sql/share/japanese/errmsg.sys|19700101030959|01848|302478c84697dc00 -BK|sql/share/norwegian/.cvsignore|19700101030959|01853|a91d63182f0b2366 -BK|sql/share/russian/errmsg.sys|19700101030959|01860|72688df0beeabcb3 -BK|sql/share/spanish/errmsg.sys|19700101030959|01865|10c8f32da39070b2 -BK|strings/Attic/ctype-cp1257.c|19700101030959|01340|732611cbc74aeafc -BK|strings/Attic/ctype-hebrew.c|19700101030959|01348|d3b4a000d51e76dc -BK|strings/Attic/ctype-win1251ukr.c|19700101030959|01359|b5a7cca889bbef58 -BK|strings/Attic/memory.h|19700101030959|01336|450f586e82a26d99 -BK|tests/fork_test.pl|19700101030959|01945|3d3535329ed8cd5e -BK|vio/VioAcceptorFd.h|19700101030959|00006|7f9c4358477ba9a3 -BK|vio/VioFd.h|19700101030959|00010|8294293a88c7b4b8 -BK|vio/VioPipe.h|19700101030959|00012|21cebbe61a1da546 -miguel@hegel.local|zlib/contrib/iostream/zfstream.cpp|20020319032515|55262|dce18d1a5d7096b7 -miguel@hegel.local|zlib/contrib/minizip/miniunz.c|20020319032515|21943|6a80009b319b1b9e -miguel@hegel.local|zlib/contrib/minizip/unzip.def|20020319032516|14456|b4162b8c833ab6c7 -miguel@hegel.local|zlib/descrip.mms|20020319032517|08063|7d61d33062ef53ec -miguel@hegel.local|zlib/minigzip.c|20020319032518|25601|37f8eacb80c7f8fc -miguel@hegel.local|zlib/os2/zlib.def|20020319032519|28842|1166a95d83c5f52c -monty@donna.mysql.com|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17106|6e532c1936df1737 -monty@donna.mysql.com|sql-bench/Results/connect-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18910|7ed15d6fd1a5944c -monty@donna.mysql.com|sql-bench/Results/select-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24071|4f7795c27eaab86b -monty@hundin.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|39143|662b96bc66bc91b6 -monty@hundin.mysql.fi|sql-bench/Results/create-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|12309|f3b1d326092bf44 -monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|07879|2ac8fe298953d43 -monty@narttu.mysql.com|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|09727|79ac0482599eace1 -monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha|20001014001004|08145|21ddf9425cbdd58 -monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|30548|f1127add9307098b -monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha|20001014001004|23947|2c9af91e9771f618 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000003.xml|20001013074610|26659|1a622b8d30d7ade8 -sasha@mysql.sashanet.com|build-tags|20011201050944|25384|b6f6fff142121618 -sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000004.test|20001103140433|32471|daf9ad4a1a31cd3c -sasha@mysql.sashanet.com|sounds/compilation_finished.au.gz|20010814034002|63992|70bd14095a918139 -serg@serg.mysql.com|mysql-test/t/sel000013.test|20001211130731|18090|ce8aa504ba4f74ba +serg@serg.mysql.com|mysql-test/t/sel000021.test|20001211130731|57561|94dd47de2872264a +serg@serg.mysql.com|mysql-test/t/sel000022.test|20001211130731|62553|6e3e5435e66875e9 +serg@serg.mysql.com|mysql-test/t/sel000023.test|20001211130731|02042|7bdfcfaa278f837d +serg@serg.mysql.com|mysql-test/t/sel000024.test|20001211130731|07099|849f47e6cbdc4fe3 +serg@serg.mysql.com|mysql-test/t/sel000025.test|20001211130731|12136|65b32b4b67e4c77 +serg@serg.mysql.com|mysql-test/t/sel000026.test|20001211130731|17211|d8aa2d614f23b1 +serg@serg.mysql.com|mysql-test/t/sel000027.test|20001211130731|23677|ab44bb57a580de9 serg@serg.mysql.com|mysql-test/t/sel000028.test|20001211130731|28317|db9bfc0a808fb629 +serg@serg.mysql.com|mysql-test/t/sel000029.test|20001211130731|32917|6aae34dbb3ee86d9 serg@serg.mysql.com|mysql-test/t/sel000030.test|20001211130732|03110|a29683eac3e7b706 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.eps|20020228162345|64529|31ade79a89683616 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.gif|20020228162348|36945|364ca7338682f71 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.txt|20020228162350|33044|e155c53c10374ff +tim@cane.mysql.fi|mysql-test/r/delete.result|20001221095802|20463|e866a6678e29f186 tim@cane.mysql.fi|mysql-test/t/delete.test|20001221095802|36821|389410e29f2cebe5 tim@threads.polyesthetic.msg|bdb/btree/btree_auto.c|20010305004134|12592|a683156a176761f +tim@threads.polyesthetic.msg|bdb/build_vxworks/db_int.h|20010305004134|18702|40ba51edce41403f +tim@threads.polyesthetic.msg|bdb/build_win32/db_archive.dsp|20010305004134|25535|e3da826e91bb086 tim@threads.polyesthetic.msg|bdb/build_win32/db_checkpoint.dsp|20010305004134|26943|8071af22db95b1db +tim@threads.polyesthetic.msg|bdb/build_win32/db_deadlock.dsp|20010305004134|28374|befd45d29eaeb672 +tim@threads.polyesthetic.msg|bdb/build_win32/db_dll.dsp|20010305004134|29137|4e9dda53c84511b6 +tim@threads.polyesthetic.msg|bdb/build_win32/db_dump.dsp|20010305004134|29985|e07d2a82708b61 +tim@threads.polyesthetic.msg|bdb/build_win32/db_int.h|20010305004134|30736|9ee5645850a336a0 +tim@threads.polyesthetic.msg|bdb/build_win32/db_java.dsp|20010305004134|31520|e3941d5a9810b360 +tim@threads.polyesthetic.msg|bdb/build_win32/db_load.dsp|20010305004134|32237|e83a2af8e24a715d +tim@threads.polyesthetic.msg|bdb/build_win32/db_printlog.dsp|20010305004134|32975|163f6e1073a5f396 +tim@threads.polyesthetic.msg|bdb/build_win32/db_recover.dsp|20010305004134|34274|835c32ab73359256 +tim@threads.polyesthetic.msg|bdb/build_win32/db_stat.dsp|20010305004135|00560|f77417f5d9984986 +tim@threads.polyesthetic.msg|bdb/build_win32/db_static.dsp|20010305004135|01425|78ea414467defc70 +tim@threads.polyesthetic.msg|bdb/build_win32/db_tcl.dsp|20010305004135|02285|5ad951d774e41520 tim@threads.polyesthetic.msg|bdb/build_win32/db_upgrade.dsp|20010305004135|03711|90fd250190af4984 +tim@threads.polyesthetic.msg|bdb/build_win32/db_verify.dsp|20010305004135|04464|e9a4938542f86cea +tim@threads.polyesthetic.msg|bdb/build_win32/ex_access.dsp|20010305004135|07926|8dd6017efffae14e +tim@threads.polyesthetic.msg|bdb/build_win32/ex_btrec.dsp|20010305004135|08710|c87137287d8d67dc +tim@threads.polyesthetic.msg|bdb/build_win32/ex_env.dsp|20010305004135|09533|1732d5e41efda77 +tim@threads.polyesthetic.msg|bdb/build_win32/ex_lock.dsp|20010305004135|10303|286d2566e786dde +tim@threads.polyesthetic.msg|bdb/build_win32/ex_mpool.dsp|20010305004135|11076|9eb937bc70c1573 +tim@threads.polyesthetic.msg|bdb/build_win32/ex_tpcb.dsp|20010305004135|11838|644b38dae8b38152 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_access.dsp|20010305004135|12614|31e87b6228470681 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_btrec.dsp|20010305004135|13384|61b563f4ac1f73eb +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_env.dsp|20010305004135|14159|b0bf2649a4c797ac +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_lock.dsp|20010305004135|14943|257abf03544f6270 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_mpool.dsp|20010305004135|15715|d17a5d09f09f5217 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_tpcb.dsp|20010305004135|16510|159c727e2c15105e +tim@threads.polyesthetic.msg|bdb/build_win32/include.tcl|20010305004135|17284|f8bffb5e2510f229 +tim@threads.polyesthetic.msg|bdb/build_win32/libdb.rc|20010305004135|20964|906f4936ec6a8398 +tim@threads.polyesthetic.msg|bdb/db/crdel_auto.c|20010305004136|27298|ee4146a08fd175c1 +tim@threads.polyesthetic.msg|bdb/db/db_auto.c|20010305004136|32432|3186e950cc321ae7 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.define|20010305004137|15254|aa9a626e58631003 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.def|20010305004137|13920|bb65b471d09f7c58 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.offt|20010305004137|16371|25759c9294db634e +tim@threads.polyesthetic.msg|bdb/dist/build/chk.srcfiles|20010305004137|18056|ae884700cd110cbf +tim@threads.polyesthetic.msg|bdb/dist/build/chk.tags|20010305004137|19101|7a5b14d33d4078cc +tim@threads.polyesthetic.msg|bdb/dist/config.guess|20010305004136|14678|ead1d91caeaa748c +tim@threads.polyesthetic.msg|bdb/dist/config.hin|20010305004136|15955|fdecb7a06fa137a7 +tim@threads.polyesthetic.msg|bdb/dist/config.sub|20010305004136|16944|17e9990a298261a tim@threads.polyesthetic.msg|bdb/dist/install-sh|20010305004136|21695|1858c24340b72628 +tim@threads.polyesthetic.msg|bdb/dist/template/db_server_proc|20010305004137|21042|2e8b49d42aefab55 tim@threads.polyesthetic.msg|bdb/dist/template/gen_client_ret|20010305004137|22087|786a5e65119b3991 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_btree|20010305004137|23131|65d6b0b2f5b7a6d2 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_crdel|20010305004137|24191|58795c0c5232f80d +tim@threads.polyesthetic.msg|bdb/dist/template/rec_db|20010305004137|25141|52c5797539878fca +tim@threads.polyesthetic.msg|bdb/dist/template/rec_hash|20010305004137|26120|dcbdd106ae17b865 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_log|20010305004137|27185|3fe6d62c43bc553a +tim@threads.polyesthetic.msg|bdb/dist/template/rec_qam|20010305004137|28066|6eecf6833de0af98 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_txn|20010305004137|29072|1ff22b797deb0e1b +tim@threads.polyesthetic.msg|bdb/docs/api_c/c_index.html|20010305004143|28133|1a854fa55012906 +tim@threads.polyesthetic.msg|bdb/docs/api_c/c_pindex.html|20010305004145|05766|697acebf58a8db4 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_close.html|20010305004144|26254|fda0b4dfa946f44e tim@threads.polyesthetic.msg|bdb/docs/api_c/db_create.html|20010305004143|29368|a87157ea60c82ee2 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_cursor.html|20010305004144|27133|7431dd96ed3492c +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_del.html|20010305004144|11427|e8bffcf9be371317 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_err.html|20010305004143|33003|3696088bd85eeda3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_fd.html|20010305004144|28004|15a01776b340a959 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get.html|20010305004144|29265|7e0018b93ee31eba +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_byteswapped.html|20010305004144|30478|bcab4145183a7be2 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_type.html|20010305004144|31538|d66aa1642a4d20e2 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_join.html|20010305004144|32446|a58c2d81ecfea5b +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_key_range.html|20010305004144|33389|1060761b1e359d85 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_lsn.html|20010305004143|34135|5edb9bce1118feae +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_open.html|20010305004144|34314|59dfa6e5198c382e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_put.html|20010305004144|35267|ea78709ffb6cd7e8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_remove.html|20010305004144|36184|668fa1d67a4f6941 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_rename.html|20010305004144|37128|36796ad9e106c3f0 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_append_recno.html|20010305004144|38070|bdf0130e642f74fa tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_compare.html|20010305004144|39551|e55a311bb0be93a8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_dup_compare.html|20010305004144|03068|a833bfc727a794e7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errfile.html|20010305004144|00766|f07d3c57bb3c8fbd -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_pagesize.html|20010305004144|12535|9644fa0f538cde17 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_count.html|20010305004144|23385|c3cd00c48b4babf5 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_dup.html|20010305004144|25301|3bdf8b0a687b43f3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errpfx.html|20010305004145|01527|806c8c438d0ee36c -tim@threads.polyesthetic.msg|bdb/docs/api_c/hsearch.html|20010305004144|08165|a8b76d897a8216d8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_detect.html|20010305004145|41159|8fe406dce10e0bb -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_put.html|20010305004145|51546|11a1bec49bb90419 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_unregister.html|20010305004145|54401|45b8f9d3f8eb3d80 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_trickle.html|20010305004145|64180|8b1adf1404d7a5f -tim@threads.polyesthetic.msg|bdb/docs/api_c/pindex.src|20010305004143|31726|d1ecd116c42e0e23 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_class.html|20010305004145|08391|3129ff8c53721fe8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_fd.html|20010305004145|33050|99ec316575f80428 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_rename.html|20010305004146|07200|9c0a820e864220b3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_prefix.html|20010305004146|11627|ecd8f927371a5dbd -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_hash.html|20010305004146|18078|afe952f65389d93b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_paniccall.html|20010305004145|13411|6bc911c9d64e9237 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_flags.html|20010305004146|44734|8136e8e1ae16dc02 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_bsize.html|20010305004146|45706|7fd917bea6b163bf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_max.html|20010305004146|47638|4f7ba5f02c66c0de -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mp_mmapsize.html|20010305004146|54573|c21e3f9c5a29b0ab -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_strerror.html|20010305004146|05414|7e1cbfbd096ca -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_archive.html|20010305004146|12836|d47f39e6dad7ee50 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_register.html|20010305004146|19292|55470e0d79382beb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fget.html|20010305004146|23710|bfe74f8c299c2995 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fset.html|20010305004146|27124|e52fa0488faa893 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_register.html|20010305004146|29358|cba6f572fe27c7a -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_byteswapped.html|20010305004147|28706|edbc66a9d5491a1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_join.html|20010305004147|30506|a3a6dead9cae65f9 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_rename.html|20010305004147|35341|19b20feaa815bc27 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_nelem.html|20010305004147|49144|fc6f22a4c285fcef -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_source.html|20010305004147|55969|b29827dbf47537d1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_close.html|20010305004147|61116|e3bf1f36bc0e8e7e -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbt_class.html|20010305004147|13192|f6b04ff142e332f8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_error_stream.html|20010305004147|15677|a738119910b452b8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_feedback.html|20010305004147|09255|9748745e65f070d5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_locks.html|20010305004147|17677|f0114205b169de39 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_pageyield.html|20010305004147|23054|774b3da0306a6767 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_panicstate.html|20010305004147|24142|72846d9a97cb80bb -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tmp_dir.html|20010305004147|32251|f23e4f614f6d975a -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_verbose.html|20010305004148|03690|9dcda0399c8256e7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/except_class.html|20010305004147|16978|195c00e4a7cbe648 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_id.html|20010305004148|08326|737cf8d8dc74084e -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_get.html|20010305004148|15736|5fbbbd4baa60e052 -tim@threads.polyesthetic.msg|bdb/docs/api_java/mem_class.html|20010305004147|21486|2e5052b5b2bea584 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fopen.html|20010305004148|22355|f7cf58725aa1c406 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_register.html|20010305004148|26052|8331390a1c66fefd -tim@threads.polyesthetic.msg|bdb/docs/api_java/pindex.src|20010305004147|10521|de828917f041d27b -tim@threads.polyesthetic.msg|bdb/docs/api_java/runrec_class.html|20010305004147|22358|49c5cb3efe0c201 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_commit.html|20010305004148|32812|c265042f3340baa1 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_close.html|20010305004148|38213|f40794b17e0fe443 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_remove.html|20010305004148|50431|3b2be4b0b1b3dc98 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_sync.html|20010305004148|52310|3b615ca64d934602 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_close.html|20010305004148|58109|bf191b2673a2b19e -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/pagesize.html|20010305004149|30437|eb4800704ae1131b -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/renumber.html|20010305004149|33199|b7df79bf32240b5c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/qnx.html|20010305004149|54263|6d2849a8e8038dc9 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/intro.html|20010305004149|62808|2eed15d25078711 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/notes.html|20010305004149|63758|7e53a042c5c4d350 -tim@threads.polyesthetic.msg|bdb/docs/ref/java/program.html|20010305004150|28026|e9bbc08bccf5d396 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/am_conv.html|20010305004150|30986|3bab32d969f21b77 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/config.html|20010305004150|32692|a593ea4c87467ddd -tim@threads.polyesthetic.msg|bdb/docs/ref/log/intro.html|20010305004150|42339|31e7055d83ca8757 -tim@threads.polyesthetic.msg|bdb/docs/ref/mp/config.html|20010305004150|46018|771c2c91fc0b6b17 -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/nested.html|20010305004151|62443|6860bbf2f29aa93b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/dup.html|20010305004152|40004|911018877c118b45 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/tx_recover.html|20010305004152|62754|132a354cde7a8286 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/config.html|20010305004152|64479|3f3f449c305e66b4 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/faq.html|20010305004152|65373|7aa890c7b70f1293 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_upgrade.html|20010305004152|14532|6444f26a93f77ea -tim@threads.polyesthetic.msg|bdb/include/crdel_auto.h|20010305004137|21088|1b8255da47550ece -tim@threads.polyesthetic.msg|bdb/include/db_server.h|20010305004137|34247|61a33aa05bf368a7 -tim@threads.polyesthetic.msg|bdb/include/mutex_ext.h|20010305004138|19006|f20f47ddc346598b -tim@threads.polyesthetic.msg|bdb/include/qam_ext.h|20010305004138|25430|9993db1fb3428b6d -tim@threads.polyesthetic.msg|bdb/include/tcl_ext.h|20010305004138|31857|6759d22aa2ff5f39 -tim@threads.polyesthetic.msg|bdb/include/txn_auto.h|20010305004138|33645|e3f49e94fd291c45 -tim@threads.polyesthetic.msg|bdb/rpc_client/gen_client.c|20010305004141|43060|ad86f092d0996a68 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_proc.sed|20010305004141|49906|1a9af8e5b051acbd -tim@threads.polyesthetic.msg|bdb/test/include.tcl|20010305004141|34016|20fc297b040cbe2 -BK|client/Attic/libmysql.c|19700101030959|00582|72949a7043113807 -BK|mit-pthreads/pg++|19700101030959|00597|3beac0502025d766 -BK|myisam/ft_search.c|19700101030959|01642|c011cb6e8041bb59 -BK|mysys/test_vsnprintf.c|19700101030959|01502|e3d568aca62dc81e -BK|strings/Attic/ctype-usa7.c|19700101030959|01356|d19d859dca5675f -BK|strings/Attic/ctype-win1251.c|19700101030959|01358|762607f4fd7d52ad -BK|tests/fork3_test.pl|19700101030959|01947|c4a7bffb4f8e813c -BK|vio/VioSSLFactoriesFd.h|19700101030959|00017|1d63ae149a63f85 -BK|vio/VioSocket.cc|19700101030959|00018|71c615783f29b5e1 -Sinisa@sinisa.nasamreza.org|scripts/mysql_new_fix_privilege_tables.sh|20011226144909|43765|b1664b401375eece -miguel@hegel.local|zlib/contrib/iostream/test.cpp|20020319032515|48225|a2ea8d4d7c66cf71 -miguel@hegel.local|zlib/contrib/minizip/unzip.c|20020319032516|07891|c66c95e17321206d -miguel@hegel.local|zlib/deflate.c|20020319032516|26978|e22894a54233bc25 -miguel@hegel.local|zlib/infcodes.c|20020319032517|52620|dffb42fdf2fb2372 -miguel@hegel.local|zlib/inffast.h|20020319032517|06651|215e4a4ccfc886fc -miguel@hegel.local|zlib/maketree.c|20020319032518|19299|7f281aef3547fee -miguel@hegel.local|zlib/msdos/zlib.rc|20020319032518|25240|f8a286fa8371ee09 -miguel@hegel.local|zlib/zutil.c|20020319032520|05372|6f0d1763c5deb409 -monty@donna.mysql.com|sql-bench/Results/alter-table-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|16525|2f516d2c108a9e05 -monty@donna.mysql.com|sql-bench/Results/insert-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22723|a85a6f0477c13f83 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000017.xml|20001017133713|08762|81423597605ff77f -sasha@mysql.sashanet.com|build-tags|20011125054855|05181|7afb7e785b80f97 -sasha@mysql.sashanet.com|mysql-test/r/binlog-backup-restore.result|20010424233926|16010|605de78abda64d27 -sasha@mysql.sashanet.com|mysql-test/r/identity.result|20010910233028|16331|e41453a364242503 -serg@serg.mysql.com|mysql-test/t/sel000010.test|20001211130731|03554|ca07085ae92255f1 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_tpcb.dsp|20010305004135|16510|159c727e2c15105e -tim@threads.polyesthetic.msg|bdb/dist/build/chk.define|20010305004137|15254|aa9a626e58631003 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_hash|20010305004137|26120|dcbdd106ae17b865 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_minkey.html|20010305004144|40498|e2d52ba2d0174432 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_delim.html|20010305004144|14446|e0a7face764111b9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_upgrade.html|20010305004144|20363|5e6210d6f09a0c3e -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errfile.html|20010305004144|06564|3b6b0822f29fc3d4 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_panicstate.html|20010305004145|29311|43228366ca64363c -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirfree.html|20010305004144|09784|d59f36547c7b5384 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirlist.html|20010305004144|10606|24e75ccc86809023 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_ioinfo.html|20010305004144|14713|80365bb8c66ae84c -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_checkpoint.html|20010305004145|01607|4a1704dbfcaad5dc -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_byteswapped.html|20010305004146|00979|a44d5d57d050b466 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_put.html|20010305004146|05435|2792034e8c83c56 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errfile.html|20010305004145|11465|f6eddb9ab7ef07d0 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_flags.html|20010305004146|16174|1146625feeb3bb0b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_source.html|20010305004146|25550|46998978715ccc1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_conflicts.html|20010305004146|48615|5bba88df4cc6dfba -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_lockers.html|20010305004146|52578|ebb61fd669c2eefb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_timestamp.html|20010305004146|03286|6396a1145f8e41c1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_class.html|20010305004145|23233|ed88ab78cccbef8d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/mempfile_class.html|20010305004145|25191|672b4aa787b4aeca -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_id.html|20010305004147|04873|162661f4c2dc09d6 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_prepare.html|20010305004147|05797|818b4163518bace5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_cursor.html|20010305004147|25020|2181d652bd1c1ff -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_fd.html|20010305004147|26830|1f70020c37023baa -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_prefix.html|20010305004147|39088|a3269aad23e6dbc -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_dup_compare.html|20010305004147|40992|3dabd840a1d9e5f3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errcall.html|20010305004147|41930|4e4743f5b4277199 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_delim.html|20010305004147|53019|78fcf2d750fb26ef -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_cachesize.html|20010305004147|05132|f3700cd19856f14e -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_objects.html|20010305004147|19812|d1ed194631ffeb2a -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mutexlocks.html|20010305004147|21961|aad8e4a059075bb6 -tim@threads.polyesthetic.msg|bdb/docs/api_java/java_index.html|20010305004147|18736|8ecfcef4a702011d -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_unregister.html|20010305004148|19590|eee284e0da176d0a -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_count.html|20010305004148|40010|4812f3756a75437 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_rename.html|20010305004148|49486|909bc643d5455b54 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_del.html|20010305004148|54185|7e94f9f01e7e4453 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_get.html|20010305004148|56098|5bbb80cf51aff594 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/join.html|20010305004148|22331|acc16686a78a732 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/cachesize.html|20010305004149|22486|99dcd466dc881093 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/aix.html|20010305004149|44137|e8ae448bdb85fa22 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/conf.html|20010305004149|45053|d0378c69618b790b -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/faq.html|20010305004149|65331|34704a907168cea7 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/common.html|20010305004149|07598|607061232e2532df -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/compile.html|20010305004149|08609|12785e3091b78bfd -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/where.html|20010305004150|01442|6cb9ec27f19ecbbb -tim@threads.polyesthetic.msg|bdb/docs/ref/program/diskspace.html|20010305004150|53502|959508f155721ee8 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/example.txt|20010305004150|28042|9ff88f22565208bf -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/limits.html|20010305004151|61583|3004b7a93dab148b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/convert.html|20010305004151|00512|d7f18eb34c1b6ae -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db_cxx.html|20010305004151|08078|5c17d6a360205140 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_stat.html|20010305004151|22568|c49716e693ce225b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/log_register.html|20010305004152|42524|7177eeb2fc099317 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/memp_register.html|20010305004152|44171|7d92464a1029d53e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/put.html|20010305004152|44997|961a1a689be6ce -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_feedback.html|20010305004152|45815|6d7de50be92a5488 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/db_dump.html|20010305004152|54477|7d1cac3358c0482e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/handle.html|20010305004152|56086|bb8a73b74d4399ae -tim@threads.polyesthetic.msg|bdb/docs/utility/berkeley_db_svc.html|20010305004152|06576|91fe012778882ce4 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_dump.html|20010305004152|10062|5de7ade427f20332 -tim@threads.polyesthetic.msg|bdb/include/btree_ext.h|20010305004137|18246|5d53d710f170c6b6 -tim@threads.polyesthetic.msg|bdb/include/gen_server_ext.h|20010305004138|07539|fd7bcfe6bbca8bcb -tim@threads.polyesthetic.msg|bdb/include/mp_ext.h|20010305004138|17070|a528b772d42d6455 -BK|include/Attic/mysql_com.h.in|19700101030959|00115|85b1ea7ced528c32 -BK|libmysql/configure.in|19700101030959|02603|c6fc04d4e3d6e291 -BK|myisam/Attic/ft_global.h|19700101030959|01673|fe46fb515f1e375 -BK|sql-bench/Results-win32/alter-table-mysql-win98|19700101030959|02529|e8743982f790462 -BK|sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686|19700101030959|02073|f6f7ccd7b3c35f97 -BK|sql/Attic/mini_client_errors.c|19700101030959|01909|29edad51a5d0b068 -BK|sql/Attic/net_serv.c|19700101030959|01911|52dabcd773a39e10 -BK|strings/Attic/ctype-greek.c|19700101030959|01347|90acdff1195209ca -BK|strings/Attic/ctype-koi8_ukr.c|19700101030959|01352|a04aa14a6d62335a -BK|support-files/Attic/my-huge.cfg.sh|19700101030959|02585|589bdcd2d2c4360b -BK|support-files/Attic/my-medium.cfg.sh|19700101030959|02587|c49880d26ef0648e -BK|vio/Vio.cc|19700101030959|00003|60737ce02ab2bc25 -miguel@hegel.local|zlib/contrib/asm686/readme.686|20020319032514|04933|15e2bf4653b71f3e -miguel@hegel.local|zlib/contrib/minizip/minizip.c|20020319032515|28588|97181367a7bc47d8 -miguel@hegel.local|zlib/inftrees.h|20020319032517|32227|ffcbe51816466e5c -miguel@hegel.local|zlib/zconf.h|20020319032519|63437|c6b6b636c7e88d90 -monty@donna.mysql.com|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|25437|24a02e007a58bf73 -monty@hundin.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|53328|fd2699adb3190d07 -monty@narttu.mysql.com|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|19531|7dd5ac726f86cf0b -monty@narttu.mysql.com|sql-bench/Results/connect-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|21574|1cf5d5f0d70a3fa0 -monty@narttu.mysql.com|sql-bench/Results/create-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|25516|fc207468e871ff69 -monty@narttu.mysql.com|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|33684|ddcf36cdf3f72e8c -mwagner@evoq.home.mwagner.org|Docs/Books/prof.eps|20001231203220|15779|dc69b039543a57d7 -mwagner@evoq.home.mwagner.org|mysql-test/xml/README|20001013051440|12362|877d76bcd19f7193 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000020.xml|20001017133713|13843|8849bbf91a4fd5ec -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000028.xml|20001017133713|29282|c72bfec6600949b -nick@nick.leippe.com|mysql-test/r/rpl_empty_master_crash.result|20020531235552|47718|615f521be2132141 -sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000005.test|20001103140433|36002|982fde89a4d6d886 -serg@serg.mysql.com|mysql-test/r/ft0000001.b.result|20001211130756|10153|505c4c00a0bddfc4 -serg@serg.mysql.com|mysql-test/t/sel000011.test|20001211130731|08373|c2a971726c9d18d6 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.txt|20020228162350|33044|e155c53c10374ff -tim@threads.polyesthetic.msg|bdb/build_win32/db_java.dsp|20010305004134|31520|e3941d5a9810b360 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_btrec.dsp|20010305004135|13384|61b563f4ac1f73eb -tim@threads.polyesthetic.msg|bdb/docs/api_c/c_pindex.html|20010305004145|05766|697acebf58a8db4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_prefix.html|20010305004144|41420|d6e443a7e47c9b3a +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_cachesize.html|20010305004144|02131|47a3c8ca486eb013 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_dup_compare.html|20010305004144|03068|a833bfc727a794e7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errcall.html|20010305004144|04030|faf92be4ee8bc634 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errfile.html|20010305004144|00766|f07d3c57bb3c8fbd +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errpfx.html|20010305004144|05859|756b9b73dd28b8d9 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_feedback.html|20010305004144|06786|90d495e78318a332 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_flags.html|20010305004144|07758|4cd3700ae4387d22 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_ffactor.html|20010305004144|08766|41352ddf74ccc338 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_hash.html|20010305004144|09702|73f14897664d9d08 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_nelem.html|20010305004144|10635|bd8371e033b15c8f +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_lorder.html|20010305004144|11587|e24ae76325374653 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_malloc.html|20010305004144|01594|3581879fef5af695 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_pagesize.html|20010305004144|12535|9644fa0f538cde17 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_paniccall.html|20010305004144|02405|ac7f63325b4499ce +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_q_extentsize.html|20010305004144|13496|f2fe41a5d8c46658 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_delim.html|20010305004144|14446|e0a7face764111b9 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_len.html|20010305004144|15420|f30d68257bd60e1e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_pad.html|20010305004144|16373|8a1de721eb6fc53f +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_source.html|20010305004144|17353|6d12ac12652acc31 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_realloc.html|20010305004144|03204|a9be244baf966892 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_stat.html|20010305004144|18351|578f6f99f8e247ff +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_sync.html|20010305004144|19394|7a067029b6e1496b +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_upgrade.html|20010305004144|20363|5e6210d6f09a0c3e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_verify.html|20010305004144|21372|cf80f5ba845eac2e +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_close.html|20010305004144|22419|a3ad4ea563bafc42 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_count.html|20010305004144|23385|c3cd00c48b4babf5 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_del.html|20010305004144|24335|2685f75d28e4ad99 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_dup.html|20010305004144|25301|3bdf8b0a687b43f3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_get.html|20010305004144|26284|4bf7579a92c35195 tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_put.html|20010305004144|27355|a2c4a52329376657 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbm.html|20010305004144|04019|ebf1d8e329b06bba +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbt.html|20010305004144|04896|ae7a81c9c5f574f6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_close.html|20010305004144|28399|a8e722cbb66c9d7b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_create.html|20010305004144|05736|3e73dd35fe5dcc8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_open.html|20010305004144|29421|e4c9706220a4cd9b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_remove.html|20010305004144|31547|a71d5e1ca41324a7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_cachesize.html|20010305004144|32567|f4c341d3f2c09469 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_data_dir.html|20010305004144|33569|437cec65e441c60 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errcall.html|20010305004145|00341|ba09eec1ba15f15f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errfile.html|20010305004144|06564|3b6b0822f29fc3d4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errpfx.html|20010305004145|01527|806c8c438d0ee36c +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_feedback.html|20010305004145|02860|87a78f97ba545aba +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_flags.html|20010305004145|03778|b2a1f3c8498e6d95 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_bsize.html|20010305004145|04625|1eb03c137a42e80f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_dir.html|20010305004145|05444|26be310214a2ff8f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_max.html|20010305004145|06288|319c24b5245b0685 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_conflicts.html|20010305004145|07137|58d9f7179bc864a3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_detect.html|20010305004145|07983|d9ed73495defdc19 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max.html|20010305004145|08849|a2dc11fa8b2f1c9 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_lockers.html|20010305004145|24923|f22d5d4640436efe +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_locks.html|20010305004145|09704|1baf2d63a6fb418d +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_objects.html|20010305004145|25791|1a428bbee06cb5cc +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mp_mmapsize.html|20010305004145|26668|21f27997f00accfe +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mutexlocks.html|20010305004145|27540|85bbd53b877cafe1 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_pageyield.html|20010305004145|28418|8aa4a6cb2f18cad7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_paniccall.html|20010305004144|07360|97a1d58189199453 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_panicstate.html|20010305004145|29311|43228366ca64363c +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_rec_init.html|20010305004145|30192|bf7da051ef6689ba +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_region_init.html|20010305004145|31081|2ca19f76ee1ae790 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_server.html|20010305004145|31969|c13b793b525d504b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_shm_key.html|20010305004145|32880|cf5aaa6a995cbf55 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tas_spins.html|20010305004145|33848|91c7091deca3d97f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tmp_dir.html|20010305004145|34771|b563e87af5431824 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_max.html|20010305004145|35672|71a739e46faf33a9 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_recover.html|20010305004145|36580|8dd351545b444a24 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_timestamp.html|20010305004145|37492|ddb77d7dfb531085 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_verbose.html|20010305004145|38421|344f5119536cae0 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_strerror.html|20010305004145|39331|7f090bf26bdd4dc -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_exists.html|20010305004144|12261|23f077e82ca8f827 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_fsync.html|20010305004144|13884|f59339ff63d95e7d -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_read.html|20010305004144|18372|c8f6ece1ed408bf8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_key_range.html|20010305004146|03630|d79b373af096cb7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_upgrade.html|20010305004146|28493|c6231eb2f9989284 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_put.html|20010305004146|35761|11e6aa2492dd1032 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbt_class.html|20010305004145|17281|fb91648586c1aa77 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_paniccall.html|20010305004145|20292|2080056f15faa516 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_recover.html|20010305004146|02235|cdf13797131b2d97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/except_class.html|20010305004145|21277|59839667e43592e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_flush.html|20010305004146|16027|3976f77e905f35eb -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get.html|20010305004147|27733|87b8316c55b24739 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_verify.html|20010305004147|60082|20873ab17f6ed922 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_del.html|20010305004147|63111|6ec2b8a4b8dde996 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_bsize.html|20010305004147|11335|6c67beed877df84c -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max.html|20010305004147|16607|12b6e34ac5a53281 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_version.html|20010305004148|05599|854d26806930cab6 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fset.html|20010305004148|24178|5c5371a93b83275 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_begin.html|20010305004148|30859|553bf78bd7fc3e0a -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_cursor.html|20010305004148|40924|e035b3c11a91c5d6 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_type.html|20010305004148|44686|7202f3ca793e6ec3 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn.html|20010305004148|62085|8e345950e6029230 -tim@threads.polyesthetic.msg|bdb/docs/images/prev.gif|20010305004148|04639|9448d24755d708a0 -tim@threads.polyesthetic.msg|bdb/docs/images/ps.gif|20010305004148|05648|f6b1b372cb2cda4c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/logrec.html|20010305004149|28646|5edeb34d63936e2 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/progmodel.html|20010305004149|38491|caa422dc155b6370 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/intro.html|20010305004149|00770|2975a07b53b12046 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/need.html|20010305004149|31743|43950806e35d71f -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.ps|20010305004150|02162|9851f6cdeff17481 -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/server.html|20010305004150|14510|79f560205494295 -tim@threads.polyesthetic.msg|bdb/docs/ref/test/faq.html|20010305004151|38444|f95038006d18229 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/admin.html|20010305004151|41323|cf867ed0b00cccef -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/data_open.html|20010305004151|45592|413c1d8aba9d8018 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv.html|20010305004151|08972|f9863847dc1ed617 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/join.html|20010305004151|18031|ec21d874caa0654 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/stat.html|20010305004151|29377|775d75e3ba02d15c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/toc.html|20010305004151|30301|16e7d8e76496cbc9 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/env.html|20010305004152|40827|381e366a9c9c9a37 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/disk.html|20010305004152|55280|61799ebebe78ebb2 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/mutexlock.html|20010305004152|58567|972b710c5bdba67c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/notfound.html|20010305004152|59393|dc91c094aba92838 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_load.html|20010305004152|10976|981095940db0197 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_printlog.html|20010305004152|11895|fcc4075ad0232842 -tim@threads.polyesthetic.msg|bdb/include/db_ext.h|20010305004137|29469|a1e210bbd0de0a48 -tim@threads.polyesthetic.msg|bdb/include/gen_client_ext.h|20010305004138|06647|5c621cacb18b38 -tim@threads.polyesthetic.msg|bdb/include/lock_ext.h|20010305004138|11814|ccd0785bb206933f -tim@threads.polyesthetic.msg|bdb/log/log_auto.c|20010305004137|49459|fe8c0369965f7151 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server.x|20010305004141|47705|811aeb6b630fe7aa -BK|include/Attic/m_ctype.h.in|19700101030959|00114|f671e3c2d611ba97 -BK|sql/share/norwegian-ny/.cvsignore|19700101030959|01855|469064b5190d703d -BK|sql/share/swedish/errmsg.sys|19700101030959|01866|dd772e93db859993 -BK|strings/Attic/ctype-danish.c|19700101030959|01342|dc5451066eb272ae -BK|strings/Attic/ctype-swe7.c|19700101030959|01355|bb1b012225d7d02c -BK|strings/Attic/ptr_cmp.c|19700101030959|01337|57e682a26e769597 -BK|vio/VioFd.cc|19700101030959|00009|6e444647affef63b -BK|vio/vioelitexx.cc|19700101030959|00022|3eaba70da792a7fc -miguel@hegel.local|zlib/adler32.c|20020319032513|04487|f98728c6da1ac164 -miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsp|20020319032514|38372|a1c6749052ce48a -miguel@hegel.local|zlib/contrib/delphi2/zlib.pas|20020319032515|28965|3c94d3f5262cbbdd -miguel@hegel.local|zlib/contrib/iostream2/zstream_test.cpp|20020319032515|08848|63f635d540de8c48 -miguel@hegel.local|zlib/contrib/minizip/readme.txt|20020319032516|00611|7547b986c067c008 -miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsw|20020319032516|60515|17f28194a5cd80ea -miguel@hegel.local|zlib/example.c|20020319032517|14327|490f57a4a9440dfa -miguel@hegel.local|zlib/infblock.h|20020319032517|46202|4526bc327b4160ab -miguel@hegel.local|zlib/infutil.h|20020319032518|12977|13089e09be34788c -miguel@hegel.local|zlib/readme|20020319032519|35257|80a41fc822f5f4 -mikef@nslinux.bedford.progress.com|mysql-test/include/have_gemini.inc|20010321203410|40631|42f94f0dfd0f7b18 -monty@donna.mysql.com|sql-bench/Results/RUN-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15344|d922a0fcc1009130 -monty@donna.mysql.com|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15933|840503a555e420ec -monty@donna.mysql.com|sql-bench/Results/create-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20136|241c337935ae1524 -monty@hundin.mysql.fi|sql-bench/Results/insert-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|15984|a0143553cccb54e2 -monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha|20001014001004|29737|db59425a7f4aa93f -monty@work.mysql.com|libmysqld/README|20010411110351|24268|434e9cae5fa9a4c4 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000010.xml|20001017133713|64368|9b98c9cce8fac145 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000012.xml|20001017133713|01909|a410d08dc4cfee11 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000024.xml|20001017133713|22352|dd067aa28220fa4c -serg@serg.mysql.com|mysql-test/r/ft0000002.a.result|20001212120058|27306|a89b4db1db19f944 -serg@serg.mysql.com|mysql-test/t/sel000014.test|20001211130731|22977|74cb8c70f1d73fcc -tim@threads.polyesthetic.msg|bdb/build_win32/db_dll.dsp|20010305004134|29137|4e9dda53c84511b6 -tim@threads.polyesthetic.msg|bdb/build_win32/db_load.dsp|20010305004134|32237|e83a2af8e24a715d -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_get.html|20010305004144|26284|4bf7579a92c35195 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbm.html|20010305004144|04019|ebf1d8e329b06bba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_feedback.html|20010305004145|02860|87a78f97ba545aba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_max.html|20010305004145|06288|319c24b5245b0685 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_version.html|20010305004145|40251|9bf7f99fefacc2bf +tim@threads.polyesthetic.msg|bdb/docs/api_c/hsearch.html|20010305004144|08165|a8b76d897a8216d8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_detect.html|20010305004145|41159|8fe406dce10e0bb +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_get.html|20010305004145|42084|63399d204f1885fa +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_id.html|20010305004145|43025|c9ee776f928a38f +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_put.html|20010305004145|44022|f5bc2f52e55f16e1 +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_stat.html|20010305004145|44954|d9a98bb949070b +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_vec.html|20010305004145|45892|cc79e33b82b7a275 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_archive.html|20010305004145|46850|490428ce45f9f918 tim@threads.polyesthetic.msg|bdb/docs/api_c/log_compare.html|20010305004145|47782|4f12fdf04d30ab94 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_file.html|20010305004145|48705|574444b46b801f9c +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_flush.html|20010305004145|49632|bb8bc4fc43c9f63d +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_get.html|20010305004145|50583|24cdf17ba55cbecf +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_put.html|20010305004145|51546|11a1bec49bb90419 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_register.html|20010305004145|52499|5381c1fad82d6527 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_stat.html|20010305004145|53440|36b87b19ee2c5bba +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_unregister.html|20010305004145|54401|45b8f9d3f8eb3d80 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fclose.html|20010305004145|55335|b52c7d599d83c26 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fget.html|20010305004145|56294|460714b5c2e3e1c5 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fopen.html|20010305004145|57267|d032a963a0103472 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fput.html|20010305004145|58291|4a7aace7db01ee15 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fset.html|20010305004145|59241|ecb97931b222568d +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fsync.html|20010305004145|60192|a95ab802bb28646f +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_register.html|20010305004145|61165|8b9dff9b5043da58 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_stat.html|20010305004145|62160|55a9521fe04b03bd +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_sync.html|20010305004145|63168|b387035a94c20c50 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_trickle.html|20010305004145|64180|8b1adf1404d7a5f +tim@threads.polyesthetic.msg|bdb/docs/api_c/pindex.src|20010305004143|31726|d1ecd116c42e0e23 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_close.html|20010305004144|08984|8981d16589844161 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirfree.html|20010305004144|09784|d59f36547c7b5384 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirlist.html|20010305004144|10606|24e75ccc86809023 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_exists.html|20010305004144|12261|23f077e82ca8f827 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_free.html|20010305004144|13076|ed61d2dfea9e069e +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_fsync.html|20010305004144|13884|f59339ff63d95e7d +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_ioinfo.html|20010305004144|14713|80365bb8c66ae84c +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_malloc.html|20010305004144|15535|5579a0604e14e1e7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_map.html|20010305004144|16369|d90bbc8462ef43a6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_open.html|20010305004144|17474|8c812591efc8abe6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_read.html|20010305004144|18372|c8f6ece1ed408bf8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_realloc.html|20010305004144|19375|e8e78e57c005c7c4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_rename.html|20010305004144|20199|3f8c7b6674cda105 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_seek.html|20010305004144|21048|fdf1b31d3f6c7473 tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_sleep.html|20010305004144|21928|4b962c8b82989d8c +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unlink.html|20010305004144|22800|c42b13fd26f2e90 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unmap.html|20010305004144|23658|d85790692f3b536e +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_write.html|20010305004144|24518|63567be42d586fde tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_yield.html|20010305004144|25375|ca5e359bcbeca7fd +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_abort.html|20010305004145|65162|a53425dd70214619 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_begin.html|20010305004145|00608|557b34fd3e7363 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_checkpoint.html|20010305004145|01607|4a1704dbfcaad5dc +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_commit.html|20010305004145|02592|8950b5e11c8b0778 tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_id.html|20010305004144|04952|1e71088a7e8f6678 tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_prepare.html|20010305004145|03605|19f84203db4e6608 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_stat.html|20010305004145|04637|f57a656bfbac12bf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_index.html|20010305004145|07331|a0bc165de8a0554c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_pindex.html|20010305004147|08181|9ff6b69b56f988dd +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_class.html|20010305004145|08391|3129ff8c53721fe8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_close.html|20010305004145|28189|cc570e65ac7d22f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_cursor.html|20010305004145|29241|4f0225f98f4a11c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_del.html|20010305004145|31220|43fa05f2dfa86dbc tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_err.html|20010305004145|10496|77022bd5af575696 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_fd.html|20010305004145|33050|99ec316575f80428 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get.html|20010305004145|34357|3b6e6005f3f17f2a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_byteswapped.html|20010305004146|00979|a44d5d57d050b466 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_type.html|20010305004146|01846|398668783c4070db +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_join.html|20010305004146|02717|9c4819679501ad6e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_key_range.html|20010305004146|03630|d79b373af096cb7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_open.html|20010305004146|04518|ab95c48ac26ad3f7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_put.html|20010305004146|05435|2792034e8c83c56 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_remove.html|20010305004146|06326|8c537fc5e326293b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_rename.html|20010305004146|07200|9c0a820e864220b3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_append_recno.html|20010305004146|08075|a158b1fdba756ce +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_compare.html|20010305004146|08946|d888d1ebe056bc6b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_minkey.html|20010305004146|09837|d6181e52342005c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_prefix.html|20010305004146|11627|ecd8f927371a5dbd +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_cachesize.html|20010305004146|12541|3befdbaf98d5a04e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_dup_compare.html|20010305004146|13472|91f36955a213e0f4 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errcall.html|20010305004146|10727|28a7a1fa2b3b73ee +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errfile.html|20010305004145|11465|f6eddb9ab7ef07d0 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errpfx.html|20010305004146|14381|1f26e7b0bb5a067f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_feedback.html|20010305004146|15263|a08620d86f05ec8c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_flags.html|20010305004146|16174|1146625feeb3bb0b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_ffactor.html|20010305004146|17155|a67084c644c38114 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_hash.html|20010305004146|18078|afe952f65389d93b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_nelem.html|20010305004146|19017|1829bc583d9c7554 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_lorder.html|20010305004146|19980|a46750a29588268c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_malloc.html|20010305004145|12423|b0aa5802da5bef4d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_pagesize.html|20010305004146|20914|b8d544ec3e102c6c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_paniccall.html|20010305004145|13411|6bc911c9d64e9237 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_q_extentsize.html|20010305004146|21826|b17e340a68ede3ac +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_delim.html|20010305004146|22753|81d9df93c3511df3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_len.html|20010305004146|23672|e09bb30e40208dfb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_pad.html|20010305004146|24627|f2e0c2c2c3806a97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_source.html|20010305004146|25550|46998978715ccc1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_realloc.html|20010305004145|14370|64d967a58c328957 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_stat.html|20010305004146|26537|3473827de856d680 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_sync.html|20010305004146|27538|dadf1f745e44faa7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_upgrade.html|20010305004146|28493|c6231eb2f9989284 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_verify.html|20010305004146|29479|14db455da528229d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_class.html|20010305004145|15353|2a31b398c37d674b tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_close.html|20010305004146|30462|2adba79b482ee157 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_count.html|20010305004146|31395|bc025b8894450525 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_del.html|20010305004146|32671|424fc0ebb3b4c5cf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_dup.html|20010305004146|33708|75df863b4bc13aaa +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_get.html|20010305004146|34739|36e2dbe65e3442e3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_put.html|20010305004146|35761|11e6aa2492dd1032 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbenv_class.html|20010305004145|16297|5ab8aaf8a531f76b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbt_class.html|20010305004145|17281|fb91648586c1aa77 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_close.html|20010305004146|36778|5cc705b97b86972c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_open.html|20010305004146|37756|66ac1ae7fa67ca4a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_remove.html|20010305004146|38809|5efece7ecdfc4df7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_cachesize.html|20010305004146|39807|b82ed49a47415fec +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_data_dir.html|20010305004146|40779|9176f081597e4f27 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errcall.html|20010305004146|41745|bae25b45b0196773 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errfile.html|20010305004145|18322|f9543c9e65ed6a1d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_error_stream.html|20010305004145|19317|a4101c1d68559fa2 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errpfx.html|20010305004146|42728|d26da4bab9538234 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_feedback.html|20010305004146|43755|1d5bd8dfe2d8034e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_flags.html|20010305004146|44734|8136e8e1ae16dc02 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_bsize.html|20010305004146|45706|7fd917bea6b163bf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_dir.html|20010305004146|46674|c08aac264e7faa97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_max.html|20010305004146|47638|4f7ba5f02c66c0de +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_conflicts.html|20010305004146|48615|5bba88df4cc6dfba +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_detect.html|20010305004146|49591|13e53300b722cf1e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max.html|20010305004146|50580|52ac3c4ca2876de +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_lockers.html|20010305004146|52578|ebb61fd669c2eefb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_locks.html|20010305004146|51576|bbde4ffbcc607f61 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_objects.html|20010305004146|53572|c47424e4d13d5327 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mp_mmapsize.html|20010305004146|54573|c21e3f9c5a29b0ab +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mutexlocks.html|20010305004146|55575|f73e7ffdd2d8d62f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_pageyield.html|20010305004146|56583|db4e5bdf71e171c0 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_paniccall.html|20010305004145|20292|2080056f15faa516 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_panicstate.html|20010305004146|57577|ad2d38e398cafd31 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_rec_init.html|20010305004146|58586|77916e00d1361c7b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_region_init.html|20010305004146|59589|2d70678382bbbf9a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_server.html|20010305004146|60631|bb74806839e8eb58 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_shm_key.html|20010305004146|62685|65b2c2f848ddf31e tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tas_spins.html|20010305004146|64671|a107049f4776b358 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tmp_dir.html|20010305004146|00169|6c815da1fad27537 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_max.html|20010305004146|01212|910d1c17dd000729 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_recover.html|20010305004146|02235|cdf13797131b2d97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_timestamp.html|20010305004146|03286|6396a1145f8e41c1 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_verbose.html|20010305004146|04365|e804a65368b5cdc1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_strerror.html|20010305004146|05414|7e1cbfbd096ca +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_version.html|20010305004146|06444|1cff25c44cbea934 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/except_class.html|20010305004145|21277|59839667e43592e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/get_errno.html|20010305004145|22249|e1a57c1c5f1d2695 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_class.html|20010305004145|23233|ed88ab78cccbef8d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_detect.html|20010305004146|07495|bb50519c431233ed +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_get.html|20010305004146|61648|527d63a8526f336c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_id.html|20010305004146|08539|b3c7995efbe12c16 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_put.html|20010305004146|09587|9eb85a1c9e88621 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_stat.html|20010305004146|10635|2112ceb0894b34d8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_vec.html|20010305004146|11739|c55deaa5173a3323 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_archive.html|20010305004146|12836|d47f39e6dad7ee50 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_compare.html|20010305004146|13902|3225b4c32016c9b1 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_file.html|20010305004146|14965|9a724b41d84e0c31 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_flush.html|20010305004146|16027|3976f77e905f35eb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_get.html|20010305004146|17104|aee6162219c71617 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_put.html|20010305004146|18207|66077da9630fa8c2 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_register.html|20010305004146|19292|55470e0d79382beb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_stat.html|20010305004146|20379|dc2d4ffe7950fc09 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_unregister.html|20010305004146|21535|8fa1fe691751d6ad +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lsn_class.html|20010305004145|24210|34809f73e15540ad +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fclose.html|20010305004146|22608|cc4a5776ac69d660 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fget.html|20010305004146|23710|bfe74f8c299c2995 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fopen.html|20010305004146|24842|abfef0a4db99c8e1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fput.html|20010305004146|26004|7ee8cda6287dee81 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fset.html|20010305004146|27124|e52fa0488faa893 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fsync.html|20010305004146|28227|76d47da7c5dc8932 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_register.html|20010305004146|29358|cba6f572fe27c7a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_stat.html|20010305004146|31867|d370717a78971be1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_sync.html|20010305004146|33235|253961279934d3c8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_trickle.html|20010305004146|34409|c9df8540b9ebc898 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/mempfile_class.html|20010305004145|25191|672b4aa787b4aeca +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/pindex.src|20010305004145|09392|d65361c4acfcef06 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_abort.html|20010305004147|01091|81177bcb2e5f4502 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_begin.html|20010305004147|02053|3a2d1488ec9d8655 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_checkpoint.html|20010305004147|02999|173930473e76d008 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_class.html|20010305004145|26179|5e57abe095aceca9 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_commit.html|20010305004147|03924|65afb8caf9c470ae +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_id.html|20010305004147|04873|162661f4c2dc09d6 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_prepare.html|20010305004147|05797|818b4163518bace5 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_stat.html|20010305004147|06751|e8e25f86f8541696 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/what.html|20010305004145|27185|a64f42c697273c44 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_class.html|20010305004147|09609|b957a4d2b77acb1e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_close.html|20010305004147|24101|21595167f4fdbe88 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_cursor.html|20010305004147|25020|2181d652bd1c1ff +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_del.html|20010305004147|25922|f4f15b362b114506 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_fd.html|20010305004147|26830|1f70020c37023baa +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get.html|20010305004147|27733|87b8316c55b24739 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_byteswapped.html|20010305004147|28706|edbc66a9d5491a1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_type.html|20010305004147|29592|4cfb6f09cbe0b8ae +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_join.html|20010305004147|30506|a3a6dead9cae65f9 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_key_range.html|20010305004147|31461|8834de5873a6acb5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_open.html|20010305004147|32409|bfc13736b96ac509 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_put.html|20010305004147|33389|c476abe5599f21cf +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_remove.html|20010305004147|34343|49d3b8c7e5a5b000 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_rename.html|20010305004147|35341|19b20feaa815bc27 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_append_recno.html|20010305004147|36282|d28bf857803b93a2 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_compare.html|20010305004147|37206|e972f964d042b35e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_minkey.html|20010305004147|38144|c7e1f184bdca25fa +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_prefix.html|20010305004147|39088|a3269aad23e6dbc +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_cachesize.html|20010305004147|40035|22d172a2d29f276b +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_dup_compare.html|20010305004147|40992|3dabd840a1d9e5f3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errcall.html|20010305004147|41930|4e4743f5b4277199 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errpfx.html|20010305004147|42881|c446da51277796df +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_feedback.html|20010305004147|45141|69b4c07b3dbe383 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_flags.html|20010305004147|46212|b6b9d271bd42a94e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_ffactor.html|20010305004147|47226|edcc10024104d57e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_hash.html|20010305004147|48174|c6eb825c706a9548 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_nelem.html|20010305004147|49144|fc6f22a4c285fcef +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_lorder.html|20010305004147|50103|f64cbdd62bbbdd7c +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_pagesize.html|20010305004147|51079|d899ea90b20b7b31 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_q_extentsize.html|20010305004147|52035|6ac26239fc538cb +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_delim.html|20010305004147|53019|78fcf2d750fb26ef +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_len.html|20010305004147|53997|8448826ea78c630e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_pad.html|20010305004147|54985|2729c192747ac7af +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_source.html|20010305004147|55969|b29827dbf47537d1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_stat.html|20010305004147|57008|bc253f0883e9c82b +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_sync.html|20010305004147|58064|42391f7d5f200b90 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_upgrade.html|20010305004147|59076|782fa4cc6c633990 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_verify.html|20010305004147|60082|20873ab17f6ed922 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_class.html|20010305004147|11473|8ee03c40ae0dbcb8 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_close.html|20010305004147|61116|e3bf1f36bc0e8e7e +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_count.html|20010305004147|62108|9c239575f4550756 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_del.html|20010305004147|63111|6ec2b8a4b8dde996 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_dup.html|20010305004147|64103|aa141014c4d7f9b0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_get.html|20010305004147|65144|e66e387b83681e73 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_put.html|20010305004147|00700|da0f0fa974385abd +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbenv_class.html|20010305004147|12326|92c7a4a6c22090c7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbt_class.html|20010305004147|13192|f6b04ff142e332f8 tim@threads.polyesthetic.msg|bdb/docs/api_java/deadlock_class.html|20010305004147|14282|b587b2d8c9e5d0b0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_close.html|20010305004147|01809|c4e2ec77d7d14d4f +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_open.html|20010305004147|02873|2df0f0ef544da715 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_remove.html|20010305004147|04039|e92277e3dfd9bba1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_cachesize.html|20010305004147|05132|f3700cd19856f14e +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_data_dir.html|20010305004147|06162|b7b3f35e96804650 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errcall.html|20010305004147|07189|4e206d08cbb39ab7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_error_stream.html|20010305004147|15677|a738119910b452b8 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errpfx.html|20010305004147|08227|a3b9a09670f6912 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_feedback.html|20010305004147|09255|9748745e65f070d5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_flags.html|20010305004147|10283|690847bb5e205c21 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_bsize.html|20010305004147|11335|6c67beed877df84c +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_dir.html|20010305004147|12366|484cad2123994e14 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_max.html|20010305004147|13429|c9f705492162e175 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_conflicts.html|20010305004147|14497|8951eb975a90918b +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_detect.html|20010305004147|15549|9fc15a1a95b0dfa1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max.html|20010305004147|16607|12b6e34ac5a53281 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_lockers.html|20010305004147|18755|7896265ea77829b3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_locks.html|20010305004147|17677|f0114205b169de39 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_objects.html|20010305004147|19812|d1ed194631ffeb2a +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mp_mmapsize.html|20010305004147|20894|b7dea9108fa65dfa +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mutexlocks.html|20010305004147|21961|aad8e4a059075bb6 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_pageyield.html|20010305004147|23054|774b3da0306a6767 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_panicstate.html|20010305004147|24142|72846d9a97cb80bb +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_rec_init.html|20010305004147|25237|1fdb2c5fc3b6407 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_region_init.html|20010305004147|26379|30534afa94cbf54e +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_server.html|20010305004147|27545|d901cdab9698605d +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_shm_key.html|20010305004147|28699|8c576698882f0edc +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tas_spins.html|20010305004147|30425|2f9963827fbcb3f +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tmp_dir.html|20010305004147|32251|f23e4f614f6d975a +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_max.html|20010305004147|33999|70f356b8b67782fe +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_recover.html|20010305004148|00983|40280da113fc9d2b +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_timestamp.html|20010305004148|02804|457eeb135f1f8bc0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_verbose.html|20010305004148|03690|9dcda0399c8256e7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_strerror.html|20010305004148|04588|fceebaa94cf9aafd +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_version.html|20010305004148|05599|854d26806930cab6 +tim@threads.polyesthetic.msg|bdb/docs/api_java/except_class.html|20010305004147|16978|195c00e4a7cbe648 tim@threads.polyesthetic.msg|bdb/docs/api_java/get_errno.html|20010305004147|17836|89a89f8efe3a9360 +tim@threads.polyesthetic.msg|bdb/docs/api_java/java_index.html|20010305004147|18736|8ecfcef4a702011d tim@threads.polyesthetic.msg|bdb/docs/api_java/java_pindex.html|20010305004148|35859|f8bc0811d8eda8e9 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_class.html|20010305004147|19738|880aa614d1469304 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_detect.html|20010305004148|06490|14d4e7c7dca0dad7 tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_get.html|20010305004148|07401|fd52de261831f9b5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_id.html|20010305004148|08326|737cf8d8dc74084e +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_put.html|20010305004148|09226|5af89e4cbf29c694 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_stat.html|20010305004148|10140|71b81d8567befc43 tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_vec.html|20010305004148|11077|df5eb838fdbe1eab +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_archive.html|20010305004148|11996|b4a9483dbb5a2b58 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_compare.html|20010305004148|12947|756622b42572ecb +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_file.html|20010305004148|13857|74a49bae2532199a +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_flush.html|20010305004148|14794|1691d6a3c8cc284e +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_get.html|20010305004148|15736|5fbbbd4baa60e052 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_put.html|20010305004148|16729|ad7e9f382abde491 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_register.html|20010305004148|17668|c68fc6fb22dd594a +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_stat.html|20010305004148|18608|d186a08662046aba +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_unregister.html|20010305004148|19590|eee284e0da176d0a +tim@threads.polyesthetic.msg|bdb/docs/api_java/lsn_class.html|20010305004147|20619|b1458208b6c81016 +tim@threads.polyesthetic.msg|bdb/docs/api_java/mem_class.html|20010305004147|21486|2e5052b5b2bea584 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fclose.html|20010305004148|20518|d08f0c134361f802 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fget.html|20010305004148|21431|ca84dee01997eb89 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fopen.html|20010305004148|22355|f7cf58725aa1c406 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fput.html|20010305004148|23268|6ba75e517a259703 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fset.html|20010305004148|24178|5c5371a93b83275 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fsync.html|20010305004148|25118|e767b233fe7730a2 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_register.html|20010305004148|26052|8331390a1c66fefd +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_stat.html|20010305004148|27008|4628462474db62b4 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_sync.html|20010305004148|27969|5b401daadc7261eb +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_trickle.html|20010305004148|28912|4d5c4e83a4a5c638 +tim@threads.polyesthetic.msg|bdb/docs/api_java/pindex.src|20010305004147|10521|de828917f041d27b +tim@threads.polyesthetic.msg|bdb/docs/api_java/runrec_class.html|20010305004147|22358|49c5cb3efe0c201 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_abort.html|20010305004148|29858|ec9a3517748bfa3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_begin.html|20010305004148|30859|553bf78bd7fc3e0a +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_checkpoint.html|20010305004148|31832|2565ac892d04b63d +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_class.html|20010305004147|23221|c7bb2a3393ca9488 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_commit.html|20010305004148|32812|c265042f3340baa1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_id.html|20010305004148|01920|798720b73cc9391 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_prepare.html|20010305004148|33784|510a245c80e715c +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_stat.html|20010305004148|34772|9a6ef8c262f218f9 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_close.html|20010305004148|38213|f40794b17e0fe443 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_count.html|20010305004148|40010|4812f3756a75437 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_cursor.html|20010305004148|40924|e035b3c11a91c5d6 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_del.html|20010305004148|41829|400c7a72fb10d6f4 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get.html|20010305004148|42753|127bd361ee695c71 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_join.html|20010305004148|43762|1c737805c2c49cf9 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_type.html|20010305004148|44686|7202f3ca793e6ec3 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_is_byteswapped.html|20010305004148|45596|8fb9e2c58051c769 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_join.html|20010305004148|46525|cb3eb61ed17a1f8 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_open.html|20010305004148|47486|f588cc9bc694cbf0 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_put.html|20010305004148|48549|380c7caeced55512 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_remove.html|20010305004148|50431|3b2be4b0b1b3dc98 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_rename.html|20010305004148|49486|909bc643d5455b54 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_stat.html|20010305004148|51363|3bb57be2de907fd2 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_sync.html|20010305004148|52310|3b615ca64d934602 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_close.html|20010305004148|53244|ef431e58d72accc3 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_del.html|20010305004148|54185|7e94f9f01e7e4453 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_dup.html|20010305004148|55139|325121689412d70b +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_get.html|20010305004148|56098|5bbb80cf51aff594 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_put.html|20010305004148|57122|290ecb1275d4270 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_close.html|20010305004148|58109|bf191b2673a2b19e +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_open.html|20010305004148|59088|39b63925d45a637e +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_remove.html|20010305004148|60117|9090900413ff0280 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/pindex.src|20010305004148|39123|f8754fff24f2cb24 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_index.html|20010305004148|61088|443e6b9a10ef4139 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_pindex.html|20010305004148|00553|259f0e062eee63c7 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn.html|20010305004148|62085|8e345950e6029230 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_abort.html|20010305004148|63068|8cc23b6ef6f457d2 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_commit.html|20010305004148|64051|25150b20b84cd519 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/version.html|20010305004148|65038|eeb51f4de1bbfe8e +tim@threads.polyesthetic.msg|bdb/docs/images/api.gif|20010305004148|02578|dec2d4fe5f39dffe +tim@threads.polyesthetic.msg|bdb/docs/images/next.gif|20010305004148|03600|ddab96466674135b +tim@threads.polyesthetic.msg|bdb/docs/images/prev.gif|20010305004148|04639|9448d24755d708a0 +tim@threads.polyesthetic.msg|bdb/docs/images/ps.gif|20010305004148|05648|f6b1b372cb2cda4c +tim@threads.polyesthetic.msg|bdb/docs/images/ref.gif|20010305004148|06650|add30c753dc1972d +tim@threads.polyesthetic.msg|bdb/docs/images/sleepycat.gif|20010305004148|07668|ea63aaaa508ef096 +tim@threads.polyesthetic.msg|bdb/docs/index.html|20010305004143|26935|450dd5db21a9bb64 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/close.html|20010305004148|10227|ed6f7427edc0431 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/count.html|20010305004148|11236|8fd8daf2e2cbd7c7 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curclose.html|20010305004148|12231|8b6b8442fc8382f7 tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdel.html|20010305004148|13236|39bf0a8cba99c064 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdup.html|20010305004148|14243|5c855e1f5b99d990 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curget.html|20010305004148|15271|d7dd42affcd54073 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curput.html|20010305004148|16324|c7e4fa0a68170c3d +tim@threads.polyesthetic.msg|bdb/docs/ref/am/cursor.html|20010305004148|17350|6dbcdb3b7d552f58 tim@threads.polyesthetic.msg|bdb/docs/ref/am/delete.html|20010305004148|18364|9195664374690b24 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/error.html|20010305004148|19390|45ac854e68196844 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/get.html|20010305004148|20425|96c9c9a01c32d16 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/join.html|20010305004148|22331|acc16686a78a732 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/open.html|20010305004148|23468|c9a7e23579a5e93a tim@threads.polyesthetic.msg|bdb/docs/ref/am/opensub.html|20010305004148|24500|81c79cce793fb343 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/ops.html|20010305004148|25566|9b24db9ba4f45724 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/partial.html|20010305004148|26629|db4a970c839b3051 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/put.html|20010305004148|28752|8e18b0af61eb7f0f tim@threads.polyesthetic.msg|bdb/docs/ref/am/stability.html|20010305004148|30129|a92faac934d69cef +tim@threads.polyesthetic.msg|bdb/docs/ref/am/stat.html|20010305004148|32050|fafc0f88571d9395 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/sync.html|20010305004148|33751|381722c07c9d8825 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/upgrade.html|20010305004149|00532|c7499736f03c1a1c +tim@threads.polyesthetic.msg|bdb/docs/ref/am/verify.html|20010305004149|01382|badaeba91bda50e1 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_compare.html|20010305004149|18156|c1e847e651704c89 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_minkey.html|20010305004149|19013|b4708e561be92b83 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_prefix.html|20010305004149|19903|4e7602aa68d50fe1 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_recnum.html|20010305004149|20770|f081f10254e86e75 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/byteorder.html|20010305004149|21617|999a22f727e2dae0 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/cachesize.html|20010305004149|22486|99dcd466dc881093 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/dup.html|20010305004149|23371|523731632fca7343 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/extentsize.html|20010305004149|24263|fdcfb5572974545c +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_ffactor.html|20010305004149|25120|5eb87b7ce99f3362 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_hash.html|20010305004149|25978|3a0174586fbcfcdf +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_nelem.html|20010305004149|26871|979995db477052ad +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/intro.html|20010305004149|27745|dd1647202258ee28 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/logrec.html|20010305004149|28646|5edeb34d63936e2 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/malloc.html|20010305004149|29537|cb0e6d7e9448d93e +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/pagesize.html|20010305004149|30437|eb4800704ae1131b +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/re_source.html|20010305004149|31346|b000d11ca4a0f9a +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/recno.html|20010305004149|32283|c2ae722138309e95 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/renumber.html|20010305004149|33199|b7df79bf32240b5c +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/select.html|20010305004149|34120|57b1c99f6a8ea93f +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/apis.html|20010305004149|36488|a84570e410b11a6a +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.gif|20010305004149|41251|fe43e7415b3bbdb0 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.html|20010305004149|37519|ab5254bc99af0d5c +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/progmodel.html|20010305004149|38491|caa422dc155b6370 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/script.html|20010305004149|39400|6796fd0a63161a0c +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/smallpic.gif|20010305004149|42169|fdf77055d7e711 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/utilities.html|20010305004149|40326|54d7014fab332c7a +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/aix.html|20010305004149|44137|e8ae448bdb85fa22 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/conf.html|20010305004149|45053|d0378c69618b790b +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/flags.html|20010305004149|46003|a739404f90eb8c3d +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/freebsd.html|20010305004149|46918|8ed2a42e1668004c +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/hpux.html|20010305004149|47818|d34942564699608 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/install.html|20010305004149|48752|660222dd1feffc4 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/intro.html|20010305004149|49652|f261022c26987d7f +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/irix.html|20010305004149|50564|95833aedc3a82f0 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/linux.html|20010305004149|51464|f9f2d09dc6df75e +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/notes.html|20010305004149|52391|97e9b52853db15ea +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/osf1.html|20010305004149|53358|9d4ebabfe3af8970 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/qnx.html|20010305004149|54263|6d2849a8e8038dc9 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sco.html|20010305004149|55174|e25f6271a1b753d0 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/shlib.html|20010305004149|56099|7168ed40f2e1155d tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/solaris.html|20010305004149|57063|3a85fb541538d0d7 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sunos.html|20010305004149|58008|fc41965e9d95985c tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/test.html|20010305004149|58940|b2c2f275a0c3e783 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/ultrix.html|20010305004149|59865|a1dd780edcde11f6 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/faq.html|20010305004149|61835|cdb7646d3d2e6374 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/intro.html|20010305004149|62808|2eed15d25078711 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/notes.html|20010305004149|63758|7e53a042c5c4d350 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/faq.html|20010305004149|65331|34704a907168cea7 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/intro.html|20010305004149|00770|2975a07b53b12046 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/notes.html|20010305004149|01764|4058bf968f287f7 tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/test.html|20010305004149|02729|84090b57cb7f0cf8 +tim@threads.polyesthetic.msg|bdb/docs/ref/cam/intro.html|20010305004149|04558|4c497b1a18c4c7f5 +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/common.html|20010305004149|07598|607061232e2532df +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/compile.html|20010305004149|08609|12785e3091b78bfd +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/intro.html|20010305004149|06616|57ef29f26341ea +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/printlog.html|20010305004149|09591|9fa9894f839fad95 +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/runtime.html|20010305004149|10629|d50f2fea4a8e58c +tim@threads.polyesthetic.msg|bdb/docs/ref/distrib/layout.html|20010305004149|12589|5aeb292fbd987cf8 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/format.html|20010305004149|13995|9fa10ca3c7ae6751 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/text.html|20010305004149|14998|88b57a73860b423 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/utility.html|20010305004149|15969|8fc100fdb58adb3c +tim@threads.polyesthetic.msg|bdb/docs/ref/env/create.html|20010305004149|17402|9f454cb1910df0b8 +tim@threads.polyesthetic.msg|bdb/docs/ref/env/error.html|20010305004149|18447|acbbdb848c9fe70f +tim@threads.polyesthetic.msg|bdb/docs/ref/env/intro.html|20010305004149|19435|96dd1090729e06b +tim@threads.polyesthetic.msg|bdb/docs/ref/env/naming.html|20010305004149|20447|1f041789686cc8a0 tim@threads.polyesthetic.msg|bdb/docs/ref/env/open.html|20010305004149|21520|37a6e67d520d6c00 +tim@threads.polyesthetic.msg|bdb/docs/ref/env/region.html|20010305004149|22506|cc94139c8daa7f6a +tim@threads.polyesthetic.msg|bdb/docs/ref/env/remote.html|20010305004149|23518|52a3a79fdff8f7bd +tim@threads.polyesthetic.msg|bdb/docs/ref/env/security.html|20010305004149|24507|e455f95aee7f5cd2 +tim@threads.polyesthetic.msg|bdb/docs/ref/install/file.html|20010305004150|21159|d4ba2317db7c064b +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.be.txt|20010305004150|22805|cf7d25e758432ab6 +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.le.txt|20010305004150|23615|528ef76418c8b45c +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.txt|20010305004150|21985|3894a46ea11ce25a +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/data.html|20010305004149|26092|33fbf7496c58cf63 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbis.html|20010305004149|28303|e672b7615d70be2c +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbisnot.html|20010305004149|29466|5ce7aed7ce41c9e6 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/distrib.html|20010305004149|30742|84b56709310017f2 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/need.html|20010305004149|31743|43950806e35d71f +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/products.html|20010305004149|32785|f37221772a3b589d +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/terrain.html|20010305004149|33850|b396d6447a59435f +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/what.html|20010305004150|00539|dd70b9e6e085725d +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/where.html|20010305004150|01442|6cb9ec27f19ecbbb +tim@threads.polyesthetic.msg|bdb/docs/ref/java/compat.html|20010305004150|25581|b39d173789bbf70d +tim@threads.polyesthetic.msg|bdb/docs/ref/java/conf.html|20010305004150|26401|ef560bcf13a71cd5 +tim@threads.polyesthetic.msg|bdb/docs/ref/java/faq.html|20010305004150|27218|7ca2474ba1f6676f +tim@threads.polyesthetic.msg|bdb/docs/ref/java/program.html|20010305004150|28026|e9bbc08bccf5d396 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/am_conv.html|20010305004150|30986|3bab32d969f21b77 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/cam_conv.html|20010305004150|31862|63844ff6fa95f0c +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/config.html|20010305004150|32692|a593ea4c87467ddd +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/dead.html|20010305004150|33535|f5c7debd9ba739bb +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/intro.html|20010305004150|34434|e1e07e71f3198be +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/max.html|20010305004150|35299|f0fb32ebc251f636 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/nondb.html|20010305004150|36156|863fe076a46378d7 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/notxn.html|20010305004150|37003|beec805d9f05e2bc +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/page.html|20010305004150|37863|d56876b2565cbee +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/stdmode.html|20010305004150|38797|4048a052ea129ca3 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/twopl.html|20010305004150|39650|b3f3aee667bc381d +tim@threads.polyesthetic.msg|bdb/docs/ref/log/config.html|20010305004150|41449|aedc53caf49c51c9 +tim@threads.polyesthetic.msg|bdb/docs/ref/log/intro.html|20010305004150|42339|31e7055d83ca8757 +tim@threads.polyesthetic.msg|bdb/docs/ref/log/limits.html|20010305004150|43198|26fac1e32387b7c9 +tim@threads.polyesthetic.msg|bdb/docs/ref/mp/config.html|20010305004150|46018|771c2c91fc0b6b17 +tim@threads.polyesthetic.msg|bdb/docs/ref/mp/intro.html|20010305004150|45138|34937731cafcf1b1 +tim@threads.polyesthetic.msg|bdb/docs/ref/perl/intro.html|20010305004150|47570|ce7e794e619e1e1d +tim@threads.polyesthetic.msg|bdb/docs/ref/pindex.src|20010305004149|02223|7d74723f9fd25801 tim@threads.polyesthetic.msg|bdb/docs/ref/program/appsignals.html|20010305004150|48930|3ab63bf9399d7ead tim@threads.polyesthetic.msg|bdb/docs/ref/program/byteorder.html|20010305004150|49835|f7fa52b53e4c8838 tim@threads.polyesthetic.msg|bdb/docs/ref/program/compatible.html|20010305004150|50729|237b98e6a6d7ed35 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/extending.html|20010305004150|56407|6a86a40872d6b8bc -tim@threads.polyesthetic.msg|bdb/docs/ref/program/runtime.html|20010305004150|61233|6853fdbfe15df788 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.html|20010305004150|00758|bad2247b4f8c582b -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/client.html|20010305004150|12568|824178f8626e45b7 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/del.html|20010305004150|19030|514a1bd568ed4c1d -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/get.html|20010305004150|20970|211de230d6a6cbc5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/env_open.html|20010305004151|47233|c8d61102658c3bbf -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/filesys.html|20010305004151|48077|ebee24f726f99bf6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/intro.html|20010305004151|16219|7ecd16967b0bc868 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_put.html|20010305004151|21664|fd9ed0b04b465af -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/rmw.html|20010305004151|28431|992b0143d13a3ec0 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_stat.html|20010305004152|13652|9582c327964e1f9 -tim@threads.polyesthetic.msg|bdb/include/btree_auto.h|20010305004137|17274|84d4451c78faf67e -BK|sql/share/polish/errmsg.sys|19700101030959|01857|126b03af92054f0f -BK|strings/Attic/ct_init.c|19700101030959|01338|f0948bdd35ceedc3 -BK|strings/Attic/ctype.c.in|19700101030959|01361|8bf48d4bcbc5f675 -BK|vio/Vio.h|19700101030959|00004|f4416b2949647602 -BK|vio/VioSSL.h|19700101030959|00014|70d367b7ec8cac3e -BK|vio/violite.h|19700101030959|00023|58d2942a52ea7a83 -miguel@hegel.local|zlib/contrib/asm586/readme.586|20020319032514|57815|f60bfeefb27217d -miguel@hegel.local|zlib/contrib/delphi/zlibdef.pas|20020319032514|18918|658cb04db561e3db -miguel@hegel.local|zlib/contrib/delphi2/d_zlib.bpr|20020319032514|25335|c267d77cc2e2a2c8 -miguel@hegel.local|zlib/contrib/minizip/zip.h|20020319032516|40925|17fd39ccb4ea294c -miguel@hegel.local|zlib/gzio.c|20020319032517|27098|e02d23e656c19359 -monty@donna.mysql.com|sql-bench/Results/select-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|23395|8ef771713f89e1 -monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|11725|dfc480becae45236 -monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|06287|d275df58a04737c8 -mwagner@evoq.home.mwagner.org|Docs/Books/algor.eps|20001231203219|20480|481984607c98d715 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000011.xml|20001017133713|00331|432156d127cbd22f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000015.xml|20001017133749|30814|b72689a8f9b21372 -mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/mysqltest.xsl|20001013051514|27425|1b8f6ec4f1b5f634 -sasha@mysql.sashanet.com|mysql-test/t/df_crash.test|20010406010433|65180|4c365178fe437f6 -serg@serg.mysql.com|mysql-test/t/sel000008.test|20001211130730|28581|b338ef585cadf7ae -serg@serg.mysql.com|mysql-test/t/sel000012.test|20001211130731|13215|ae64bff363c42e92 -serg@serg.mysql.com|mysql-test/t/sel000027.test|20001211130731|23677|ab44bb57a580de9 -tim@threads.polyesthetic.msg|bdb/db/crdel_auto.c|20010305004136|27298|ee4146a08fd175c1 -tim@threads.polyesthetic.msg|bdb/dist/config.hin|20010305004136|15955|fdecb7a06fa137a7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_join.html|20010305004144|32446|a58c2d81ecfea5b -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_ffactor.html|20010305004144|08766|41352ddf74ccc338 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_lorder.html|20010305004144|11587|e24ae76325374653 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_dir.html|20010305004145|05444|26be310214a2ff8f -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_region_init.html|20010305004145|31081|2ca19f76ee1ae790 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_shm_key.html|20010305004145|32880|cf5aaa6a995cbf55 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_version.html|20010305004145|40251|9bf7f99fefacc2bf -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_get.html|20010305004145|50583|24cdf17ba55cbecf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_open.html|20010305004146|04518|ab95c48ac26ad3f7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_q_extentsize.html|20010305004146|21826|b17e340a68ede3ac -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_realloc.html|20010305004145|14370|64d967a58c328957 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_feedback.html|20010305004146|43755|1d5bd8dfe2d8034e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mutexlocks.html|20010305004146|55575|f73e7ffdd2d8d62f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_shm_key.html|20010305004146|62685|65b2c2f848ddf31e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tmp_dir.html|20010305004146|00169|6c815da1fad27537 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_detect.html|20010305004146|07495|bb50519c431233ed -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fsync.html|20010305004146|28227|76d47da7c5dc8932 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_cachesize.html|20010305004147|40035|22d172a2d29f276b -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_lorder.html|20010305004147|50103|f64cbdd62bbbdd7c -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_pagesize.html|20010305004147|51079|d899ea90b20b7b31 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_pad.html|20010305004147|54985|2729c192747ac7af -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errpfx.html|20010305004147|08227|a3b9a09670f6912 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_flags.html|20010305004147|10283|690847bb5e205c21 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_file.html|20010305004148|13857|74a49bae2532199a -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fget.html|20010305004148|21431|ca84dee01997eb89 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_abort.html|20010305004148|29858|ec9a3517748bfa3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_id.html|20010305004148|01920|798720b73cc9391 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_close.html|20010305004148|53244|ef431e58d72accc3 -tim@threads.polyesthetic.msg|bdb/docs/images/next.gif|20010305004148|03600|ddab96466674135b -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdup.html|20010305004148|14243|5c855e1f5b99d990 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/partial.html|20010305004148|26629|db4a970c839b3051 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/stat.html|20010305004148|32050|fafc0f88571d9395 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/upgrade.html|20010305004149|00532|c7499736f03c1a1c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/re_source.html|20010305004149|31346|b000d11ca4a0f9a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/shlib.html|20010305004149|56099|7168ed40f2e1155d -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/faq.html|20010305004149|61835|cdb7646d3d2e6374 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/region.html|20010305004149|22506|cc94139c8daa7f6a -tim@threads.polyesthetic.msg|bdb/docs/ref/env/security.html|20010305004149|24507|e455f95aee7f5cd2 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbis.html|20010305004149|28303|e672b7615d70be2c tim@threads.polyesthetic.msg|bdb/docs/ref/program/copy.html|20010305004150|51641|bcf5ff9656fafcd3 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/dbsizes.html|20010305004150|52571|d70da530573b9b38 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/diskspace.html|20010305004150|53502|959508f155721ee8 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/environ.html|20010305004150|54494|dc4a48aa531bd399 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/errorret.html|20010305004150|55412|23491397d7e704e9 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/extending.html|20010305004150|56407|6a86a40872d6b8bc +tim@threads.polyesthetic.msg|bdb/docs/ref/program/mt.html|20010305004150|57429|552ab570b657fc0e +tim@threads.polyesthetic.msg|bdb/docs/ref/program/namespace.html|20010305004150|58394|182f8f762343bdc1 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/recimp.html|20010305004150|60288|bbdb0feb7d467a80 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/runtime.html|20010305004150|61233|6853fdbfe15df788 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/scope.html|20010305004150|59326|2987f97781410bc1 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/solaris.txt|20010305004150|63135|8b6bb29de0d58ffe +tim@threads.polyesthetic.msg|bdb/docs/ref/program/version.html|20010305004150|62172|d266e819d1531df8 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.html|20010305004150|00758|bad2247b4f8c582b +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.ps|20010305004150|02162|9851f6cdeff17481 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/embedded.html|20010305004150|03865|d25b9719d24df88c +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/hash_usenix.ps|20010305004150|05408|11cad226b0aa012b tim@threads.polyesthetic.msg|bdb/docs/ref/refs/libtp_usenix.ps|20010305004150|08667|73329b041f7e8c41 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/refs.html|20010305004150|64422|30490b237ba9b61 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/witold.html|20010305004150|65330|ad6c866cf48734b5 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/client.html|20010305004150|12568|824178f8626e45b7 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/intro.html|20010305004150|13549|ad16bc20623e1192 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/server.html|20010305004150|14510|79f560205494295 +tim@threads.polyesthetic.msg|bdb/docs/ref/sendmail/intro.html|20010305004150|16532|ecac45d7e2bcf51c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/close.html|20010305004150|18046|1fe3a82f28e7ed32 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/del.html|20010305004150|19030|514a1bd568ed4c1d +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/errors.html|20010305004150|19994|be11ff6410e1db2c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/example.txt|20010305004150|28042|9ff88f22565208bf +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/get.html|20010305004150|20970|211de230d6a6cbc5 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/handles.html|20010305004150|21935|18a14f4a50e7bad0 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/intro.html|20010305004150|22878|7544c4688623a54c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/keydata.html|20010305004150|23810|530b1581aeba63ca tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/open.html|20010305004150|24776|5d6eb5c3df68eeee +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/put.html|20010305004150|25774|bdd2629c212af471 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/error.html|20010305004151|21581|37b817c57777b460 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/faq.html|20010305004151|22367|f8433900f7f85400 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/intro.html|20010305004151|20749|d66c6c398e2ace0b +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/program.html|20010305004151|23138|2f5bf497ae226ed5 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/using.html|20010305004151|23908|28856d8c72d0660b +tim@threads.polyesthetic.msg|bdb/docs/ref/test/faq.html|20010305004151|38444|f95038006d18229 +tim@threads.polyesthetic.msg|bdb/docs/ref/test/run.html|20010305004151|39305|63c0398e7e2a29e2 +tim@threads.polyesthetic.msg|bdb/docs/ref/toc.html|20010305004148|08788|ab1fa294d5ef4b69 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/admin.html|20010305004151|41323|cf867ed0b00cccef +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/app.html|20010305004151|42111|6dc3c82982164fa8 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/archival.html|20010305004151|42978|7631314d840be181 tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/checkpoint.html|20010305004151|43948|29e077c954369ed tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/cursor.html|20010305004151|44775|824b2f28c9e8d610 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/data_open.html|20010305004151|45592|413c1d8aba9d8018 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/deadlock.html|20010305004151|46421|34914b9dc6b01703 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/env_open.html|20010305004151|47233|c8d61102658c3bbf +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/filesys.html|20010305004151|48077|ebee24f726f99bf6 tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/inc.html|20010305004151|48911|5ea32b4e2a2107b3 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/intro.html|20010305004151|49773|22096cea9fe159ac +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/logfile.html|20010305004151|50590|1c3002fcb6581e8c +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/put.html|20010305004151|51420|8cc785aeecff8535 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/read.html|20010305004151|52265|fc8b056380e09887 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/reclimit.html|20010305004151|53098|5f54174bf6026bd5 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/recovery.html|20010305004151|53956|6e3a0c07b997c3b2 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/term.html|20010305004151|54819|d6f3fa4fc5a630ec +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/throughput.html|20010305004151|55655|8a7d5a958df7f91a +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/transapp.txt|20010305004151|57368|337576ea2aae23b0 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/why.html|20010305004151|56525|c941c1a56a0adbaf tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/writetest.txt|20010305004151|58289|4de1fc39894cd760 +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/config.html|20010305004151|59874|c7337cb30f9bf66 tim@threads.polyesthetic.msg|bdb/docs/ref/txn/intro.html|20010305004151|60722|85fabd5518fb26be +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/limits.html|20010305004151|61583|3004b7a93dab148b +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/nested.html|20010305004151|62443|6860bbf2f29aa93b +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/other.html|20010305004151|63311|4991722636b3a46d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/convert.html|20010305004151|00512|d7f18eb34c1b6ae +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/disk.html|20010305004151|01410|94dc4e6e3668e613 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/intro.html|20010305004151|02261|8bfd3804a2da1598 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/system.html|20010305004151|03146|eae0256a127c3c89 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/toc.html|20010305004151|04069|670791f294a61494 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/close.html|20010305004151|05457|c79c866b393785cc +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/cxx.html|20010305004151|06323|7f3bfc9bba854d48 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db.html|20010305004151|07207|e7d63f4bb8e989e8 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db_cxx.html|20010305004151|08078|5c17d6a360205140 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv.html|20010305004151|08972|f9863847dc1ed617 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv_cxx.html|20010305004151|09872|7f4fd0ebace36d8e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbinfo.html|20010305004151|10780|7529af7145c0680a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/disk.html|20010305004151|11685|eb79d1157ef44d3c tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/eacces.html|20010305004151|12569|f0299373d8b2f65c tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/eagain.html|20010305004151|13462|920800d8eb450f79 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/envopen.html|20010305004151|14369|5e768fd180f471e4 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/func.html|20010305004151|15332|c06e5bc63ddf7a64 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/intro.html|20010305004151|16219|7ecd16967b0bc868 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/java.html|20010305004151|17120|300acccbb633e335 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/join.html|20010305004151|18031|ec21d874caa0654 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/jump_set.html|20010305004151|18936|718c098a91db9dba +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_detect.html|20010305004151|19846|fb307b10156762ca +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_notheld.html|20010305004151|20761|ed6853b6daa5531b +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_put.html|20010305004151|21664|fd9ed0b04b465af +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_stat.html|20010305004151|22568|c49716e693ce225b +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_register.html|20010305004151|23513|399320e965adf598 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_stat.html|20010305004151|24428|20b5898ba061557d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/memp_stat.html|20010305004151|25363|79e1141c63f7357 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/open.html|20010305004151|27357|8b1e2a969e97069a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/rmw.html|20010305004151|28431|992b0143d13a3ec0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/stat.html|20010305004151|29377|775d75e3ba02d15c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/toc.html|20010305004151|30301|16e7d8e76496cbc9 tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_begin.html|20010305004151|31307|53512180de5fec80 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_commit.html|20010305004151|32241|e1debf9ea769426c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_stat.html|20010305004151|33181|516f1870c6127351 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/value_set.html|20010305004151|34118|f0b0c770a81b90b6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/xa.html|20010305004152|00602|1af042e462ab829 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/btstat.html|20010305004152|37584|40a76aef8b25a948 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/config.html|20010305004152|38401|d2ace28f39ab0f8d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/disk.html|20010305004152|39192|2abdaf9059265ba9 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/dup.html|20010305004152|40004|911018877c118b45 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/env.html|20010305004152|40827|381e366a9c9c9a37 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/intro.html|20010305004152|41719|64592a50b1c634d6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/log_register.html|20010305004152|42524|7177eeb2fc099317 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/logalloc.html|20010305004152|43372|30563c544b8ddd54 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/memp_register.html|20010305004152|44171|7d92464a1029d53e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/put.html|20010305004152|44997|961a1a689be6ce +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_feedback.html|20010305004152|45815|6d7de50be92a5488 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_paniccall.html|20010305004152|46636|8f9741244fb6e9f6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_tx_recover.html|20010305004152|47442|ada65907ba98eee8 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/sysmem.html|20010305004152|48282|3d088eb0ef1b27e0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tcl.html|20010305004152|49096|f5c85b09c33bda4 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tmp.html|20010305004152|50733|ef3450f6fa89f2dc +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/toc.html|20010305004152|49908|af1a24798980ad1 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/txn_check.html|20010305004152|51549|2405b25bc92cc476 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/callback.html|20010305004152|53656|64a2b2b85cc253c1 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/db_dump.html|20010305004152|54477|7d1cac3358c0482e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/disk.html|20010305004152|55280|61799ebebe78ebb2 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/handle.html|20010305004152|56086|bb8a73b74d4399ae +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/incomplete.html|20010305004152|56914|af86a649a878a124 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/intro.html|20010305004152|57734|984a9f7dd07e0c14 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/mutexlock.html|20010305004152|58567|972b710c5bdba67c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/notfound.html|20010305004152|59393|dc91c094aba92838 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/renumber.html|20010305004152|60219|d6cd798434da81aa +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/set_flags.html|20010305004152|61061|213809ca8d7802d0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/toc.html|20010305004152|61902|9c94c533ada43c1a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/tx_recover.html|20010305004152|62754|132a354cde7a8286 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade/process.html|20010305004151|64704|78f9ca966a587234 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/config.html|20010305004152|64479|3f3f449c305e66b4 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/faq.html|20010305004152|65373|7aa890c7b70f1293 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/intro.html|20010305004152|00728|8ac020ffb869e9a8 +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/contact.html|20010305004152|04402|55b4da3d7bf7655b +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/legal.html|20010305004152|02616|7388af4c578cacf6 +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/license.html|20010305004152|03483|9371001bbf0ba2dd +tim@threads.polyesthetic.msg|bdb/docs/utility/berkeley_db_svc.html|20010305004152|06576|91fe012778882ce4 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_archive.html|20010305004152|07446|ab2c66e01b3e3626 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_checkpoint.html|20010305004152|08309|c040e4424edcc451 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_deadlock.html|20010305004152|09191|f23f99911c3e5784 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_dump.html|20010305004152|10062|5de7ade427f20332 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_load.html|20010305004152|10976|981095940db0197 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_printlog.html|20010305004152|11895|fcc4075ad0232842 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_recover.html|20010305004152|12771|1b63f2acdc0b0af7 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_stat.html|20010305004152|13652|9582c327964e1f9 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_upgrade.html|20010305004152|14532|6444f26a93f77ea +tim@threads.polyesthetic.msg|bdb/docs/utility/db_verify.html|20010305004152|15424|4fee9bfa2f9ab41a +tim@threads.polyesthetic.msg|bdb/docs/utility/index.html|20010305004152|05717|66c82ee036c1b369 +tim@threads.polyesthetic.msg|bdb/hash/hash_auto.c|20010305004137|61459|d17c6a6ed4f181d1 +tim@threads.polyesthetic.msg|bdb/include/btree_auto.h|20010305004137|17274|84d4451c78faf67e +tim@threads.polyesthetic.msg|bdb/include/btree_ext.h|20010305004137|18246|5d53d710f170c6b6 +tim@threads.polyesthetic.msg|bdb/include/clib_ext.h|20010305004137|19207|ed9d9f7965f0e1d3 +tim@threads.polyesthetic.msg|bdb/include/common_ext.h|20010305004137|20146|35c8aab64ee3b8fd +tim@threads.polyesthetic.msg|bdb/include/crdel_auto.h|20010305004137|21088|1b8255da47550ece +tim@threads.polyesthetic.msg|bdb/include/db_auto.h|20010305004137|26350|994ddc84db334345 +tim@threads.polyesthetic.msg|bdb/include/db_ext.h|20010305004137|29469|a1e210bbd0de0a48 +tim@threads.polyesthetic.msg|bdb/include/db_server.h|20010305004137|34247|61a33aa05bf368a7 +tim@threads.polyesthetic.msg|bdb/include/env_ext.h|20010305004138|05832|33a5fdef1aeecefd +tim@threads.polyesthetic.msg|bdb/include/gen_client_ext.h|20010305004138|06647|5c621cacb18b38 +tim@threads.polyesthetic.msg|bdb/include/gen_server_ext.h|20010305004138|07539|fd7bcfe6bbca8bcb +tim@threads.polyesthetic.msg|bdb/include/hash_auto.h|20010305004138|09216|1b79cdd426d7ef25 +tim@threads.polyesthetic.msg|bdb/include/hash_ext.h|20010305004138|10079|5b31ff8413481606 +tim@threads.polyesthetic.msg|bdb/include/lock_ext.h|20010305004138|11814|ccd0785bb206933f +tim@threads.polyesthetic.msg|bdb/include/log_auto.h|20010305004138|13513|8d52dd0884d03051 tim@threads.polyesthetic.msg|bdb/include/log_ext.h|20010305004138|14339|2988f11d4545c76b +tim@threads.polyesthetic.msg|bdb/include/mp_ext.h|20010305004138|17070|a528b772d42d6455 +tim@threads.polyesthetic.msg|bdb/include/mutex_ext.h|20010305004138|19006|f20f47ddc346598b +tim@threads.polyesthetic.msg|bdb/include/os_ext.h|20010305004138|20730|a1771032b4d2d53b +tim@threads.polyesthetic.msg|bdb/include/qam_auto.h|20010305004138|24568|96f6c045fd0d6cab +tim@threads.polyesthetic.msg|bdb/include/qam_ext.h|20010305004138|25430|9993db1fb3428b6d +tim@threads.polyesthetic.msg|bdb/include/rpc_client_ext.h|20010305004138|28220|85436ca9b5691338 +tim@threads.polyesthetic.msg|bdb/include/rpc_server_ext.h|20010305004138|29091|952741fb85de2b80 +tim@threads.polyesthetic.msg|bdb/include/tcl_ext.h|20010305004138|31857|6759d22aa2ff5f39 +tim@threads.polyesthetic.msg|bdb/include/txn_auto.h|20010305004138|33645|e3f49e94fd291c45 +tim@threads.polyesthetic.msg|bdb/include/txn_ext.h|20010305004138|34549|9db24c14f204890c tim@threads.polyesthetic.msg|bdb/include/xa_ext.h|20010305004138|36449|50918e5ef9f095b6 tim@threads.polyesthetic.msg|bdb/java/src/com/sleepycat/db/DbConstants.java|20010305004138|56622|15fa87eda6b72302 +tim@threads.polyesthetic.msg|bdb/log/log_auto.c|20010305004137|49459|fe8c0369965f7151 +tim@threads.polyesthetic.msg|bdb/qam/qam_auto.c|20010305004141|31764|361954d3f149feb0 +tim@threads.polyesthetic.msg|bdb/rpc_client/db_server_clnt.c|20010305004141|41933|b548b860f765c597 +tim@threads.polyesthetic.msg|bdb/rpc_client/gen_client.c|20010305004141|43060|ad86f092d0996a68 +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server.x|20010305004141|47705|811aeb6b630fe7aa +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_proc.sed|20010305004141|49906|1a9af8e5b051acbd +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_svc.c|20010305004141|50897|35804eb82b953f49 +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_xdr.c|20010305004141|53794|336ef020b4a22c05 +tim@threads.polyesthetic.msg|bdb/rpc_server/gen_db_server.c|20010305004141|54931|d5602f9bd5c930e +tim@threads.polyesthetic.msg|bdb/test/include.tcl|20010305004141|34016|20fc297b040cbe2 +tim@threads.polyesthetic.msg|bdb/test/logtrack.list|20010305004142|05743|7f4f1382b37d98e5 +tim@threads.polyesthetic.msg|bdb/txn/txn_auto.c|20010305004143|19863|6eb282f016f606d9 +tonu@x3.internalnet|include/vio.h|20010520213124|42404|c62fd2b86c03da7d diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 63acc19a75c..91e8e0ccb12 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -11,6 +11,7 @@ arjen@george.bitbike.com bar@bar.mysql.r18.ru bar@bar.udmsearch.izhnet.ru bell@sanja.is.com.ua +bk@admin.bk davida@isil.mysql.com heikki@donna.mysql.fi heikki@hundin.mysql.fi @@ -62,6 +63,7 @@ serg@build.mysql2.com serg@serg.mysql.com serg@sergbook.mysql.com sinisa@rhols221.adsl.netsonic.fi +tfr@beta.frontier86.ee tfr@indrek.tfr.cafe.ee tfr@sarvik.tfr.cafe.ee tim@bitch.mysql.fi @@ -82,4 +84,3 @@ worm@altair.is.lan zak@balfor.local zak@linux.local zgreant@mysql.com -tfr@beta.frontier86.ee diff --git a/BitKeeper/etc/skipkeys b/BitKeeper/etc/skipkeys new file mode 100644 index 00000000000..36b38ab1c21 --- /dev/null +++ b/BitKeeper/etc/skipkeys @@ -0,0 +1,7 @@ +BK|scripts/safe_mysqld.sh|19700101030959|01930|d0a3cc73fd1b0d8d tim@localhost.polyesthetic.msg|scripts/safe_mysqld.sh|20000802235627|38519 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe arjen@co3064164-a.bitbike.com|BitKeeper/etc/logging_ok|20011212060636|33009 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe sasha@work.mysql.com|BitKeeper/etc/logging_ok|20000802223223|24242 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe tim@localhost.polyesthetic.msg|BitKeeper/etc/logging_ok|20000802235640|27343 +bk@work.mysql.com|ChangeSet|20000731191004|44203|eae70093a6122e66+ sasha@work.mysql.com|ChangeSet|20000802223249|54774 +bk@work.mysql.com|ChangeSet|20000731191004|44203|eae70093a6122e66+ tim@localhost.polyesthetic.msg|ChangeSet|20000802235645|56533 From 165a8618d7e4f65532f5658d9b57788f18e7adbf Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Oct 2002 09:44:26 +0200 Subject: [PATCH 002/267] BK automatic LOD removal. BitKeeper/etc/skipkeys: auto add BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/gone | 2324 +++++++++++++++++++------------------- BitKeeper/etc/logging_ok | 1 + BitKeeper/etc/skipkeys | 7 + 3 files changed, 1171 insertions(+), 1161 deletions(-) create mode 100644 BitKeeper/etc/skipkeys diff --git a/BitKeeper/etc/gone b/BitKeeper/etc/gone index 03c7cacb8bc..5f2b9e1209d 100644 --- a/BitKeeper/etc/gone +++ b/BitKeeper/etc/gone @@ -1,8 +1,27 @@ BK|Build-tools/Do-compile-all|19700101030959|00060|f119832ce3aca102 +BK|Docs/Attic/myisam.doc|19700101030959|00502|519bb06ecc870298 +BK|Docs/Flags/island.eps|19700101030959|00181|8cec5a55768bc59e +BK|Docs/Flags/island.gif|19700101030959|00142|e274d5e96ee0975a +BK|Docs/Flags/island.txt|19700101030959|00220|301ede0f81c5f3e1 +BK|Docs/Flags/kroatia.eps|19700101030959|00185|f50fcd444e7efceb +BK|Docs/Flags/kroatia.gif|19700101030959|00146|bea7bbe0316d462d +BK|Docs/Flags/kroatia.txt|19700101030959|00224|dde7f89f25d616b2 +BK|Docs/Flags/south-africa1.eps|19700101030959|00193|111e4f92f4562e9d +BK|Docs/Flags/south-africa1.gif|19700101030959|00154|1ea38de5a535f732 +BK|Docs/Flags/south-africa1.txt|19700101030959|00232|87a53fdcd2149c6e +BK|client/Attic/libmysql.c|19700101030959|00582|72949a7043113807 +BK|client/Attic/net.c|19700101030959|00583|c18042da6fa4e693 BK|client/mysql-test.c|19700101030959|00560|809ade45d58e28ab +BK|client/violite.c|19700101030959|00561|afa871b4aab14371 BK|config.h.in|19700101030959|00050|aecae693cca472c +BK|extra/Attic/print_defaults.c|19700101030959|01513|362952979aa7b330 +BK|include/Attic/config-win32.h|19700101030959|00116|65db818ec7e8f21b +BK|include/Attic/m_ctype.h.in|19700101030959|00114|f671e3c2d611ba97 +BK|include/Attic/mysql_com.h.in|19700101030959|00115|85b1ea7ced528c32 BK|include/my_global.h|19700101030959|00105|f657f708961a4632 BK|libmysql/acconfig.h|19700101030959|02604|7b620dbd69ea6074 +BK|libmysql/configure.in|19700101030959|02603|c6fc04d4e3d6e291 +BK|libmysql/violite.c|19700101030959|02600|984c09cffe14a11b BK|mit-pthreads/config.flags|19700101030959|00594|dcec5296ef811cd6 BK|mit-pthreads/machdep/i386-sco-3.2v5/__math.h|19700101030959|01011|79d9a37715f2c7fe BK|mit-pthreads/machdep/i386-sco-3.2v5/__signal.h|19700101030959|01012|45332b2a56f62580 @@ -32,9 +51,15 @@ BK|mit-pthreads/machdep/sco-3.2v5/socket.h|19700101030959|00980|1b409f3f1fcbbf7a BK|mit-pthreads/machdep/sco-3.2v5/syscall.h|19700101030959|00981|c69bd58eba4d5076 BK|mit-pthreads/machdep/sco-3.2v5/timers.h|19700101030959|00982|4907a958151368ed BK|mit-pthreads/machdep/sco-3.2v5/trash.can|19700101030959|00983|7eecac9fc944ade2 +BK|mit-pthreads/pg++|19700101030959|00597|3beac0502025d766 +BK|mit-pthreads/pgcc|19700101030959|00596|154a03d0c1a0a600 +BK|myisam/Attic/ft_global.h|19700101030959|01673|fe46fb515f1e375 BK|myisam/common_words|19700101030959|01665|13c10ef32aaa7537 +BK|myisam/ft_search.c|19700101030959|01642|c011cb6e8041bb59 BK|myisam/mi_test_all|19700101030959|01666|ae7a366c45527b4e +BK|mysql.proj|19700101030959|00071|3e34edc585d18be8 BK|mysys/mf_reccache.c|19700101030959|01419|f8191c8485e158fe +BK|mysys/test_vsnprintf.c|19700101030959|01502|e3d568aca62dc81e BK|sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686-cmp-interbase,mysql|19700101030959|02361|6a0a837742a861bb BK|sql-bench/Results-linux/ATIS-interbase-Linux_2.2.14_5.0_i686|19700101030959|02348|e87091e2a6dce931 BK|sql-bench/Results-linux/ATIS-mysql-Linux_2.0.33_i586-cmp-access,mysql|19700101030959|02326|70981cb1dd58d3fb @@ -161,10 +186,21 @@ BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.12_20smp_i686|1970010103095 BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.13_SMP_alpha|19700101030959|02347|ad7babd436f26841 BK|sql-bench/Results-linux/wisconsin-mysql-Linux_2.2.14_5.0_i686-cmp-interbase,mysql|19700101030959|02442|74b238eca114dbbe BK|sql-bench/Results-linux/wisconsin-mysql_fast-Linux_2.2.13_SMP_alpha|19700101030959|02451|6ad065fe4c6b4fa9 +BK|sql-bench/Results-win32/ATIS-mysql-win98|19700101030959|02523|cd0705815d3af451 +BK|sql-bench/Results-win32/RUN-mysql-win98|19700101030959|02526|7f09e396772a8665 +BK|sql-bench/Results-win32/alter-table-mysql-win98|19700101030959|02529|e8743982f790462 +BK|sql-bench/Results-win32/big-tables-mysql-win98|19700101030959|02532|99a1882effebbdf2 +BK|sql-bench/Results-win32/connect-mysql-win98|19700101030959|02535|2a11d5e3dfc0bc67 +BK|sql-bench/Results-win32/create-mysql-win98|19700101030959|02538|f66c2cb2909c4792 +BK|sql-bench/Results-win32/insert-mysql-win98|19700101030959|02541|6d6cafc85a6c837 +BK|sql-bench/Results-win32/select-mysql-win98|19700101030959|02544|f370fac2d66a9faf +BK|sql-bench/Results-win32/wisconsin-mysql-win98|19700101030959|02547|8b3da9c5c5d2365b +BK|sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686|19700101030959|02022|660fb76ed6ccfb6f 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.6_sun4m|19700101030959|02032|62028e0375b3b8b +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 BK|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02313|8c6fc2968f78773 @@ -223,77 +259,258 @@ BK|sql-bench/Results/Attic/wisconsin-mysql-Linux_2.2.1_i686-cmp-mysql,pg|1970010 BK|sql-bench/Results/Attic/wisconsin-mysql_fast-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02218|b4e89cdac0620cba BK|sql-bench/Results/Attic/wisconsin-pg-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02219|7d641554f51cf45a BK|sql-bench/Results/Attic/wisconsin-pg_fast-Linux_2.2.10_i686-cmp-mysql,pg|19700101030959|02220|db31ec971b4c5051 +BK|sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686|19700101030959|02050|f6fdd64859e11de9 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.6_sun4m|19700101030959|02059|eafc8188345e262b +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 BK|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02046|a910a9b3fde431e1 BK|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02165|e0f060fdbf92325e +BK|sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686|19700101030959|02073|f6f7ccd7b3c35f97 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.6_sun4m|19700101030959|02088|8a1bd6589a189890 +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 BK|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02094|4e02d36dc17ecbfa BK|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02233|b8721431b356177 +BK|sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686|19700101030959|02106|baa649caba113497 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.6_sun4m|19700101030959|02116|f351a7f3e1e2257e +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 BK|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02122|a442a8aff47fae20 BK|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02235|e5a33639e51290fd +BK|sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686|19700101030959|02134|c0c26d4320182d85 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.6_sun4m|19700101030959|02143|a10e3ddfa26a3e7f +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 BK|sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02086|1d95d36fd717990 BK|sql-bench/Results/connect-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02244|f6ab4d00b0ae09c1 +BK|sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686|19700101030959|02158|51581b24f45e0f5c 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.6_sun4m|19700101030959|02221|9233114ae6f8c5f +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 BK|sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02112|a140e5e229a53b7b BK|sql-bench/Results/create-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02246|177fd39cc1d298a8 +BK|sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686|19700101030959|02239|fd082017c7c57a6 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.6_sun4m|19700101030959|02248|3402d060ae20e19 +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 BK|sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02148|e65dd14f2ed9abbf BK|sql-bench/Results/insert-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02259|b5bf77586c18d2b5 +BK|sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686|19700101030959|02265|ed3687e713ff0571 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.6_sun4m|19700101030959|02274|4da215905bce988d +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 BK|sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02254|f9ab7726ff14ea90 BK|sql-bench/Results/select-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02261|188d6b5b72d8e0a +BK|sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686|19700101030959|02290|8147dc16a1dc6c47 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.6_sun4m|19700101030959|02298|ec61b14072715dc8 +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 BK|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686-cmp-mysql,pg|19700101030959|02295|ec361eee4f4128cd BK|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_5.0_i686|19700101030959|02270|ef201ca14f635c57 +BK|sql/Attic/lex_hash.h|19700101030959|01912|14f912771118b50c +BK|sql/Attic/mini_client.c|19700101030959|01910|9a3778c387d06a81 +BK|sql/Attic/mini_client_errors.c|19700101030959|01909|29edad51a5d0b068 +BK|sql/Attic/mybinlogdump.cc|19700101030959|01908|5dbdd2bde98d6169 +BK|sql/Attic/net_serv.c|19700101030959|01911|52dabcd773a39e10 +BK|sql/ha_hash.h|19700101030959|01902|27e36916116beb3e +BK|sql/share/czech/errmsg.sys|19700101030959|01828|93104a2bd5c732a +BK|sql/share/danish/errmsg.sys|19700101030959|01831|3a6d0fb8451a3313 +BK|sql/share/dutch/errmsg.sys|19700101030959|01833|b5aff4d08478bafd +BK|sql/share/english/errmsg.sys|19700101030959|01834|f29bd4ea5aaf54c8 +BK|sql/share/estonia/errmsg.sys|19700101030959|01836|83b86d7ed4cdd5d0 +BK|sql/share/french/errmsg.sys|19700101030959|01838|9f024dc5e6fe50f5 +BK|sql/share/german/errmsg.sys|19700101030959|01840|1ea60675399c84c +BK|sql/share/greek/errmsg.sys|19700101030959|01842|fedf585fa73e7cf1 +BK|sql/share/hungarian/errmsg.sys|19700101030959|01845|aff82c16a77fc800 +BK|sql/share/italian/errmsg.sys|19700101030959|01846|c5108ecb850b79a +BK|sql/share/japanese/errmsg.sys|19700101030959|01848|302478c84697dc00 +BK|sql/share/korean/errmsg.sys|19700101030959|01850|a30e3687ae75a7c9 +BK|sql/share/norwegian-ny/.cvsignore|19700101030959|01855|469064b5190d703d +BK|sql/share/norwegian/.cvsignore|19700101030959|01853|a91d63182f0b2366 +BK|sql/share/polish/errmsg.sys|19700101030959|01857|126b03af92054f0f +BK|sql/share/portuguese/errmsg.sys|19700101030959|01859|c0187322f8c9d805 +BK|sql/share/romania/errmsg.sys|19700101030959|01871|e08aa93bae96d25e BK|sql/share/romanian/errmsg.sys|19700101030959|01869|9d8282efb437e8cc BK|sql/share/romanian/errmsg.txt|19700101030959|01870|2c64fb13a8f104ad +BK|sql/share/russian/errmsg.sys|19700101030959|01860|72688df0beeabcb3 +BK|sql/share/slovak/errmsg.sys|19700101030959|01862|148510616ae825cf +BK|sql/share/spanish/errmsg.sys|19700101030959|01865|10c8f32da39070b2 +BK|sql/share/swedish/errmsg.sys|19700101030959|01866|dd772e93db859993 +BK|sql/violite.c|19700101030959|01738|d7b85be615595ace +BK|strings/Attic/bootstrap-ctype.c|19700101030959|01360|6d2a8cda2d6a35ff +BK|strings/Attic/ct_init.c|19700101030959|01338|f0948bdd35ceedc3 +BK|strings/Attic/ctype-cp1251.c|19700101030959|01339|cdf74b9168408b3 +BK|strings/Attic/ctype-cp1257.c|19700101030959|01340|732611cbc74aeafc +BK|strings/Attic/ctype-croat.c|19700101030959|01341|d2d805ee6f10cbcc +BK|strings/Attic/ctype-danish.c|19700101030959|01342|dc5451066eb272ae +BK|strings/Attic/ctype-dec8.c|19700101030959|01343|68f257dd2202d0c7 +BK|strings/Attic/ctype-dos.c|19700101030959|01344|f77bd08acf13a8c1 +BK|strings/Attic/ctype-estonia.c|19700101030959|01345|fc8a69424f7cb66b +BK|strings/Attic/ctype-german1.c|19700101030959|01346|f7830c509bb358f7 +BK|strings/Attic/ctype-greek.c|19700101030959|01347|90acdff1195209ca +BK|strings/Attic/ctype-hebrew.c|19700101030959|01348|d3b4a000d51e76dc +BK|strings/Attic/ctype-hp8.c|19700101030959|01349|749e1be0f028d349 +BK|strings/Attic/ctype-hungarian.c|19700101030959|01350|5cf0bf7fa0312637 +BK|strings/Attic/ctype-koi8_ru.c|19700101030959|01351|8ff4188c642c9bd +BK|strings/Attic/ctype-koi8_ukr.c|19700101030959|01352|a04aa14a6d62335a +BK|strings/Attic/ctype-latin1.c|19700101030959|01353|cc63880f19c2303e +BK|strings/Attic/ctype-latin2.c|19700101030959|01354|31895c4b83654342 +BK|strings/Attic/ctype-swe7.c|19700101030959|01355|bb1b012225d7d02c +BK|strings/Attic/ctype-usa7.c|19700101030959|01356|d19d859dca5675f +BK|strings/Attic/ctype-win1250.c|19700101030959|01357|1ce7a24255780a1 +BK|strings/Attic/ctype-win1251.c|19700101030959|01358|762607f4fd7d52ad +BK|strings/Attic/ctype-win1251ukr.c|19700101030959|01359|b5a7cca889bbef58 +BK|strings/Attic/ctype.c.in|19700101030959|01361|8bf48d4bcbc5f675 +BK|strings/Attic/memory.h|19700101030959|01336|450f586e82a26d99 +BK|strings/Attic/ptr_cmp.c|19700101030959|01337|57e682a26e769597 +BK|strings/READ-ME|19700101030959|01362|ed6c5184d4bf6b7c +BK|support-files/Attic/my-example.cnf.sh|19700101030959|02584|87a7e1f4d24b62a9 +BK|support-files/Attic/my-huge.cfg.sh|19700101030959|02585|589bdcd2d2c4360b +BK|support-files/Attic/my-large.cfg.sh|19700101030959|02586|842c8e76253c9396 +BK|support-files/Attic/my-medium.cfg.sh|19700101030959|02587|c49880d26ef0648e +BK|support-files/Attic/my-small.cfg.sh|19700101030959|02588|85023c559a1d96c +BK|tests/fork3_test.pl|19700101030959|01947|c4a7bffb4f8e813c +BK|tests/fork_test.pl|19700101030959|01945|3d3535329ed8cd5e +BK|vio/Vio.cc|19700101030959|00003|60737ce02ab2bc25 +BK|vio/Vio.h|19700101030959|00004|f4416b2949647602 +BK|vio/VioAcceptorFd.cc|19700101030959|00005|a5a08947a31f88de +BK|vio/VioAcceptorFd.h|19700101030959|00006|7f9c4358477ba9a3 +BK|vio/VioConnectorFd.cc|19700101030959|00007|ddbd7821c43c83a2 +BK|vio/VioConnectorFd.h|19700101030959|00008|58bc11cdc885b951 +BK|vio/VioFd.cc|19700101030959|00009|6e444647affef63b +BK|vio/VioFd.h|19700101030959|00010|8294293a88c7b4b8 +BK|vio/VioPipe.cc|19700101030959|00011|12cf83b9a2f48f6c +BK|vio/VioPipe.h|19700101030959|00012|21cebbe61a1da546 +BK|vio/VioSSL.cc|19700101030959|00013|6e85340b11fa42a8 +BK|vio/VioSSL.h|19700101030959|00014|70d367b7ec8cac3e +BK|vio/VioSSLAcceptorFd.cc|19700101030959|00015|4c828f3688ed74ec +BK|vio/VioSSLFactoriesFd.cc|19700101030959|00016|89f6bf5073937947 +BK|vio/VioSSLFactoriesFd.h|19700101030959|00017|1d63ae149a63f85 +BK|vio/VioSocket.cc|19700101030959|00018|71c615783f29b5e1 +BK|vio/VioSocket.h|19700101030959|00019|a26d535bd5a1a6 +BK|vio/version.cc|19700101030959|00020|7237acf12bed4a97 +BK|vio/vio-global.h|19700101030959|00021|c261412c01b2f4 +BK|vio/vioelitexx.cc|19700101030959|00022|3eaba70da792a7fc +BK|vio/violite.h|19700101030959|00023|58d2942a52ea7a83 +BK|vio/viotypes.h|19700101030959|00027|f5a38e7326bd50f3 +Sinisa@sinisa.nasamreza.org|=6|20010818122920|53462|33f33b0a159dc5d5 +Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522121240|20995|360af2095c88cb8c +Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522133259|25000|4b5fbc60d0d9754f +Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133300|08911|21904fbd1c95cb1 +Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133624|23665|445526a8a20de101 +Sinisa@sinisa.nasamreza.org|scripts/mysql_new_fix_privilege_tables.sh|20011226144909|43765|b1664b401375eece +arjen@co3064164-a.bitbike.com|BitKeeper/etc/logging_ok|20011212060636|33009 +arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614|692b647b +arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d +ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 +ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 +jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec +jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 +miguel@hegel.local|zlib/ChangeLog|20020319032513|28917|5d5425fc84737083 miguel@hegel.local|zlib/Make_vms.com|20020319032513|57151|35050a50ec612bbf miguel@hegel.local|zlib/Makefile.riscos|20020319032513|63798|8ab53f195fe429af +miguel@hegel.local|zlib/adler32.c|20020319032513|04487|f98728c6da1ac164 +miguel@hegel.local|zlib/algorithm.txt|20020319032513|12903|fbc4dda3d31c2005 miguel@hegel.local|zlib/amiga/Makefile.pup|20020319032513|19225|6a9ee8128d11541f miguel@hegel.local|zlib/amiga/Makefile.sas|20020319032513|25562|d7128ac7e0946f0b +miguel@hegel.local|zlib/compress.c|20020319032513|32512|70bccb304651dba9 +miguel@hegel.local|zlib/contrib/README.contrib|20020319032514|04353|24cb75bee0a061fb +miguel@hegel.local|zlib/contrib/asm386/gvmat32.asm|20020319032514|12654|31093c1a846dfdc7 +miguel@hegel.local|zlib/contrib/asm386/gvmat32c.c|20020319032514|19182|2a8eba5481c46eab +miguel@hegel.local|zlib/contrib/asm386/mkgvmt32.bat|20020319032514|25425|422cbe16a6e74695 +miguel@hegel.local|zlib/contrib/asm386/zlibvc.def|20020319032514|31637|605ee23b8a4a6a1a +miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsp|20020319032514|38372|a1c6749052ce48a +miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsw|20020319032514|44870|3209982720f131ab +miguel@hegel.local|zlib/contrib/asm586/match.s|20020319032514|51538|dc1a34b5eb2a7c11 +miguel@hegel.local|zlib/contrib/asm586/readme.586|20020319032514|57815|f60bfeefb27217d +miguel@hegel.local|zlib/contrib/asm686/match.s|20020319032514|64199|4164951e8e19f116 +miguel@hegel.local|zlib/contrib/asm686/readme.686|20020319032514|04933|15e2bf4653b71f3e +miguel@hegel.local|zlib/contrib/delphi/zlib.mak|20020319032514|11153|7b97eb8cf290a42 +miguel@hegel.local|zlib/contrib/delphi/zlibdef.pas|20020319032514|18918|658cb04db561e3db +miguel@hegel.local|zlib/contrib/delphi2/d_zlib.bpr|20020319032514|25335|c267d77cc2e2a2c8 +miguel@hegel.local|zlib/contrib/delphi2/d_zlib.cpp|20020319032514|31641|d6f37620ac7b27fa +miguel@hegel.local|zlib/contrib/delphi2/readme.txt|20020319032515|03494|65d16837f8579e23 +miguel@hegel.local|zlib/contrib/delphi2/zlib.bpg|20020319032515|09768|93c030edcca1838 +miguel@hegel.local|zlib/contrib/delphi2/zlib.bpr|20020319032515|16113|7a2fa98af2345144 +miguel@hegel.local|zlib/contrib/delphi2/zlib.cpp|20020319032515|22372|4257437d415259e2 +miguel@hegel.local|zlib/contrib/delphi2/zlib.pas|20020319032515|28965|3c94d3f5262cbbdd +miguel@hegel.local|zlib/contrib/delphi2/zlib32.bpr|20020319032515|35585|41ac53acb8008ff7 +miguel@hegel.local|zlib/contrib/delphi2/zlib32.cpp|20020319032515|41979|3b0f51435e880afe +miguel@hegel.local|zlib/contrib/iostream/test.cpp|20020319032515|48225|a2ea8d4d7c66cf71 +miguel@hegel.local|zlib/contrib/iostream/zfstream.cpp|20020319032515|55262|dce18d1a5d7096b7 +miguel@hegel.local|zlib/contrib/iostream/zfstream.h|20020319032515|61553|2b4d88acc2d3b714 +miguel@hegel.local|zlib/contrib/iostream2/zstream.h|20020319032515|02537|351f26518ea48196 +miguel@hegel.local|zlib/contrib/iostream2/zstream_test.cpp|20020319032515|08848|63f635d540de8c48 +miguel@hegel.local|zlib/contrib/minizip/ChangeLogUnzip|20020319032515|15183|50464416f4a3768f +miguel@hegel.local|zlib/contrib/minizip/miniunz.c|20020319032515|21943|6a80009b319b1b9e +miguel@hegel.local|zlib/contrib/minizip/minizip.c|20020319032515|28588|97181367a7bc47d8 +miguel@hegel.local|zlib/contrib/minizip/readme.txt|20020319032516|00611|7547b986c067c008 +miguel@hegel.local|zlib/contrib/minizip/unzip.c|20020319032516|07891|c66c95e17321206d +miguel@hegel.local|zlib/contrib/minizip/unzip.def|20020319032516|14456|b4162b8c833ab6c7 +miguel@hegel.local|zlib/contrib/minizip/unzip.h|20020319032516|21001|bac981086af91a30 +miguel@hegel.local|zlib/contrib/minizip/zip.c|20020319032516|27911|e82bf7774e1ece95 +miguel@hegel.local|zlib/contrib/minizip/zip.def|20020319032516|34413|e9bda2081d65c22e +miguel@hegel.local|zlib/contrib/minizip/zip.h|20020319032516|40925|17fd39ccb4ea294c +miguel@hegel.local|zlib/contrib/minizip/zlibvc.def|20020319032516|47259|6dc42f99d2d55cad +miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsp|20020319032516|54044|ec35fd54c9b49987 +miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsw|20020319032516|60515|17f28194a5cd80ea miguel@hegel.local|zlib/contrib/untgz/makefile.w32|20020319032516|01267|2c584f05a16db4ba +miguel@hegel.local|zlib/contrib/untgz/untgz.c|20020319032516|07726|b74e9dde74642756 +miguel@hegel.local|zlib/contrib/visual-basic.txt|20020319032516|14096|cd461e762199bb09 +miguel@hegel.local|zlib/crc32.c|20020319032516|20397|b327da5b8cf9eae8 +miguel@hegel.local|zlib/deflate.c|20020319032516|26978|e22894a54233bc25 +miguel@hegel.local|zlib/deflate.h|20020319032516|33700|3a012bc1f5dfbc74 +miguel@hegel.local|zlib/descrip.mms|20020319032517|08063|7d61d33062ef53ec +miguel@hegel.local|zlib/example.c|20020319032517|14327|490f57a4a9440dfa +miguel@hegel.local|zlib/faq|20020319032517|20799|b0d0840d3b9faf07 +miguel@hegel.local|zlib/gzio.c|20020319032517|27098|e02d23e656c19359 +miguel@hegel.local|zlib/index|20020319032517|33542|5443c9f841db4a47 +miguel@hegel.local|zlib/infblock.c|20020319032517|39853|540cc1b743be5f58 +miguel@hegel.local|zlib/infblock.h|20020319032517|46202|4526bc327b4160ab +miguel@hegel.local|zlib/infcodes.c|20020319032517|52620|dffb42fdf2fb2372 +miguel@hegel.local|zlib/infcodes.h|20020319032517|58960|3a02220a89c9a4fa +miguel@hegel.local|zlib/inffast.c|20020319032517|65269|bf247ff4aa2bf54b +miguel@hegel.local|zlib/inffast.h|20020319032517|06651|215e4a4ccfc886fc +miguel@hegel.local|zlib/inffixed.h|20020319032517|12923|e86ef8e2efe23f77 +miguel@hegel.local|zlib/inflate.c|20020319032517|19311|fb22a3a1ab6fb1a0 +miguel@hegel.local|zlib/inftrees.c|20020319032517|25758|4fcb97357cdbc40 +miguel@hegel.local|zlib/inftrees.h|20020319032517|32227|ffcbe51816466e5c +miguel@hegel.local|zlib/infutil.c|20020319032518|05244|a9b414f0f4ea0868 +miguel@hegel.local|zlib/infutil.h|20020319032518|12977|13089e09be34788c +miguel@hegel.local|zlib/maketree.c|20020319032518|19299|7f281aef3547fee +miguel@hegel.local|zlib/minigzip.c|20020319032518|25601|37f8eacb80c7f8fc miguel@hegel.local|zlib/msdos/Makefile.b32|20020319032518|33760|86772037f3344353 miguel@hegel.local|zlib/msdos/Makefile.bor|20020319032518|40099|7aa9edaac099cdb9 miguel@hegel.local|zlib/msdos/Makefile.dj2|20020319032518|46371|ca26f5fe96e3e999 @@ -302,11 +519,32 @@ miguel@hegel.local|zlib/msdos/Makefile.msc|20020319032518|59050|1bb69abdddf390f2 miguel@hegel.local|zlib/msdos/Makefile.tc|20020319032518|65341|2a9dff916115ae77 miguel@hegel.local|zlib/msdos/Makefile.w32|20020319032518|06083|8d84523c1dcdc0f7 miguel@hegel.local|zlib/msdos/Makefile.wat|20020319032518|12471|82f8714d825e97e3 +miguel@hegel.local|zlib/msdos/zlib.def|20020319032518|18787|165cd7dcff6ac9f +miguel@hegel.local|zlib/msdos/zlib.rc|20020319032518|25240|f8a286fa8371ee09 miguel@hegel.local|zlib/nt/Makefile.emx|20020319032518|31715|7e9fcf6f5ad2e51a miguel@hegel.local|zlib/nt/Makefile.gcc|20020319032519|03630|351fa8bd15c704b9 miguel@hegel.local|zlib/nt/Makefile.nt|20020319032519|09990|ee461a3dd393a061 +miguel@hegel.local|zlib/nt/zlib.dnt|20020319032519|16279|22a0ed3b86ff8c2 miguel@hegel.local|zlib/os2/Makefile.os2|20020319032519|22554|7a05f2a27812703a +miguel@hegel.local|zlib/os2/zlib.def|20020319032519|28842|1166a95d83c5f52c +miguel@hegel.local|zlib/readme|20020319032519|35257|80a41fc822f5f4 +miguel@hegel.local|zlib/trees.c|20020319032519|43770|4fbd4d005e26d38 +miguel@hegel.local|zlib/trees.h|20020319032519|50674|87161133bc2155fd +miguel@hegel.local|zlib/uncompr.c|20020319032519|57111|82eac43195d1222c +miguel@hegel.local|zlib/zconf.h|20020319032519|63437|c6b6b636c7e88d90 +miguel@hegel.local|zlib/zlib.3|20020319032519|04298|ec5cb4f64476f6a +miguel@hegel.local|zlib/zlib.dsp|20020319032519|12016|6eec436fab260061 +miguel@hegel.local|zlib/zlib.html|20020319032519|31060|7a635f4ac95fc56b +miguel@hegel.local|zlib/zlib.h|20020319032519|20598|fbec7833981c782f +miguel@hegel.local|zlib/zutil.c|20020319032520|05372|6f0d1763c5deb409 +miguel@hegel.local|zlib/zutil.h|20020319032520|12556|1e431b0173278fb2 +mikef@nslinux.bedford.progress.com|mysql-test/include/have_gemini.inc|20010321203410|40631|42f94f0dfd0f7b18 +mikef@nslinux.bedford.progress.com|mysql-test/r/have_gemini.require|20010321203410|47052|206702c48b2e206b +monty@donna.mysql.com|innobase/ib_config.h.in|20010217121901|07616|9e57db8504e55b7 +monty@donna.mysql.com|innobase/ib_config.h|20010217121901|04019|7539e26ffc614439 monty@donna.mysql.com|myisam/mi_debug.c|20000829092809|23459|873a6e7d6ff8297c +monty@donna.mysql.com|mysql-test/include/have_default_master.inc|20010104005638|23980|a54c86e65a6c4af +monty@donna.mysql.com|mysql-test/r/have_default_master.require|20010104005638|27332|1465255ffdaf82f monty@donna.mysql.com|sql-bench/Results-linux/ATIS-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|34755|45d7837423db243f monty@donna.mysql.com|sql-bench/Results-linux/ATIS-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|37262|2274651e29d38b07 monty@donna.mysql.com|sql-bench/Results-linux/RUN-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|39831|a6ef8229d40b75d1 @@ -325,7 +563,97 @@ monty@donna.mysql.com|sql-bench/Results-linux/select-mysql_dbug-Linux_2.2.14_my_ monty@donna.mysql.com|sql-bench/Results-linux/select-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|07610|cffd7d282a90113a monty@donna.mysql.com|sql-bench/Results-linux/wisconsin-mysql_dbug-Linux_2.2.14_my_SMP_i686|20001218140918|10615|8dcd7271a9137341 monty@donna.mysql.com|sql-bench/Results-linux/wisconsin-mysql_dbug_full-Linux_2.2.14_my_SMP_i686|20001218140918|13213|4398328883aa75da +monty@donna.mysql.com|sql-bench/Results/ATIS-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14134|cf0d806760eefef2 +monty@donna.mysql.com|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14777|e625af7f600bf930 +monty@donna.mysql.com|sql-bench/Results/RUN-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15344|d922a0fcc1009130 +monty@donna.mysql.com|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15933|840503a555e420ec +monty@donna.mysql.com|sql-bench/Results/alter-table-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|16525|2f516d2c108a9e05 +monty@donna.mysql.com|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17106|6e532c1936df1737 +monty@donna.mysql.com|sql-bench/Results/big-tables-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17709|6d8209bf72b663ed +monty@donna.mysql.com|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18309|c87333d6fe04433e +monty@donna.mysql.com|sql-bench/Results/connect-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18910|7ed15d6fd1a5944c +monty@donna.mysql.com|sql-bench/Results/connect-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|19522|ab58fffa30dce97e +monty@donna.mysql.com|sql-bench/Results/create-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20136|241c337935ae1524 +monty@donna.mysql.com|sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20766|4e5a2ab4907748d4 +monty@donna.mysql.com|sql-bench/Results/insert-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22042|27b7a557c3cb07a +monty@donna.mysql.com|sql-bench/Results/insert-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22723|a85a6f0477c13f83 +monty@donna.mysql.com|sql-bench/Results/select-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|23395|8ef771713f89e1 +monty@donna.mysql.com|sql-bench/Results/select-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24071|4f7795c27eaab86b +monty@donna.mysql.com|sql-bench/Results/wisconsin-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24748|6a468dcd3e6f5405 +monty@donna.mysql.com|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|25437|24a02e007a58bf73 +monty@donna.mysql.fi|sql/violite.c|20010523223654|08838|53d4251a69d3c +monty@hundin.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|32241|dd306b2e583ebde4 +monty@hundin.mysql.fi|sql-bench/Results/ATIS-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|59551|d002b0bc548ff8b3 +monty@hundin.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|35759|11038a44f73070e7 +monty@hundin.mysql.fi|sql-bench/Results/RUN-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|63204|e938a858bd12aa8d +monty@hundin.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|39143|662b96bc66bc91b6 +monty@hundin.mysql.fi|sql-bench/Results/alter-table-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|01419|14360865bbba479f +monty@hundin.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|42711|788ad492867b1226 +monty@hundin.mysql.fi|sql-bench/Results/big-tables-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|05113|b6be70bb51013cad +monty@hundin.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|46284|5316add301edb60 +monty@hundin.mysql.fi|sql-bench/Results/connect-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|08804|1b715c6fd72e913e +monty@hundin.mysql.fi|sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|49804|26e09af61f88d8c9 +monty@hundin.mysql.fi|sql-bench/Results/create-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|12309|f3b1d326092bf44 +monty@hundin.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|53328|fd2699adb3190d07 +monty@hundin.mysql.fi|sql-bench/Results/insert-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|15984|a0143553cccb54e2 +monty@hundin.mysql.fi|sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|56860|b01175ad38fd12b6 +monty@hundin.mysql.fi|sql-bench/Results/select-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|19688|4ffc9cf4be665ea2 +monty@hundin.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|60398|8ba598d217450157 +monty@hundin.mysql.fi|sql-bench/Results/wisconsin-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|23386|1ed1dc6abd24e7e3 +monty@hundin.mysql.fi|support-files/make_mysql_pkg.sh|20010915122456|03682|c616a18bed4b9c2 +monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|04677|f761da5546f0d362 +monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|07879|2ac8fe298953d43 +monty@narttu.mysql.com|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|09727|79ac0482599eace1 +monty@narttu.mysql.com|sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171904|13285|a88e954bc8de5460 +monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|11725|dfc480becae45236 +monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|13605|ee94f987797ca948 +monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|15583|a2a77f37b689cd63 +monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|17580|28b688e2cd4b6bb3 +monty@narttu.mysql.com|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|19531|7dd5ac726f86cf0b +monty@narttu.mysql.com|sql-bench/Results/connect-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|21574|1cf5d5f0d70a3fa0 +monty@narttu.mysql.com|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|23516|441a6aefd381e319 +monty@narttu.mysql.com|sql-bench/Results/create-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|25516|fc207468e871ff69 +monty@narttu.mysql.com|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|27509|d12a7edef05d7185 +monty@narttu.mysql.com|sql-bench/Results/insert-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|29606|975e26cac59161fa +monty@narttu.mysql.com|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|33684|ddcf36cdf3f72e8c +monty@narttu.mysql.com|sql-bench/Results/select-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|35818|34a39fbcb58d8945 +monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|37931|2db07249379f36 +monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|40155|8101a5823c17e58a +monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha|20001014001004|08145|21ddf9425cbdd58 +monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|06287|d275df58a04737c8 +monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha|20001014001004|13092|583091e05a25fb6 +monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|21374|d4766c7f8e70d7a2 +monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha|20001014001004|15829|6c20c9ef46f82241 +monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|25875|155a83b53c0e9d6 +monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha|20001014001004|18602|e8cc899bb933532f +monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|30548|f1127add9307098b +monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha|20001014001004|21372|84df7c6446e51e26 +monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|00237|45d2cdf9bea9cc37 +monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha|20001014001004|23947|2c9af91e9771f618 +monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|04134|d46860c29c5d51ee +monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha|20001014001004|26814|688809eb8ea77b3d +monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|07880|e1771e0a164bc310 +monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha|20001014001004|29737|db59425a7f4aa93f +monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|11605|ee2a063d66a183d +monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha|20001014001004|32465|fc410754151d622c +monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|15116|b7552710d35202b6 +monty@work.mysql.com|fs/fsck.mysql|20010411110350|07619|87170d4358b50d60 +monty@work.mysql.com|libmysqld/README|20010411110351|24268|434e9cae5fa9a4c4 +monty@work.mysql.com|libmysqld/WHITEPAPER|20010411110351|28263|da1226799debcf3f +mwagner@cash.mwagner.org|Docs/include.de.texi|20020223092123|06028|112aac21b3489888 +mwagner@evoq.home.mwagner.org|Docs/Books/algor.eps|20001231203219|20480|481984607c98d715 +mwagner@evoq.home.mwagner.org|Docs/Books/dbi.eps|20001231203219|30594|6ad58f9457e2a564 +mwagner@evoq.home.mwagner.org|Docs/Books/dubois.eps|20001231203219|33725|aa3d9c08bbcc149b +mwagner@evoq.home.mwagner.org|Docs/Books/ecomm.eps|20001231203220|02445|58ae914b5d5ea49 +mwagner@evoq.home.mwagner.org|Docs/Books/in_21.eps|20001231203220|05743|83a7604251d68ebd +mwagner@evoq.home.mwagner.org|Docs/Books/manual.eps|20001231203220|09365|2a7145f88960c7ec +mwagner@evoq.home.mwagner.org|Docs/Books/msql.eps|20001231203220|12487|ffe7d62847663250 +mwagner@evoq.home.mwagner.org|Docs/Books/prof.eps|20001231203220|15779|dc69b039543a57d7 +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|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 mwagner@evoq.home.mwagner.org|mysql-test/mybin/stop-mysqld|20001016055653|20710|89a1194045f05d1c mwagner@evoq.home.mwagner.org|mysql-test/mybin/translate-tests|20001018130217|00206|3869c1fdf0a5ea1a @@ -365,7 +693,44 @@ mwagner@evoq.home.mwagner.org|mysql-test/var/lib/README|20001009213643|15351|3b6 mwagner@evoq.home.mwagner.org|mysql-test/var/log/README|20001009213643|16203|df5481fdbe6e5b6e mwagner@evoq.home.mwagner.org|mysql-test/var/run/README|20001009213643|17062|acb305e4c2ed5990 mwagner@evoq.home.mwagner.org|mysql-test/var/tmp/README|20001009213643|17904|b32d866bfd50e72e +mwagner@evoq.home.mwagner.org|mysql-test/xml/README|20001013051440|12362|877d76bcd19f7193 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000001.xml|20001013051507|22498|f0eb64c0346366db +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000002.xml|20001013074610|25702|8cd06da5293a7147 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000003.xml|20001013074610|26659|1a622b8d30d7ade8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000004.xml|20001017133600|56955|515488ef221523d9 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000005.xml|20001017133618|09973|a6344e46ba572dc3 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000006.xml|20001017133623|51441|8ad8f44f49b21246 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000007.xml|20001017133625|48163|bfcb6d85276be7e8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000008.xml|20001017133627|18273|1d6082f0905c51b6 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000009.xml|20001017133629|19814|8677613dc624cb0c +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000010.xml|20001017133713|64368|9b98c9cce8fac145 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000011.xml|20001017133713|00331|432156d127cbd22f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000012.xml|20001017133713|01909|a410d08dc4cfee11 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000013.xml|20001017133713|03416|2717cbfbe5730174 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000014.xml|20001017133713|05036|bcf55df6a036bd8f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000015.xml|20001017133749|30814|b72689a8f9b21372 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000016.xml|20001017133713|07087|32f1ef2e3d214be0 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000017.xml|20001017133713|08762|81423597605ff77f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000018.xml|20001017133713|10435|82e2e7bde83f56d8 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000019.xml|20001017133713|12133|c0f0b05e481b90e7 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000020.xml|20001017133713|13843|8849bbf91a4fd5ec +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000021.xml|20001017133713|15460|2763b87c1549ba87 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000022.xml|20001017133713|17202|da2083ef423ae39a +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000023.xml|20001017133713|20719|11993b379b9838be +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000024.xml|20001017133713|22352|dd067aa28220fa4c +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000025.xml|20001017133713|24071|3e766aa1e43b303 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000026.xml|20001017133713|25860|15145e496417646f +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000027.xml|20001017133713|27519|95e7de3e9934b570 +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000028.xml|20001017133713|29282|c72bfec6600949b +mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000029.xml|20001017133713|31058|3aba1eb23ef86c9e +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 +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 +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|20001010001022|12739|108667adaeabe3f5 @@ -377,1244 +742,881 @@ sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.b.result|20001118063528|520 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.status.result|20001202171150|06069|6bee190c298cc9fd 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/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 sasha@mysql.sashanet.com|mysql-test/std_data/simple-select.master|20001009234916|08299|6f3eb98812926caf +sasha@mysql.sashanet.com|mysql-test/t/3.23/alt000001.test|20001122072330|31588|633aed61c4bad94c +sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000004.test|20001103140433|32471|daf9ad4a1a31cd3c +sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000005.test|20001103140433|36002|982fde89a4d6d886 sasha@mysql.sashanet.com|mysql-test/t/3.23/select-key.test|20001009234859|21197|5d785cef5c02c070 +sasha@mysql.sashanet.com|mysql-test/t/3.23/shw000001.test|20001121234128|21322|770d96a2c1c65b20 sasha@mysql.sashanet.com|mysql-test/t/3.23/simple-select.test|20001009234859|26291|71f98293e1dc65 +sasha@mysql.sashanet.com|mysql-test/t/binlog-backup-restore.test|20010424233926|25316|d5b0b9bd83738a9f +sasha@mysql.sashanet.com|mysql-test/t/df_crash.test|20010406010433|65180|4c365178fe437f6 +sasha@mysql.sashanet.com|mysql-test/t/fulltext_join.test|20010730234357|20865|e347c8f04405c916 +sasha@mysql.sashanet.com|mysql-test/t/identity.test|20010910233028|36116|326f469b59105404 sasha@mysql.sashanet.com|mysql-test/t/include/master-slave.inc|20001118030458|01636|556fd038c3a3d54 +sasha@mysql.sashanet.com|mysql-test/t/mrg000002.test|20001212152450|20137|16b3a176adc0f311 +sasha@mysql.sashanet.com|mysql-test/t/rpl000018-master.sh|20010127223331|13256|bc8072e13b26b005 +sasha@mysql.sashanet.com|sounds/compilation_finished.au.gz|20010814034002|63992|70bd14095a918139 +sasha@mysql.sashanet.com|vio/test-ssl|20010828000105|24508|ed0a50364f2a51d7 sasha@work.mysql.com|BitKeeper/etc/logging_ok|20001214015456|29919|32b6551b8288c2fa serg@serg.mysql.com|mysql-test/r/3.23/mrg000001.dummy.result|20001206231604|05053|bf7e6d609f22b897 serg@serg.mysql.com|mysql-test/r/3.23/mrg000001.result|20001206231609|46662|db2ef2e717ab8332 -BK|Docs/Attic/myisam.doc|19700101030959|00502|519bb06ecc870298 -BK|Docs/Flags/island.eps|19700101030959|00181|8cec5a55768bc59e -BK|libmysql/violite.c|19700101030959|02600|984c09cffe14a11b -BK|mysql.proj|19700101030959|00071|3e34edc585d18be8 -BK|sql-bench/Results-win32/wisconsin-mysql-win98|19700101030959|02547|8b3da9c5c5d2365b -BK|sql-bench/Results/connect-mysql-3.21-Linux_2.2.1_i686|19700101030959|02134|c0c26d4320182d85 -BK|sql-bench/Results/create-mysql_3.21-Linux_2.0.35_i686|19700101030959|02225|df1b037d17b33587 -BK|sql/share/estonia/errmsg.sys|19700101030959|01836|83b86d7ed4cdd5d0 -BK|sql/share/french/errmsg.sys|19700101030959|01838|9f024dc5e6fe50f5 -BK|sql/share/romania/errmsg.sys|19700101030959|01871|e08aa93bae96d25e -BK|strings/Attic/bootstrap-ctype.c|19700101030959|01360|6d2a8cda2d6a35ff -BK|strings/Attic/ctype-dos.c|19700101030959|01344|f77bd08acf13a8c1 -BK|strings/Attic/ctype-estonia.c|19700101030959|01345|fc8a69424f7cb66b -BK|strings/Attic/ctype-german1.c|19700101030959|01346|f7830c509bb358f7 -BK|strings/Attic/ctype-hp8.c|19700101030959|01349|749e1be0f028d349 -BK|strings/Attic/ctype-koi8_ru.c|19700101030959|01351|8ff4188c642c9bd -BK|strings/READ-ME|19700101030959|01362|ed6c5184d4bf6b7c -BK|support-files/Attic/my-large.cfg.sh|19700101030959|02586|842c8e76253c9396 -BK|vio/VioSSL.cc|19700101030959|00013|6e85340b11fa42a8 -BK|vio/VioSocket.h|19700101030959|00019|a26d535bd5a1a6 -BK|vio/viotypes.h|19700101030959|00027|f5a38e7326bd50f3 -Sinisa@sinisa.nasamreza.org|=6|20010818122920|53462|33f33b0a159dc5d5 -Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522133259|25000|4b5fbc60d0d9754f -Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133300|08911|21904fbd1c95cb1 -ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 -jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec -miguel@hegel.local|zlib/contrib/asm386/gvmat32.asm|20020319032514|12654|31093c1a846dfdc7 -miguel@hegel.local|zlib/contrib/asm386/gvmat32c.c|20020319032514|19182|2a8eba5481c46eab -miguel@hegel.local|zlib/contrib/asm586/match.s|20020319032514|51538|dc1a34b5eb2a7c11 -miguel@hegel.local|zlib/contrib/delphi2/d_zlib.cpp|20020319032514|31641|d6f37620ac7b27fa -miguel@hegel.local|zlib/contrib/delphi2/zlib.cpp|20020319032515|22372|4257437d415259e2 -miguel@hegel.local|zlib/crc32.c|20020319032516|20397|b327da5b8cf9eae8 -miguel@hegel.local|zlib/inffast.c|20020319032517|65269|bf247ff4aa2bf54b -miguel@hegel.local|zlib/inffixed.h|20020319032517|12923|e86ef8e2efe23f77 -miguel@hegel.local|zlib/msdos/zlib.def|20020319032518|18787|165cd7dcff6ac9f -miguel@hegel.local|zlib/trees.c|20020319032519|43770|4fbd4d005e26d38 -miguel@hegel.local|zlib/uncompr.c|20020319032519|57111|82eac43195d1222c -miguel@hegel.local|zlib/zlib.dsp|20020319032519|12016|6eec436fab260061 -miguel@hegel.local|zlib/zlib.html|20020319032519|31060|7a635f4ac95fc56b -monty@donna.mysql.com|mysql-test/include/have_default_master.inc|20010104005638|23980|a54c86e65a6c4af -monty@donna.mysql.com|sql-bench/Results/ATIS-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14777|e625af7f600bf930 -monty@donna.mysql.com|sql-bench/Results/create-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20766|4e5a2ab4907748d4 -monty@donna.mysql.fi|sql/violite.c|20010523223654|08838|53d4251a69d3c -monty@hundin.mysql.fi|sql-bench/Results/RUN-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|63204|e938a858bd12aa8d -monty@hundin.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|42711|788ad492867b1226 -monty@hundin.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|46284|5316add301edb60 -monty@narttu.mysql.com|sql-bench/Results/insert-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|29606|975e26cac59161fa -monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha|20001014001004|18602|e8cc899bb933532f -mwagner@cash.mwagner.org|Docs/include.de.texi|20020223092123|06028|112aac21b3489888 -mwagner@evoq.home.mwagner.org|Docs/Books/dubois.eps|20001231203219|33725|aa3d9c08bbcc149b -mwagner@evoq.home.mwagner.org|Docs/Books/in_21.eps|20001231203220|05743|83a7604251d68ebd -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|mysql-test/xml/tests/sel000006.xml|20001017133623|51441|8ad8f44f49b21246 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000013.xml|20001017133713|03416|2717cbfbe5730174 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000021.xml|20001017133713|15460|2763b87c1549ba87 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000026.xml|20001017133713|25860|15145e496417646f -nick@nick.leippe.com|mysql-test/t/rpl_empty_master_crash.test|20020531235552|52328|99464e737639ccc6 -sasha@mysql.sashanet.com|mysql-test/r/df_crash.result|20010406010433|59989|4a3dbee64843953d -sasha@mysql.sashanet.com|mysql-test/std_data/m.MRG|20001212152450|17736|3f5632c37af00f18 -sasha@mysql.sashanet.com|mysql-test/t/3.23/alt000001.test|20001122072330|31588|633aed61c4bad94c -sasha@mysql.sashanet.com|mysql-test/t/binlog-backup-restore.test|20010424233926|25316|d5b0b9bd83738a9f -sasha@mysql.sashanet.com|vio/test-ssl|20010828000105|24508|ed0a50364f2a51d7 +serg@serg.mysql.com|mysql-test/r/ft0000001.a.result|20001211130756|05199|3d17aff15fa5a9f1 +serg@serg.mysql.com|mysql-test/r/ft0000001.b.result|20001211130756|10153|505c4c00a0bddfc4 +serg@serg.mysql.com|mysql-test/r/ft0000001.c.result|20001211130756|14950|1040289a75243a92 serg@serg.mysql.com|mysql-test/r/ft0000001.d.result|20001211130756|19773|7c549555fbc7663e serg@serg.mysql.com|mysql-test/r/ft0000001.e.result|20001212121413|40468|c58d30fd7fe86f4f -serg@serg.mysql.com|mysql-test/t/sel000015.test|20001211130731|27841|7442bf9cbc96fe07 -serg@serg.mysql.com|mysql-test/t/sel000024.test|20001211130731|07099|849f47e6cbdc4fe3 -tim@threads.polyesthetic.msg|bdb/build_win32/db_int.h|20010305004134|30736|9ee5645850a336a0 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_btrec.dsp|20010305004135|08710|c87137287d8d67dc -tim@threads.polyesthetic.msg|bdb/build_win32/ex_env.dsp|20010305004135|09533|1732d5e41efda77 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_lock.dsp|20010305004135|14943|257abf03544f6270 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_qam|20010305004137|28066|6eecf6833de0af98 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_txn|20010305004137|29072|1ff22b797deb0e1b -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_rename.html|20010305004144|37128|36796ad9e106c3f0 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_hash.html|20010305004144|09702|73f14897664d9d08 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_q_extentsize.html|20010305004144|13496|f2fe41a5d8c46658 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_pad.html|20010305004144|16373|8a1de721eb6fc53f -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_sync.html|20010305004144|19394|7a067029b6e1496b -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbt.html|20010305004144|04896|ae7a81c9c5f574f6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_close.html|20010305004144|28399|a8e722cbb66c9d7b -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_conflicts.html|20010305004145|07137|58d9f7179bc864a3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_server.html|20010305004145|31969|c13b793b525d504b -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tmp_dir.html|20010305004145|34771|b563e87af5431824 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_verbose.html|20010305004145|38421|344f5119536cae0 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_file.html|20010305004145|48705|574444b46b801f9c -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_map.html|20010305004144|16369|d90bbc8462ef43a6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_realloc.html|20010305004144|19375|e8e78e57c005c7c4 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_pindex.html|20010305004147|08181|9ff6b69b56f988dd -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_append_recno.html|20010305004146|08075|a158b1fdba756ce -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errcall.html|20010305004146|10727|28a7a1fa2b3b73ee -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_nelem.html|20010305004146|19017|1829bc583d9c7554 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_delim.html|20010305004146|22753|81d9df93c3511df3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_len.html|20010305004146|23672|e09bb30e40208dfb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_remove.html|20010305004146|38809|5efece7ecdfc4df7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_region_init.html|20010305004146|59589|2d70678382bbbf9a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lsn_class.html|20010305004145|24210|34809f73e15540ad -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fclose.html|20010305004146|22608|cc4a5776ac69d660 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_abort.html|20010305004147|01091|81177bcb2e5f4502 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_checkpoint.html|20010305004147|02999|173930473e76d008 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_key_range.html|20010305004147|31461|8834de5873a6acb5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_stat.html|20010305004147|57008|bc253f0883e9c82b -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbenv_class.html|20010305004147|12326|92c7a4a6c22090c7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errcall.html|20010305004147|07189|4e206d08cbb39ab7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_detect.html|20010305004147|15549|9fc15a1a95b0dfa1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_lockers.html|20010305004147|18755|7896265ea77829b3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_rec_init.html|20010305004147|25237|1fdb2c5fc3b6407 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_recover.html|20010305004148|00983|40280da113fc9d2b -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_timestamp.html|20010305004148|02804|457eeb135f1f8bc0 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_strerror.html|20010305004148|04588|fceebaa94cf9aafd -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_stat.html|20010305004148|10140|71b81d8567befc43 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_flush.html|20010305004148|14794|1691d6a3c8cc284e -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fclose.html|20010305004148|20518|d08f0c134361f802 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_prepare.html|20010305004148|33784|510a245c80e715c -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get.html|20010305004148|42753|127bd361ee695c71 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_is_byteswapped.html|20010305004148|45596|8fb9e2c58051c769 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_stat.html|20010305004148|51363|3bb57be2de907fd2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_commit.html|20010305004148|64051|25150b20b84cd519 -tim@threads.polyesthetic.msg|bdb/docs/images/api.gif|20010305004148|02578|dec2d4fe5f39dffe -tim@threads.polyesthetic.msg|bdb/docs/images/ref.gif|20010305004148|06650|add30c753dc1972d -tim@threads.polyesthetic.msg|bdb/docs/ref/am/open.html|20010305004148|23468|c9a7e23579a5e93a -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_recnum.html|20010305004149|20770|f081f10254e86e75 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_hash.html|20010305004149|25978|3a0174586fbcfcdf -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_nelem.html|20010305004149|26871|979995db477052ad -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/apis.html|20010305004149|36488|a84570e410b11a6a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/intro.html|20010305004149|49652|f261022c26987d7f -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/osf1.html|20010305004149|53358|9d4ebabfe3af8970 -tim@threads.polyesthetic.msg|bdb/docs/ref/cam/intro.html|20010305004149|04558|4c497b1a18c4c7f5 -tim@threads.polyesthetic.msg|bdb/docs/ref/install/file.html|20010305004150|21159|d4ba2317db7c064b -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.txt|20010305004150|21985|3894a46ea11ce25a -tim@threads.polyesthetic.msg|bdb/docs/ref/java/faq.html|20010305004150|27218|7ca2474ba1f6676f -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/cam_conv.html|20010305004150|31862|63844ff6fa95f0c -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/nondb.html|20010305004150|36156|863fe076a46378d7 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/twopl.html|20010305004150|39650|b3f3aee667bc381d -tim@threads.polyesthetic.msg|bdb/docs/ref/log/limits.html|20010305004150|43198|26fac1e32387b7c9 -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/intro.html|20010305004150|13549|ad16bc20623e1192 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/errors.html|20010305004150|19994|be11ff6410e1db2c -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/app.html|20010305004151|42111|6dc3c82982164fa8 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/intro.html|20010305004151|49773|22096cea9fe159ac -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/other.html|20010305004151|63311|4991722636b3a46d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_register.html|20010305004151|23513|399320e965adf598 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_stat.html|20010305004151|33181|516f1870c6127351 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/value_set.html|20010305004151|34118|f0b0c770a81b90b6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_paniccall.html|20010305004152|46636|8f9741244fb6e9f6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tmp.html|20010305004152|50733|ef3450f6fa89f2dc -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/txn_check.html|20010305004152|51549|2405b25bc92cc476 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/renumber.html|20010305004152|60219|d6cd798434da81aa -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/toc.html|20010305004152|61902|9c94c533ada43c1a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade/process.html|20010305004151|64704|78f9ca966a587234 -tim@threads.polyesthetic.msg|bdb/include/db_auto.h|20010305004137|26350|994ddc84db334345 -tim@threads.polyesthetic.msg|bdb/include/hash_auto.h|20010305004138|09216|1b79cdd426d7ef25 -tim@threads.polyesthetic.msg|bdb/include/rpc_client_ext.h|20010305004138|28220|85436ca9b5691338 -tim@threads.polyesthetic.msg|bdb/rpc_client/db_server_clnt.c|20010305004141|41933|b548b860f765c597 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_xdr.c|20010305004141|53794|336ef020b4a22c05 -tim@threads.polyesthetic.msg|bdb/txn/txn_auto.c|20010305004143|19863|6eb282f016f606d9 -BK|sql-bench/Results-win32/connect-mysql-win98|19700101030959|02535|2a11d5e3dfc0bc67 -BK|sql-bench/Results-win32/select-mysql-win98|19700101030959|02544|f370fac2d66a9faf -BK|sql-bench/Results/ATIS-mysql_3.21-Linux_2.0.35_i686|19700101030959|02036|c25425e045ca8dfc -BK|sql-bench/Results/alter-table-mysql_3.21-Linux_2.0.35_i686|19700101030959|02092|762639f2560976bd -BK|sql/Attic/mini_client.c|19700101030959|01910|9a3778c387d06a81 -BK|sql/Attic/mybinlogdump.cc|19700101030959|01908|5dbdd2bde98d6169 -BK|strings/Attic/ctype-croat.c|19700101030959|01341|d2d805ee6f10cbcc -BK|strings/Attic/ctype-hungarian.c|19700101030959|01350|5cf0bf7fa0312637 -BK|strings/Attic/ctype-latin1.c|19700101030959|01353|cc63880f19c2303e -BK|strings/Attic/ctype-latin2.c|19700101030959|01354|31895c4b83654342 -BK|strings/Attic/ctype-win1250.c|19700101030959|01357|1ce7a24255780a1 -BK|support-files/Attic/my-example.cnf.sh|19700101030959|02584|87a7e1f4d24b62a9 -BK|support-files/Attic/my-small.cfg.sh|19700101030959|02588|85023c559a1d96c -BK|vio/VioConnectorFd.cc|19700101030959|00007|ddbd7821c43c83a2 -BK|vio/VioSSLFactoriesFd.cc|19700101030959|00016|89f6bf5073937947 -Sinisa@sinisa.nasamreza.org|mysql-test/t/sel000004.test|20020522133624|23665|445526a8a20de101 -miguel@hegel.local|zlib/contrib/delphi2/readme.txt|20020319032515|03494|65d16837f8579e23 -miguel@hegel.local|zlib/contrib/iostream2/zstream.h|20020319032515|02537|351f26518ea48196 -miguel@hegel.local|zlib/infcodes.h|20020319032517|58960|3a02220a89c9a4fa -miguel@hegel.local|zlib/inflate.c|20020319032517|19311|fb22a3a1ab6fb1a0 -miguel@hegel.local|zlib/infutil.c|20020319032518|05244|a9b414f0f4ea0868 -miguel@hegel.local|zlib/nt/zlib.dnt|20020319032519|16279|22a0ed3b86ff8c2 -miguel@hegel.local|zlib/zlib.3|20020319032519|04298|ec5cb4f64476f6a -monty@donna.mysql.com|mysql-test/r/have_default_master.require|20010104005638|27332|1465255ffdaf82f -monty@hundin.mysql.fi|sql-bench/Results/ATIS-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|59551|d002b0bc548ff8b3 -monty@hundin.mysql.fi|sql-bench/Results/connect-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|08804|1b715c6fd72e913e -monty@hundin.mysql.fi|sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|49804|26e09af61f88d8c9 -monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|13605|ee94f987797ca948 -monty@narttu.mysql.com|sql-bench/Results/select-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|35818|34a39fbcb58d8945 -monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|37931|2db07249379f36 -monty@narttu.mysql.com|sql-bench/Results/wisconsin-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|40155|8101a5823c17e58a -monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha|20001014001004|13092|583091e05a25fb6 -monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha|20001014001004|15829|6c20c9ef46f82241 -monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|07880|e1771e0a164bc310 -monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha|20001014001004|32465|fc410754151d622c -mwagner@evoq.home.mwagner.org|Docs/Books/dbi.eps|20001231203219|30594|6ad58f9457e2a564 -mwagner@evoq.home.mwagner.org|Docs/Books/ecomm.eps|20001231203220|02445|58ae914b5d5ea49 -mwagner@evoq.home.mwagner.org|Docs/Books/msql.eps|20001231203220|12487|ffe7d62847663250 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000009.xml|20001017133629|19814|8677613dc624cb0c -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000029.xml|20001017133713|31058|3aba1eb23ef86c9e -sasha@mysql.sashanet.com|mysql-test/t/rpl000018-master.sh|20010127223331|13256|bc8072e13b26b005 -serg@serg.mysql.com|mysql-test/t/sel000007.test|20001211130730|24336|f431e4f4739a24c3 -serg@serg.mysql.com|mysql-test/t/sel000021.test|20001211130731|57561|94dd47de2872264a -tim@threads.polyesthetic.msg|bdb/build_vxworks/db_int.h|20010305004134|18702|40ba51edce41403f -tim@threads.polyesthetic.msg|bdb/build_win32/db_tcl.dsp|20010305004135|02285|5ad951d774e41520 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_lock.dsp|20010305004135|10303|286d2566e786dde -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_env.dsp|20010305004135|14159|b0bf2649a4c797ac -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_mpool.dsp|20010305004135|15715|d17a5d09f09f5217 -tim@threads.polyesthetic.msg|bdb/build_win32/include.tcl|20010305004135|17284|f8bffb5e2510f229 -tim@threads.polyesthetic.msg|bdb/db/db_auto.c|20010305004136|32432|3186e950cc321ae7 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.tags|20010305004137|19101|7a5b14d33d4078cc -tim@threads.polyesthetic.msg|bdb/dist/config.guess|20010305004136|14678|ead1d91caeaa748c -tim@threads.polyesthetic.msg|bdb/dist/template/rec_btree|20010305004137|23131|65d6b0b2f5b7a6d2 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_db|20010305004137|25141|52c5797539878fca -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_append_recno.html|20010305004144|38070|bdf0130e642f74fa -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_prefix.html|20010305004144|41420|d6e443a7e47c9b3a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errpfx.html|20010305004144|05859|756b9b73dd28b8d9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_feedback.html|20010305004144|06786|90d495e78318a332 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_source.html|20010305004144|17353|6d12ac12652acc31 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_stat.html|20010305004144|18351|578f6f99f8e247ff -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max.html|20010305004145|08849|a2dc11fa8b2f1c9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_pageyield.html|20010305004145|28418|8aa4a6cb2f18cad7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_rec_init.html|20010305004145|30192|bf7da051ef6689ba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_max.html|20010305004145|35672|71a739e46faf33a9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_vec.html|20010305004145|45892|cc79e33b82b7a275 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_register.html|20010305004145|52499|5381c1fad82d6527 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_stat.html|20010305004145|53440|36b87b19ee2c5bba -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_close.html|20010305004144|08984|8981d16589844161 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_seek.html|20010305004144|21048|fdf1b31d3f6c7473 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unlink.html|20010305004144|22800|c42b13fd26f2e90 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_cursor.html|20010305004145|29241|4f0225f98f4a11c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_del.html|20010305004145|31220|43fa05f2dfa86dbc -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_join.html|20010305004146|02717|9c4819679501ad6e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_remove.html|20010305004146|06326|8c537fc5e326293b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_ffactor.html|20010305004146|17155|a67084c644c38114 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_pad.html|20010305004146|24627|f2e0c2c2c3806a97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_stat.html|20010305004146|26537|3473827de856d680 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_verify.html|20010305004146|29479|14db455da528229d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_class.html|20010305004145|15353|2a31b398c37d674b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_get.html|20010305004146|34739|36e2dbe65e3442e3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_rec_init.html|20010305004146|58586|77916e00d1361c7b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_server.html|20010305004146|60631|bb74806839e8eb58 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_max.html|20010305004146|01212|910d1c17dd000729 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/get_errno.html|20010305004145|22249|e1a57c1c5f1d2695 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_compare.html|20010305004146|13902|3225b4c32016c9b1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_get.html|20010305004146|17104|aee6162219c71617 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_trickle.html|20010305004146|34409|c9df8540b9ebc898 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_begin.html|20010305004147|02053|3a2d1488ec9d8655 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_class.html|20010305004145|26179|5e57abe095aceca9 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_class.html|20010305004147|09609|b957a4d2b77acb1e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_append_recno.html|20010305004147|36282|d28bf857803b93a2 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_len.html|20010305004147|53997|8448826ea78c630e -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_open.html|20010305004147|02873|2df0f0ef544da715 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_data_dir.html|20010305004147|06162|b7b3f35e96804650 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_dir.html|20010305004147|12366|484cad2123994e14 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lsn_class.html|20010305004147|20619|b1458208b6c81016 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fput.html|20010305004148|23268|6ba75e517a259703 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_del.html|20010305004148|41829|400c7a72fb10d6f4 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_join.html|20010305004148|43762|1c737805c2c49cf9 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/count.html|20010305004148|11236|8fd8daf2e2cbd7c7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curclose.html|20010305004148|12231|8b6b8442fc8382f7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curput.html|20010305004148|16324|c7e4fa0a68170c3d -tim@threads.polyesthetic.msg|bdb/docs/ref/am/cursor.html|20010305004148|17350|6dbcdb3b7d552f58 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/sync.html|20010305004148|33751|381722c07c9d8825 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/byteorder.html|20010305004149|21617|999a22f727e2dae0 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/dup.html|20010305004149|23371|523731632fca7343 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/extentsize.html|20010305004149|24263|fdcfb5572974545c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/malloc.html|20010305004149|29537|cb0e6d7e9448d93e -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.html|20010305004149|37519|ab5254bc99af0d5c -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/script.html|20010305004149|39400|6796fd0a63161a0c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/flags.html|20010305004149|46003|a739404f90eb8c3d -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/install.html|20010305004149|48752|660222dd1feffc4 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/irix.html|20010305004149|50564|95833aedc3a82f0 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/printlog.html|20010305004149|09591|9fa9894f839fad95 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/runtime.html|20010305004149|10629|d50f2fea4a8e58c -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/format.html|20010305004149|13995|9fa10ca3c7ae6751 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/intro.html|20010305004149|19435|96dd1090729e06b -tim@threads.polyesthetic.msg|bdb/docs/ref/env/remote.html|20010305004149|23518|52a3a79fdff8f7bd -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbisnot.html|20010305004149|29466|5ce7aed7ce41c9e6 -tim@threads.polyesthetic.msg|bdb/docs/ref/java/conf.html|20010305004150|26401|ef560bcf13a71cd5 -tim@threads.polyesthetic.msg|bdb/docs/ref/log/config.html|20010305004150|41449|aedc53caf49c51c9 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/scope.html|20010305004150|59326|2987f97781410bc1 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/embedded.html|20010305004150|03865|d25b9719d24df88c -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/witold.html|20010305004150|65330|ad6c866cf48734b5 -tim@threads.polyesthetic.msg|bdb/docs/ref/sendmail/intro.html|20010305004150|16532|ecac45d7e2bcf51c -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/close.html|20010305004150|18046|1fe3a82f28e7ed32 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/keydata.html|20010305004150|23810|530b1581aeba63ca -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/put.html|20010305004150|25774|bdd2629c212af471 -tim@threads.polyesthetic.msg|bdb/docs/ref/toc.html|20010305004148|08788|ab1fa294d5ef4b69 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/reclimit.html|20010305004151|53098|5f54174bf6026bd5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/recovery.html|20010305004151|53956|6e3a0c07b997c3b2 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/throughput.html|20010305004151|55655|8a7d5a958df7f91a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/intro.html|20010305004151|02261|8bfd3804a2da1598 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv_cxx.html|20010305004151|09872|7f4fd0ebace36d8e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/disk.html|20010305004151|11685|eb79d1157ef44d3c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/java.html|20010305004151|17120|300acccbb633e335 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/jump_set.html|20010305004151|18936|718c098a91db9dba -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_notheld.html|20010305004151|20761|ed6853b6daa5531b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/open.html|20010305004151|27357|8b1e2a969e97069a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/intro.html|20010305004152|41719|64592a50b1c634d6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_tx_recover.html|20010305004152|47442|ada65907ba98eee8 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/toc.html|20010305004152|49908|af1a24798980ad1 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/incomplete.html|20010305004152|56914|af86a649a878a124 -tim@threads.polyesthetic.msg|bdb/hash/hash_auto.c|20010305004137|61459|d17c6a6ed4f181d1 -tim@threads.polyesthetic.msg|bdb/include/clib_ext.h|20010305004137|19207|ed9d9f7965f0e1d3 -tim@threads.polyesthetic.msg|bdb/rpc_server/gen_db_server.c|20010305004141|54931|d5602f9bd5c930e -BK|Docs/Flags/island.gif|19700101030959|00142|e274d5e96ee0975a -BK|Docs/Flags/south-africa1.txt|19700101030959|00232|87a53fdcd2149c6e -BK|client/Attic/net.c|19700101030959|00583|c18042da6fa4e693 -BK|extra/Attic/print_defaults.c|19700101030959|01513|362952979aa7b330 -BK|sql-bench/Results-win32/RUN-mysql-win98|19700101030959|02526|7f09e396772a8665 -BK|sql-bench/Results-win32/insert-mysql-win98|19700101030959|02541|6d6cafc85a6c837 -BK|sql-bench/Results/RUN-mysql-3.21-Linux_2.2.1_i686|19700101030959|02050|f6fdd64859e11de9 -BK|sql-bench/Results/big-tables-mysql_3.21-Linux_2.0.35_i686|19700101030959|02120|190e827e569c99a4 -BK|sql-bench/Results/create-mysql-3.21-Linux_2.2.1_i686|19700101030959|02158|51581b24f45e0f5c -Sinisa@sinisa.nasamreza.org|mysql-test/r/sel000004.result|20020522121240|20995|360af2095c88cb8c -arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614|692b647b -ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 -miguel@hegel.local|zlib/algorithm.txt|20020319032513|12903|fbc4dda3d31c2005 -miguel@hegel.local|zlib/contrib/README.contrib|20020319032514|04353|24cb75bee0a061fb -miguel@hegel.local|zlib/contrib/asm386/zlibvc.def|20020319032514|31637|605ee23b8a4a6a1a -miguel@hegel.local|zlib/contrib/delphi2/zlib.bpg|20020319032515|09768|93c030edcca1838 -miguel@hegel.local|zlib/contrib/delphi2/zlib.bpr|20020319032515|16113|7a2fa98af2345144 -miguel@hegel.local|zlib/contrib/minizip/unzip.h|20020319032516|21001|bac981086af91a30 -miguel@hegel.local|zlib/contrib/minizip/zip.c|20020319032516|27911|e82bf7774e1ece95 -miguel@hegel.local|zlib/zutil.h|20020319032520|12556|1e431b0173278fb2 -monty@donna.mysql.com|innobase/ib_config.h.in|20010217121901|07616|9e57db8504e55b7 -monty@donna.mysql.com|innobase/ib_config.h|20010217121901|04019|7539e26ffc614439 -monty@narttu.mysql.com|sql-bench/Results/insert-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|27509|d12a7edef05d7185 -mwagner@evoq.home.mwagner.org|Docs/Books/manual.eps|20001231203220|09365|2a7145f88960c7ec -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000025.xml|20001017133713|24071|3e766aa1e43b303 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000030.xml|20001017133600|63205|c2b25781eefaee9 -serg@serg.mysql.com|mysql-test/t/sel000006.test|20001211130730|19922|291cc6c8d85e51df -serg@serg.mysql.com|mysql-test/t/sel000016.test|20001211130731|32739|f495235f14c47ec -tim@threads.polyesthetic.msg|bdb/build_win32/db_stat.dsp|20010305004135|00560|f77417f5d9984986 -tim@threads.polyesthetic.msg|bdb/dist/config.sub|20010305004136|16944|17e9990a298261a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_remove.html|20010305004144|36184|668fa1d67a4f6941 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_malloc.html|20010305004144|01594|3581879fef5af695 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_flags.html|20010305004145|03778|b2a1f3c8498e6d95 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_detect.html|20010305004145|07983|d9ed73495defdc19 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_lockers.html|20010305004145|24923|f22d5d4640436efe -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_locks.html|20010305004145|09704|1baf2d63a6fb418d -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tas_spins.html|20010305004145|33848|91c7091deca3d97f -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fclose.html|20010305004145|55335|b52c7d599d83c26 -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_abort.html|20010305004145|65162|a53425dd70214619 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_index.html|20010305004145|07331|a0bc165de8a0554c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_feedback.html|20010305004146|15263|a08620d86f05ec8c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_malloc.html|20010305004145|12423|b0aa5802da5bef4d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_dup.html|20010305004146|33708|75df863b4bc13aaa -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_close.html|20010305004146|36778|5cc705b97b86972c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_cachesize.html|20010305004146|39807|b82ed49a47415fec -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_detect.html|20010305004146|49591|13e53300b722cf1e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_panicstate.html|20010305004146|57577|ad2d38e398cafd31 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_get.html|20010305004146|61648|527d63a8526f336c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_put.html|20010305004146|18207|66077da9630fa8c2 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_sync.html|20010305004146|33235|253961279934d3c8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_hash.html|20010305004147|48174|c6eb825c706a9548 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_detect.html|20010305004148|06490|14d4e7c7dca0dad7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fsync.html|20010305004148|25118|e767b233fe7730a2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_put.html|20010305004148|57122|290ecb1275d4270 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_open.html|20010305004148|59088|39b63925d45a637e -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_pindex.html|20010305004148|00553|259f0e062eee63c7 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/ops.html|20010305004148|25566|9b24db9ba4f45724 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_compare.html|20010305004149|18156|c1e847e651704c89 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_minkey.html|20010305004149|19013|b4708e561be92b83 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/intro.html|20010305004149|27745|dd1647202258ee28 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/recno.html|20010305004149|32283|c2ae722138309e95 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/select.html|20010305004149|34120|57b1c99f6a8ea93f -tim@threads.polyesthetic.msg|bdb/docs/ref/distrib/layout.html|20010305004149|12589|5aeb292fbd987cf8 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/error.html|20010305004149|18447|acbbdb848c9fe70f -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/terrain.html|20010305004149|33850|b396d6447a59435f -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/intro.html|20010305004150|34434|e1e07e71f3198be -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/program.html|20010305004151|23138|2f5bf497ae226ed5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/archival.html|20010305004151|42978|7631314d840be181 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/logfile.html|20010305004151|50590|1c3002fcb6581e8c -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/read.html|20010305004151|52265|fc8b056380e09887 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/func.html|20010305004151|15332|c06e5bc63ddf7a64 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/logalloc.html|20010305004152|43372|30563c544b8ddd54 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/contact.html|20010305004152|04402|55b4da3d7bf7655b -tim@threads.polyesthetic.msg|bdb/docs/utility/db_archive.html|20010305004152|07446|ab2c66e01b3e3626 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_recover.html|20010305004152|12771|1b63f2acdc0b0af7 -tim@threads.polyesthetic.msg|bdb/include/env_ext.h|20010305004138|05832|33a5fdef1aeecefd -tim@threads.polyesthetic.msg|bdb/include/txn_ext.h|20010305004138|34549|9db24c14f204890c -BK|Docs/Flags/kroatia.eps|19700101030959|00185|f50fcd444e7efceb -BK|Docs/Flags/south-africa1.gif|19700101030959|00154|1ea38de5a535f732 -BK|sql-bench/Results/insert-mysql_3.21-Linux_2.0.35_i686|19700101030959|02252|60c0965dff31db07 -BK|sql-bench/Results/select-mysql_3.21-Linux_2.0.35_i686|19700101030959|02278|5fadbac5f98696a -BK|sql/share/danish/errmsg.sys|19700101030959|01831|3a6d0fb8451a3313 -BK|sql/share/dutch/errmsg.sys|19700101030959|01833|b5aff4d08478bafd -BK|sql/share/italian/errmsg.sys|19700101030959|01846|c5108ecb850b79a -BK|sql/share/portuguese/errmsg.sys|19700101030959|01859|c0187322f8c9d805 -BK|vio/VioAcceptorFd.cc|19700101030959|00005|a5a08947a31f88de -BK|vio/vio-global.h|19700101030959|00021|c261412c01b2f4 -miguel@hegel.local|zlib/ChangeLog|20020319032513|28917|5d5425fc84737083 -miguel@hegel.local|zlib/compress.c|20020319032513|32512|70bccb304651dba9 -miguel@hegel.local|zlib/contrib/asm386/mkgvmt32.bat|20020319032514|25425|422cbe16a6e74695 -miguel@hegel.local|zlib/contrib/delphi2/zlib32.bpr|20020319032515|35585|41ac53acb8008ff7 -miguel@hegel.local|zlib/contrib/delphi2/zlib32.cpp|20020319032515|41979|3b0f51435e880afe -miguel@hegel.local|zlib/contrib/minizip/ChangeLogUnzip|20020319032515|15183|50464416f4a3768f -miguel@hegel.local|zlib/index|20020319032517|33542|5443c9f841db4a47 -miguel@hegel.local|zlib/infblock.c|20020319032517|39853|540cc1b743be5f58 -mikef@nslinux.bedford.progress.com|mysql-test/r/have_gemini.require|20010321203410|47052|206702c48b2e206b -monty@donna.mysql.com|sql-bench/Results/ATIS-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|14134|cf0d806760eefef2 -monty@donna.mysql.com|sql-bench/Results/big-tables-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18309|c87333d6fe04433e -monty@donna.mysql.com|sql-bench/Results/connect-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|19522|ab58fffa30dce97e -monty@donna.mysql.com|sql-bench/Results/insert-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22042|27b7a557c3cb07a -monty@donna.mysql.com|sql-bench/Results/wisconsin-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24748|6a468dcd3e6f5405 -monty@hundin.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|35759|11038a44f73070e7 -monty@hundin.mysql.fi|sql-bench/Results/big-tables-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|05113|b6be70bb51013cad -monty@hundin.mysql.fi|sql-bench/Results/select-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|19688|4ffc9cf4be665ea2 -monty@hundin.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|60398|8ba598d217450157 -monty@hundin.mysql.fi|support-files/make_mysql_pkg.sh|20010915122456|03682|c616a18bed4b9c2 -monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|04677|f761da5546f0d362 -monty@narttu.mysql.com|sql-bench/Results/RUN-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171904|13285|a88e954bc8de5460 -monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|17580|28b688e2cd4b6bb3 -monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha|20001014001004|21372|84df7c6446e51e26 -monty@narttu.mysql.fi|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|00237|45d2cdf9bea9cc37 -monty@narttu.mysql.fi|sql-bench/Results/wisconsin-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|15116|b7552710d35202b6 -mwagner@evoq.home.mwagner.org|Docs/Books/sql-99.eps|20001231203220|25230|cec4ae16fee4c640 -mwagner@evoq.home.mwagner.org|mysql-test/chew_on_this/select.tst|20001013104933|54568|2e626fa07144d2c8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000002.xml|20001013074610|25702|8cd06da5293a7147 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000008.xml|20001017133627|18273|1d6082f0905c51b6 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000018.xml|20001017133713|10435|82e2e7bde83f56d8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000022.xml|20001017133713|17202|da2083ef423ae39a -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000027.xml|20001017133713|27519|95e7de3e9934b570 -sasha@mysql.sashanet.com|mysql-test/r/mrg000002.result|20001212152450|11492|745be0854aaaaf5e -sasha@mysql.sashanet.com|mysql-test/t/fulltext_join.test|20010730234357|20865|e347c8f04405c916 +serg@serg.mysql.com|mysql-test/r/ft0000002.a.result|20001212120058|27306|a89b4db1db19f944 serg@serg.mysql.com|mysql-test/r/ft0000002.b.result|20001212120058|34425|5de41ce15ae1cedb +serg@serg.mysql.com|mysql-test/r/ft0000002.c.result|20001212120059|07173|cd66b90918a87531 +serg@serg.mysql.com|mysql-test/t/3.23/mrg000001.test|20001206231615|27540|e0327f9d1e6cb4e +serg@serg.mysql.com|mysql-test/t/sel000006.test|20001211130730|19922|291cc6c8d85e51df +serg@serg.mysql.com|mysql-test/t/sel000007.test|20001211130730|24336|f431e4f4739a24c3 +serg@serg.mysql.com|mysql-test/t/sel000008.test|20001211130730|28581|b338ef585cadf7ae +serg@serg.mysql.com|mysql-test/t/sel000009.test|20001211130730|33139|a455c38f5c942cd1 +serg@serg.mysql.com|mysql-test/t/sel000010.test|20001211130731|03554|ca07085ae92255f1 +serg@serg.mysql.com|mysql-test/t/sel000011.test|20001211130731|08373|c2a971726c9d18d6 +serg@serg.mysql.com|mysql-test/t/sel000012.test|20001211130731|13215|ae64bff363c42e92 +serg@serg.mysql.com|mysql-test/t/sel000013.test|20001211130731|18090|ce8aa504ba4f74ba +serg@serg.mysql.com|mysql-test/t/sel000014.test|20001211130731|22977|74cb8c70f1d73fcc +serg@serg.mysql.com|mysql-test/t/sel000015.test|20001211130731|27841|7442bf9cbc96fe07 +serg@serg.mysql.com|mysql-test/t/sel000016.test|20001211130731|32739|f495235f14c47ec serg@serg.mysql.com|mysql-test/t/sel000017.test|20001211130731|37659|7c39f2b45a6aa780 serg@serg.mysql.com|mysql-test/t/sel000018.test|20001211130731|42584|16207f3ad74de75e -serg@serg.mysql.com|mysql-test/t/sel000022.test|20001211130731|62553|6e3e5435e66875e9 -serg@serg.mysql.com|mysql-test/t/sel000023.test|20001211130731|02042|7bdfcfaa278f837d -serg@serg.mysql.com|mysql-test/t/sel000025.test|20001211130731|12136|65b32b4b67e4c77 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.eps|20020228162345|64529|31ade79a89683616 -tim@cane.mysql.fi|mysql-test/r/delete.result|20001221095802|20463|e866a6678e29f186 -tim@threads.polyesthetic.msg|bdb/build_win32/db_deadlock.dsp|20010305004134|28374|befd45d29eaeb672 -tim@threads.polyesthetic.msg|bdb/build_win32/db_dump.dsp|20010305004134|29985|e07d2a82708b61 -tim@threads.polyesthetic.msg|bdb/build_win32/db_recover.dsp|20010305004134|34274|835c32ab73359256 -tim@threads.polyesthetic.msg|bdb/build_win32/db_static.dsp|20010305004135|01425|78ea414467defc70 -tim@threads.polyesthetic.msg|bdb/build_win32/ex_access.dsp|20010305004135|07926|8dd6017efffae14e -tim@threads.polyesthetic.msg|bdb/build_win32/ex_mpool.dsp|20010305004135|11076|9eb937bc70c1573 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_access.dsp|20010305004135|12614|31e87b6228470681 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.def|20010305004137|13920|bb65b471d09f7c58 -tim@threads.polyesthetic.msg|bdb/dist/build/chk.srcfiles|20010305004137|18056|ae884700cd110cbf -tim@threads.polyesthetic.msg|bdb/dist/template/rec_crdel|20010305004137|24191|58795c0c5232f80d -tim@threads.polyesthetic.msg|bdb/docs/api_c/c_index.html|20010305004143|28133|1a854fa55012906 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_del.html|20010305004144|11427|e8bffcf9be371317 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get.html|20010305004144|29265|7e0018b93ee31eba -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_type.html|20010305004144|31538|d66aa1642a4d20e2 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_open.html|20010305004144|34314|59dfa6e5198c382e -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_realloc.html|20010305004144|03204|a9be244baf966892 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_verify.html|20010305004144|21372|cf80f5ba845eac2e -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_remove.html|20010305004144|31547|a71d5e1ca41324a7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_cachesize.html|20010305004144|32567|f4c341d3f2c09469 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errcall.html|20010305004145|00341|ba09eec1ba15f15f -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_objects.html|20010305004145|25791|1a428bbee06cb5cc -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mp_mmapsize.html|20010305004145|26668|21f27997f00accfe -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mutexlocks.html|20010305004145|27540|85bbd53b877cafe1 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_paniccall.html|20010305004144|07360|97a1d58189199453 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fget.html|20010305004145|56294|460714b5c2e3e1c5 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_register.html|20010305004145|61165|8b9dff9b5043da58 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_malloc.html|20010305004144|15535|5579a0604e14e1e7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_rename.html|20010305004144|20199|3f8c7b6674cda105 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_write.html|20010305004144|24518|63567be42d586fde -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_commit.html|20010305004145|02592|8950b5e11c8b0778 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errpfx.html|20010305004146|14381|1f26e7b0bb5a067f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_sync.html|20010305004146|27538|dadf1f745e44faa7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errpfx.html|20010305004146|42728|d26da4bab9538234 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_dir.html|20010305004146|46674|c08aac264e7faa97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_pageyield.html|20010305004146|56583|db4e5bdf71e171c0 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_version.html|20010305004146|06444|1cff25c44cbea934 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/pindex.src|20010305004145|09392|d65361c4acfcef06 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_commit.html|20010305004147|03924|65afb8caf9c470ae -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/what.html|20010305004145|27185|a64f42c697273c44 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_close.html|20010305004147|24101|21595167f4fdbe88 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_del.html|20010305004147|25922|f4f15b362b114506 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_remove.html|20010305004147|34343|49d3b8c7e5a5b000 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_class.html|20010305004147|11473|8ee03c40ae0dbcb8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_put.html|20010305004147|00700|da0f0fa974385abd -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_shm_key.html|20010305004147|28699|8c576698882f0edc -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tas_spins.html|20010305004147|30425|2f9963827fbcb3f -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_archive.html|20010305004148|11996|b4a9483dbb5a2b58 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_compare.html|20010305004148|12947|756622b42572ecb -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_put.html|20010305004148|16729|ad7e9f382abde491 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_stat.html|20010305004148|18608|d186a08662046aba -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_join.html|20010305004148|46525|cb3eb61ed17a1f8 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_remove.html|20010305004148|60117|9090900413ff0280 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/pindex.src|20010305004148|39123|f8754fff24f2cb24 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/error.html|20010305004148|19390|45ac854e68196844 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/verify.html|20010305004149|01382|badaeba91bda50e1 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_prefix.html|20010305004149|19903|4e7602aa68d50fe1 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/utilities.html|20010305004149|40326|54d7014fab332c7a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sco.html|20010305004149|55174|e25f6271a1b753d0 -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/utility.html|20010305004149|15969|8fc100fdb58adb3c -tim@threads.polyesthetic.msg|bdb/docs/ref/env/create.html|20010305004149|17402|9f454cb1910df0b8 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/naming.html|20010305004149|20447|1f041789686cc8a0 -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.le.txt|20010305004150|23615|528ef76418c8b45c -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/data.html|20010305004149|26092|33fbf7496c58cf63 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/distrib.html|20010305004149|30742|84b56709310017f2 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/products.html|20010305004149|32785|f37221772a3b589d -tim@threads.polyesthetic.msg|bdb/docs/ref/java/compat.html|20010305004150|25581|b39d173789bbf70d -tim@threads.polyesthetic.msg|bdb/docs/ref/program/dbsizes.html|20010305004150|52571|d70da530573b9b38 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/errorret.html|20010305004150|55412|23491397d7e704e9 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/recimp.html|20010305004150|60288|bbdb0feb7d467a80 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/version.html|20010305004150|62172|d266e819d1531df8 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/hash_usenix.ps|20010305004150|05408|11cad226b0aa012b -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/refs.html|20010305004150|64422|30490b237ba9b61 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/handles.html|20010305004150|21935|18a14f4a50e7bad0 -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/using.html|20010305004151|23908|28856d8c72d0660b -tim@threads.polyesthetic.msg|bdb/docs/ref/test/run.html|20010305004151|39305|63c0398e7e2a29e2 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/toc.html|20010305004151|04069|670791f294a61494 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db.html|20010305004151|07207|e7d63f4bb8e989e8 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_stat.html|20010305004151|24428|20b5898ba061557d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/memp_stat.html|20010305004151|25363|79e1141c63f7357 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/xa.html|20010305004152|00602|1af042e462ab829 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/config.html|20010305004152|38401|d2ace28f39ab0f8d -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/sysmem.html|20010305004152|48282|3d088eb0ef1b27e0 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/legal.html|20010305004152|02616|7388af4c578cacf6 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_checkpoint.html|20010305004152|08309|c040e4424edcc451 -tim@threads.polyesthetic.msg|bdb/include/common_ext.h|20010305004137|20146|35c8aab64ee3b8fd -tim@threads.polyesthetic.msg|bdb/include/log_auto.h|20010305004138|13513|8d52dd0884d03051 -tim@threads.polyesthetic.msg|bdb/include/os_ext.h|20010305004138|20730|a1771032b4d2d53b -tim@threads.polyesthetic.msg|bdb/include/rpc_server_ext.h|20010305004138|29091|952741fb85de2b80 -tonu@x3.internalnet|include/vio.h|20010520213124|42404|c62fd2b86c03da7d -BK|Docs/Flags/kroatia.gif|19700101030959|00146|bea7bbe0316d462d -BK|Docs/Flags/kroatia.txt|19700101030959|00224|dde7f89f25d616b2 -BK|mit-pthreads/pgcc|19700101030959|00596|154a03d0c1a0a600 -BK|sql-bench/Results-win32/ATIS-mysql-win98|19700101030959|02523|cd0705815d3af451 -BK|sql-bench/Results-win32/big-tables-mysql-win98|19700101030959|02532|99a1882effebbdf2 -BK|sql-bench/Results/ATIS-mysql-3.21-Linux_2.2.1_i686|19700101030959|02022|660fb76ed6ccfb6f -BK|sql-bench/Results/RUN-mysql_3.21-Linux_2.0.35_i686|19700101030959|02064|ea8672d8473435 -BK|sql-bench/Results/big-tables-mysql-3.21-Linux_2.2.1_i686|19700101030959|02106|baa649caba113497 -BK|sql-bench/Results/select-mysql-3.21-Linux_2.2.1_i686|19700101030959|02265|ed3687e713ff0571 -BK|sql/Attic/lex_hash.h|19700101030959|01912|14f912771118b50c -BK|sql/share/czech/errmsg.sys|19700101030959|01828|93104a2bd5c732a -BK|sql/share/greek/errmsg.sys|19700101030959|01842|fedf585fa73e7cf1 -BK|sql/share/slovak/errmsg.sys|19700101030959|01862|148510616ae825cf -BK|sql/violite.c|19700101030959|01738|d7b85be615595ace -BK|strings/Attic/ctype-cp1251.c|19700101030959|01339|cdf74b9168408b3 -BK|strings/Attic/ctype-dec8.c|19700101030959|01343|68f257dd2202d0c7 -BK|vio/VioConnectorFd.h|19700101030959|00008|58bc11cdc885b951 -BK|vio/VioPipe.cc|19700101030959|00011|12cf83b9a2f48f6c -BK|vio/VioSSLAcceptorFd.cc|19700101030959|00015|4c828f3688ed74ec -BK|vio/version.cc|19700101030959|00020|7237acf12bed4a97 -arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d -miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsw|20020319032514|44870|3209982720f131ab -miguel@hegel.local|zlib/contrib/asm686/match.s|20020319032514|64199|4164951e8e19f116 -miguel@hegel.local|zlib/contrib/iostream/zfstream.h|20020319032515|61553|2b4d88acc2d3b714 -miguel@hegel.local|zlib/contrib/minizip/zip.def|20020319032516|34413|e9bda2081d65c22e -miguel@hegel.local|zlib/contrib/minizip/zlibvc.def|20020319032516|47259|6dc42f99d2d55cad -miguel@hegel.local|zlib/contrib/untgz/untgz.c|20020319032516|07726|b74e9dde74642756 -miguel@hegel.local|zlib/contrib/visual-basic.txt|20020319032516|14096|cd461e762199bb09 -miguel@hegel.local|zlib/deflate.h|20020319032516|33700|3a012bc1f5dfbc74 -miguel@hegel.local|zlib/inftrees.c|20020319032517|25758|4fcb97357cdbc40 -miguel@hegel.local|zlib/trees.h|20020319032519|50674|87161133bc2155fd -monty@hundin.mysql.fi|sql-bench/Results/alter-table-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|01419|14360865bbba479f -monty@narttu.mysql.com|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|23516|441a6aefd381e319 -monty@narttu.mysql.fi|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|21374|d4766c7f8e70d7a2 -monty@narttu.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|25875|155a83b53c0e9d6 -monty@narttu.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha|20001014001004|26814|688809eb8ea77b3d -monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|11605|ee2a063d66a183d -monty@work.mysql.com|fs/fsck.mysql|20010411110350|07619|87170d4358b50d60 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000001.xml|20001013051507|22498|f0eb64c0346366db -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000004.xml|20001017133600|56955|515488ef221523d9 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000005.xml|20001017133618|09973|a6344e46ba572dc3 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000014.xml|20001017133713|05036|bcf55df6a036bd8f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000019.xml|20001017133713|12133|c0f0b05e481b90e7 -mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/README|20001013051514|26509|cd4bb681e5a0cd10 -sasha@mysql.sashanet.com|mysql-test/std_data/m.frm|20001212152450|13897|e351dfe0b6824c0c -sasha@mysql.sashanet.com|mysql-test/t/3.23/shw000001.test|20001121234128|21322|770d96a2c1c65b20 -sasha@mysql.sashanet.com|mysql-test/t/mrg000002.test|20001212152450|20137|16b3a176adc0f311 -serg@serg.mysql.com|mysql-test/r/ft0000002.c.result|20001212120059|07173|cd66b90918a87531 -serg@serg.mysql.com|mysql-test/t/sel000026.test|20001211130731|17211|d8aa2d614f23b1 -serg@serg.mysql.com|mysql-test/t/sel000029.test|20001211130731|32917|6aae34dbb3ee86d9 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.gif|20020228162348|36945|364ca7338682f71 -tim@threads.polyesthetic.msg|bdb/build_win32/db_archive.dsp|20010305004134|25535|e3da826e91bb086 -tim@threads.polyesthetic.msg|bdb/build_win32/db_printlog.dsp|20010305004134|32975|163f6e1073a5f396 -tim@threads.polyesthetic.msg|bdb/build_win32/db_verify.dsp|20010305004135|04464|e9a4938542f86cea -tim@threads.polyesthetic.msg|bdb/build_win32/ex_tpcb.dsp|20010305004135|11838|644b38dae8b38152 -tim@threads.polyesthetic.msg|bdb/build_win32/libdb.rc|20010305004135|20964|906f4936ec6a8398 -tim@threads.polyesthetic.msg|bdb/dist/template/db_server_proc|20010305004137|21042|2e8b49d42aefab55 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_err.html|20010305004143|33003|3696088bd85eeda3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_byteswapped.html|20010305004144|30478|bcab4145183a7be2 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_put.html|20010305004144|35267|ea78709ffb6cd7e8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_cachesize.html|20010305004144|02131|47a3c8ca486eb013 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errcall.html|20010305004144|04030|faf92be4ee8bc634 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_flags.html|20010305004144|07758|4cd3700ae4387d22 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_close.html|20010305004144|22419|a3ad4ea563bafc42 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_create.html|20010305004144|05736|3e73dd35fe5dcc8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_data_dir.html|20010305004144|33569|437cec65e441c60 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_bsize.html|20010305004145|04625|1eb03c137a42e80f -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_get.html|20010305004145|42084|63399d204f1885fa -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_put.html|20010305004145|44022|f5bc2f52e55f16e1 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_stat.html|20010305004145|44954|d9a98bb949070b -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fput.html|20010305004145|58291|4a7aace7db01ee15 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fset.html|20010305004145|59241|ecb97931b222568d -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fsync.html|20010305004145|60192|a95ab802bb28646f -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_free.html|20010305004144|13076|ed61d2dfea9e069e -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_open.html|20010305004144|17474|8c812591efc8abe6 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unmap.html|20010305004144|23658|d85790692f3b536e -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_stat.html|20010305004145|04637|f57a656bfbac12bf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_type.html|20010305004146|01846|398668783c4070db -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_compare.html|20010305004146|08946|d888d1ebe056bc6b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_minkey.html|20010305004146|09837|d6181e52342005c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_lorder.html|20010305004146|19980|a46750a29588268c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_del.html|20010305004146|32671|424fc0ebb3b4c5cf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_data_dir.html|20010305004146|40779|9176f081597e4f27 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errfile.html|20010305004145|18322|f9543c9e65ed6a1d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_error_stream.html|20010305004145|19317|a4101c1d68559fa2 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max.html|20010305004146|50580|52ac3c4ca2876de -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_id.html|20010305004146|08539|b3c7995efbe12c16 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_stat.html|20010305004146|10635|2112ceb0894b34d8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_vec.html|20010305004146|11739|c55deaa5173a3323 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_unregister.html|20010305004146|21535|8fa1fe691751d6ad -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_type.html|20010305004147|29592|4cfb6f09cbe0b8ae -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_open.html|20010305004147|32409|bfc13736b96ac509 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_put.html|20010305004147|33389|c476abe5599f21cf -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_compare.html|20010305004147|37206|e972f964d042b35e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_minkey.html|20010305004147|38144|c7e1f184bdca25fa -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_feedback.html|20010305004147|45141|69b4c07b3dbe383 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_ffactor.html|20010305004147|47226|edcc10024104d57e -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_q_extentsize.html|20010305004147|52035|6ac26239fc538cb -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_sync.html|20010305004147|58064|42391f7d5f200b90 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_count.html|20010305004147|62108|9c239575f4550756 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_dup.html|20010305004147|64103|aa141014c4d7f9b0 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_get.html|20010305004147|65144|e66e387b83681e73 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_close.html|20010305004147|01809|c4e2ec77d7d14d4f -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_remove.html|20010305004147|04039|e92277e3dfd9bba1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_conflicts.html|20010305004147|14497|8951eb975a90918b -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mp_mmapsize.html|20010305004147|20894|b7dea9108fa65dfa -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_server.html|20010305004147|27545|d901cdab9698605d -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_max.html|20010305004147|33999|70f356b8b67782fe -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_class.html|20010305004147|19738|880aa614d1469304 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_register.html|20010305004148|17668|c68fc6fb22dd594a -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_stat.html|20010305004148|27008|4628462474db62b4 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_sync.html|20010305004148|27969|5b401daadc7261eb -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_checkpoint.html|20010305004148|31832|2565ac892d04b63d -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_open.html|20010305004148|47486|f588cc9bc694cbf0 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_put.html|20010305004148|48549|380c7caeced55512 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_dup.html|20010305004148|55139|325121689412d70b -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_index.html|20010305004148|61088|443e6b9a10ef4139 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_abort.html|20010305004148|63068|8cc23b6ef6f457d2 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/version.html|20010305004148|65038|eeb51f4de1bbfe8e -tim@threads.polyesthetic.msg|bdb/docs/index.html|20010305004143|26935|450dd5db21a9bb64 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/close.html|20010305004148|10227|ed6f7427edc0431 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curget.html|20010305004148|15271|d7dd42affcd54073 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_ffactor.html|20010305004149|25120|5eb87b7ce99f3362 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/smallpic.gif|20010305004149|42169|fdf77055d7e711 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/hpux.html|20010305004149|47818|d34942564699608 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/linux.html|20010305004149|51464|f9f2d09dc6df75e -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/notes.html|20010305004149|52391|97e9b52853db15ea -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sunos.html|20010305004149|58008|fc41965e9d95985c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/ultrix.html|20010305004149|59865|a1dd780edcde11f6 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/notes.html|20010305004149|01764|4058bf968f287f7 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/intro.html|20010305004149|06616|57ef29f26341ea -tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.be.txt|20010305004150|22805|cf7d25e758432ab6 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/what.html|20010305004150|00539|dd70b9e6e085725d -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/dead.html|20010305004150|33535|f5c7debd9ba739bb -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/max.html|20010305004150|35299|f0fb32ebc251f636 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/notxn.html|20010305004150|37003|beec805d9f05e2bc -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/stdmode.html|20010305004150|38797|4048a052ea129ca3 -tim@threads.polyesthetic.msg|bdb/docs/ref/mp/intro.html|20010305004150|45138|34937731cafcf1b1 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/mt.html|20010305004150|57429|552ab570b657fc0e -tim@threads.polyesthetic.msg|bdb/docs/ref/program/namespace.html|20010305004150|58394|182f8f762343bdc1 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/intro.html|20010305004150|22878|7544c4688623a54c -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/error.html|20010305004151|21581|37b817c57777b460 -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/intro.html|20010305004151|20749|d66c6c398e2ace0b -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/deadlock.html|20010305004151|46421|34914b9dc6b01703 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/put.html|20010305004151|51420|8cc785aeecff8535 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/term.html|20010305004151|54819|d6f3fa4fc5a630ec -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/transapp.txt|20010305004151|57368|337576ea2aae23b0 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/why.html|20010305004151|56525|c941c1a56a0adbaf -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/config.html|20010305004151|59874|c7337cb30f9bf66 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/system.html|20010305004151|03146|eae0256a127c3c89 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/close.html|20010305004151|05457|c79c866b393785cc -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbinfo.html|20010305004151|10780|7529af7145c0680a -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/envopen.html|20010305004151|14369|5e768fd180f471e4 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_detect.html|20010305004151|19846|fb307b10156762ca -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_commit.html|20010305004151|32241|e1debf9ea769426c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/disk.html|20010305004152|39192|2abdaf9059265ba9 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/callback.html|20010305004152|53656|64a2b2b85cc253c1 -tim@threads.polyesthetic.msg|bdb/docs/sleepycat/license.html|20010305004152|03483|9371001bbf0ba2dd -tim@threads.polyesthetic.msg|bdb/docs/utility/index.html|20010305004152|05717|66c82ee036c1b369 -tim@threads.polyesthetic.msg|bdb/qam/qam_auto.c|20010305004141|31764|361954d3f149feb0 -tim@threads.polyesthetic.msg|bdb/test/logtrack.list|20010305004142|05743|7f4f1382b37d98e5 -BK|Docs/Flags/south-africa1.eps|19700101030959|00193|111e4f92f4562e9d -BK|sql-bench/Results-win32/create-mysql-win98|19700101030959|02538|f66c2cb2909c4792 -BK|sql-bench/Results/wisconsin-mysql_3.21-Linux_2.0.35_i686|19700101030959|02302|31703d40ea6b4f66 -BK|sql/share/english/errmsg.sys|19700101030959|01834|f29bd4ea5aaf54c8 -BK|sql/share/german/errmsg.sys|19700101030959|01840|1ea60675399c84c -BK|sql/share/korean/errmsg.sys|19700101030959|01850|a30e3687ae75a7c9 -miguel@hegel.local|zlib/contrib/delphi/zlib.mak|20020319032514|11153|7b97eb8cf290a42 -miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsp|20020319032516|54044|ec35fd54c9b49987 -miguel@hegel.local|zlib/faq|20020319032517|20799|b0d0840d3b9faf07 -miguel@hegel.local|zlib/zlib.h|20020319032519|20598|fbec7833981c782f -monty@donna.mysql.com|sql-bench/Results/big-tables-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17709|6d8209bf72b663ed -monty@hundin.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|32241|dd306b2e583ebde4 -monty@hundin.mysql.fi|sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|56860|b01175ad38fd12b6 -monty@hundin.mysql.fi|sql-bench/Results/wisconsin-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|23386|1ed1dc6abd24e7e3 -monty@narttu.mysql.com|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|15583|a2a77f37b689cd63 -monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.14_my_SMP_i686|20001218015323|04134|d46860c29c5d51ee -monty@work.mysql.com|libmysqld/WHITEPAPER|20010411110351|28263|da1226799debcf3f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000007.xml|20001017133625|48163|bfcb6d85276be7e8 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000016.xml|20001017133713|07087|32f1ef2e3d214be0 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000023.xml|20001017133713|20719|11993b379b9838be -sasha@mysql.sashanet.com|mysql-test/t/identity.test|20010910233028|36116|326f469b59105404 -serg@serg.mysql.com|mysql-test/r/ft0000001.a.result|20001211130756|05199|3d17aff15fa5a9f1 -serg@serg.mysql.com|mysql-test/r/ft0000001.c.result|20001211130756|14950|1040289a75243a92 -serg@serg.mysql.com|mysql-test/t/3.23/mrg000001.test|20001206231615|27540|e0327f9d1e6cb4e -serg@serg.mysql.com|mysql-test/t/sel000009.test|20001211130730|33139|a455c38f5c942cd1 serg@serg.mysql.com|mysql-test/t/sel000019.test|20001211130731|47552|8fd63c8dc6be8dbc serg@serg.mysql.com|mysql-test/t/sel000020.test|20001211130731|52532|c5758ad18a6dff1e -tim@threads.polyesthetic.msg|bdb/dist/build/chk.offt|20010305004137|16371|25759c9294db634e -tim@threads.polyesthetic.msg|bdb/dist/template/rec_log|20010305004137|27185|3fe6d62c43bc553a -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_fd.html|20010305004144|28004|15a01776b340a959 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_key_range.html|20010305004144|33389|1060761b1e359d85 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_paniccall.html|20010305004144|02405|ac7f63325b4499ce -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_del.html|20010305004144|24335|2685f75d28e4ad99 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_open.html|20010305004144|29421|e4c9706220a4cd9b -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_id.html|20010305004145|43025|c9ee776f928a38f -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_archive.html|20010305004145|46850|490428ce45f9f918 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_flush.html|20010305004145|49632|bb8bc4fc43c9f63d -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fopen.html|20010305004145|57267|d032a963a0103472 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_stat.html|20010305004145|62160|55a9521fe04b03bd -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_sync.html|20010305004145|63168|b387035a94c20c50 -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_begin.html|20010305004145|00608|557b34fd3e7363 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_close.html|20010305004145|28189|cc570e65ac7d22f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get.html|20010305004145|34357|3b6e6005f3f17f2a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_cachesize.html|20010305004146|12541|3befdbaf98d5a04e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_dup_compare.html|20010305004146|13472|91f36955a213e0f4 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_pagesize.html|20010305004146|20914|b8d544ec3e102c6c -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_count.html|20010305004146|31395|bc025b8894450525 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbenv_class.html|20010305004145|16297|5ab8aaf8a531f76b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_open.html|20010305004146|37756|66ac1ae7fa67ca4a -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errcall.html|20010305004146|41745|bae25b45b0196773 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_locks.html|20010305004146|51576|bbde4ffbcc607f61 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_objects.html|20010305004146|53572|c47424e4d13d5327 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_stat.html|20010305004146|20379|dc2d4ffe7950fc09 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fput.html|20010305004146|26004|7ee8cda6287dee81 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_stat.html|20010305004146|31867|d370717a78971be1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_stat.html|20010305004147|06751|e8e25f86f8541696 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_max.html|20010305004147|13429|c9f705492162e175 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_region_init.html|20010305004147|26379|30534afa94cbf54e -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_put.html|20010305004148|09226|5af89e4cbf29c694 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_trickle.html|20010305004148|28912|4d5c4e83a4a5c638 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_class.html|20010305004147|23221|c7bb2a3393ca9488 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_stat.html|20010305004148|34772|9a6ef8c262f218f9 -tim@threads.polyesthetic.msg|bdb/docs/images/sleepycat.gif|20010305004148|07668|ea63aaaa508ef096 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/get.html|20010305004148|20425|96c9c9a01c32d16 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/put.html|20010305004148|28752|8e18b0af61eb7f0f -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.gif|20010305004149|41251|fe43e7415b3bbdb0 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/freebsd.html|20010305004149|46918|8ed2a42e1668004c -tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/text.html|20010305004149|14998|88b57a73860b423 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/page.html|20010305004150|37863|d56876b2565cbee -tim@threads.polyesthetic.msg|bdb/docs/ref/perl/intro.html|20010305004150|47570|ce7e794e619e1e1d -tim@threads.polyesthetic.msg|bdb/docs/ref/pindex.src|20010305004149|02223|7d74723f9fd25801 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/environ.html|20010305004150|54494|dc4a48aa531bd399 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/solaris.txt|20010305004150|63135|8b6bb29de0d58ffe -tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/faq.html|20010305004151|22367|f8433900f7f85400 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/disk.html|20010305004151|01410|94dc4e6e3668e613 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/cxx.html|20010305004151|06323|7f3bfc9bba854d48 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/btstat.html|20010305004152|37584|40a76aef8b25a948 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tcl.html|20010305004152|49096|f5c85b09c33bda4 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/intro.html|20010305004152|57734|984a9f7dd07e0c14 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/set_flags.html|20010305004152|61061|213809ca8d7802d0 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/intro.html|20010305004152|00728|8ac020ffb869e9a8 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_deadlock.html|20010305004152|09191|f23f99911c3e5784 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_verify.html|20010305004152|15424|4fee9bfa2f9ab41a -tim@threads.polyesthetic.msg|bdb/include/hash_ext.h|20010305004138|10079|5b31ff8413481606 -tim@threads.polyesthetic.msg|bdb/include/qam_auto.h|20010305004138|24568|96f6c045fd0d6cab -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_svc.c|20010305004141|50897|35804eb82b953f49 -BK|Docs/Flags/island.txt|19700101030959|00220|301ede0f81c5f3e1 -BK|client/violite.c|19700101030959|00561|afa871b4aab14371 -BK|include/Attic/config-win32.h|19700101030959|00116|65db818ec7e8f21b -BK|sql-bench/Results/connect-mysql_3.21-Linux_2.0.35_i686|19700101030959|02146|650abd213e6828c6 -BK|sql-bench/Results/insert-mysql-3.21-Linux_2.2.1_i686|19700101030959|02239|fd082017c7c57a6 -BK|sql-bench/Results/wisconsin-mysql-3.21-Linux_2.2.1_i686|19700101030959|02290|8147dc16a1dc6c47 -BK|sql/ha_hash.h|19700101030959|01902|27e36916116beb3e -BK|sql/share/hungarian/errmsg.sys|19700101030959|01845|aff82c16a77fc800 -BK|sql/share/japanese/errmsg.sys|19700101030959|01848|302478c84697dc00 -BK|sql/share/norwegian/.cvsignore|19700101030959|01853|a91d63182f0b2366 -BK|sql/share/russian/errmsg.sys|19700101030959|01860|72688df0beeabcb3 -BK|sql/share/spanish/errmsg.sys|19700101030959|01865|10c8f32da39070b2 -BK|strings/Attic/ctype-cp1257.c|19700101030959|01340|732611cbc74aeafc -BK|strings/Attic/ctype-hebrew.c|19700101030959|01348|d3b4a000d51e76dc -BK|strings/Attic/ctype-win1251ukr.c|19700101030959|01359|b5a7cca889bbef58 -BK|strings/Attic/memory.h|19700101030959|01336|450f586e82a26d99 -BK|tests/fork_test.pl|19700101030959|01945|3d3535329ed8cd5e -BK|vio/VioAcceptorFd.h|19700101030959|00006|7f9c4358477ba9a3 -BK|vio/VioFd.h|19700101030959|00010|8294293a88c7b4b8 -BK|vio/VioPipe.h|19700101030959|00012|21cebbe61a1da546 -miguel@hegel.local|zlib/contrib/iostream/zfstream.cpp|20020319032515|55262|dce18d1a5d7096b7 -miguel@hegel.local|zlib/contrib/minizip/miniunz.c|20020319032515|21943|6a80009b319b1b9e -miguel@hegel.local|zlib/contrib/minizip/unzip.def|20020319032516|14456|b4162b8c833ab6c7 -miguel@hegel.local|zlib/descrip.mms|20020319032517|08063|7d61d33062ef53ec -miguel@hegel.local|zlib/minigzip.c|20020319032518|25601|37f8eacb80c7f8fc -miguel@hegel.local|zlib/os2/zlib.def|20020319032519|28842|1166a95d83c5f52c -monty@donna.mysql.com|sql-bench/Results/alter-table-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|17106|6e532c1936df1737 -monty@donna.mysql.com|sql-bench/Results/connect-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|18910|7ed15d6fd1a5944c -monty@donna.mysql.com|sql-bench/Results/select-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|24071|4f7795c27eaab86b -monty@hundin.mysql.fi|sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|39143|662b96bc66bc91b6 -monty@hundin.mysql.fi|sql-bench/Results/create-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|12309|f3b1d326092bf44 -monty@narttu.mysql.com|sql-bench/Results/ATIS-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|07879|2ac8fe298953d43 -monty@narttu.mysql.com|sql-bench/Results/RUN-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|09727|79ac0482599eace1 -monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha|20001014001004|08145|21ddf9425cbdd58 -monty@narttu.mysql.fi|sql-bench/Results/big-tables-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|30548|f1127add9307098b -monty@narttu.mysql.fi|sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha|20001014001004|23947|2c9af91e9771f618 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000003.xml|20001013074610|26659|1a622b8d30d7ade8 -sasha@mysql.sashanet.com|build-tags|20011201050944|25384|b6f6fff142121618 -sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000004.test|20001103140433|32471|daf9ad4a1a31cd3c -sasha@mysql.sashanet.com|sounds/compilation_finished.au.gz|20010814034002|63992|70bd14095a918139 -serg@serg.mysql.com|mysql-test/t/sel000013.test|20001211130731|18090|ce8aa504ba4f74ba +serg@serg.mysql.com|mysql-test/t/sel000021.test|20001211130731|57561|94dd47de2872264a +serg@serg.mysql.com|mysql-test/t/sel000022.test|20001211130731|62553|6e3e5435e66875e9 +serg@serg.mysql.com|mysql-test/t/sel000023.test|20001211130731|02042|7bdfcfaa278f837d +serg@serg.mysql.com|mysql-test/t/sel000024.test|20001211130731|07099|849f47e6cbdc4fe3 +serg@serg.mysql.com|mysql-test/t/sel000025.test|20001211130731|12136|65b32b4b67e4c77 +serg@serg.mysql.com|mysql-test/t/sel000026.test|20001211130731|17211|d8aa2d614f23b1 +serg@serg.mysql.com|mysql-test/t/sel000027.test|20001211130731|23677|ab44bb57a580de9 serg@serg.mysql.com|mysql-test/t/sel000028.test|20001211130731|28317|db9bfc0a808fb629 +serg@serg.mysql.com|mysql-test/t/sel000029.test|20001211130731|32917|6aae34dbb3ee86d9 serg@serg.mysql.com|mysql-test/t/sel000030.test|20001211130732|03110|a29683eac3e7b706 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.eps|20020228162345|64529|31ade79a89683616 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.gif|20020228162348|36945|364ca7338682f71 +tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.txt|20020228162350|33044|e155c53c10374ff +tim@cane.mysql.fi|mysql-test/r/delete.result|20001221095802|20463|e866a6678e29f186 tim@cane.mysql.fi|mysql-test/t/delete.test|20001221095802|36821|389410e29f2cebe5 tim@threads.polyesthetic.msg|bdb/btree/btree_auto.c|20010305004134|12592|a683156a176761f +tim@threads.polyesthetic.msg|bdb/build_vxworks/db_int.h|20010305004134|18702|40ba51edce41403f +tim@threads.polyesthetic.msg|bdb/build_win32/db_archive.dsp|20010305004134|25535|e3da826e91bb086 tim@threads.polyesthetic.msg|bdb/build_win32/db_checkpoint.dsp|20010305004134|26943|8071af22db95b1db +tim@threads.polyesthetic.msg|bdb/build_win32/db_deadlock.dsp|20010305004134|28374|befd45d29eaeb672 +tim@threads.polyesthetic.msg|bdb/build_win32/db_dll.dsp|20010305004134|29137|4e9dda53c84511b6 +tim@threads.polyesthetic.msg|bdb/build_win32/db_dump.dsp|20010305004134|29985|e07d2a82708b61 +tim@threads.polyesthetic.msg|bdb/build_win32/db_int.h|20010305004134|30736|9ee5645850a336a0 +tim@threads.polyesthetic.msg|bdb/build_win32/db_java.dsp|20010305004134|31520|e3941d5a9810b360 +tim@threads.polyesthetic.msg|bdb/build_win32/db_load.dsp|20010305004134|32237|e83a2af8e24a715d +tim@threads.polyesthetic.msg|bdb/build_win32/db_printlog.dsp|20010305004134|32975|163f6e1073a5f396 +tim@threads.polyesthetic.msg|bdb/build_win32/db_recover.dsp|20010305004134|34274|835c32ab73359256 +tim@threads.polyesthetic.msg|bdb/build_win32/db_stat.dsp|20010305004135|00560|f77417f5d9984986 +tim@threads.polyesthetic.msg|bdb/build_win32/db_static.dsp|20010305004135|01425|78ea414467defc70 +tim@threads.polyesthetic.msg|bdb/build_win32/db_tcl.dsp|20010305004135|02285|5ad951d774e41520 tim@threads.polyesthetic.msg|bdb/build_win32/db_upgrade.dsp|20010305004135|03711|90fd250190af4984 +tim@threads.polyesthetic.msg|bdb/build_win32/db_verify.dsp|20010305004135|04464|e9a4938542f86cea +tim@threads.polyesthetic.msg|bdb/build_win32/ex_access.dsp|20010305004135|07926|8dd6017efffae14e +tim@threads.polyesthetic.msg|bdb/build_win32/ex_btrec.dsp|20010305004135|08710|c87137287d8d67dc +tim@threads.polyesthetic.msg|bdb/build_win32/ex_env.dsp|20010305004135|09533|1732d5e41efda77 +tim@threads.polyesthetic.msg|bdb/build_win32/ex_lock.dsp|20010305004135|10303|286d2566e786dde +tim@threads.polyesthetic.msg|bdb/build_win32/ex_mpool.dsp|20010305004135|11076|9eb937bc70c1573 +tim@threads.polyesthetic.msg|bdb/build_win32/ex_tpcb.dsp|20010305004135|11838|644b38dae8b38152 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_access.dsp|20010305004135|12614|31e87b6228470681 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_btrec.dsp|20010305004135|13384|61b563f4ac1f73eb +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_env.dsp|20010305004135|14159|b0bf2649a4c797ac +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_lock.dsp|20010305004135|14943|257abf03544f6270 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_mpool.dsp|20010305004135|15715|d17a5d09f09f5217 +tim@threads.polyesthetic.msg|bdb/build_win32/excxx_tpcb.dsp|20010305004135|16510|159c727e2c15105e +tim@threads.polyesthetic.msg|bdb/build_win32/include.tcl|20010305004135|17284|f8bffb5e2510f229 +tim@threads.polyesthetic.msg|bdb/build_win32/libdb.rc|20010305004135|20964|906f4936ec6a8398 +tim@threads.polyesthetic.msg|bdb/db/crdel_auto.c|20010305004136|27298|ee4146a08fd175c1 +tim@threads.polyesthetic.msg|bdb/db/db_auto.c|20010305004136|32432|3186e950cc321ae7 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.define|20010305004137|15254|aa9a626e58631003 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.def|20010305004137|13920|bb65b471d09f7c58 +tim@threads.polyesthetic.msg|bdb/dist/build/chk.offt|20010305004137|16371|25759c9294db634e +tim@threads.polyesthetic.msg|bdb/dist/build/chk.srcfiles|20010305004137|18056|ae884700cd110cbf +tim@threads.polyesthetic.msg|bdb/dist/build/chk.tags|20010305004137|19101|7a5b14d33d4078cc +tim@threads.polyesthetic.msg|bdb/dist/config.guess|20010305004136|14678|ead1d91caeaa748c +tim@threads.polyesthetic.msg|bdb/dist/config.hin|20010305004136|15955|fdecb7a06fa137a7 +tim@threads.polyesthetic.msg|bdb/dist/config.sub|20010305004136|16944|17e9990a298261a tim@threads.polyesthetic.msg|bdb/dist/install-sh|20010305004136|21695|1858c24340b72628 +tim@threads.polyesthetic.msg|bdb/dist/template/db_server_proc|20010305004137|21042|2e8b49d42aefab55 tim@threads.polyesthetic.msg|bdb/dist/template/gen_client_ret|20010305004137|22087|786a5e65119b3991 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_btree|20010305004137|23131|65d6b0b2f5b7a6d2 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_crdel|20010305004137|24191|58795c0c5232f80d +tim@threads.polyesthetic.msg|bdb/dist/template/rec_db|20010305004137|25141|52c5797539878fca +tim@threads.polyesthetic.msg|bdb/dist/template/rec_hash|20010305004137|26120|dcbdd106ae17b865 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_log|20010305004137|27185|3fe6d62c43bc553a +tim@threads.polyesthetic.msg|bdb/dist/template/rec_qam|20010305004137|28066|6eecf6833de0af98 +tim@threads.polyesthetic.msg|bdb/dist/template/rec_txn|20010305004137|29072|1ff22b797deb0e1b +tim@threads.polyesthetic.msg|bdb/docs/api_c/c_index.html|20010305004143|28133|1a854fa55012906 +tim@threads.polyesthetic.msg|bdb/docs/api_c/c_pindex.html|20010305004145|05766|697acebf58a8db4 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_close.html|20010305004144|26254|fda0b4dfa946f44e tim@threads.polyesthetic.msg|bdb/docs/api_c/db_create.html|20010305004143|29368|a87157ea60c82ee2 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_cursor.html|20010305004144|27133|7431dd96ed3492c +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_del.html|20010305004144|11427|e8bffcf9be371317 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_err.html|20010305004143|33003|3696088bd85eeda3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_fd.html|20010305004144|28004|15a01776b340a959 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get.html|20010305004144|29265|7e0018b93ee31eba +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_byteswapped.html|20010305004144|30478|bcab4145183a7be2 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_get_type.html|20010305004144|31538|d66aa1642a4d20e2 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_join.html|20010305004144|32446|a58c2d81ecfea5b +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_key_range.html|20010305004144|33389|1060761b1e359d85 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_lsn.html|20010305004143|34135|5edb9bce1118feae +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_open.html|20010305004144|34314|59dfa6e5198c382e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_put.html|20010305004144|35267|ea78709ffb6cd7e8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_remove.html|20010305004144|36184|668fa1d67a4f6941 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_rename.html|20010305004144|37128|36796ad9e106c3f0 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_append_recno.html|20010305004144|38070|bdf0130e642f74fa tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_compare.html|20010305004144|39551|e55a311bb0be93a8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_dup_compare.html|20010305004144|03068|a833bfc727a794e7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errfile.html|20010305004144|00766|f07d3c57bb3c8fbd -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_pagesize.html|20010305004144|12535|9644fa0f538cde17 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_count.html|20010305004144|23385|c3cd00c48b4babf5 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_dup.html|20010305004144|25301|3bdf8b0a687b43f3 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errpfx.html|20010305004145|01527|806c8c438d0ee36c -tim@threads.polyesthetic.msg|bdb/docs/api_c/hsearch.html|20010305004144|08165|a8b76d897a8216d8 -tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_detect.html|20010305004145|41159|8fe406dce10e0bb -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_put.html|20010305004145|51546|11a1bec49bb90419 -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_unregister.html|20010305004145|54401|45b8f9d3f8eb3d80 -tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_trickle.html|20010305004145|64180|8b1adf1404d7a5f -tim@threads.polyesthetic.msg|bdb/docs/api_c/pindex.src|20010305004143|31726|d1ecd116c42e0e23 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_class.html|20010305004145|08391|3129ff8c53721fe8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_fd.html|20010305004145|33050|99ec316575f80428 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_rename.html|20010305004146|07200|9c0a820e864220b3 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_prefix.html|20010305004146|11627|ecd8f927371a5dbd -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_hash.html|20010305004146|18078|afe952f65389d93b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_paniccall.html|20010305004145|13411|6bc911c9d64e9237 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_flags.html|20010305004146|44734|8136e8e1ae16dc02 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_bsize.html|20010305004146|45706|7fd917bea6b163bf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_max.html|20010305004146|47638|4f7ba5f02c66c0de -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mp_mmapsize.html|20010305004146|54573|c21e3f9c5a29b0ab -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_strerror.html|20010305004146|05414|7e1cbfbd096ca -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_archive.html|20010305004146|12836|d47f39e6dad7ee50 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_register.html|20010305004146|19292|55470e0d79382beb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fget.html|20010305004146|23710|bfe74f8c299c2995 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fset.html|20010305004146|27124|e52fa0488faa893 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_register.html|20010305004146|29358|cba6f572fe27c7a -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_byteswapped.html|20010305004147|28706|edbc66a9d5491a1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_join.html|20010305004147|30506|a3a6dead9cae65f9 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_rename.html|20010305004147|35341|19b20feaa815bc27 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_nelem.html|20010305004147|49144|fc6f22a4c285fcef -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_source.html|20010305004147|55969|b29827dbf47537d1 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_close.html|20010305004147|61116|e3bf1f36bc0e8e7e -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbt_class.html|20010305004147|13192|f6b04ff142e332f8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_error_stream.html|20010305004147|15677|a738119910b452b8 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_feedback.html|20010305004147|09255|9748745e65f070d5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_locks.html|20010305004147|17677|f0114205b169de39 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_pageyield.html|20010305004147|23054|774b3da0306a6767 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_panicstate.html|20010305004147|24142|72846d9a97cb80bb -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tmp_dir.html|20010305004147|32251|f23e4f614f6d975a -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_verbose.html|20010305004148|03690|9dcda0399c8256e7 -tim@threads.polyesthetic.msg|bdb/docs/api_java/except_class.html|20010305004147|16978|195c00e4a7cbe648 -tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_id.html|20010305004148|08326|737cf8d8dc74084e -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_get.html|20010305004148|15736|5fbbbd4baa60e052 -tim@threads.polyesthetic.msg|bdb/docs/api_java/mem_class.html|20010305004147|21486|2e5052b5b2bea584 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fopen.html|20010305004148|22355|f7cf58725aa1c406 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_register.html|20010305004148|26052|8331390a1c66fefd -tim@threads.polyesthetic.msg|bdb/docs/api_java/pindex.src|20010305004147|10521|de828917f041d27b -tim@threads.polyesthetic.msg|bdb/docs/api_java/runrec_class.html|20010305004147|22358|49c5cb3efe0c201 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_commit.html|20010305004148|32812|c265042f3340baa1 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_close.html|20010305004148|38213|f40794b17e0fe443 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_remove.html|20010305004148|50431|3b2be4b0b1b3dc98 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_sync.html|20010305004148|52310|3b615ca64d934602 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_close.html|20010305004148|58109|bf191b2673a2b19e -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/pagesize.html|20010305004149|30437|eb4800704ae1131b -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/renumber.html|20010305004149|33199|b7df79bf32240b5c -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/qnx.html|20010305004149|54263|6d2849a8e8038dc9 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/intro.html|20010305004149|62808|2eed15d25078711 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/notes.html|20010305004149|63758|7e53a042c5c4d350 -tim@threads.polyesthetic.msg|bdb/docs/ref/java/program.html|20010305004150|28026|e9bbc08bccf5d396 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/am_conv.html|20010305004150|30986|3bab32d969f21b77 -tim@threads.polyesthetic.msg|bdb/docs/ref/lock/config.html|20010305004150|32692|a593ea4c87467ddd -tim@threads.polyesthetic.msg|bdb/docs/ref/log/intro.html|20010305004150|42339|31e7055d83ca8757 -tim@threads.polyesthetic.msg|bdb/docs/ref/mp/config.html|20010305004150|46018|771c2c91fc0b6b17 -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/nested.html|20010305004151|62443|6860bbf2f29aa93b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/dup.html|20010305004152|40004|911018877c118b45 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/tx_recover.html|20010305004152|62754|132a354cde7a8286 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/config.html|20010305004152|64479|3f3f449c305e66b4 -tim@threads.polyesthetic.msg|bdb/docs/ref/xa/faq.html|20010305004152|65373|7aa890c7b70f1293 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_upgrade.html|20010305004152|14532|6444f26a93f77ea -tim@threads.polyesthetic.msg|bdb/include/crdel_auto.h|20010305004137|21088|1b8255da47550ece -tim@threads.polyesthetic.msg|bdb/include/db_server.h|20010305004137|34247|61a33aa05bf368a7 -tim@threads.polyesthetic.msg|bdb/include/mutex_ext.h|20010305004138|19006|f20f47ddc346598b -tim@threads.polyesthetic.msg|bdb/include/qam_ext.h|20010305004138|25430|9993db1fb3428b6d -tim@threads.polyesthetic.msg|bdb/include/tcl_ext.h|20010305004138|31857|6759d22aa2ff5f39 -tim@threads.polyesthetic.msg|bdb/include/txn_auto.h|20010305004138|33645|e3f49e94fd291c45 -tim@threads.polyesthetic.msg|bdb/rpc_client/gen_client.c|20010305004141|43060|ad86f092d0996a68 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_proc.sed|20010305004141|49906|1a9af8e5b051acbd -tim@threads.polyesthetic.msg|bdb/test/include.tcl|20010305004141|34016|20fc297b040cbe2 -BK|client/Attic/libmysql.c|19700101030959|00582|72949a7043113807 -BK|mit-pthreads/pg++|19700101030959|00597|3beac0502025d766 -BK|myisam/ft_search.c|19700101030959|01642|c011cb6e8041bb59 -BK|mysys/test_vsnprintf.c|19700101030959|01502|e3d568aca62dc81e -BK|strings/Attic/ctype-usa7.c|19700101030959|01356|d19d859dca5675f -BK|strings/Attic/ctype-win1251.c|19700101030959|01358|762607f4fd7d52ad -BK|tests/fork3_test.pl|19700101030959|01947|c4a7bffb4f8e813c -BK|vio/VioSSLFactoriesFd.h|19700101030959|00017|1d63ae149a63f85 -BK|vio/VioSocket.cc|19700101030959|00018|71c615783f29b5e1 -Sinisa@sinisa.nasamreza.org|scripts/mysql_new_fix_privilege_tables.sh|20011226144909|43765|b1664b401375eece -miguel@hegel.local|zlib/contrib/iostream/test.cpp|20020319032515|48225|a2ea8d4d7c66cf71 -miguel@hegel.local|zlib/contrib/minizip/unzip.c|20020319032516|07891|c66c95e17321206d -miguel@hegel.local|zlib/deflate.c|20020319032516|26978|e22894a54233bc25 -miguel@hegel.local|zlib/infcodes.c|20020319032517|52620|dffb42fdf2fb2372 -miguel@hegel.local|zlib/inffast.h|20020319032517|06651|215e4a4ccfc886fc -miguel@hegel.local|zlib/maketree.c|20020319032518|19299|7f281aef3547fee -miguel@hegel.local|zlib/msdos/zlib.rc|20020319032518|25240|f8a286fa8371ee09 -miguel@hegel.local|zlib/zutil.c|20020319032520|05372|6f0d1763c5deb409 -monty@donna.mysql.com|sql-bench/Results/alter-table-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|16525|2f516d2c108a9e05 -monty@donna.mysql.com|sql-bench/Results/insert-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|22723|a85a6f0477c13f83 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000017.xml|20001017133713|08762|81423597605ff77f -sasha@mysql.sashanet.com|build-tags|20011125054855|05181|7afb7e785b80f97 -sasha@mysql.sashanet.com|mysql-test/r/binlog-backup-restore.result|20010424233926|16010|605de78abda64d27 -sasha@mysql.sashanet.com|mysql-test/r/identity.result|20010910233028|16331|e41453a364242503 -serg@serg.mysql.com|mysql-test/t/sel000010.test|20001211130731|03554|ca07085ae92255f1 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_tpcb.dsp|20010305004135|16510|159c727e2c15105e -tim@threads.polyesthetic.msg|bdb/dist/build/chk.define|20010305004137|15254|aa9a626e58631003 -tim@threads.polyesthetic.msg|bdb/dist/template/rec_hash|20010305004137|26120|dcbdd106ae17b865 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_minkey.html|20010305004144|40498|e2d52ba2d0174432 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_delim.html|20010305004144|14446|e0a7face764111b9 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_upgrade.html|20010305004144|20363|5e6210d6f09a0c3e -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errfile.html|20010305004144|06564|3b6b0822f29fc3d4 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_panicstate.html|20010305004145|29311|43228366ca64363c -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirfree.html|20010305004144|09784|d59f36547c7b5384 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirlist.html|20010305004144|10606|24e75ccc86809023 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_ioinfo.html|20010305004144|14713|80365bb8c66ae84c -tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_checkpoint.html|20010305004145|01607|4a1704dbfcaad5dc -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_byteswapped.html|20010305004146|00979|a44d5d57d050b466 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_put.html|20010305004146|05435|2792034e8c83c56 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errfile.html|20010305004145|11465|f6eddb9ab7ef07d0 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_flags.html|20010305004146|16174|1146625feeb3bb0b -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_source.html|20010305004146|25550|46998978715ccc1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_conflicts.html|20010305004146|48615|5bba88df4cc6dfba -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_lockers.html|20010305004146|52578|ebb61fd669c2eefb -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_timestamp.html|20010305004146|03286|6396a1145f8e41c1 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_class.html|20010305004145|23233|ed88ab78cccbef8d -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/mempfile_class.html|20010305004145|25191|672b4aa787b4aeca -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_id.html|20010305004147|04873|162661f4c2dc09d6 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_prepare.html|20010305004147|05797|818b4163518bace5 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_cursor.html|20010305004147|25020|2181d652bd1c1ff -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_fd.html|20010305004147|26830|1f70020c37023baa -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_prefix.html|20010305004147|39088|a3269aad23e6dbc -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_dup_compare.html|20010305004147|40992|3dabd840a1d9e5f3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errcall.html|20010305004147|41930|4e4743f5b4277199 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_delim.html|20010305004147|53019|78fcf2d750fb26ef -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_cachesize.html|20010305004147|05132|f3700cd19856f14e -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_objects.html|20010305004147|19812|d1ed194631ffeb2a -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mutexlocks.html|20010305004147|21961|aad8e4a059075bb6 -tim@threads.polyesthetic.msg|bdb/docs/api_java/java_index.html|20010305004147|18736|8ecfcef4a702011d -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_unregister.html|20010305004148|19590|eee284e0da176d0a -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_count.html|20010305004148|40010|4812f3756a75437 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_rename.html|20010305004148|49486|909bc643d5455b54 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_del.html|20010305004148|54185|7e94f9f01e7e4453 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_get.html|20010305004148|56098|5bbb80cf51aff594 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/join.html|20010305004148|22331|acc16686a78a732 -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/cachesize.html|20010305004149|22486|99dcd466dc881093 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/aix.html|20010305004149|44137|e8ae448bdb85fa22 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/conf.html|20010305004149|45053|d0378c69618b790b -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/faq.html|20010305004149|65331|34704a907168cea7 -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/common.html|20010305004149|07598|607061232e2532df -tim@threads.polyesthetic.msg|bdb/docs/ref/debug/compile.html|20010305004149|08609|12785e3091b78bfd -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/where.html|20010305004150|01442|6cb9ec27f19ecbbb -tim@threads.polyesthetic.msg|bdb/docs/ref/program/diskspace.html|20010305004150|53502|959508f155721ee8 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/example.txt|20010305004150|28042|9ff88f22565208bf -tim@threads.polyesthetic.msg|bdb/docs/ref/txn/limits.html|20010305004151|61583|3004b7a93dab148b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/convert.html|20010305004151|00512|d7f18eb34c1b6ae -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db_cxx.html|20010305004151|08078|5c17d6a360205140 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_stat.html|20010305004151|22568|c49716e693ce225b -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/log_register.html|20010305004152|42524|7177eeb2fc099317 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/memp_register.html|20010305004152|44171|7d92464a1029d53e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/put.html|20010305004152|44997|961a1a689be6ce -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_feedback.html|20010305004152|45815|6d7de50be92a5488 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/db_dump.html|20010305004152|54477|7d1cac3358c0482e -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/handle.html|20010305004152|56086|bb8a73b74d4399ae -tim@threads.polyesthetic.msg|bdb/docs/utility/berkeley_db_svc.html|20010305004152|06576|91fe012778882ce4 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_dump.html|20010305004152|10062|5de7ade427f20332 -tim@threads.polyesthetic.msg|bdb/include/btree_ext.h|20010305004137|18246|5d53d710f170c6b6 -tim@threads.polyesthetic.msg|bdb/include/gen_server_ext.h|20010305004138|07539|fd7bcfe6bbca8bcb -tim@threads.polyesthetic.msg|bdb/include/mp_ext.h|20010305004138|17070|a528b772d42d6455 -BK|include/Attic/mysql_com.h.in|19700101030959|00115|85b1ea7ced528c32 -BK|libmysql/configure.in|19700101030959|02603|c6fc04d4e3d6e291 -BK|myisam/Attic/ft_global.h|19700101030959|01673|fe46fb515f1e375 -BK|sql-bench/Results-win32/alter-table-mysql-win98|19700101030959|02529|e8743982f790462 -BK|sql-bench/Results/alter-table-mysql-3.21-Linux_2.2.1_i686|19700101030959|02073|f6f7ccd7b3c35f97 -BK|sql/Attic/mini_client_errors.c|19700101030959|01909|29edad51a5d0b068 -BK|sql/Attic/net_serv.c|19700101030959|01911|52dabcd773a39e10 -BK|strings/Attic/ctype-greek.c|19700101030959|01347|90acdff1195209ca -BK|strings/Attic/ctype-koi8_ukr.c|19700101030959|01352|a04aa14a6d62335a -BK|support-files/Attic/my-huge.cfg.sh|19700101030959|02585|589bdcd2d2c4360b -BK|support-files/Attic/my-medium.cfg.sh|19700101030959|02587|c49880d26ef0648e -BK|vio/Vio.cc|19700101030959|00003|60737ce02ab2bc25 -miguel@hegel.local|zlib/contrib/asm686/readme.686|20020319032514|04933|15e2bf4653b71f3e -miguel@hegel.local|zlib/contrib/minizip/minizip.c|20020319032515|28588|97181367a7bc47d8 -miguel@hegel.local|zlib/inftrees.h|20020319032517|32227|ffcbe51816466e5c -miguel@hegel.local|zlib/zconf.h|20020319032519|63437|c6b6b636c7e88d90 -monty@donna.mysql.com|sql-bench/Results/wisconsin-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|25437|24a02e007a58bf73 -monty@hundin.mysql.fi|sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010605132759|53328|fd2699adb3190d07 -monty@narttu.mysql.com|sql-bench/Results/connect-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|19531|7dd5ac726f86cf0b -monty@narttu.mysql.com|sql-bench/Results/connect-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|21574|1cf5d5f0d70a3fa0 -monty@narttu.mysql.com|sql-bench/Results/create-mysql_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|25516|fc207468e871ff69 -monty@narttu.mysql.com|sql-bench/Results/select-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|33684|ddcf36cdf3f72e8c -mwagner@evoq.home.mwagner.org|Docs/Books/prof.eps|20001231203220|15779|dc69b039543a57d7 -mwagner@evoq.home.mwagner.org|mysql-test/xml/README|20001013051440|12362|877d76bcd19f7193 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000020.xml|20001017133713|13843|8849bbf91a4fd5ec -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000028.xml|20001017133713|29282|c72bfec6600949b -nick@nick.leippe.com|mysql-test/r/rpl_empty_master_crash.result|20020531235552|47718|615f521be2132141 -sasha@mysql.sashanet.com|mysql-test/t/3.23/sel000005.test|20001103140433|36002|982fde89a4d6d886 -serg@serg.mysql.com|mysql-test/r/ft0000001.b.result|20001211130756|10153|505c4c00a0bddfc4 -serg@serg.mysql.com|mysql-test/t/sel000011.test|20001211130731|08373|c2a971726c9d18d6 -tfr@sarvik.tfr.cafe.ee|Docs/Flags/costarica.txt|20020228162350|33044|e155c53c10374ff -tim@threads.polyesthetic.msg|bdb/build_win32/db_java.dsp|20010305004134|31520|e3941d5a9810b360 -tim@threads.polyesthetic.msg|bdb/build_win32/excxx_btrec.dsp|20010305004135|13384|61b563f4ac1f73eb -tim@threads.polyesthetic.msg|bdb/docs/api_c/c_pindex.html|20010305004145|05766|697acebf58a8db4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_bt_prefix.html|20010305004144|41420|d6e443a7e47c9b3a +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_cachesize.html|20010305004144|02131|47a3c8ca486eb013 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_dup_compare.html|20010305004144|03068|a833bfc727a794e7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errcall.html|20010305004144|04030|faf92be4ee8bc634 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errfile.html|20010305004144|00766|f07d3c57bb3c8fbd +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_errpfx.html|20010305004144|05859|756b9b73dd28b8d9 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_feedback.html|20010305004144|06786|90d495e78318a332 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_flags.html|20010305004144|07758|4cd3700ae4387d22 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_ffactor.html|20010305004144|08766|41352ddf74ccc338 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_hash.html|20010305004144|09702|73f14897664d9d08 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_nelem.html|20010305004144|10635|bd8371e033b15c8f +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_lorder.html|20010305004144|11587|e24ae76325374653 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_malloc.html|20010305004144|01594|3581879fef5af695 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_pagesize.html|20010305004144|12535|9644fa0f538cde17 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_paniccall.html|20010305004144|02405|ac7f63325b4499ce +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_q_extentsize.html|20010305004144|13496|f2fe41a5d8c46658 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_delim.html|20010305004144|14446|e0a7face764111b9 tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_len.html|20010305004144|15420|f30d68257bd60e1e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_pad.html|20010305004144|16373|8a1de721eb6fc53f +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_re_source.html|20010305004144|17353|6d12ac12652acc31 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_realloc.html|20010305004144|03204|a9be244baf966892 +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_stat.html|20010305004144|18351|578f6f99f8e247ff +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_sync.html|20010305004144|19394|7a067029b6e1496b +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_upgrade.html|20010305004144|20363|5e6210d6f09a0c3e +tim@threads.polyesthetic.msg|bdb/docs/api_c/db_verify.html|20010305004144|21372|cf80f5ba845eac2e +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_close.html|20010305004144|22419|a3ad4ea563bafc42 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_count.html|20010305004144|23385|c3cd00c48b4babf5 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_del.html|20010305004144|24335|2685f75d28e4ad99 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_dup.html|20010305004144|25301|3bdf8b0a687b43f3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_get.html|20010305004144|26284|4bf7579a92c35195 tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_put.html|20010305004144|27355|a2c4a52329376657 +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbm.html|20010305004144|04019|ebf1d8e329b06bba +tim@threads.polyesthetic.msg|bdb/docs/api_c/dbt.html|20010305004144|04896|ae7a81c9c5f574f6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_close.html|20010305004144|28399|a8e722cbb66c9d7b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_create.html|20010305004144|05736|3e73dd35fe5dcc8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_open.html|20010305004144|29421|e4c9706220a4cd9b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_remove.html|20010305004144|31547|a71d5e1ca41324a7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_cachesize.html|20010305004144|32567|f4c341d3f2c09469 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_data_dir.html|20010305004144|33569|437cec65e441c60 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errcall.html|20010305004145|00341|ba09eec1ba15f15f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errfile.html|20010305004144|06564|3b6b0822f29fc3d4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_errpfx.html|20010305004145|01527|806c8c438d0ee36c +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_feedback.html|20010305004145|02860|87a78f97ba545aba +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_flags.html|20010305004145|03778|b2a1f3c8498e6d95 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_bsize.html|20010305004145|04625|1eb03c137a42e80f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_dir.html|20010305004145|05444|26be310214a2ff8f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_max.html|20010305004145|06288|319c24b5245b0685 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_conflicts.html|20010305004145|07137|58d9f7179bc864a3 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_detect.html|20010305004145|07983|d9ed73495defdc19 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max.html|20010305004145|08849|a2dc11fa8b2f1c9 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_lockers.html|20010305004145|24923|f22d5d4640436efe +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_locks.html|20010305004145|09704|1baf2d63a6fb418d +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lk_max_objects.html|20010305004145|25791|1a428bbee06cb5cc +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mp_mmapsize.html|20010305004145|26668|21f27997f00accfe +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_mutexlocks.html|20010305004145|27540|85bbd53b877cafe1 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_pageyield.html|20010305004145|28418|8aa4a6cb2f18cad7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_paniccall.html|20010305004144|07360|97a1d58189199453 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_panicstate.html|20010305004145|29311|43228366ca64363c +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_rec_init.html|20010305004145|30192|bf7da051ef6689ba +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_region_init.html|20010305004145|31081|2ca19f76ee1ae790 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_server.html|20010305004145|31969|c13b793b525d504b +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_shm_key.html|20010305004145|32880|cf5aaa6a995cbf55 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tas_spins.html|20010305004145|33848|91c7091deca3d97f +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tmp_dir.html|20010305004145|34771|b563e87af5431824 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_max.html|20010305004145|35672|71a739e46faf33a9 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_recover.html|20010305004145|36580|8dd351545b444a24 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_tx_timestamp.html|20010305004145|37492|ddb77d7dfb531085 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_verbose.html|20010305004145|38421|344f5119536cae0 tim@threads.polyesthetic.msg|bdb/docs/api_c/env_strerror.html|20010305004145|39331|7f090bf26bdd4dc -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_exists.html|20010305004144|12261|23f077e82ca8f827 -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_fsync.html|20010305004144|13884|f59339ff63d95e7d -tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_read.html|20010305004144|18372|c8f6ece1ed408bf8 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_key_range.html|20010305004146|03630|d79b373af096cb7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_upgrade.html|20010305004146|28493|c6231eb2f9989284 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_put.html|20010305004146|35761|11e6aa2492dd1032 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbt_class.html|20010305004145|17281|fb91648586c1aa77 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_paniccall.html|20010305004145|20292|2080056f15faa516 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_recover.html|20010305004146|02235|cdf13797131b2d97 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/except_class.html|20010305004145|21277|59839667e43592e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_flush.html|20010305004146|16027|3976f77e905f35eb -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get.html|20010305004147|27733|87b8316c55b24739 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_verify.html|20010305004147|60082|20873ab17f6ed922 -tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_del.html|20010305004147|63111|6ec2b8a4b8dde996 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_bsize.html|20010305004147|11335|6c67beed877df84c -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max.html|20010305004147|16607|12b6e34ac5a53281 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_version.html|20010305004148|05599|854d26806930cab6 -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fset.html|20010305004148|24178|5c5371a93b83275 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_begin.html|20010305004148|30859|553bf78bd7fc3e0a -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_cursor.html|20010305004148|40924|e035b3c11a91c5d6 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_type.html|20010305004148|44686|7202f3ca793e6ec3 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn.html|20010305004148|62085|8e345950e6029230 -tim@threads.polyesthetic.msg|bdb/docs/images/prev.gif|20010305004148|04639|9448d24755d708a0 -tim@threads.polyesthetic.msg|bdb/docs/images/ps.gif|20010305004148|05648|f6b1b372cb2cda4c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/logrec.html|20010305004149|28646|5edeb34d63936e2 -tim@threads.polyesthetic.msg|bdb/docs/ref/arch/progmodel.html|20010305004149|38491|caa422dc155b6370 -tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/intro.html|20010305004149|00770|2975a07b53b12046 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/need.html|20010305004149|31743|43950806e35d71f -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.ps|20010305004150|02162|9851f6cdeff17481 -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/server.html|20010305004150|14510|79f560205494295 -tim@threads.polyesthetic.msg|bdb/docs/ref/test/faq.html|20010305004151|38444|f95038006d18229 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/admin.html|20010305004151|41323|cf867ed0b00cccef -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/data_open.html|20010305004151|45592|413c1d8aba9d8018 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv.html|20010305004151|08972|f9863847dc1ed617 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/join.html|20010305004151|18031|ec21d874caa0654 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/stat.html|20010305004151|29377|775d75e3ba02d15c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/toc.html|20010305004151|30301|16e7d8e76496cbc9 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/env.html|20010305004152|40827|381e366a9c9c9a37 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/disk.html|20010305004152|55280|61799ebebe78ebb2 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/mutexlock.html|20010305004152|58567|972b710c5bdba67c -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/notfound.html|20010305004152|59393|dc91c094aba92838 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_load.html|20010305004152|10976|981095940db0197 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_printlog.html|20010305004152|11895|fcc4075ad0232842 -tim@threads.polyesthetic.msg|bdb/include/db_ext.h|20010305004137|29469|a1e210bbd0de0a48 -tim@threads.polyesthetic.msg|bdb/include/gen_client_ext.h|20010305004138|06647|5c621cacb18b38 -tim@threads.polyesthetic.msg|bdb/include/lock_ext.h|20010305004138|11814|ccd0785bb206933f -tim@threads.polyesthetic.msg|bdb/log/log_auto.c|20010305004137|49459|fe8c0369965f7151 -tim@threads.polyesthetic.msg|bdb/rpc_server/db_server.x|20010305004141|47705|811aeb6b630fe7aa -BK|include/Attic/m_ctype.h.in|19700101030959|00114|f671e3c2d611ba97 -BK|sql/share/norwegian-ny/.cvsignore|19700101030959|01855|469064b5190d703d -BK|sql/share/swedish/errmsg.sys|19700101030959|01866|dd772e93db859993 -BK|strings/Attic/ctype-danish.c|19700101030959|01342|dc5451066eb272ae -BK|strings/Attic/ctype-swe7.c|19700101030959|01355|bb1b012225d7d02c -BK|strings/Attic/ptr_cmp.c|19700101030959|01337|57e682a26e769597 -BK|vio/VioFd.cc|19700101030959|00009|6e444647affef63b -BK|vio/vioelitexx.cc|19700101030959|00022|3eaba70da792a7fc -miguel@hegel.local|zlib/adler32.c|20020319032513|04487|f98728c6da1ac164 -miguel@hegel.local|zlib/contrib/asm386/zlibvc.dsp|20020319032514|38372|a1c6749052ce48a -miguel@hegel.local|zlib/contrib/delphi2/zlib.pas|20020319032515|28965|3c94d3f5262cbbdd -miguel@hegel.local|zlib/contrib/iostream2/zstream_test.cpp|20020319032515|08848|63f635d540de8c48 -miguel@hegel.local|zlib/contrib/minizip/readme.txt|20020319032516|00611|7547b986c067c008 -miguel@hegel.local|zlib/contrib/minizip/zlibvc.dsw|20020319032516|60515|17f28194a5cd80ea -miguel@hegel.local|zlib/example.c|20020319032517|14327|490f57a4a9440dfa -miguel@hegel.local|zlib/infblock.h|20020319032517|46202|4526bc327b4160ab -miguel@hegel.local|zlib/infutil.h|20020319032518|12977|13089e09be34788c -miguel@hegel.local|zlib/readme|20020319032519|35257|80a41fc822f5f4 -mikef@nslinux.bedford.progress.com|mysql-test/include/have_gemini.inc|20010321203410|40631|42f94f0dfd0f7b18 -monty@donna.mysql.com|sql-bench/Results/RUN-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15344|d922a0fcc1009130 -monty@donna.mysql.com|sql-bench/Results/RUN-pg_fast-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|15933|840503a555e420ec -monty@donna.mysql.com|sql-bench/Results/create-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|20136|241c337935ae1524 -monty@hundin.mysql.fi|sql-bench/Results/insert-pg-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg|20010603134548|15984|a0143553cccb54e2 -monty@narttu.mysql.fi|sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha|20001014001004|29737|db59425a7f4aa93f -monty@work.mysql.com|libmysqld/README|20010411110351|24268|434e9cae5fa9a4c4 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000010.xml|20001017133713|64368|9b98c9cce8fac145 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000012.xml|20001017133713|01909|a410d08dc4cfee11 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000024.xml|20001017133713|22352|dd067aa28220fa4c -serg@serg.mysql.com|mysql-test/r/ft0000002.a.result|20001212120058|27306|a89b4db1db19f944 -serg@serg.mysql.com|mysql-test/t/sel000014.test|20001211130731|22977|74cb8c70f1d73fcc -tim@threads.polyesthetic.msg|bdb/build_win32/db_dll.dsp|20010305004134|29137|4e9dda53c84511b6 -tim@threads.polyesthetic.msg|bdb/build_win32/db_load.dsp|20010305004134|32237|e83a2af8e24a715d -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbc_get.html|20010305004144|26284|4bf7579a92c35195 -tim@threads.polyesthetic.msg|bdb/docs/api_c/dbm.html|20010305004144|04019|ebf1d8e329b06bba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_feedback.html|20010305004145|02860|87a78f97ba545aba -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_max.html|20010305004145|06288|319c24b5245b0685 +tim@threads.polyesthetic.msg|bdb/docs/api_c/env_version.html|20010305004145|40251|9bf7f99fefacc2bf +tim@threads.polyesthetic.msg|bdb/docs/api_c/hsearch.html|20010305004144|08165|a8b76d897a8216d8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_detect.html|20010305004145|41159|8fe406dce10e0bb +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_get.html|20010305004145|42084|63399d204f1885fa +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_id.html|20010305004145|43025|c9ee776f928a38f +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_put.html|20010305004145|44022|f5bc2f52e55f16e1 +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_stat.html|20010305004145|44954|d9a98bb949070b +tim@threads.polyesthetic.msg|bdb/docs/api_c/lock_vec.html|20010305004145|45892|cc79e33b82b7a275 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_archive.html|20010305004145|46850|490428ce45f9f918 tim@threads.polyesthetic.msg|bdb/docs/api_c/log_compare.html|20010305004145|47782|4f12fdf04d30ab94 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_file.html|20010305004145|48705|574444b46b801f9c +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_flush.html|20010305004145|49632|bb8bc4fc43c9f63d +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_get.html|20010305004145|50583|24cdf17ba55cbecf +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_put.html|20010305004145|51546|11a1bec49bb90419 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_register.html|20010305004145|52499|5381c1fad82d6527 +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_stat.html|20010305004145|53440|36b87b19ee2c5bba +tim@threads.polyesthetic.msg|bdb/docs/api_c/log_unregister.html|20010305004145|54401|45b8f9d3f8eb3d80 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fclose.html|20010305004145|55335|b52c7d599d83c26 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fget.html|20010305004145|56294|460714b5c2e3e1c5 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fopen.html|20010305004145|57267|d032a963a0103472 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fput.html|20010305004145|58291|4a7aace7db01ee15 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fset.html|20010305004145|59241|ecb97931b222568d +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_fsync.html|20010305004145|60192|a95ab802bb28646f +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_register.html|20010305004145|61165|8b9dff9b5043da58 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_stat.html|20010305004145|62160|55a9521fe04b03bd +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_sync.html|20010305004145|63168|b387035a94c20c50 +tim@threads.polyesthetic.msg|bdb/docs/api_c/memp_trickle.html|20010305004145|64180|8b1adf1404d7a5f +tim@threads.polyesthetic.msg|bdb/docs/api_c/pindex.src|20010305004143|31726|d1ecd116c42e0e23 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_close.html|20010305004144|08984|8981d16589844161 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirfree.html|20010305004144|09784|d59f36547c7b5384 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_dirlist.html|20010305004144|10606|24e75ccc86809023 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_exists.html|20010305004144|12261|23f077e82ca8f827 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_free.html|20010305004144|13076|ed61d2dfea9e069e +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_fsync.html|20010305004144|13884|f59339ff63d95e7d +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_ioinfo.html|20010305004144|14713|80365bb8c66ae84c +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_malloc.html|20010305004144|15535|5579a0604e14e1e7 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_map.html|20010305004144|16369|d90bbc8462ef43a6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_open.html|20010305004144|17474|8c812591efc8abe6 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_read.html|20010305004144|18372|c8f6ece1ed408bf8 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_realloc.html|20010305004144|19375|e8e78e57c005c7c4 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_rename.html|20010305004144|20199|3f8c7b6674cda105 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_seek.html|20010305004144|21048|fdf1b31d3f6c7473 tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_sleep.html|20010305004144|21928|4b962c8b82989d8c +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unlink.html|20010305004144|22800|c42b13fd26f2e90 +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_unmap.html|20010305004144|23658|d85790692f3b536e +tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_write.html|20010305004144|24518|63567be42d586fde tim@threads.polyesthetic.msg|bdb/docs/api_c/set_func_yield.html|20010305004144|25375|ca5e359bcbeca7fd +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_abort.html|20010305004145|65162|a53425dd70214619 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_begin.html|20010305004145|00608|557b34fd3e7363 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_checkpoint.html|20010305004145|01607|4a1704dbfcaad5dc +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_commit.html|20010305004145|02592|8950b5e11c8b0778 tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_id.html|20010305004144|04952|1e71088a7e8f6678 tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_prepare.html|20010305004145|03605|19f84203db4e6608 +tim@threads.polyesthetic.msg|bdb/docs/api_c/txn_stat.html|20010305004145|04637|f57a656bfbac12bf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_index.html|20010305004145|07331|a0bc165de8a0554c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/cxx_pindex.html|20010305004147|08181|9ff6b69b56f988dd +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_class.html|20010305004145|08391|3129ff8c53721fe8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_close.html|20010305004145|28189|cc570e65ac7d22f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_cursor.html|20010305004145|29241|4f0225f98f4a11c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_del.html|20010305004145|31220|43fa05f2dfa86dbc tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_err.html|20010305004145|10496|77022bd5af575696 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_fd.html|20010305004145|33050|99ec316575f80428 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get.html|20010305004145|34357|3b6e6005f3f17f2a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_byteswapped.html|20010305004146|00979|a44d5d57d050b466 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_get_type.html|20010305004146|01846|398668783c4070db +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_join.html|20010305004146|02717|9c4819679501ad6e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_key_range.html|20010305004146|03630|d79b373af096cb7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_open.html|20010305004146|04518|ab95c48ac26ad3f7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_put.html|20010305004146|05435|2792034e8c83c56 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_remove.html|20010305004146|06326|8c537fc5e326293b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_rename.html|20010305004146|07200|9c0a820e864220b3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_append_recno.html|20010305004146|08075|a158b1fdba756ce +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_compare.html|20010305004146|08946|d888d1ebe056bc6b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_minkey.html|20010305004146|09837|d6181e52342005c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_bt_prefix.html|20010305004146|11627|ecd8f927371a5dbd +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_cachesize.html|20010305004146|12541|3befdbaf98d5a04e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_dup_compare.html|20010305004146|13472|91f36955a213e0f4 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errcall.html|20010305004146|10727|28a7a1fa2b3b73ee +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errfile.html|20010305004145|11465|f6eddb9ab7ef07d0 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_errpfx.html|20010305004146|14381|1f26e7b0bb5a067f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_feedback.html|20010305004146|15263|a08620d86f05ec8c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_flags.html|20010305004146|16174|1146625feeb3bb0b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_ffactor.html|20010305004146|17155|a67084c644c38114 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_hash.html|20010305004146|18078|afe952f65389d93b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_h_nelem.html|20010305004146|19017|1829bc583d9c7554 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_lorder.html|20010305004146|19980|a46750a29588268c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_malloc.html|20010305004145|12423|b0aa5802da5bef4d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_pagesize.html|20010305004146|20914|b8d544ec3e102c6c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_paniccall.html|20010305004145|13411|6bc911c9d64e9237 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_q_extentsize.html|20010305004146|21826|b17e340a68ede3ac +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_delim.html|20010305004146|22753|81d9df93c3511df3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_len.html|20010305004146|23672|e09bb30e40208dfb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_pad.html|20010305004146|24627|f2e0c2c2c3806a97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_re_source.html|20010305004146|25550|46998978715ccc1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_realloc.html|20010305004145|14370|64d967a58c328957 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_stat.html|20010305004146|26537|3473827de856d680 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_sync.html|20010305004146|27538|dadf1f745e44faa7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_upgrade.html|20010305004146|28493|c6231eb2f9989284 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_verify.html|20010305004146|29479|14db455da528229d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_class.html|20010305004145|15353|2a31b398c37d674b tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_close.html|20010305004146|30462|2adba79b482ee157 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_count.html|20010305004146|31395|bc025b8894450525 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_del.html|20010305004146|32671|424fc0ebb3b4c5cf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_dup.html|20010305004146|33708|75df863b4bc13aaa +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_get.html|20010305004146|34739|36e2dbe65e3442e3 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbc_put.html|20010305004146|35761|11e6aa2492dd1032 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbenv_class.html|20010305004145|16297|5ab8aaf8a531f76b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/dbt_class.html|20010305004145|17281|fb91648586c1aa77 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_close.html|20010305004146|36778|5cc705b97b86972c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_open.html|20010305004146|37756|66ac1ae7fa67ca4a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_remove.html|20010305004146|38809|5efece7ecdfc4df7 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_cachesize.html|20010305004146|39807|b82ed49a47415fec +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_data_dir.html|20010305004146|40779|9176f081597e4f27 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errcall.html|20010305004146|41745|bae25b45b0196773 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errfile.html|20010305004145|18322|f9543c9e65ed6a1d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_error_stream.html|20010305004145|19317|a4101c1d68559fa2 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_errpfx.html|20010305004146|42728|d26da4bab9538234 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_feedback.html|20010305004146|43755|1d5bd8dfe2d8034e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_flags.html|20010305004146|44734|8136e8e1ae16dc02 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_bsize.html|20010305004146|45706|7fd917bea6b163bf +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_dir.html|20010305004146|46674|c08aac264e7faa97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lg_max.html|20010305004146|47638|4f7ba5f02c66c0de +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_conflicts.html|20010305004146|48615|5bba88df4cc6dfba +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_detect.html|20010305004146|49591|13e53300b722cf1e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max.html|20010305004146|50580|52ac3c4ca2876de +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_lockers.html|20010305004146|52578|ebb61fd669c2eefb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_locks.html|20010305004146|51576|bbde4ffbcc607f61 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_lk_max_objects.html|20010305004146|53572|c47424e4d13d5327 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mp_mmapsize.html|20010305004146|54573|c21e3f9c5a29b0ab +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mutexlocks.html|20010305004146|55575|f73e7ffdd2d8d62f +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_pageyield.html|20010305004146|56583|db4e5bdf71e171c0 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_paniccall.html|20010305004145|20292|2080056f15faa516 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_panicstate.html|20010305004146|57577|ad2d38e398cafd31 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_rec_init.html|20010305004146|58586|77916e00d1361c7b +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_region_init.html|20010305004146|59589|2d70678382bbbf9a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_server.html|20010305004146|60631|bb74806839e8eb58 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_shm_key.html|20010305004146|62685|65b2c2f848ddf31e tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tas_spins.html|20010305004146|64671|a107049f4776b358 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tmp_dir.html|20010305004146|00169|6c815da1fad27537 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_max.html|20010305004146|01212|910d1c17dd000729 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_recover.html|20010305004146|02235|cdf13797131b2d97 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tx_timestamp.html|20010305004146|03286|6396a1145f8e41c1 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_verbose.html|20010305004146|04365|e804a65368b5cdc1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_strerror.html|20010305004146|05414|7e1cbfbd096ca +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_version.html|20010305004146|06444|1cff25c44cbea934 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/except_class.html|20010305004145|21277|59839667e43592e +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/get_errno.html|20010305004145|22249|e1a57c1c5f1d2695 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_class.html|20010305004145|23233|ed88ab78cccbef8d +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_detect.html|20010305004146|07495|bb50519c431233ed +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_get.html|20010305004146|61648|527d63a8526f336c +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_id.html|20010305004146|08539|b3c7995efbe12c16 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_put.html|20010305004146|09587|9eb85a1c9e88621 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_stat.html|20010305004146|10635|2112ceb0894b34d8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_vec.html|20010305004146|11739|c55deaa5173a3323 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_archive.html|20010305004146|12836|d47f39e6dad7ee50 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_compare.html|20010305004146|13902|3225b4c32016c9b1 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_file.html|20010305004146|14965|9a724b41d84e0c31 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_flush.html|20010305004146|16027|3976f77e905f35eb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_get.html|20010305004146|17104|aee6162219c71617 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_put.html|20010305004146|18207|66077da9630fa8c2 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_register.html|20010305004146|19292|55470e0d79382beb +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_stat.html|20010305004146|20379|dc2d4ffe7950fc09 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/log_unregister.html|20010305004146|21535|8fa1fe691751d6ad +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lsn_class.html|20010305004145|24210|34809f73e15540ad +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fclose.html|20010305004146|22608|cc4a5776ac69d660 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fget.html|20010305004146|23710|bfe74f8c299c2995 tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fopen.html|20010305004146|24842|abfef0a4db99c8e1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fput.html|20010305004146|26004|7ee8cda6287dee81 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fset.html|20010305004146|27124|e52fa0488faa893 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fsync.html|20010305004146|28227|76d47da7c5dc8932 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_register.html|20010305004146|29358|cba6f572fe27c7a +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_stat.html|20010305004146|31867|d370717a78971be1 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_sync.html|20010305004146|33235|253961279934d3c8 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_trickle.html|20010305004146|34409|c9df8540b9ebc898 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/mempfile_class.html|20010305004145|25191|672b4aa787b4aeca +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/pindex.src|20010305004145|09392|d65361c4acfcef06 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_abort.html|20010305004147|01091|81177bcb2e5f4502 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_begin.html|20010305004147|02053|3a2d1488ec9d8655 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_checkpoint.html|20010305004147|02999|173930473e76d008 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_class.html|20010305004145|26179|5e57abe095aceca9 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_commit.html|20010305004147|03924|65afb8caf9c470ae +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_id.html|20010305004147|04873|162661f4c2dc09d6 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_prepare.html|20010305004147|05797|818b4163518bace5 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/txn_stat.html|20010305004147|06751|e8e25f86f8541696 +tim@threads.polyesthetic.msg|bdb/docs/api_cxx/what.html|20010305004145|27185|a64f42c697273c44 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_class.html|20010305004147|09609|b957a4d2b77acb1e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_close.html|20010305004147|24101|21595167f4fdbe88 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_cursor.html|20010305004147|25020|2181d652bd1c1ff +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_del.html|20010305004147|25922|f4f15b362b114506 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_fd.html|20010305004147|26830|1f70020c37023baa +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get.html|20010305004147|27733|87b8316c55b24739 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_byteswapped.html|20010305004147|28706|edbc66a9d5491a1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_get_type.html|20010305004147|29592|4cfb6f09cbe0b8ae +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_join.html|20010305004147|30506|a3a6dead9cae65f9 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_key_range.html|20010305004147|31461|8834de5873a6acb5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_open.html|20010305004147|32409|bfc13736b96ac509 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_put.html|20010305004147|33389|c476abe5599f21cf +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_remove.html|20010305004147|34343|49d3b8c7e5a5b000 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_rename.html|20010305004147|35341|19b20feaa815bc27 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_append_recno.html|20010305004147|36282|d28bf857803b93a2 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_compare.html|20010305004147|37206|e972f964d042b35e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_minkey.html|20010305004147|38144|c7e1f184bdca25fa +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_bt_prefix.html|20010305004147|39088|a3269aad23e6dbc +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_cachesize.html|20010305004147|40035|22d172a2d29f276b +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_dup_compare.html|20010305004147|40992|3dabd840a1d9e5f3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errcall.html|20010305004147|41930|4e4743f5b4277199 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_errpfx.html|20010305004147|42881|c446da51277796df +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_feedback.html|20010305004147|45141|69b4c07b3dbe383 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_flags.html|20010305004147|46212|b6b9d271bd42a94e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_ffactor.html|20010305004147|47226|edcc10024104d57e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_hash.html|20010305004147|48174|c6eb825c706a9548 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_h_nelem.html|20010305004147|49144|fc6f22a4c285fcef +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_lorder.html|20010305004147|50103|f64cbdd62bbbdd7c +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_pagesize.html|20010305004147|51079|d899ea90b20b7b31 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_q_extentsize.html|20010305004147|52035|6ac26239fc538cb +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_delim.html|20010305004147|53019|78fcf2d750fb26ef +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_len.html|20010305004147|53997|8448826ea78c630e +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_pad.html|20010305004147|54985|2729c192747ac7af +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_source.html|20010305004147|55969|b29827dbf47537d1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_stat.html|20010305004147|57008|bc253f0883e9c82b +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_sync.html|20010305004147|58064|42391f7d5f200b90 tim@threads.polyesthetic.msg|bdb/docs/api_java/db_upgrade.html|20010305004147|59076|782fa4cc6c633990 +tim@threads.polyesthetic.msg|bdb/docs/api_java/db_verify.html|20010305004147|60082|20873ab17f6ed922 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_class.html|20010305004147|11473|8ee03c40ae0dbcb8 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_close.html|20010305004147|61116|e3bf1f36bc0e8e7e +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_count.html|20010305004147|62108|9c239575f4550756 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_del.html|20010305004147|63111|6ec2b8a4b8dde996 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_dup.html|20010305004147|64103|aa141014c4d7f9b0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_get.html|20010305004147|65144|e66e387b83681e73 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbc_put.html|20010305004147|00700|da0f0fa974385abd +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbenv_class.html|20010305004147|12326|92c7a4a6c22090c7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/dbt_class.html|20010305004147|13192|f6b04ff142e332f8 tim@threads.polyesthetic.msg|bdb/docs/api_java/deadlock_class.html|20010305004147|14282|b587b2d8c9e5d0b0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_close.html|20010305004147|01809|c4e2ec77d7d14d4f +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_open.html|20010305004147|02873|2df0f0ef544da715 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_remove.html|20010305004147|04039|e92277e3dfd9bba1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_cachesize.html|20010305004147|05132|f3700cd19856f14e +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_data_dir.html|20010305004147|06162|b7b3f35e96804650 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errcall.html|20010305004147|07189|4e206d08cbb39ab7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_error_stream.html|20010305004147|15677|a738119910b452b8 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errpfx.html|20010305004147|08227|a3b9a09670f6912 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_feedback.html|20010305004147|09255|9748745e65f070d5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_flags.html|20010305004147|10283|690847bb5e205c21 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_bsize.html|20010305004147|11335|6c67beed877df84c +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_dir.html|20010305004147|12366|484cad2123994e14 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lg_max.html|20010305004147|13429|c9f705492162e175 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_conflicts.html|20010305004147|14497|8951eb975a90918b +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_detect.html|20010305004147|15549|9fc15a1a95b0dfa1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max.html|20010305004147|16607|12b6e34ac5a53281 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_lockers.html|20010305004147|18755|7896265ea77829b3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_locks.html|20010305004147|17677|f0114205b169de39 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_lk_max_objects.html|20010305004147|19812|d1ed194631ffeb2a +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mp_mmapsize.html|20010305004147|20894|b7dea9108fa65dfa +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_mutexlocks.html|20010305004147|21961|aad8e4a059075bb6 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_pageyield.html|20010305004147|23054|774b3da0306a6767 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_panicstate.html|20010305004147|24142|72846d9a97cb80bb +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_rec_init.html|20010305004147|25237|1fdb2c5fc3b6407 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_region_init.html|20010305004147|26379|30534afa94cbf54e +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_server.html|20010305004147|27545|d901cdab9698605d +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_shm_key.html|20010305004147|28699|8c576698882f0edc +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tas_spins.html|20010305004147|30425|2f9963827fbcb3f +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tmp_dir.html|20010305004147|32251|f23e4f614f6d975a +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_max.html|20010305004147|33999|70f356b8b67782fe +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_recover.html|20010305004148|00983|40280da113fc9d2b +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_tx_timestamp.html|20010305004148|02804|457eeb135f1f8bc0 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_verbose.html|20010305004148|03690|9dcda0399c8256e7 +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_strerror.html|20010305004148|04588|fceebaa94cf9aafd +tim@threads.polyesthetic.msg|bdb/docs/api_java/env_version.html|20010305004148|05599|854d26806930cab6 +tim@threads.polyesthetic.msg|bdb/docs/api_java/except_class.html|20010305004147|16978|195c00e4a7cbe648 tim@threads.polyesthetic.msg|bdb/docs/api_java/get_errno.html|20010305004147|17836|89a89f8efe3a9360 +tim@threads.polyesthetic.msg|bdb/docs/api_java/java_index.html|20010305004147|18736|8ecfcef4a702011d tim@threads.polyesthetic.msg|bdb/docs/api_java/java_pindex.html|20010305004148|35859|f8bc0811d8eda8e9 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_class.html|20010305004147|19738|880aa614d1469304 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_detect.html|20010305004148|06490|14d4e7c7dca0dad7 tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_get.html|20010305004148|07401|fd52de261831f9b5 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_id.html|20010305004148|08326|737cf8d8dc74084e +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_put.html|20010305004148|09226|5af89e4cbf29c694 +tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_stat.html|20010305004148|10140|71b81d8567befc43 tim@threads.polyesthetic.msg|bdb/docs/api_java/lock_vec.html|20010305004148|11077|df5eb838fdbe1eab +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_archive.html|20010305004148|11996|b4a9483dbb5a2b58 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_compare.html|20010305004148|12947|756622b42572ecb +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_file.html|20010305004148|13857|74a49bae2532199a +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_flush.html|20010305004148|14794|1691d6a3c8cc284e +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_get.html|20010305004148|15736|5fbbbd4baa60e052 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_put.html|20010305004148|16729|ad7e9f382abde491 +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_register.html|20010305004148|17668|c68fc6fb22dd594a +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_stat.html|20010305004148|18608|d186a08662046aba +tim@threads.polyesthetic.msg|bdb/docs/api_java/log_unregister.html|20010305004148|19590|eee284e0da176d0a +tim@threads.polyesthetic.msg|bdb/docs/api_java/lsn_class.html|20010305004147|20619|b1458208b6c81016 +tim@threads.polyesthetic.msg|bdb/docs/api_java/mem_class.html|20010305004147|21486|2e5052b5b2bea584 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fclose.html|20010305004148|20518|d08f0c134361f802 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fget.html|20010305004148|21431|ca84dee01997eb89 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fopen.html|20010305004148|22355|f7cf58725aa1c406 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fput.html|20010305004148|23268|6ba75e517a259703 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fset.html|20010305004148|24178|5c5371a93b83275 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fsync.html|20010305004148|25118|e767b233fe7730a2 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_register.html|20010305004148|26052|8331390a1c66fefd +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_stat.html|20010305004148|27008|4628462474db62b4 +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_sync.html|20010305004148|27969|5b401daadc7261eb +tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_trickle.html|20010305004148|28912|4d5c4e83a4a5c638 +tim@threads.polyesthetic.msg|bdb/docs/api_java/pindex.src|20010305004147|10521|de828917f041d27b +tim@threads.polyesthetic.msg|bdb/docs/api_java/runrec_class.html|20010305004147|22358|49c5cb3efe0c201 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_abort.html|20010305004148|29858|ec9a3517748bfa3 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_begin.html|20010305004148|30859|553bf78bd7fc3e0a +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_checkpoint.html|20010305004148|31832|2565ac892d04b63d +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_class.html|20010305004147|23221|c7bb2a3393ca9488 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_commit.html|20010305004148|32812|c265042f3340baa1 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_id.html|20010305004148|01920|798720b73cc9391 +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_prepare.html|20010305004148|33784|510a245c80e715c +tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_stat.html|20010305004148|34772|9a6ef8c262f218f9 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_close.html|20010305004148|38213|f40794b17e0fe443 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_count.html|20010305004148|40010|4812f3756a75437 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_cursor.html|20010305004148|40924|e035b3c11a91c5d6 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_del.html|20010305004148|41829|400c7a72fb10d6f4 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get.html|20010305004148|42753|127bd361ee695c71 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_join.html|20010305004148|43762|1c737805c2c49cf9 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_get_type.html|20010305004148|44686|7202f3ca793e6ec3 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_is_byteswapped.html|20010305004148|45596|8fb9e2c58051c769 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_join.html|20010305004148|46525|cb3eb61ed17a1f8 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_open.html|20010305004148|47486|f588cc9bc694cbf0 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_put.html|20010305004148|48549|380c7caeced55512 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_remove.html|20010305004148|50431|3b2be4b0b1b3dc98 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_rename.html|20010305004148|49486|909bc643d5455b54 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_stat.html|20010305004148|51363|3bb57be2de907fd2 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/db_sync.html|20010305004148|52310|3b615ca64d934602 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_close.html|20010305004148|53244|ef431e58d72accc3 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_del.html|20010305004148|54185|7e94f9f01e7e4453 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_dup.html|20010305004148|55139|325121689412d70b +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_get.html|20010305004148|56098|5bbb80cf51aff594 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_put.html|20010305004148|57122|290ecb1275d4270 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_close.html|20010305004148|58109|bf191b2673a2b19e +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_open.html|20010305004148|59088|39b63925d45a637e +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/env_remove.html|20010305004148|60117|9090900413ff0280 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/pindex.src|20010305004148|39123|f8754fff24f2cb24 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_index.html|20010305004148|61088|443e6b9a10ef4139 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/tcl_pindex.html|20010305004148|00553|259f0e062eee63c7 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn.html|20010305004148|62085|8e345950e6029230 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_abort.html|20010305004148|63068|8cc23b6ef6f457d2 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/txn_commit.html|20010305004148|64051|25150b20b84cd519 +tim@threads.polyesthetic.msg|bdb/docs/api_tcl/version.html|20010305004148|65038|eeb51f4de1bbfe8e +tim@threads.polyesthetic.msg|bdb/docs/images/api.gif|20010305004148|02578|dec2d4fe5f39dffe +tim@threads.polyesthetic.msg|bdb/docs/images/next.gif|20010305004148|03600|ddab96466674135b +tim@threads.polyesthetic.msg|bdb/docs/images/prev.gif|20010305004148|04639|9448d24755d708a0 +tim@threads.polyesthetic.msg|bdb/docs/images/ps.gif|20010305004148|05648|f6b1b372cb2cda4c +tim@threads.polyesthetic.msg|bdb/docs/images/ref.gif|20010305004148|06650|add30c753dc1972d +tim@threads.polyesthetic.msg|bdb/docs/images/sleepycat.gif|20010305004148|07668|ea63aaaa508ef096 +tim@threads.polyesthetic.msg|bdb/docs/index.html|20010305004143|26935|450dd5db21a9bb64 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/close.html|20010305004148|10227|ed6f7427edc0431 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/count.html|20010305004148|11236|8fd8daf2e2cbd7c7 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curclose.html|20010305004148|12231|8b6b8442fc8382f7 tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdel.html|20010305004148|13236|39bf0a8cba99c064 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdup.html|20010305004148|14243|5c855e1f5b99d990 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curget.html|20010305004148|15271|d7dd42affcd54073 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/curput.html|20010305004148|16324|c7e4fa0a68170c3d +tim@threads.polyesthetic.msg|bdb/docs/ref/am/cursor.html|20010305004148|17350|6dbcdb3b7d552f58 tim@threads.polyesthetic.msg|bdb/docs/ref/am/delete.html|20010305004148|18364|9195664374690b24 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/error.html|20010305004148|19390|45ac854e68196844 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/get.html|20010305004148|20425|96c9c9a01c32d16 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/join.html|20010305004148|22331|acc16686a78a732 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/open.html|20010305004148|23468|c9a7e23579a5e93a tim@threads.polyesthetic.msg|bdb/docs/ref/am/opensub.html|20010305004148|24500|81c79cce793fb343 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/ops.html|20010305004148|25566|9b24db9ba4f45724 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/partial.html|20010305004148|26629|db4a970c839b3051 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/put.html|20010305004148|28752|8e18b0af61eb7f0f tim@threads.polyesthetic.msg|bdb/docs/ref/am/stability.html|20010305004148|30129|a92faac934d69cef +tim@threads.polyesthetic.msg|bdb/docs/ref/am/stat.html|20010305004148|32050|fafc0f88571d9395 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/sync.html|20010305004148|33751|381722c07c9d8825 +tim@threads.polyesthetic.msg|bdb/docs/ref/am/upgrade.html|20010305004149|00532|c7499736f03c1a1c +tim@threads.polyesthetic.msg|bdb/docs/ref/am/verify.html|20010305004149|01382|badaeba91bda50e1 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_compare.html|20010305004149|18156|c1e847e651704c89 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_minkey.html|20010305004149|19013|b4708e561be92b83 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_prefix.html|20010305004149|19903|4e7602aa68d50fe1 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/bt_recnum.html|20010305004149|20770|f081f10254e86e75 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/byteorder.html|20010305004149|21617|999a22f727e2dae0 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/cachesize.html|20010305004149|22486|99dcd466dc881093 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/dup.html|20010305004149|23371|523731632fca7343 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/extentsize.html|20010305004149|24263|fdcfb5572974545c +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_ffactor.html|20010305004149|25120|5eb87b7ce99f3362 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_hash.html|20010305004149|25978|3a0174586fbcfcdf +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/h_nelem.html|20010305004149|26871|979995db477052ad +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/intro.html|20010305004149|27745|dd1647202258ee28 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/logrec.html|20010305004149|28646|5edeb34d63936e2 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/malloc.html|20010305004149|29537|cb0e6d7e9448d93e +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/pagesize.html|20010305004149|30437|eb4800704ae1131b +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/re_source.html|20010305004149|31346|b000d11ca4a0f9a +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/recno.html|20010305004149|32283|c2ae722138309e95 +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/renumber.html|20010305004149|33199|b7df79bf32240b5c +tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/select.html|20010305004149|34120|57b1c99f6a8ea93f +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/apis.html|20010305004149|36488|a84570e410b11a6a +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.gif|20010305004149|41251|fe43e7415b3bbdb0 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/bigpic.html|20010305004149|37519|ab5254bc99af0d5c +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/progmodel.html|20010305004149|38491|caa422dc155b6370 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/script.html|20010305004149|39400|6796fd0a63161a0c +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/smallpic.gif|20010305004149|42169|fdf77055d7e711 +tim@threads.polyesthetic.msg|bdb/docs/ref/arch/utilities.html|20010305004149|40326|54d7014fab332c7a +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/aix.html|20010305004149|44137|e8ae448bdb85fa22 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/conf.html|20010305004149|45053|d0378c69618b790b +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/flags.html|20010305004149|46003|a739404f90eb8c3d +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/freebsd.html|20010305004149|46918|8ed2a42e1668004c +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/hpux.html|20010305004149|47818|d34942564699608 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/install.html|20010305004149|48752|660222dd1feffc4 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/intro.html|20010305004149|49652|f261022c26987d7f +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/irix.html|20010305004149|50564|95833aedc3a82f0 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/linux.html|20010305004149|51464|f9f2d09dc6df75e +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/notes.html|20010305004149|52391|97e9b52853db15ea +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/osf1.html|20010305004149|53358|9d4ebabfe3af8970 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/qnx.html|20010305004149|54263|6d2849a8e8038dc9 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sco.html|20010305004149|55174|e25f6271a1b753d0 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/shlib.html|20010305004149|56099|7168ed40f2e1155d tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/solaris.html|20010305004149|57063|3a85fb541538d0d7 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/sunos.html|20010305004149|58008|fc41965e9d95985c tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/test.html|20010305004149|58940|b2c2f275a0c3e783 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/ultrix.html|20010305004149|59865|a1dd780edcde11f6 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/faq.html|20010305004149|61835|cdb7646d3d2e6374 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/intro.html|20010305004149|62808|2eed15d25078711 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/notes.html|20010305004149|63758|7e53a042c5c4d350 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/faq.html|20010305004149|65331|34704a907168cea7 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/intro.html|20010305004149|00770|2975a07b53b12046 +tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/notes.html|20010305004149|01764|4058bf968f287f7 tim@threads.polyesthetic.msg|bdb/docs/ref/build_win/test.html|20010305004149|02729|84090b57cb7f0cf8 +tim@threads.polyesthetic.msg|bdb/docs/ref/cam/intro.html|20010305004149|04558|4c497b1a18c4c7f5 +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/common.html|20010305004149|07598|607061232e2532df +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/compile.html|20010305004149|08609|12785e3091b78bfd +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/intro.html|20010305004149|06616|57ef29f26341ea +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/printlog.html|20010305004149|09591|9fa9894f839fad95 +tim@threads.polyesthetic.msg|bdb/docs/ref/debug/runtime.html|20010305004149|10629|d50f2fea4a8e58c +tim@threads.polyesthetic.msg|bdb/docs/ref/distrib/layout.html|20010305004149|12589|5aeb292fbd987cf8 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/format.html|20010305004149|13995|9fa10ca3c7ae6751 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/text.html|20010305004149|14998|88b57a73860b423 +tim@threads.polyesthetic.msg|bdb/docs/ref/dumpload/utility.html|20010305004149|15969|8fc100fdb58adb3c +tim@threads.polyesthetic.msg|bdb/docs/ref/env/create.html|20010305004149|17402|9f454cb1910df0b8 +tim@threads.polyesthetic.msg|bdb/docs/ref/env/error.html|20010305004149|18447|acbbdb848c9fe70f +tim@threads.polyesthetic.msg|bdb/docs/ref/env/intro.html|20010305004149|19435|96dd1090729e06b +tim@threads.polyesthetic.msg|bdb/docs/ref/env/naming.html|20010305004149|20447|1f041789686cc8a0 tim@threads.polyesthetic.msg|bdb/docs/ref/env/open.html|20010305004149|21520|37a6e67d520d6c00 +tim@threads.polyesthetic.msg|bdb/docs/ref/env/region.html|20010305004149|22506|cc94139c8daa7f6a +tim@threads.polyesthetic.msg|bdb/docs/ref/env/remote.html|20010305004149|23518|52a3a79fdff8f7bd +tim@threads.polyesthetic.msg|bdb/docs/ref/env/security.html|20010305004149|24507|e455f95aee7f5cd2 +tim@threads.polyesthetic.msg|bdb/docs/ref/install/file.html|20010305004150|21159|d4ba2317db7c064b +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.be.txt|20010305004150|22805|cf7d25e758432ab6 +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.s5.le.txt|20010305004150|23615|528ef76418c8b45c +tim@threads.polyesthetic.msg|bdb/docs/ref/install/magic.txt|20010305004150|21985|3894a46ea11ce25a +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/data.html|20010305004149|26092|33fbf7496c58cf63 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbis.html|20010305004149|28303|e672b7615d70be2c +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbisnot.html|20010305004149|29466|5ce7aed7ce41c9e6 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/distrib.html|20010305004149|30742|84b56709310017f2 +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/need.html|20010305004149|31743|43950806e35d71f +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/products.html|20010305004149|32785|f37221772a3b589d +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/terrain.html|20010305004149|33850|b396d6447a59435f +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/what.html|20010305004150|00539|dd70b9e6e085725d +tim@threads.polyesthetic.msg|bdb/docs/ref/intro/where.html|20010305004150|01442|6cb9ec27f19ecbbb +tim@threads.polyesthetic.msg|bdb/docs/ref/java/compat.html|20010305004150|25581|b39d173789bbf70d +tim@threads.polyesthetic.msg|bdb/docs/ref/java/conf.html|20010305004150|26401|ef560bcf13a71cd5 +tim@threads.polyesthetic.msg|bdb/docs/ref/java/faq.html|20010305004150|27218|7ca2474ba1f6676f +tim@threads.polyesthetic.msg|bdb/docs/ref/java/program.html|20010305004150|28026|e9bbc08bccf5d396 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/am_conv.html|20010305004150|30986|3bab32d969f21b77 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/cam_conv.html|20010305004150|31862|63844ff6fa95f0c +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/config.html|20010305004150|32692|a593ea4c87467ddd +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/dead.html|20010305004150|33535|f5c7debd9ba739bb +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/intro.html|20010305004150|34434|e1e07e71f3198be +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/max.html|20010305004150|35299|f0fb32ebc251f636 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/nondb.html|20010305004150|36156|863fe076a46378d7 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/notxn.html|20010305004150|37003|beec805d9f05e2bc +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/page.html|20010305004150|37863|d56876b2565cbee +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/stdmode.html|20010305004150|38797|4048a052ea129ca3 +tim@threads.polyesthetic.msg|bdb/docs/ref/lock/twopl.html|20010305004150|39650|b3f3aee667bc381d +tim@threads.polyesthetic.msg|bdb/docs/ref/log/config.html|20010305004150|41449|aedc53caf49c51c9 +tim@threads.polyesthetic.msg|bdb/docs/ref/log/intro.html|20010305004150|42339|31e7055d83ca8757 +tim@threads.polyesthetic.msg|bdb/docs/ref/log/limits.html|20010305004150|43198|26fac1e32387b7c9 +tim@threads.polyesthetic.msg|bdb/docs/ref/mp/config.html|20010305004150|46018|771c2c91fc0b6b17 +tim@threads.polyesthetic.msg|bdb/docs/ref/mp/intro.html|20010305004150|45138|34937731cafcf1b1 +tim@threads.polyesthetic.msg|bdb/docs/ref/perl/intro.html|20010305004150|47570|ce7e794e619e1e1d +tim@threads.polyesthetic.msg|bdb/docs/ref/pindex.src|20010305004149|02223|7d74723f9fd25801 tim@threads.polyesthetic.msg|bdb/docs/ref/program/appsignals.html|20010305004150|48930|3ab63bf9399d7ead tim@threads.polyesthetic.msg|bdb/docs/ref/program/byteorder.html|20010305004150|49835|f7fa52b53e4c8838 tim@threads.polyesthetic.msg|bdb/docs/ref/program/compatible.html|20010305004150|50729|237b98e6a6d7ed35 -tim@threads.polyesthetic.msg|bdb/docs/ref/program/extending.html|20010305004150|56407|6a86a40872d6b8bc -tim@threads.polyesthetic.msg|bdb/docs/ref/program/runtime.html|20010305004150|61233|6853fdbfe15df788 -tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.html|20010305004150|00758|bad2247b4f8c582b -tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/client.html|20010305004150|12568|824178f8626e45b7 -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/del.html|20010305004150|19030|514a1bd568ed4c1d -tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/get.html|20010305004150|20970|211de230d6a6cbc5 -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/env_open.html|20010305004151|47233|c8d61102658c3bbf -tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/filesys.html|20010305004151|48077|ebee24f726f99bf6 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/intro.html|20010305004151|16219|7ecd16967b0bc868 -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_put.html|20010305004151|21664|fd9ed0b04b465af -tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/rmw.html|20010305004151|28431|992b0143d13a3ec0 -tim@threads.polyesthetic.msg|bdb/docs/utility/db_stat.html|20010305004152|13652|9582c327964e1f9 -tim@threads.polyesthetic.msg|bdb/include/btree_auto.h|20010305004137|17274|84d4451c78faf67e -BK|sql/share/polish/errmsg.sys|19700101030959|01857|126b03af92054f0f -BK|strings/Attic/ct_init.c|19700101030959|01338|f0948bdd35ceedc3 -BK|strings/Attic/ctype.c.in|19700101030959|01361|8bf48d4bcbc5f675 -BK|vio/Vio.h|19700101030959|00004|f4416b2949647602 -BK|vio/VioSSL.h|19700101030959|00014|70d367b7ec8cac3e -BK|vio/violite.h|19700101030959|00023|58d2942a52ea7a83 -miguel@hegel.local|zlib/contrib/asm586/readme.586|20020319032514|57815|f60bfeefb27217d -miguel@hegel.local|zlib/contrib/delphi/zlibdef.pas|20020319032514|18918|658cb04db561e3db -miguel@hegel.local|zlib/contrib/delphi2/d_zlib.bpr|20020319032514|25335|c267d77cc2e2a2c8 -miguel@hegel.local|zlib/contrib/minizip/zip.h|20020319032516|40925|17fd39ccb4ea294c -miguel@hegel.local|zlib/gzio.c|20020319032517|27098|e02d23e656c19359 -monty@donna.mysql.com|sql-bench/Results/select-pg-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817132749|23395|8ef771713f89e1 -monty@narttu.mysql.com|sql-bench/Results/alter-table-mysql-Linux_2.2.14_my_SMP_i686-cmp-mysql,pg|20000817171625|11725|dfc480becae45236 -monty@narttu.mysql.fi|sql-bench/Results/ATIS-mysql-Linux_2.2.14_my_SMP_i686|20001218015322|06287|d275df58a04737c8 -mwagner@evoq.home.mwagner.org|Docs/Books/algor.eps|20001231203219|20480|481984607c98d715 -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000011.xml|20001017133713|00331|432156d127cbd22f -mwagner@evoq.home.mwagner.org|mysql-test/xml/tests/sel000015.xml|20001017133749|30814|b72689a8f9b21372 -mwagner@evoq.home.mwagner.org|mysql-test/xml/xsl/mysqltest.xsl|20001013051514|27425|1b8f6ec4f1b5f634 -sasha@mysql.sashanet.com|mysql-test/t/df_crash.test|20010406010433|65180|4c365178fe437f6 -serg@serg.mysql.com|mysql-test/t/sel000008.test|20001211130730|28581|b338ef585cadf7ae -serg@serg.mysql.com|mysql-test/t/sel000012.test|20001211130731|13215|ae64bff363c42e92 -serg@serg.mysql.com|mysql-test/t/sel000027.test|20001211130731|23677|ab44bb57a580de9 -tim@threads.polyesthetic.msg|bdb/db/crdel_auto.c|20010305004136|27298|ee4146a08fd175c1 -tim@threads.polyesthetic.msg|bdb/dist/config.hin|20010305004136|15955|fdecb7a06fa137a7 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_join.html|20010305004144|32446|a58c2d81ecfea5b -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_h_ffactor.html|20010305004144|08766|41352ddf74ccc338 -tim@threads.polyesthetic.msg|bdb/docs/api_c/db_set_lorder.html|20010305004144|11587|e24ae76325374653 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_lg_dir.html|20010305004145|05444|26be310214a2ff8f -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_region_init.html|20010305004145|31081|2ca19f76ee1ae790 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_set_shm_key.html|20010305004145|32880|cf5aaa6a995cbf55 -tim@threads.polyesthetic.msg|bdb/docs/api_c/env_version.html|20010305004145|40251|9bf7f99fefacc2bf -tim@threads.polyesthetic.msg|bdb/docs/api_c/log_get.html|20010305004145|50583|24cdf17ba55cbecf -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_open.html|20010305004146|04518|ab95c48ac26ad3f7 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_q_extentsize.html|20010305004146|21826|b17e340a68ede3ac -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/db_set_realloc.html|20010305004145|14370|64d967a58c328957 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_feedback.html|20010305004146|43755|1d5bd8dfe2d8034e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_mutexlocks.html|20010305004146|55575|f73e7ffdd2d8d62f -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_shm_key.html|20010305004146|62685|65b2c2f848ddf31e -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/env_set_tmp_dir.html|20010305004146|00169|6c815da1fad27537 -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/lock_detect.html|20010305004146|07495|bb50519c431233ed -tim@threads.polyesthetic.msg|bdb/docs/api_cxx/memp_fsync.html|20010305004146|28227|76d47da7c5dc8932 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_cachesize.html|20010305004147|40035|22d172a2d29f276b -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_lorder.html|20010305004147|50103|f64cbdd62bbbdd7c -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_pagesize.html|20010305004147|51079|d899ea90b20b7b31 -tim@threads.polyesthetic.msg|bdb/docs/api_java/db_set_re_pad.html|20010305004147|54985|2729c192747ac7af -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_errpfx.html|20010305004147|08227|a3b9a09670f6912 -tim@threads.polyesthetic.msg|bdb/docs/api_java/env_set_flags.html|20010305004147|10283|690847bb5e205c21 -tim@threads.polyesthetic.msg|bdb/docs/api_java/log_file.html|20010305004148|13857|74a49bae2532199a -tim@threads.polyesthetic.msg|bdb/docs/api_java/memp_fget.html|20010305004148|21431|ca84dee01997eb89 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_abort.html|20010305004148|29858|ec9a3517748bfa3 -tim@threads.polyesthetic.msg|bdb/docs/api_java/txn_id.html|20010305004148|01920|798720b73cc9391 -tim@threads.polyesthetic.msg|bdb/docs/api_tcl/dbc_close.html|20010305004148|53244|ef431e58d72accc3 -tim@threads.polyesthetic.msg|bdb/docs/images/next.gif|20010305004148|03600|ddab96466674135b -tim@threads.polyesthetic.msg|bdb/docs/ref/am/curdup.html|20010305004148|14243|5c855e1f5b99d990 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/partial.html|20010305004148|26629|db4a970c839b3051 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/stat.html|20010305004148|32050|fafc0f88571d9395 -tim@threads.polyesthetic.msg|bdb/docs/ref/am/upgrade.html|20010305004149|00532|c7499736f03c1a1c -tim@threads.polyesthetic.msg|bdb/docs/ref/am_conf/re_source.html|20010305004149|31346|b000d11ca4a0f9a -tim@threads.polyesthetic.msg|bdb/docs/ref/build_unix/shlib.html|20010305004149|56099|7168ed40f2e1155d -tim@threads.polyesthetic.msg|bdb/docs/ref/build_vxworks/faq.html|20010305004149|61835|cdb7646d3d2e6374 -tim@threads.polyesthetic.msg|bdb/docs/ref/env/region.html|20010305004149|22506|cc94139c8daa7f6a -tim@threads.polyesthetic.msg|bdb/docs/ref/env/security.html|20010305004149|24507|e455f95aee7f5cd2 -tim@threads.polyesthetic.msg|bdb/docs/ref/intro/dbis.html|20010305004149|28303|e672b7615d70be2c tim@threads.polyesthetic.msg|bdb/docs/ref/program/copy.html|20010305004150|51641|bcf5ff9656fafcd3 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/dbsizes.html|20010305004150|52571|d70da530573b9b38 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/diskspace.html|20010305004150|53502|959508f155721ee8 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/environ.html|20010305004150|54494|dc4a48aa531bd399 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/errorret.html|20010305004150|55412|23491397d7e704e9 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/extending.html|20010305004150|56407|6a86a40872d6b8bc +tim@threads.polyesthetic.msg|bdb/docs/ref/program/mt.html|20010305004150|57429|552ab570b657fc0e +tim@threads.polyesthetic.msg|bdb/docs/ref/program/namespace.html|20010305004150|58394|182f8f762343bdc1 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/recimp.html|20010305004150|60288|bbdb0feb7d467a80 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/runtime.html|20010305004150|61233|6853fdbfe15df788 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/scope.html|20010305004150|59326|2987f97781410bc1 +tim@threads.polyesthetic.msg|bdb/docs/ref/program/solaris.txt|20010305004150|63135|8b6bb29de0d58ffe +tim@threads.polyesthetic.msg|bdb/docs/ref/program/version.html|20010305004150|62172|d266e819d1531df8 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.html|20010305004150|00758|bad2247b4f8c582b +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/bdb_usenix.ps|20010305004150|02162|9851f6cdeff17481 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/embedded.html|20010305004150|03865|d25b9719d24df88c +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/hash_usenix.ps|20010305004150|05408|11cad226b0aa012b tim@threads.polyesthetic.msg|bdb/docs/ref/refs/libtp_usenix.ps|20010305004150|08667|73329b041f7e8c41 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/refs.html|20010305004150|64422|30490b237ba9b61 +tim@threads.polyesthetic.msg|bdb/docs/ref/refs/witold.html|20010305004150|65330|ad6c866cf48734b5 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/client.html|20010305004150|12568|824178f8626e45b7 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/intro.html|20010305004150|13549|ad16bc20623e1192 +tim@threads.polyesthetic.msg|bdb/docs/ref/rpc/server.html|20010305004150|14510|79f560205494295 +tim@threads.polyesthetic.msg|bdb/docs/ref/sendmail/intro.html|20010305004150|16532|ecac45d7e2bcf51c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/close.html|20010305004150|18046|1fe3a82f28e7ed32 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/del.html|20010305004150|19030|514a1bd568ed4c1d +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/errors.html|20010305004150|19994|be11ff6410e1db2c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/example.txt|20010305004150|28042|9ff88f22565208bf +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/get.html|20010305004150|20970|211de230d6a6cbc5 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/handles.html|20010305004150|21935|18a14f4a50e7bad0 +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/intro.html|20010305004150|22878|7544c4688623a54c +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/keydata.html|20010305004150|23810|530b1581aeba63ca tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/open.html|20010305004150|24776|5d6eb5c3df68eeee +tim@threads.polyesthetic.msg|bdb/docs/ref/simple_tut/put.html|20010305004150|25774|bdd2629c212af471 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/error.html|20010305004151|21581|37b817c57777b460 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/faq.html|20010305004151|22367|f8433900f7f85400 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/intro.html|20010305004151|20749|d66c6c398e2ace0b +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/program.html|20010305004151|23138|2f5bf497ae226ed5 +tim@threads.polyesthetic.msg|bdb/docs/ref/tcl/using.html|20010305004151|23908|28856d8c72d0660b +tim@threads.polyesthetic.msg|bdb/docs/ref/test/faq.html|20010305004151|38444|f95038006d18229 +tim@threads.polyesthetic.msg|bdb/docs/ref/test/run.html|20010305004151|39305|63c0398e7e2a29e2 +tim@threads.polyesthetic.msg|bdb/docs/ref/toc.html|20010305004148|08788|ab1fa294d5ef4b69 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/admin.html|20010305004151|41323|cf867ed0b00cccef +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/app.html|20010305004151|42111|6dc3c82982164fa8 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/archival.html|20010305004151|42978|7631314d840be181 tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/checkpoint.html|20010305004151|43948|29e077c954369ed tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/cursor.html|20010305004151|44775|824b2f28c9e8d610 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/data_open.html|20010305004151|45592|413c1d8aba9d8018 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/deadlock.html|20010305004151|46421|34914b9dc6b01703 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/env_open.html|20010305004151|47233|c8d61102658c3bbf +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/filesys.html|20010305004151|48077|ebee24f726f99bf6 tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/inc.html|20010305004151|48911|5ea32b4e2a2107b3 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/intro.html|20010305004151|49773|22096cea9fe159ac +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/logfile.html|20010305004151|50590|1c3002fcb6581e8c +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/put.html|20010305004151|51420|8cc785aeecff8535 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/read.html|20010305004151|52265|fc8b056380e09887 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/reclimit.html|20010305004151|53098|5f54174bf6026bd5 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/recovery.html|20010305004151|53956|6e3a0c07b997c3b2 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/term.html|20010305004151|54819|d6f3fa4fc5a630ec +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/throughput.html|20010305004151|55655|8a7d5a958df7f91a +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/transapp.txt|20010305004151|57368|337576ea2aae23b0 +tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/why.html|20010305004151|56525|c941c1a56a0adbaf tim@threads.polyesthetic.msg|bdb/docs/ref/transapp/writetest.txt|20010305004151|58289|4de1fc39894cd760 +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/config.html|20010305004151|59874|c7337cb30f9bf66 tim@threads.polyesthetic.msg|bdb/docs/ref/txn/intro.html|20010305004151|60722|85fabd5518fb26be +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/limits.html|20010305004151|61583|3004b7a93dab148b +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/nested.html|20010305004151|62443|6860bbf2f29aa93b +tim@threads.polyesthetic.msg|bdb/docs/ref/txn/other.html|20010305004151|63311|4991722636b3a46d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/convert.html|20010305004151|00512|d7f18eb34c1b6ae +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/disk.html|20010305004151|01410|94dc4e6e3668e613 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/intro.html|20010305004151|02261|8bfd3804a2da1598 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/system.html|20010305004151|03146|eae0256a127c3c89 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.2.0/toc.html|20010305004151|04069|670791f294a61494 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/close.html|20010305004151|05457|c79c866b393785cc +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/cxx.html|20010305004151|06323|7f3bfc9bba854d48 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db.html|20010305004151|07207|e7d63f4bb8e989e8 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/db_cxx.html|20010305004151|08078|5c17d6a360205140 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv.html|20010305004151|08972|f9863847dc1ed617 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbenv_cxx.html|20010305004151|09872|7f4fd0ebace36d8e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/dbinfo.html|20010305004151|10780|7529af7145c0680a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/disk.html|20010305004151|11685|eb79d1157ef44d3c tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/eacces.html|20010305004151|12569|f0299373d8b2f65c tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/eagain.html|20010305004151|13462|920800d8eb450f79 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/envopen.html|20010305004151|14369|5e768fd180f471e4 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/func.html|20010305004151|15332|c06e5bc63ddf7a64 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/intro.html|20010305004151|16219|7ecd16967b0bc868 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/java.html|20010305004151|17120|300acccbb633e335 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/join.html|20010305004151|18031|ec21d874caa0654 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/jump_set.html|20010305004151|18936|718c098a91db9dba +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_detect.html|20010305004151|19846|fb307b10156762ca +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_notheld.html|20010305004151|20761|ed6853b6daa5531b +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_put.html|20010305004151|21664|fd9ed0b04b465af +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/lock_stat.html|20010305004151|22568|c49716e693ce225b +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_register.html|20010305004151|23513|399320e965adf598 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/log_stat.html|20010305004151|24428|20b5898ba061557d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/memp_stat.html|20010305004151|25363|79e1141c63f7357 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/open.html|20010305004151|27357|8b1e2a969e97069a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/rmw.html|20010305004151|28431|992b0143d13a3ec0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/stat.html|20010305004151|29377|775d75e3ba02d15c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/toc.html|20010305004151|30301|16e7d8e76496cbc9 tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_begin.html|20010305004151|31307|53512180de5fec80 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_commit.html|20010305004151|32241|e1debf9ea769426c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/txn_stat.html|20010305004151|33181|516f1870c6127351 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/value_set.html|20010305004151|34118|f0b0c770a81b90b6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.0/xa.html|20010305004152|00602|1af042e462ab829 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/btstat.html|20010305004152|37584|40a76aef8b25a948 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/config.html|20010305004152|38401|d2ace28f39ab0f8d +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/disk.html|20010305004152|39192|2abdaf9059265ba9 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/dup.html|20010305004152|40004|911018877c118b45 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/env.html|20010305004152|40827|381e366a9c9c9a37 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/intro.html|20010305004152|41719|64592a50b1c634d6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/log_register.html|20010305004152|42524|7177eeb2fc099317 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/logalloc.html|20010305004152|43372|30563c544b8ddd54 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/memp_register.html|20010305004152|44171|7d92464a1029d53e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/put.html|20010305004152|44997|961a1a689be6ce +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_feedback.html|20010305004152|45815|6d7de50be92a5488 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_paniccall.html|20010305004152|46636|8f9741244fb6e9f6 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/set_tx_recover.html|20010305004152|47442|ada65907ba98eee8 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/sysmem.html|20010305004152|48282|3d088eb0ef1b27e0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tcl.html|20010305004152|49096|f5c85b09c33bda4 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/tmp.html|20010305004152|50733|ef3450f6fa89f2dc +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/toc.html|20010305004152|49908|af1a24798980ad1 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.1/txn_check.html|20010305004152|51549|2405b25bc92cc476 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/callback.html|20010305004152|53656|64a2b2b85cc253c1 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/db_dump.html|20010305004152|54477|7d1cac3358c0482e +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/disk.html|20010305004152|55280|61799ebebe78ebb2 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/handle.html|20010305004152|56086|bb8a73b74d4399ae +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/incomplete.html|20010305004152|56914|af86a649a878a124 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/intro.html|20010305004152|57734|984a9f7dd07e0c14 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/mutexlock.html|20010305004152|58567|972b710c5bdba67c +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/notfound.html|20010305004152|59393|dc91c094aba92838 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/renumber.html|20010305004152|60219|d6cd798434da81aa +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/set_flags.html|20010305004152|61061|213809ca8d7802d0 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/toc.html|20010305004152|61902|9c94c533ada43c1a +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade.3.2/tx_recover.html|20010305004152|62754|132a354cde7a8286 +tim@threads.polyesthetic.msg|bdb/docs/ref/upgrade/process.html|20010305004151|64704|78f9ca966a587234 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/config.html|20010305004152|64479|3f3f449c305e66b4 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/faq.html|20010305004152|65373|7aa890c7b70f1293 +tim@threads.polyesthetic.msg|bdb/docs/ref/xa/intro.html|20010305004152|00728|8ac020ffb869e9a8 +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/contact.html|20010305004152|04402|55b4da3d7bf7655b +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/legal.html|20010305004152|02616|7388af4c578cacf6 +tim@threads.polyesthetic.msg|bdb/docs/sleepycat/license.html|20010305004152|03483|9371001bbf0ba2dd +tim@threads.polyesthetic.msg|bdb/docs/utility/berkeley_db_svc.html|20010305004152|06576|91fe012778882ce4 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_archive.html|20010305004152|07446|ab2c66e01b3e3626 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_checkpoint.html|20010305004152|08309|c040e4424edcc451 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_deadlock.html|20010305004152|09191|f23f99911c3e5784 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_dump.html|20010305004152|10062|5de7ade427f20332 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_load.html|20010305004152|10976|981095940db0197 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_printlog.html|20010305004152|11895|fcc4075ad0232842 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_recover.html|20010305004152|12771|1b63f2acdc0b0af7 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_stat.html|20010305004152|13652|9582c327964e1f9 +tim@threads.polyesthetic.msg|bdb/docs/utility/db_upgrade.html|20010305004152|14532|6444f26a93f77ea +tim@threads.polyesthetic.msg|bdb/docs/utility/db_verify.html|20010305004152|15424|4fee9bfa2f9ab41a +tim@threads.polyesthetic.msg|bdb/docs/utility/index.html|20010305004152|05717|66c82ee036c1b369 +tim@threads.polyesthetic.msg|bdb/hash/hash_auto.c|20010305004137|61459|d17c6a6ed4f181d1 +tim@threads.polyesthetic.msg|bdb/include/btree_auto.h|20010305004137|17274|84d4451c78faf67e +tim@threads.polyesthetic.msg|bdb/include/btree_ext.h|20010305004137|18246|5d53d710f170c6b6 +tim@threads.polyesthetic.msg|bdb/include/clib_ext.h|20010305004137|19207|ed9d9f7965f0e1d3 +tim@threads.polyesthetic.msg|bdb/include/common_ext.h|20010305004137|20146|35c8aab64ee3b8fd +tim@threads.polyesthetic.msg|bdb/include/crdel_auto.h|20010305004137|21088|1b8255da47550ece +tim@threads.polyesthetic.msg|bdb/include/db_auto.h|20010305004137|26350|994ddc84db334345 +tim@threads.polyesthetic.msg|bdb/include/db_ext.h|20010305004137|29469|a1e210bbd0de0a48 +tim@threads.polyesthetic.msg|bdb/include/db_server.h|20010305004137|34247|61a33aa05bf368a7 +tim@threads.polyesthetic.msg|bdb/include/env_ext.h|20010305004138|05832|33a5fdef1aeecefd +tim@threads.polyesthetic.msg|bdb/include/gen_client_ext.h|20010305004138|06647|5c621cacb18b38 +tim@threads.polyesthetic.msg|bdb/include/gen_server_ext.h|20010305004138|07539|fd7bcfe6bbca8bcb +tim@threads.polyesthetic.msg|bdb/include/hash_auto.h|20010305004138|09216|1b79cdd426d7ef25 +tim@threads.polyesthetic.msg|bdb/include/hash_ext.h|20010305004138|10079|5b31ff8413481606 +tim@threads.polyesthetic.msg|bdb/include/lock_ext.h|20010305004138|11814|ccd0785bb206933f +tim@threads.polyesthetic.msg|bdb/include/log_auto.h|20010305004138|13513|8d52dd0884d03051 tim@threads.polyesthetic.msg|bdb/include/log_ext.h|20010305004138|14339|2988f11d4545c76b +tim@threads.polyesthetic.msg|bdb/include/mp_ext.h|20010305004138|17070|a528b772d42d6455 +tim@threads.polyesthetic.msg|bdb/include/mutex_ext.h|20010305004138|19006|f20f47ddc346598b +tim@threads.polyesthetic.msg|bdb/include/os_ext.h|20010305004138|20730|a1771032b4d2d53b +tim@threads.polyesthetic.msg|bdb/include/qam_auto.h|20010305004138|24568|96f6c045fd0d6cab +tim@threads.polyesthetic.msg|bdb/include/qam_ext.h|20010305004138|25430|9993db1fb3428b6d +tim@threads.polyesthetic.msg|bdb/include/rpc_client_ext.h|20010305004138|28220|85436ca9b5691338 +tim@threads.polyesthetic.msg|bdb/include/rpc_server_ext.h|20010305004138|29091|952741fb85de2b80 +tim@threads.polyesthetic.msg|bdb/include/tcl_ext.h|20010305004138|31857|6759d22aa2ff5f39 +tim@threads.polyesthetic.msg|bdb/include/txn_auto.h|20010305004138|33645|e3f49e94fd291c45 +tim@threads.polyesthetic.msg|bdb/include/txn_ext.h|20010305004138|34549|9db24c14f204890c tim@threads.polyesthetic.msg|bdb/include/xa_ext.h|20010305004138|36449|50918e5ef9f095b6 tim@threads.polyesthetic.msg|bdb/java/src/com/sleepycat/db/DbConstants.java|20010305004138|56622|15fa87eda6b72302 +tim@threads.polyesthetic.msg|bdb/log/log_auto.c|20010305004137|49459|fe8c0369965f7151 +tim@threads.polyesthetic.msg|bdb/qam/qam_auto.c|20010305004141|31764|361954d3f149feb0 +tim@threads.polyesthetic.msg|bdb/rpc_client/db_server_clnt.c|20010305004141|41933|b548b860f765c597 +tim@threads.polyesthetic.msg|bdb/rpc_client/gen_client.c|20010305004141|43060|ad86f092d0996a68 +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server.x|20010305004141|47705|811aeb6b630fe7aa +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_proc.sed|20010305004141|49906|1a9af8e5b051acbd +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_svc.c|20010305004141|50897|35804eb82b953f49 +tim@threads.polyesthetic.msg|bdb/rpc_server/db_server_xdr.c|20010305004141|53794|336ef020b4a22c05 +tim@threads.polyesthetic.msg|bdb/rpc_server/gen_db_server.c|20010305004141|54931|d5602f9bd5c930e +tim@threads.polyesthetic.msg|bdb/test/include.tcl|20010305004141|34016|20fc297b040cbe2 +tim@threads.polyesthetic.msg|bdb/test/logtrack.list|20010305004142|05743|7f4f1382b37d98e5 +tim@threads.polyesthetic.msg|bdb/txn/txn_auto.c|20010305004143|19863|6eb282f016f606d9 +tonu@x3.internalnet|include/vio.h|20010520213124|42404|c62fd2b86c03da7d diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 1e82492161d..19d08f11f78 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -13,6 +13,7 @@ bar@bar.mysql.r18.ru bar@bar.udmsearch.izhnet.ru bar@gw.udmsearch.izhnet.ru bell@sanja.is.com.ua +bk@admin.bk davida@isil.mysql.com heikki@donna.mysql.fi heikki@hundin.mysql.fi diff --git a/BitKeeper/etc/skipkeys b/BitKeeper/etc/skipkeys new file mode 100644 index 00000000000..36b38ab1c21 --- /dev/null +++ b/BitKeeper/etc/skipkeys @@ -0,0 +1,7 @@ +BK|scripts/safe_mysqld.sh|19700101030959|01930|d0a3cc73fd1b0d8d tim@localhost.polyesthetic.msg|scripts/safe_mysqld.sh|20000802235627|38519 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe arjen@co3064164-a.bitbike.com|BitKeeper/etc/logging_ok|20011212060636|33009 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe sasha@work.mysql.com|BitKeeper/etc/logging_ok|20000802223223|24242 +bk@work.mysql.com|BitKeeper/etc/logging_ok|20000731192914|03271|5e19f6258f804ffe tim@localhost.polyesthetic.msg|BitKeeper/etc/logging_ok|20000802235640|27343 +bk@work.mysql.com|ChangeSet|20000731191004|44203|eae70093a6122e66+ sasha@work.mysql.com|ChangeSet|20000802223249|54774 +bk@work.mysql.com|ChangeSet|20000731191004|44203|eae70093a6122e66+ tim@localhost.polyesthetic.msg|ChangeSet|20000802235645|56533 From 82281dff1a6008f0d89e5d60e240e2c8fbf037f9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Feb 2003 18:50:12 +0200 Subject: [PATCH 003/267] A fix for new conditions being defined and upper condition not updated mysql-test/r/type_datetime.result: result for datetime fix mysql-test/t/type_datetime.test: test for datetime fix sql/sql_select.cc: Fix for a bug caused implicitely by MySQL having to comply with ODBC standard on datetime comparisons. This failed to update used_tables() for OR condition, which is why query returned all rows on query as in .test above, while none of types contains NULL nor 0 datetime (last one from ODBC) --- mysql-test/r/type_datetime.result | 1 + mysql-test/t/type_datetime.test | 5 +++++ sql/sql_select.cc | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result index dd34bc1cf86..6c461b10930 100644 --- a/mysql-test/r/type_datetime.result +++ b/mysql-test/r/type_datetime.result @@ -40,3 +40,4 @@ date numfacture expedition 0000-00-00 00:00:00 1212 0001-00-00 00:00:00 table type possible_keys key key_len ref rows Extra t1 ref expedition expedition 8 const 1 where used +a b diff --git a/mysql-test/t/type_datetime.test b/mysql-test/t/type_datetime.test index 626dedad547..eed3f831383 100644 --- a/mysql-test/t/type_datetime.test +++ b/mysql-test/t/type_datetime.test @@ -50,3 +50,8 @@ INSERT INTO t1 (numfacture,expedition) VALUES ('1212','0001-00-00 00:00:00'); SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; EXPLAIN SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; drop table t1; +create table t1 (a datetime not null, b datetime not null); +insert into t1 values (now(), now()); +insert into t1 values (now(), now()); +select * from t1 where a is null or b is null; +drop table t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3596fdc0c05..8444a451965 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3009,6 +3009,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) == Item_func::COND_AND_FUNC; List_iterator li(*((Item_cond*) cond)->argument_list()); Item::cond_result tmp_cond_value; + bool should_fix_fields=0; *cond_value=Item::COND_UNDEF; Item *item; @@ -3028,6 +3029,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) delete item; // This may be shared #endif VOID(li.replace(new_item)); + should_fix_fields=1; } if (*cond_value == Item::COND_UNDEF) *cond_value=tmp_cond_value; @@ -3054,6 +3056,9 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) break; /* purecov: deadcode */ } } + if (should_fix_fields) + cond->fix_fields(current_thd,0); + if (!((Item_cond*) cond)->argument_list()->elements || *cond_value != Item::COND_OK) return (COND*) 0; From f67fe80eade847584bc0eae79d51b3b9345d7a57 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Feb 2003 17:50:06 +0200 Subject: [PATCH 004/267] connect timeout bug fix libmysql/libmysql.c: This is a fix for a bug in connect_timeout. This bug manifested itself on operating systems that do support poll() system call, which resulted in a timeout twice the value specified. That is because timeout executed on both select() and poll(). --- libmysql/libmysql.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 179a942828c..af964bb9bfa 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -175,6 +175,9 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, * implementations of select that don't adjust tv upon * failure to reflect the time remaining */ +#ifdef HAVE_POLL + return(0); +#endif start_time = time(NULL); for (;;) { From 614bc5a186894916a879a4cdfe7e0fb04a7e963f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Feb 2003 20:42:46 +0200 Subject: [PATCH 005/267] Fixed YES/NO in Polish messages --- sql/share/polish/errmsg.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index af484b4c850..491068cdcdd 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -7,8 +7,8 @@ "hashchk", "isamchk", -"TAK", "NIE", +"TAK", "Nie mo¿na stworzyæ pliku '%-.64s' (Kod b³êdu: %d)", "Nie mo¿na stworzyæ tabeli '%-.64s' (Kod b³êdu: %d)", "Nie mo¿na stworzyæ bazy danych '%-.64s'. B³?d %d", From cef26176ad3c6224db5b25eb64cd0b301323d288 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Feb 2003 00:11:00 +0200 Subject: [PATCH 006/267] fix of illegal usage aggregate functions mysql-test/r/subselect.result: test of illegal aggregate functions mysql-test/t/subselect.test: test of illegal aggregate functions --- mysql-test/r/subselect.result | 10 ++++++++++ mysql-test/t/subselect.test | 12 ++++++++++++ sql/item_subselect.cc | 9 ++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 0d8c96fea85..8cd38ad4385 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1012,3 +1012,13 @@ id select_type table type possible_keys key key_len ref rows Extra 2 UNCACHEABLE SUBSELECT t1 ALL NULL NULL NULL NULL 3 3 UNCACHEABLE SUBSELECT t1 ALL NULL NULL NULL NULL 3 drop table t1; +CREATE TABLE `t1` ( +`i` int(11) NOT NULL default '0', +PRIMARY KEY (`i`) +) TYPE=MyISAM CHARSET=latin1; +INSERT INTO t1 VALUES (1); +UPDATE t1 SET i=i+(SELECT MAX(i) FROM (SELECT 1) t) WHERE i=(SELECT MAX(i)); +Invalid use of group function +UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i)); +Invalid use of group function +drop table t1; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 1841e9f109a..85f316deb04 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -595,3 +595,15 @@ insert into t1 values (1), (2), (3); explain select a,(select (select rand() from t1 limit 1) from t1 limit 1) from t1; drop table t1; + +CREATE TABLE `t1` ( + `i` int(11) NOT NULL default '0', + PRIMARY KEY (`i`) +) TYPE=MyISAM CHARSET=latin1; + +INSERT INTO t1 VALUES (1); +-- error 1111 +UPDATE t1 SET i=i+(SELECT MAX(i) FROM (SELECT 1) t) WHERE i=(SELECT MAX(i)); +-- error 1111 +UPDATE t1 SET i=i+1 WHERE i=(SELECT MAX(i)); +drop table t1; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index fb51b5561e9..30643ec8385 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -88,7 +88,14 @@ bool Item_subselect::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) if (have_to_be_excluded) engine->exclude(); substitution= 0; - return (*ref)->fix_fields(thd, tables, ref); + int ret= (*ref)->fix_fields(thd, tables, ref); + // We can't substitute aggregate functions (like (SELECT (max(i))) + if ((*ref)->with_sum_func) + { + my_error(ER_INVALID_GROUP_FUNC_USE, MYF(0)); + return 1; + } + return ret; } char const *save_where= thd->where; From e1cf7fb3a859c712a1df84a5cc82138a88472b59 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Feb 2003 20:39:12 +0400 Subject: [PATCH 007/267] SCRUM: 'Replication: PURGE LOGS with date' task Added: PURGE [MASTER] LOGS BEFORE date/date_expression expire-logs-days option With this option old files are deleted when - mysqld is started - log is rotated - someone does FLUSH LOGS sql/lex.h: For PURGE LOGS BEFORE sql/log.cc: Added purge_logs_before_date to MYSQL_LOG class sql/mysql_priv.h: For startup option --expire-logs-days sql/mysqld.cc: Added options expire-logs-days When mysqld is started old log files are deleted. sql/sql_class.h: For PURGE LOGS BEFORE and expire-log-days option sql/sql_lex.h: For PURGE LOGS BEFORE sql/sql_parse.cc: Old logs are deleted when someone does FLUSH LOGS sql/sql_repl.cc: For PURGE LOGS BEFORE and expire-log-days option sql/sql_repl.h: For PURGE LOGS BEFORE and expire-log-days option sql/sql_yacc.yy: For PURGE LOGS BEFORE --- sql/lex.h | 1 + sql/log.cc | 81 +++++++++++++++++++++++++++++++++++++++++++++++- sql/mysql_priv.h | 1 + sql/mysqld.cc | 16 +++++++++- sql/sql_class.h | 1 + sql/sql_lex.h | 3 +- sql/sql_parse.cc | 17 +++++++++- sql/sql_repl.cc | 25 ++++++++++----- sql/sql_repl.h | 1 + sql/sql_yacc.yy | 35 +++++++++++++++++---- 10 files changed, 164 insertions(+), 17 deletions(-) diff --git a/sql/lex.h b/sql/lex.h index a505911ccf6..2365e2e9d83 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -64,6 +64,7 @@ static SYMBOL symbols[] = { { "AVG_ROW_LENGTH", SYM(AVG_ROW_LENGTH),0,0}, { "AUTO_INCREMENT", SYM(AUTO_INC),0,0}, { "BACKUP", SYM(BACKUP_SYM),0,0}, + { "BEFORE", SYM(BEFORE_SYM),0,0}, { "BEGIN", SYM(BEGIN_SYM),0,0}, { "BERKELEYDB", SYM(BERKELEY_DB_SYM),0,0}, { "BDB", SYM(BERKELEY_DB_SYM),0,0}, diff --git a/sql/log.cc b/sql/log.cc index 5dcb5857026..b179788ea14 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -746,6 +746,78 @@ err: DBUG_RETURN(error); } +/* + Remove all logs before the given file date from disk and from the + index file. + + SYNOPSIS + purge_logs_before_date() + thd Thread pointer + before_date Delete all log files before given date. + + NOTES + If any of the logs before the deleted one is in use, + only purge logs up to this one. + + RETURN VALUES + 0 ok + LOG_INFO_PURGE_NO_ROTATE Binary file that can't be rotated +*/ + +int MYSQL_LOG::purge_logs_before_date(THD* thd, time_t purge_time) +{ + int error; + LOG_INFO log_info; + MY_STAT stat_area; + + DBUG_ENTER("purge_logs_before_date"); + + if (no_rotate) + DBUG_RETURN(LOG_INFO_PURGE_NO_ROTATE); + + pthread_mutex_lock(&LOCK_index); + + /* + Delete until we find curren file + or a file that is used or a file + that is older than purge_time. + */ + if ((error=find_log_pos(&log_info, NullS, 0 /*no mutex*/))) + goto err; + + while (strcmp(log_file_name, log_info.log_file_name) && + !log_in_use(log_info.log_file_name)) + { + /* It's not fatal even if we can't delete a log file */ + if (my_stat(log_info.log_file_name, &stat_area, MYF(0)) && + stat_area.st_mtime < purge_time) + my_delete(log_info.log_file_name, MYF(0)); + else + break; + if (find_next_log(&log_info, 0)) + break; + } + + /* + If we get killed -9 here, the sysadmin would have to edit + the log index file after restart - otherwise, this should be safe + */ + + if (copy_up_file_and_fill(&index_file, log_info.index_file_start_offset)) + { + error= LOG_INFO_IO; + goto err; + } + + // now update offsets in index file for running threads + adjust_linfo_offsets(log_info.index_file_start_offset); + +err: + pthread_mutex_unlock(&LOCK_index); + DBUG_RETURN(error); +} + + /* Create a new log file name @@ -1033,6 +1105,7 @@ bool MYSQL_LOG::write(THD *thd,enum enum_server_command command, bool MYSQL_LOG::write(Log_event* event_info) { bool error=0; + bool should_rotate = 0; DBUG_ENTER("MYSQL_LOG::write(event)"); if (!inited) // Can't use mutex if not init @@ -1045,7 +1118,6 @@ bool MYSQL_LOG::write(Log_event* event_info) /* In most cases this is only called if 'is_open()' is true */ if (is_open()) { - bool should_rotate = 0; THD *thd=event_info->thd; const char *local_db = event_info->get_db(); #ifdef USING_TRANSACTIONS @@ -1163,6 +1235,13 @@ err: } pthread_mutex_unlock(&LOCK_log); + if (should_rotate && ~expire_logs_days) + { + long purge_time= time(0) - expire_logs_days*24*60*60; + if (purge_time >= 0) + error= purge_logs_before_date(current_thd, purge_time); + } + DBUG_RETURN(error); } diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 7a354ef5ff1..e9c31630145 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -703,6 +703,7 @@ extern ulong binlog_cache_size, max_binlog_cache_size, open_files_limit; extern ulong max_binlog_size, rpl_recovery_rank, thread_cache_size; extern ulong com_stat[(uint) SQLCOM_END], com_other, back_log; extern ulong specialflag, current_pid; +extern ulong expire_logs_days; extern uint test_flags,select_errors,ha_open_options; extern uint protocol_version,dropping_tables; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 8a2dfe50d54..def1bf91f23 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -392,6 +392,7 @@ ulong max_connections,max_insert_delayed_threads,max_used_connections, max_connect_errors, max_user_connections = 0; ulong thread_id=1L,current_pid; ulong slow_launch_threads = 0; +ulong expire_logs_days = ~0L; char mysql_real_data_home[FN_REFLEN], language[LIBLEN],reg_ext[FN_EXTLEN], @@ -2158,6 +2159,12 @@ The server will not act as a slave."); open_log(&mysql_bin_log, glob_hostname, opt_bin_logname, "-bin", opt_binlog_index_name,LOG_BIN); using_update_log=1; + if (~expire_logs_days) + { + long purge_time= time(0) - expire_logs_days*24*60*60; + if (purge_time >= 0) + mysql_bin_log.purge_logs_before_date(current_thd, purge_time); + } } @@ -3216,7 +3223,8 @@ enum options { OPT_BDB_MAX_LOCK, OPT_ENABLE_SHARED_MEMORY, OPT_SHARED_MEMORY_BASE_NAME, - OPT_OLD_PASSWORDS + OPT_OLD_PASSWORDS, + OPT_EXPIRE_LOGS_DAYS }; @@ -4019,6 +4027,11 @@ struct my_option my_long_options[] = (gptr*) &global_system_variables.net_wait_timeout, (gptr*) &max_system_variables.net_wait_timeout, 0, GET_ULONG, REQUIRED_ARG, NET_WAIT_TIMEOUT, 1, LONG_TIMEOUT, 0, 1, 0}, + {"expire_logs_days", OPT_EXPIRE_LOGS_DAYS, + "Logs will be rotated after expire-log-days days. ", + (gptr*) &expire_logs_days, + (gptr*) &expire_logs_days, 0, GET_ULONG, + REQUIRED_ARG, ~0L, 0, 99, 0, 1, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; @@ -4064,6 +4077,7 @@ struct show_var_st status_vars[]= { {"Com_lock_tables", (char*) (com_stat+(uint) SQLCOM_LOCK_TABLES),SHOW_LONG}, {"Com_optimize", (char*) (com_stat+(uint) SQLCOM_OPTIMIZE),SHOW_LONG}, {"Com_purge", (char*) (com_stat+(uint) SQLCOM_PURGE),SHOW_LONG}, + {"Com_purge_before_date", (char*) (com_stat+(uint) SQLCOM_PURGE_BEFORE),SHOW_LONG}, {"Com_rename_table", (char*) (com_stat+(uint) SQLCOM_RENAME_TABLE),SHOW_LONG}, {"Com_repair", (char*) (com_stat+(uint) SQLCOM_REPAIR),SHOW_LONG}, {"Com_replace", (char*) (com_stat+(uint) SQLCOM_REPLACE),SHOW_LONG}, diff --git a/sql/sql_class.h b/sql/sql_class.h index e682bf5741a..7f7933cec0b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -134,6 +134,7 @@ public: void make_log_name(char* buf, const char* log_ident); bool is_active(const char* log_file_name); int purge_logs(THD* thd, const char* to_log); + int purge_logs_before_date(THD* thd, time_t purge_time); int purge_first_log(struct st_relay_log_info* rli); bool reset_logs(THD* thd); // if we are exiting, we also want to close the index file diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 9fc00e5f56d..9e1ab9153f2 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -64,7 +64,7 @@ enum enum_sql_command { SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP, SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_CHANGE_MASTER, SQLCOM_RENAME_TABLE, SQLCOM_BACKUP_TABLE, SQLCOM_RESTORE_TABLE, - SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_SHOW_BINLOGS, + SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_PURGE_BEFORE, SQLCOM_SHOW_BINLOGS, SQLCOM_SHOW_OPEN_TABLES, SQLCOM_LOAD_MASTER_DATA, SQLCOM_HA_OPEN, SQLCOM_HA_CLOSE, SQLCOM_HA_READ, SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI, @@ -413,6 +413,7 @@ typedef struct st_lex char *length,*dec,*change,*name; char *backup_dir; /* For RESTORE/BACKUP */ char* to_log; /* For PURGE MASTER LOGS TO */ + time_t purge_time; /* For PURGE MASTER LOGS BEFORE */ char* x509_subject,*x509_issuer,*ssl_cipher; char* found_colon; /* For multi queries - next query */ enum SSL_type ssl_type; /* defined in violite.h */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 42f4d39147b..7ba5cae5147 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1665,9 +1665,18 @@ mysql_execute_command(THD *thd) { if (check_global_access(thd, SUPER_ACL)) goto error; + // PURGE MASTER LOGS TO 'file' res = purge_master_logs(thd, lex->to_log); break; } + case SQLCOM_PURGE_BEFORE: + { + if (check_global_access(thd, SUPER_ACL)) + goto error; + // PURGE MASTER LOGS BEFORE 'data' + res = purge_master_logs_before_date(thd, lex->purge_time); + break; + } case SQLCOM_SHOW_WARNS: { res= mysqld_show_warnings(thd, (ulong) @@ -2742,7 +2751,7 @@ mysql_execute_command(THD *thd) if (check_global_access(thd,RELOAD_ACL) || check_db_used(thd, tables)) goto error; /* error sending is deferred to reload_acl_and_cache */ - reload_acl_and_cache(thd, lex->type, tables) ; + reload_acl_and_cache(thd, lex->type, tables); break; case SQLCOM_KILL: kill_one_thread(thd,lex->thread_id); @@ -3804,6 +3813,12 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables) mysql_log.new_file(1); mysql_update_log.new_file(1); mysql_bin_log.new_file(1); + if (~expire_logs_days) + { + long purge_time= time(0) - expire_logs_days*24*60*60; + if (purge_time >= 0) + mysql_bin_log.purge_logs_before_date(thd, purge_time); + } mysql_slow_log.new_file(1); if (ha_flush_logs()) result=1; diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 5bdc15c2bf0..b7f1914ca74 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -256,15 +256,10 @@ bool log_in_use(const char* log_name) return result; } - -int purge_master_logs(THD* thd, const char* to_log) +int purge_error_message(THD* thd, int res) { - char search_file_name[FN_REFLEN]; const char* errmsg = 0; - mysql_bin_log.make_log_name(search_file_name, to_log); - int res = mysql_bin_log.purge_logs(thd, search_file_name); - switch(res) { case 0: break; case LOG_INFO_EOF: errmsg = "Target log not found in binlog index"; break; @@ -288,10 +283,26 @@ binlog purge"; break; } else send_ok(thd); - return 0; } +int purge_master_logs(THD* thd, const char* to_log) +{ + char search_file_name[FN_REFLEN]; + + mysql_bin_log.make_log_name(search_file_name, to_log); + int res = mysql_bin_log.purge_logs(thd, search_file_name); + + return purge_error_message(thd, res); +} + + +int purge_master_logs_before_date(THD* thd, time_t purge_time) +{ + int res = mysql_bin_log.purge_logs_before_date(thd, purge_time); + return purge_error_message(thd ,res); +} + /* TODO: Clean up loop to only have one call to send_file() */ diff --git a/sql/sql_repl.h b/sql/sql_repl.h index 15435382b08..d5de8bbf953 100644 --- a/sql/sql_repl.h +++ b/sql/sql_repl.h @@ -33,6 +33,7 @@ int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1, int reset_slave(THD *thd, MASTER_INFO* mi); int reset_master(THD* thd); int purge_master_logs(THD* thd, const char* to_log); +int purge_master_logs_before_date(THD* thd, time_t purge_time); bool log_in_use(const char* log_name); void adjust_linfo_offsets(my_off_t purge_offset); int show_binlogs(THD* thd); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index a424aefd45f..19b75d814a2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -528,6 +528,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token CIPHER_SYM %token HELP +%token BEFORE_SYM %left SET_VAR %left OR_OR_CONCAT OR @@ -3558,13 +3559,34 @@ purge: PURGE { LEX *lex=Lex; - lex->sql_command = SQLCOM_PURGE; lex->type=0; - } - MASTER_SYM LOGS_SYM TO_SYM TEXT_STRING - { - Lex->to_log = $6.str; - } ; + } purge_options + {} + ; + +purge_options: + LOGS_SYM + purge_option + | MASTER_SYM LOGS_SYM + purge_option; + +purge_option: + TO_SYM TEXT_STRING + { + Lex->sql_command = SQLCOM_PURGE; + Lex->to_log = $2.str; + } + | BEFORE_SYM expr + { + if ($2->check_cols(1) || $2->fix_fields(Lex->thd, 0, &$2)) + { + net_printf(Lex->thd, ER_WRONG_ARGUMENTS, "PURGE LOGS BEFORE"); + YYABORT; + } + Item *tmp= new Item_func_unix_timestamp($2); + Lex->sql_command = SQLCOM_PURGE_BEFORE; + Lex->purge_time= tmp->val_int(); + }; /* kill threads */ @@ -3574,6 +3596,7 @@ kill: LEX *lex=Lex; if ($2->check_cols(1) || $2->fix_fields(lex->thd, 0, &$2)) { + send_error(lex->thd, ER_SET_CONSTANTS_ONLY); YYABORT; } From 1b9b2c3091fc580bff82ca0630221eabd5628d6c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Feb 2003 22:07:26 +0200 Subject: [PATCH 008/267] client port number added to SHOW PROCESSLIST (SCRUM?) include/violite.h: port added to reported parameters libmysqld/lib_vio.c: port added to reported parameters sql/sql_class.h: port added to reported parameters sql/sql_parse.cc: port added to reported parameters sql/sql_show.cc: SHOW PROCESSLIST will report port number if it is possible vio/viosocket.c: port added to reported parameters --- include/violite.h | 4 ++-- libmysqld/lib_vio.c | 2 +- sql/sql_class.h | 3 ++- sql/sql_parse.cc | 7 ++++--- sql/sql_show.cc | 18 +++++++++++++----- vio/viosocket.c | 4 +++- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/include/violite.h b/include/violite.h index 6c8ad1f4b69..f99bb521e23 100644 --- a/include/violite.h +++ b/include/violite.h @@ -95,7 +95,7 @@ my_socket vio_fd(Vio*vio); /* * Remote peer's address and name in text form. */ -my_bool vio_peer_addr(Vio* vio, char *buf); +my_bool vio_peer_addr(Vio* vio, char *buf, u_int16_t *port); /* Remotes in_addr */ @@ -119,7 +119,7 @@ my_bool vio_poll_read(Vio *vio,uint timeout); #define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) #define vio_should_retry(vio) (vio)->should_retry(vio) #define vio_close(vio) ((vio)->vioclose)(vio) -#define vio_peer_addr(vio, buf) (vio)->peer_addr(vio, buf) +#define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt) #define vio_in_addr(vio, in) (vio)->in_addr(vio, in) #endif /* defined(HAVE_VIO) && !defined(DONT_MAP_VIO) */ diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c index 29a70b7acbb..428df972372 100644 --- a/libmysqld/lib_vio.c +++ b/libmysqld/lib_vio.c @@ -204,7 +204,7 @@ my_socket vio_fd(Vio* vio) } -my_bool vio_peer_addr(Vio * vio, char *buf) +my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port) { return(0); } diff --git a/sql/sql_class.h b/sql/sql_class.h index 802052d553a..da341c64d50 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -350,8 +350,9 @@ public: db - currently selected database ip - client IP */ - char *host,*user,*priv_user,*db,*ip; + /* remote (peer) port */ + u_int16_t peer_port; /* Points to info-string that will show in SHOW PROCESSLIST */ const char *proc_info; /* points to host if host is available, otherwise points to ip */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6249c769015..c5a87626691 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -482,7 +482,7 @@ check_connections(THD *thd) { char ip[30]; - if (vio_peer_addr(net->vio,ip)) + if (vio_peer_addr(net->vio, ip, &thd->peer_port)) return (ER_BAD_HOST_ERROR); if (!(thd->ip = my_strdup(ip,MYF(0)))) return (ER_OUT_OF_RESOURCES); @@ -512,8 +512,9 @@ check_connections(THD *thd) else /* Hostname given means that the connection was on a socket */ { DBUG_PRINT("info",("Host: %s",thd->host)); - thd->host_or_ip=thd->host; - thd->ip=0; + thd->host_or_ip= thd->host; + thd->ip= 0; + thd->peer_port= 0; bzero((char*) &thd->remote,sizeof(struct sockaddr)); } /* Ensure that wrong hostnames doesn't cause buffer overflows */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 4faee7d248f..9c3de1c4338 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1016,6 +1016,7 @@ public: template class I_List; #endif +#define LIST_PROCESS_HOST_LEN 64 void mysqld_list_processes(THD *thd,const char *user, bool verbose) { @@ -1029,7 +1030,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) field_list.push_back(new Item_int("Id",0,7)); field_list.push_back(new Item_empty_string("User",16)); - field_list.push_back(new Item_empty_string("Host",64)); + field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN)); field_list.push_back(field=new Item_empty_string("db",NAME_LEN)); field->maybe_null=1; field_list.push_back(new Item_empty_string("Command",16)); @@ -1058,10 +1059,17 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) thd_info->user=thd->strdup(tmp->user ? tmp->user : (tmp->system_thread ? "system user" : "unauthenticated user")); - thd_info->host=thd->strdup(tmp->host ? tmp->host : - (tmp->ip ? tmp->ip : - (tmp->system_thread ? "none" : - "connecting host"))); + if (tmp->peer_port && (tmp->host || tmp->ip)) + { + if ((thd_info->host= thd->alloc(LIST_PROCESS_HOST_LEN+1))) + snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, "%s:%u", + (tmp->host ? tmp->host : tmp->ip), tmp->peer_port); + } + else + thd_info->host= thd->strdup(tmp->host ? tmp->host : + (tmp->ip ? tmp->ip : + (tmp->system_thread ? "none" : + "connecting host"))); if ((thd_info->db=tmp->db)) // Safe test thd_info->db=thd->strdup(thd_info->db); thd_info->command=(int) tmp->command; diff --git a/vio/viosocket.c b/vio/viosocket.c index f69eebd413a..edcea19d76a 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -277,13 +277,14 @@ my_socket vio_fd(Vio* vio) } -my_bool vio_peer_addr(Vio * vio, char *buf) +my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port) { DBUG_ENTER("vio_peer_addr"); DBUG_PRINT("enter", ("sd: %d", vio->sd)); if (vio->localhost) { strmov(buf,"127.0.0.1"); + *port= 0; } else { @@ -295,6 +296,7 @@ my_bool vio_peer_addr(Vio * vio, char *buf) DBUG_RETURN(1); } my_inet_ntoa(vio->remote.sin_addr,buf); + *port= ntohs(vio->remote.sin_port); } DBUG_PRINT("exit", ("addr: %s", buf)); DBUG_RETURN(0); From b01f20db91e163cfebb2e5ecf743241074ab7355 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Feb 2003 20:31:54 +0200 Subject: [PATCH 009/267] posreview changing (SCRUM) increased compatibility postmerge changing sql/sql_class.h: increased compatibility sql/sql_show.cc: postmerge changing vio/viosocket.c: increased compatibility --- sql/sql_class.h | 2 +- sql/sql_show.cc | 7 ++----- vio/viosocket.c | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/sql/sql_class.h b/sql/sql_class.h index da341c64d50..a8eaf1b200d 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -352,7 +352,7 @@ public: */ char *host,*user,*priv_user,*db,*ip; /* remote (peer) port */ - u_int16_t peer_port; + uint16 peer_port; /* Points to info-string that will show in SHOW PROCESSLIST */ const char *proc_info; /* points to host if host is available, otherwise points to ip */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index a47d99143b6..62977ab5fb2 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1064,13 +1064,10 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) { if ((thd_info->host= thd->alloc(LIST_PROCESS_HOST_LEN+1))) snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, "%s:%u", - (tmp->host ? tmp->host : tmp->ip), tmp->peer_port); + thd->host_or_ip, tmp->peer_port); } else - thd_info->host= thd->strdup(tmp->host ? tmp->host : - (tmp->ip ? tmp->ip : - (tmp->system_thread ? "none" : - "connecting host"))); + thd_info->host= thd->strdup(thd->host_or_ip); if ((thd_info->db=tmp->db)) // Safe test thd_info->db=thd->strdup(thd_info->db); thd_info->command=(int) tmp->command; diff --git a/vio/viosocket.c b/vio/viosocket.c index edcea19d76a..898b9a96c11 100644 --- a/vio/viosocket.c +++ b/vio/viosocket.c @@ -277,7 +277,7 @@ my_socket vio_fd(Vio* vio) } -my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port) +my_bool vio_peer_addr(Vio * vio, char *buf, uint16 *port) { DBUG_ENTER("vio_peer_addr"); DBUG_PRINT("enter", ("sd: %d", vio->sd)); From 828d7c6ec2fcd3a124dc043d7c19472106a11721 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Feb 2003 21:29:56 +0200 Subject: [PATCH 010/267] postmerging fix (SCRUM) include/violite.h: postmerging fix libmysqld/lib_vio.c: postmerging fix --- include/violite.h | 4 ++-- libmysqld/lib_vio.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/violite.h b/include/violite.h index f99bb521e23..a328e51253a 100644 --- a/include/violite.h +++ b/include/violite.h @@ -95,7 +95,7 @@ my_socket vio_fd(Vio*vio); /* * Remote peer's address and name in text form. */ -my_bool vio_peer_addr(Vio* vio, char *buf, u_int16_t *port); +my_bool vio_peer_addr(Vio* vio, char *buf, uint16 *port); /* Remotes in_addr */ @@ -224,7 +224,7 @@ struct st_vio my_bool (*is_blocking)(Vio*); int (*viokeepalive)(Vio*, my_bool); int (*fastsend)(Vio*); - my_bool (*peer_addr)(Vio*, gptr); + my_bool (*peer_addr)(Vio*, gptr, uint16*); void (*in_addr)(Vio*, struct in_addr*); my_bool (*should_retry)(Vio*); int (*vioclose)(Vio*); diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c index 428df972372..821923fe667 100644 --- a/libmysqld/lib_vio.c +++ b/libmysqld/lib_vio.c @@ -204,7 +204,7 @@ my_socket vio_fd(Vio* vio) } -my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port) +my_bool vio_peer_addr(Vio * vio, char *buf, uint16 *port) { return(0); } From b94e413f8d22dfb0ce5af84ec25ab25db6504f3e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Feb 2003 12:47:26 +0100 Subject: [PATCH 011/267] - Changed version number from "4.0.12-gamma" to "4.0.12" (confirmed by Monty) --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 56a3dbd8bd1..2e28b1d7db4 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! -AM_INIT_AUTOMAKE(mysql, 4.0.12-gamma) +AM_INIT_AUTOMAKE(mysql, 4.0.12) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 From 40fbd0fc790ab29dad2f11c1116cf1fc9d20e54c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Feb 2003 19:50:05 +0200 Subject: [PATCH 012/267] LOAD DATA INFILE is not replicated by slave if replicate_*_table is set --- sql/slave.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/slave.cc b/sql/slave.cc index 0bbf9bf227d..a1972dc5a5d 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1091,6 +1091,7 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) tables.db = thd->db; tables.alias= tables.real_name= (char*)lev->table_name; tables.lock_type = TL_WRITE; + tables.updating= 1; // the table will be opened in mysql_load if(table_rules_on && !tables_ok(thd, &tables)) { From 391bc11a2121919a29a2579639bc476b6c25fa6a Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Feb 2003 19:52:14 +0200 Subject: [PATCH 013/267] Always include errno.h include/global.h: Portability fix (Using errno before including errno.h can give big problems on Linux) --- include/global.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/global.h b/include/global.h index 988797b330c..1737c60db30 100644 --- a/include/global.h +++ b/include/global.h @@ -223,6 +223,7 @@ double my_ulonglong2double(unsigned long long A); #define CONFIG_SMP #include #endif +#include /* Recommended by debian */ /* Go around some bugs in different OS and compilers */ #if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) From c56f268ffecde0f5867b1fc66fd72ab56d800d3b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Feb 2003 21:17:44 +0200 Subject: [PATCH 014/267] used correct function (SCRUM) sql/sql_show.cc: used correct function --- sql/sql_show.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 62977ab5fb2..95197ecfc4b 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1063,8 +1063,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) if (tmp->peer_port && (tmp->host || tmp->ip)) { if ((thd_info->host= thd->alloc(LIST_PROCESS_HOST_LEN+1))) - snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, "%s:%u", - thd->host_or_ip, tmp->peer_port); + my_snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, + "%s:%u", thd->host_or_ip, tmp->peer_port); } else thd_info->host= thd->strdup(thd->host_or_ip); From b276b60e033744a25b034d3107e7a3f1122e04c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 28 Feb 2003 22:24:00 +0200 Subject: [PATCH 015/267] LOAD DATA INFILE is not replicated if replicate_*_table is set LOAD DATA LOCAL INFILE was not replicated correctly VC++Files/bdb/bdb.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/Berkeley_DB.dsw: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_archive.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_buildall.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_checkpoint.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_deadlock.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_dll.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_dump.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_java.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_load.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_printlog.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_recover.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_stat.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_static.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_static1.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_tcl.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_test.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_upgrade.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/db_verify.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_access.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_btrec.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_env.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_lock.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_mpool.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/ex_tpcb.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_access.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_btrec.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_env.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_lock.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_mpool.dsp: Updated VC++ files +end space removed VC++Files/bdb/build_win32/excxx_tpcb.dsp: Updated VC++ files +end space removed VC++Files/client/mysql.dsp: Updated VC++ files +end space removed VC++Files/client/mysqladmin.dsp: Updated VC++ files +end space removed VC++Files/client/mysqlcheck.dsp: Updated VC++ files +end space removed VC++Files/client/mysqlclient.dsp: Updated VC++ files +end space removed VC++Files/client/mysqlclient.dsw: Updated VC++ files +end space removed VC++Files/client/mysqldump.dsp: Updated VC++ files +end space removed VC++Files/client/mysqlimport.dsp: Updated VC++ files +end space removed VC++Files/client/mysqlshow.dsp: Updated VC++ files +end space removed VC++Files/comp_err/comp_err.dsp: Updated VC++ files +end space removed VC++Files/contrib/asm386/zlibvc.dsp: Updated VC++ files +end space removed VC++Files/contrib/asm386/zlibvc.dsw: Updated VC++ files +end space removed VC++Files/contrib/minizip/zlibvc.dsp: Updated VC++ files +end space removed VC++Files/contrib/minizip/zlibvc.dsw: Updated VC++ files +end space removed VC++Files/dbug/dbug.dsp: Updated VC++ files +end space removed VC++Files/dbug/dbug.dsw: Updated VC++ files +end space removed VC++Files/heap/heap.dsp: Updated VC++ files +end space removed VC++Files/innobase/innobase.dsp: Updated VC++ files +end space removed VC++Files/isam/isam.dsp: Updated VC++ files +end space removed VC++Files/isam/isam.dsw: Updated VC++ files +end space removed VC++Files/isamchk/isamchk.dsp: Updated VC++ files +end space removed VC++Files/libmysql/libmysql.dsp: Updated VC++ files +end space removed VC++Files/libmysql/libmysql.dsw: Updated VC++ files +end space removed VC++Files/libmysqld/examples/test_libmysqld.dsp: Updated VC++ files +end space removed VC++Files/libmysqld/libmysqld.dsp: Updated VC++ files +end space removed VC++Files/libmysqltest/myTest.dsp: Updated VC++ files +end space removed VC++Files/libmysqltest/mytest.dsw: Updated VC++ files +end space removed VC++Files/merge/merge.dsp: Updated VC++ files +end space removed VC++Files/merge/merge.dsw: Updated VC++ files +end space removed VC++Files/my_print_defaults/my_print_defaults.dsp: Updated VC++ files +end space removed VC++Files/myisam/myisam.dsp: Updated VC++ files +end space removed VC++Files/myisamchk/myisamchk.dsp: Updated VC++ files +end space removed VC++Files/myisamlog/myisamlog.dsp: Updated VC++ files +end space removed VC++Files/myisammrg/myisammrg.dsp: Updated VC++ files +end space removed VC++Files/myisampack/myisampack.dsp: Updated VC++ files +end space removed VC++Files/mysql.dsp: Updated VC++ files +end space removed VC++Files/mysql.dsw: Updated VC++ files +end space removed VC++Files/mysqlbinlog/mysqlbinlog.dsp: Updated VC++ files +end space removed VC++Files/mysqlcheck/mysqlcheck.dsp: Updated VC++ files +end space removed VC++Files/mysqldemb/mysqldemb.dsp: Updated VC++ files +end space removed VC++Files/mysqlmanager/MySqlManager.dsp: Updated VC++ files +end space removed VC++Files/mysqlmanager/mysqlmanager.dsw: Updated VC++ files +end space removed VC++Files/mysqlserver/mysqlserver.dsp: Updated VC++ files +end space removed VC++Files/mysqlshutdown/myshutdown.dsp: Updated VC++ files +end space removed VC++Files/mysqlshutdown/mysqlshutdown.dsp: Updated VC++ files +end space removed VC++Files/mysqlwatch/mysqlwatch.dsp: Updated VC++ files +end space removed VC++Files/mysys/mysys.dsp: Updated VC++ files +end space removed VC++Files/mysys/mysys.dsw: Updated VC++ files +end space removed VC++Files/pack_isam/pack_isam.dsp: Updated VC++ files +end space removed VC++Files/perror/perror.dsp: Updated VC++ files +end space removed VC++Files/regex/regex.dsp: Updated VC++ files +end space removed VC++Files/regex/regex.dsw: Updated VC++ files +end space removed VC++Files/replace/replace.dsp: Updated VC++ files +end space removed VC++Files/sql/mysqld.dsp: Updated VC++ files +end space removed VC++Files/sql/mysqld.dsw: Updated VC++ files +end space removed VC++Files/sql/mysqldmax.dsp: Updated VC++ files +end space removed VC++Files/sql/old/mysqld.dsw: Updated VC++ files +end space removed VC++Files/strings/MASM6x/strings.dsp: Updated VC++ files +end space removed VC++Files/strings/MASM6x/strings.dsw: Updated VC++ files +end space removed VC++Files/strings/backup/strings.dsp: Updated VC++ files +end space removed VC++Files/strings/backup/strings.dsw: Updated VC++ files +end space removed VC++Files/strings/noMASM/strings.dsp: Updated VC++ files +end space removed VC++Files/strings/noMASM/strings.dsw: Updated VC++ files +end space removed VC++Files/strings/strings.dsp: Updated VC++ files +end space removed VC++Files/strings/strings.dsw: Updated VC++ files +end space removed VC++Files/test1/test1.dsp: Updated VC++ files +end space removed VC++Files/thr_insert_test/thr_insert_test.dsp: Updated VC++ files +end space removed VC++Files/thr_test/thr_test.dsp: Updated VC++ files +end space removed VC++Files/vio/vio.dsp: Updated VC++ files +end space removed VC++Files/zlib/zlib.dsp: Updated VC++ files +end space removed include/my_global.h: Always include errno.h sql/log_event.cc: LOAD DATA INFILE is not replicated if replicate_*_table is set sql/mf_iocache.cc: LOAD DATA LOCAL INFILE was not replicated correctly --- VC++Files/bdb/bdb.dsp | 14 +-- VC++Files/bdb/build_win32/Berkeley_DB.dsw | 1 - VC++Files/bdb/build_win32/db_archive.dsp | 14 +-- VC++Files/bdb/build_win32/db_buildall.dsp | 16 +-- VC++Files/bdb/build_win32/db_checkpoint.dsp | 14 +-- VC++Files/bdb/build_win32/db_deadlock.dsp | 14 +-- VC++Files/bdb/build_win32/db_dll.dsp | 14 +-- VC++Files/bdb/build_win32/db_dump.dsp | 14 +-- VC++Files/bdb/build_win32/db_java.dsp | 58 ++++----- VC++Files/bdb/build_win32/db_load.dsp | 14 +-- VC++Files/bdb/build_win32/db_printlog.dsp | 14 +-- VC++Files/bdb/build_win32/db_recover.dsp | 14 +-- VC++Files/bdb/build_win32/db_stat.dsp | 14 +-- VC++Files/bdb/build_win32/db_static.dsp | 14 +-- VC++Files/bdb/build_win32/db_static1.dsp | 16 +-- VC++Files/bdb/build_win32/db_tcl.dsp | 14 +-- VC++Files/bdb/build_win32/db_test.dsp | 14 +-- VC++Files/bdb/build_win32/db_upgrade.dsp | 14 +-- VC++Files/bdb/build_win32/db_verify.dsp | 14 +-- VC++Files/bdb/build_win32/ex_access.dsp | 14 +-- VC++Files/bdb/build_win32/ex_btrec.dsp | 14 +-- VC++Files/bdb/build_win32/ex_env.dsp | 14 +-- VC++Files/bdb/build_win32/ex_lock.dsp | 14 +-- VC++Files/bdb/build_win32/ex_mpool.dsp | 14 +-- VC++Files/bdb/build_win32/ex_tpcb.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_access.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_btrec.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_env.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_lock.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_mpool.dsp | 14 +-- VC++Files/bdb/build_win32/excxx_tpcb.dsp | 14 +-- VC++Files/client/mysql.dsp | 16 +-- VC++Files/client/mysqladmin.dsp | 14 +-- VC++Files/client/mysqlcheck.dsp | 12 +- VC++Files/client/mysqlclient.dsp | 16 +-- VC++Files/client/mysqlclient.dsw | 1 - VC++Files/client/mysqldump.dsp | 16 +-- VC++Files/client/mysqlimport.dsp | 14 +-- VC++Files/client/mysqlshow.dsp | 14 +-- VC++Files/comp_err/comp_err.dsp | 12 +- VC++Files/contrib/asm386/zlibvc.dsp | 76 ++++++------ VC++Files/contrib/asm386/zlibvc.dsw | 1 - VC++Files/contrib/minizip/zlibvc.dsp | 76 ++++++------ VC++Files/contrib/minizip/zlibvc.dsw | 1 - VC++Files/dbug/dbug.dsp | 14 +-- VC++Files/dbug/dbug.dsw | 1 - VC++Files/heap/heap.dsp | 16 +-- VC++Files/innobase/innobase.dsp | 14 +-- VC++Files/isam/isam.dsp | 14 +-- VC++Files/isam/isam.dsw | 1 - VC++Files/isamchk/isamchk.dsp | 14 +-- VC++Files/libmysql/libmysql.dsp | 54 +++++---- VC++Files/libmysql/libmysql.dsw | 3 +- .../libmysqld/examples/test_libmysqld.dsp | 12 +- VC++Files/libmysqld/libmysqld.dsp | 14 +-- VC++Files/libmysqltest/myTest.dsp | 14 +-- VC++Files/libmysqltest/mytest.dsw | 1 - VC++Files/merge/merge.dsp | 14 +-- VC++Files/merge/merge.dsw | 1 - .../my_print_defaults/my_print_defaults.dsp | 14 +-- VC++Files/myisam/myisam.dsp | 14 +-- VC++Files/myisamchk/myisamchk.dsp | 14 +-- VC++Files/myisamlog/myisamlog.dsp | 14 +-- VC++Files/myisammrg/myisammrg.dsp | 14 +-- VC++Files/myisampack/myisampack.dsp | 14 +-- VC++Files/mysql.dsp | 16 +-- VC++Files/mysql.dsw | 7 +- VC++Files/mysqlbinlog/mysqlbinlog.dsp | 14 +-- VC++Files/mysqlcheck/mysqlcheck.dsp | 14 +-- VC++Files/mysqldemb/mysqldemb.dsp | 14 +-- VC++Files/mysqlmanager/MySqlManager.dsp | 16 +-- VC++Files/mysqlmanager/mysqlmanager.dsw | 1 - VC++Files/mysqlserver/mysqlserver.dsp | 14 +-- VC++Files/mysqlshutdown/myshutdown.dsp | 14 +-- VC++Files/mysqlshutdown/mysqlshutdown.dsp | 14 +-- VC++Files/mysqlwatch/mysqlwatch.dsp | 12 +- VC++Files/mysys/mysys.dsp | 22 ++-- VC++Files/mysys/mysys.dsw | 1 - VC++Files/pack_isam/pack_isam.dsp | 14 +-- VC++Files/perror/perror.dsp | 14 +-- VC++Files/regex/regex.dsp | 14 +-- VC++Files/regex/regex.dsw | 1 - VC++Files/replace/replace.dsp | 14 +-- VC++Files/sql/mysqld.dsp | 112 +++++++++--------- VC++Files/sql/mysqld.dsw | 1 - VC++Files/sql/mysqldmax.dsp | 112 +++++++++--------- VC++Files/sql/old/mysqld.dsw | 1 - VC++Files/strings/MASM6x/strings.dsp | 18 +-- VC++Files/strings/MASM6x/strings.dsw | 1 - VC++Files/strings/backup/strings.dsp | 18 +-- VC++Files/strings/backup/strings.dsw | 1 - VC++Files/strings/noMASM/strings.dsp | 14 +-- VC++Files/strings/noMASM/strings.dsw | 1 - VC++Files/strings/strings.dsp | 18 +-- VC++Files/strings/strings.dsw | 1 - VC++Files/test1/test1.dsp | 16 +-- VC++Files/thr_insert_test/thr_insert_test.dsp | 14 +-- VC++Files/thr_test/thr_test.dsp | 16 +-- VC++Files/vio/vio.dsp | 14 +-- VC++Files/zlib/zlib.dsp | 14 +-- include/my_global.h | 1 + mysql-test/r/rpl_loaddatalocal.result | 0 mysql-test/t/rpl_loaddatalocal.test | 0 sql/log_event.cc | 1 + sql/mf_iocache.cc | 9 +- 105 files changed, 804 insertions(+), 804 deletions(-) create mode 100644 mysql-test/r/rpl_loaddatalocal.result create mode 100644 mysql-test/t/rpl_loaddatalocal.test diff --git a/VC++Files/bdb/bdb.dsp b/VC++Files/bdb/bdb.dsp index e8b730f4254..40dfd3900f8 100644 --- a/VC++Files/bdb/bdb.dsp +++ b/VC++Files/bdb/bdb.dsp @@ -7,19 +7,19 @@ CFG=bdb - Win32 Max !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "bdb.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "bdb.mak" CFG="bdb - Win32 Max" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "bdb - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "bdb - Win32 Max" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_debug\bdb.lib" # ADD LIB32 /nologo /out:"..\lib_release\bdb.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/Berkeley_DB.dsw b/VC++Files/bdb/build_win32/Berkeley_DB.dsw index 482ac7537f0..899e31ad58d 100644 --- a/VC++Files/bdb/build_win32/Berkeley_DB.dsw +++ b/VC++Files/bdb/build_win32/Berkeley_DB.dsw @@ -566,4 +566,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/bdb/build_win32/db_archive.dsp b/VC++Files/bdb/build_win32/db_archive.dsp index 4b8509950ef..b115caba486 100644 --- a/VC++Files/bdb/build_win32/db_archive.dsp +++ b/VC++Files/bdb/build_win32/db_archive.dsp @@ -7,16 +7,16 @@ CFG=db_archive - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_archive.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_archive.mak" CFG="db_archive - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_archive - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_archive - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_archive - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_archive - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_buildall.dsp b/VC++Files/bdb/build_win32/db_buildall.dsp index 58990dbb867..1f54083d00f 100644 --- a/VC++Files/bdb/build_win32/db_buildall.dsp +++ b/VC++Files/bdb/build_win32/db_buildall.dsp @@ -7,23 +7,23 @@ CFG=db_buildall - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_buildall.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_buildall.mak" CFG="db_buildall - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_buildall - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "db_buildall - Win32 Debug" (based on "Win32 (x86) External Target") !MESSAGE "db_buildall - Win32 Release Static" (based on\ "Win32 (x86) External Target") !MESSAGE "db_buildall - Win32 Debug Static" (based on\ "Win32 (x86) External Target") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -105,7 +105,7 @@ CFG=db_buildall - Win32 Debug # PROP Bsc_Name "db_buildall.bsc" # PROP Target_Dir "" -!ENDIF +!ENDIF # Begin Target @@ -122,7 +122,7 @@ CFG=db_buildall - Win32 Debug !ELSEIF "$(CFG)" == "db_buildall - Win32 Debug Static" -!ENDIF +!ENDIF # End Target # End Project diff --git a/VC++Files/bdb/build_win32/db_checkpoint.dsp b/VC++Files/bdb/build_win32/db_checkpoint.dsp index ac464a07ab8..71ee57e1693 100644 --- a/VC++Files/bdb/build_win32/db_checkpoint.dsp +++ b/VC++Files/bdb/build_win32/db_checkpoint.dsp @@ -7,16 +7,16 @@ CFG=db_checkpoint - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_checkpoint.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_checkpoint.mak" CFG="db_checkpoint - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_checkpoint - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_checkpoint - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_checkpoint - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_checkpoint - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_deadlock.dsp b/VC++Files/bdb/build_win32/db_deadlock.dsp index 429896ded04..d9112bace47 100644 --- a/VC++Files/bdb/build_win32/db_deadlock.dsp +++ b/VC++Files/bdb/build_win32/db_deadlock.dsp @@ -7,16 +7,16 @@ CFG=db_deadlock - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_deadlock.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_deadlock.mak" CFG="db_deadlock - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_deadlock - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_deadlock - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_deadlock - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_deadlock - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_dll.dsp b/VC++Files/bdb/build_win32/db_dll.dsp index d394e0313fd..3ec370c1d72 100644 --- a/VC++Files/bdb/build_win32/db_dll.dsp +++ b/VC++Files/bdb/build_win32/db_dll.dsp @@ -7,23 +7,23 @@ CFG=db_dll - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_dll.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_dll.mak" CFG="db_dll - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "db_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "db_dll - Win32 Release Static" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "db_dll - Win32 Debug Static" (based on\ "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -141,7 +141,7 @@ LINK32=link.exe # ADD BASE LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb32d.dll" /fixed:no # ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb32d.dll" /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_dump.dsp b/VC++Files/bdb/build_win32/db_dump.dsp index f4808b5138d..dbc183166a4 100644 --- a/VC++Files/bdb/build_win32/db_dump.dsp +++ b/VC++Files/bdb/build_win32/db_dump.dsp @@ -7,16 +7,16 @@ CFG=db_dump - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_dump.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_dump.mak" CFG="db_dump - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_dump - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_dump - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_dump - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_dump - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_java.dsp b/VC++Files/bdb/build_win32/db_java.dsp index 0a0d9dc0fcb..5866d355259 100644 --- a/VC++Files/bdb/build_win32/db_java.dsp +++ b/VC++Files/bdb/build_win32/db_java.dsp @@ -7,20 +7,20 @@ CFG=db_java - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_java.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_java.mak" CFG="db_java - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_java - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "db_java - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -60,20 +60,20 @@ InputPath=.\Release\libdb_java32.dll SOURCE=$(InputPath) "force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - cd $(ProjDir)\..\java\src\com\sleepycat\db - mkdir ..\..\..\..\classes - echo compiling Berkeley DB classes + cd $(ProjDir)\..\java\src\com\sleepycat\db + mkdir ..\..\..\..\classes + echo compiling Berkeley DB classes javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\ - *.java - echo compiling examples - cd ..\examples + *.java + echo compiling examples + cd ..\examples javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\ - *.java - echo creating jar file + *.java + echo creating jar file cd ..\..\..\..\classes - jar cf db.jar com\sleepycat\db\*.class - echo Java build finished - + jar cf db.jar com\sleepycat\db\*.class + echo Java build finished + # End Custom Build !ELSEIF "$(CFG)" == "db_java - Win32 Debug" @@ -108,23 +108,23 @@ InputPath=.\Debug\libdb_java32d.dll SOURCE=$(InputPath) "force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - cd $(ProjDir)\..\java\src\com\sleepycat\db - mkdir ..\..\..\..\classes - echo compiling Berkeley DB classes + cd $(ProjDir)\..\java\src\com\sleepycat\db + mkdir ..\..\..\..\classes + echo compiling Berkeley DB classes javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\ - *.java - echo compiling examples + *.java + echo compiling examples javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\ - *.java - cd ..\examples - echo creating jar file + *.java + cd ..\examples + echo creating jar file cd ..\..\..\..\classes - jar cf db.jar com\sleepycat\db\*.class - echo Java build finished - + jar cf db.jar com\sleepycat\db\*.class + echo Java build finished + # End Custom Build -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_load.dsp b/VC++Files/bdb/build_win32/db_load.dsp index adec8475a88..ddd516e67fd 100644 --- a/VC++Files/bdb/build_win32/db_load.dsp +++ b/VC++Files/bdb/build_win32/db_load.dsp @@ -7,16 +7,16 @@ CFG=db_load - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_load.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_load.mak" CFG="db_load - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_load - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_load - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_load - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_load - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_printlog.dsp b/VC++Files/bdb/build_win32/db_printlog.dsp index 8b3fbd9fe31..4e19ff7344a 100644 --- a/VC++Files/bdb/build_win32/db_printlog.dsp +++ b/VC++Files/bdb/build_win32/db_printlog.dsp @@ -7,16 +7,16 @@ CFG=db_printlog - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_printlog.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_printlog.mak" CFG="db_printlog - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_printlog - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_printlog - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_printlog - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_printlog - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_recover.dsp b/VC++Files/bdb/build_win32/db_recover.dsp index bf07631f9b9..6419c3faf64 100644 --- a/VC++Files/bdb/build_win32/db_recover.dsp +++ b/VC++Files/bdb/build_win32/db_recover.dsp @@ -7,16 +7,16 @@ CFG=db_recover - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_recover.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_recover.mak" CFG="db_recover - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_recover - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_recover - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_recover - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_recover - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_stat.dsp b/VC++Files/bdb/build_win32/db_stat.dsp index 3e906897e68..8cf59197d42 100644 --- a/VC++Files/bdb/build_win32/db_stat.dsp +++ b/VC++Files/bdb/build_win32/db_stat.dsp @@ -7,16 +7,16 @@ CFG=db_stat - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_stat.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_stat.mak" CFG="db_stat - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_stat - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_stat - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_stat - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_stat - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_static.dsp b/VC++Files/bdb/build_win32/db_static.dsp index 0c355241537..5a95bf7b1c6 100644 --- a/VC++Files/bdb/build_win32/db_static.dsp +++ b/VC++Files/bdb/build_win32/db_static.dsp @@ -7,23 +7,23 @@ CFG=db_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_static.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_static.mak" CFG="db_static - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "db_static - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "db_static - Win32 Release Static" (based on\ "Win32 (x86) Static Library") !MESSAGE "db_static - Win32 Debug Static" (based on\ "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -114,7 +114,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"Debug/libdb32sd.lib" # ADD LIB32 /nologo /out:"Debug_static/libdb32sd.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_static1.dsp b/VC++Files/bdb/build_win32/db_static1.dsp index 771397a455b..15498e58ca5 100644 --- a/VC++Files/bdb/build_win32/db_static1.dsp +++ b/VC++Files/bdb/build_win32/db_static1.dsp @@ -7,19 +7,19 @@ CFG=db_static1 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_static1.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_static1.mak" CFG="db_static1 - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_static1 - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "db_static1 - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -64,7 +64,7 @@ CFG=db_static1 - Win32 Debug # PROP Bsc_Name "db_static1.bsc" # PROP Target_Dir "" -!ENDIF +!ENDIF # Begin Target @@ -75,7 +75,7 @@ CFG=db_static1 - Win32 Debug !ELSEIF "$(CFG)" == "db_static1 - Win32 Debug" -!ENDIF +!ENDIF # Begin Source File diff --git a/VC++Files/bdb/build_win32/db_tcl.dsp b/VC++Files/bdb/build_win32/db_tcl.dsp index 5a0712c3f82..ae2e1a38e9b 100644 --- a/VC++Files/bdb/build_win32/db_tcl.dsp +++ b/VC++Files/bdb/build_win32/db_tcl.dsp @@ -7,19 +7,19 @@ CFG=db_tcl - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_tcl.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_tcl.mak" CFG="db_tcl - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_tcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "db_tcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -81,7 +81,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 Debug/libdb32d.lib tcl83d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl32d.dll" /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_test.dsp b/VC++Files/bdb/build_win32/db_test.dsp index e1bb9056824..406a1369696 100644 --- a/VC++Files/bdb/build_win32/db_test.dsp +++ b/VC++Files/bdb/build_win32/db_test.dsp @@ -7,19 +7,19 @@ CFG=db_test - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_test.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_test.mak" CFG="db_test - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_test - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "db_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -85,7 +85,7 @@ PostBuild_Desc=Copy built executable files. PostBuild_Cmds=copy Debug\*.exe . # End Special Build Tool -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_upgrade.dsp b/VC++Files/bdb/build_win32/db_upgrade.dsp index 4bb821f57e2..c2f3a748a61 100644 --- a/VC++Files/bdb/build_win32/db_upgrade.dsp +++ b/VC++Files/bdb/build_win32/db_upgrade.dsp @@ -7,16 +7,16 @@ CFG=db_upgrade - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_upgrade.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_upgrade.mak" CFG="db_upgrade - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_upgrade - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_upgrade - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_upgrade - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_upgrade - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/db_verify.dsp b/VC++Files/bdb/build_win32/db_verify.dsp index a8112364a83..b76bd203b44 100644 --- a/VC++Files/bdb/build_win32/db_verify.dsp +++ b/VC++Files/bdb/build_win32/db_verify.dsp @@ -7,16 +7,16 @@ CFG=db_verify - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_verify.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "db_verify.mak" CFG="db_verify - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "db_verify - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "db_verify - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=db_verify - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "db_verify - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_access.dsp b/VC++Files/bdb/build_win32/ex_access.dsp index 8c802b1d774..5c1615c915a 100644 --- a/VC++Files/bdb/build_win32/ex_access.dsp +++ b/VC++Files/bdb/build_win32/ex_access.dsp @@ -7,16 +7,16 @@ CFG=ex_access - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_access.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_access.mak" CFG="ex_access - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_access - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_access - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_access - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_access - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_btrec.dsp b/VC++Files/bdb/build_win32/ex_btrec.dsp index 08bc90752f5..e687324d813 100644 --- a/VC++Files/bdb/build_win32/ex_btrec.dsp +++ b/VC++Files/bdb/build_win32/ex_btrec.dsp @@ -7,16 +7,16 @@ CFG=ex_btrec - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_btrec.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_btrec.mak" CFG="ex_btrec - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_btrec - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_btrec - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_btrec - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_btrec - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_env.dsp b/VC++Files/bdb/build_win32/ex_env.dsp index a46e66dac27..ade4c87d965 100644 --- a/VC++Files/bdb/build_win32/ex_env.dsp +++ b/VC++Files/bdb/build_win32/ex_env.dsp @@ -7,16 +7,16 @@ CFG=ex_env - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_env.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_env.mak" CFG="ex_env - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_env - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_env - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_env - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_env - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_lock.dsp b/VC++Files/bdb/build_win32/ex_lock.dsp index 0fa57a960f8..ce5ecc22b56 100644 --- a/VC++Files/bdb/build_win32/ex_lock.dsp +++ b/VC++Files/bdb/build_win32/ex_lock.dsp @@ -7,16 +7,16 @@ CFG=ex_lock - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_lock.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_lock.mak" CFG="ex_lock - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_lock - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_lock - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_lock - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_lock - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_mpool.dsp b/VC++Files/bdb/build_win32/ex_mpool.dsp index 3e2ee7205ce..f6ae1df52dc 100644 --- a/VC++Files/bdb/build_win32/ex_mpool.dsp +++ b/VC++Files/bdb/build_win32/ex_mpool.dsp @@ -7,16 +7,16 @@ CFG=ex_mpool - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_mpool.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_mpool.mak" CFG="ex_mpool - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_mpool - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_mpool - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_mpool - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_mpool - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/ex_tpcb.dsp b/VC++Files/bdb/build_win32/ex_tpcb.dsp index fbaa67de7ac..43f7a560915 100644 --- a/VC++Files/bdb/build_win32/ex_tpcb.dsp +++ b/VC++Files/bdb/build_win32/ex_tpcb.dsp @@ -7,16 +7,16 @@ CFG=ex_tpcb - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_tpcb.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "ex_tpcb.mak" CFG="ex_tpcb - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "ex_tpcb - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "ex_tpcb - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=ex_tpcb - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "ex_tpcb - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_access.dsp b/VC++Files/bdb/build_win32/excxx_access.dsp index d93894dc5b7..f817b791627 100644 --- a/VC++Files/bdb/build_win32/excxx_access.dsp +++ b/VC++Files/bdb/build_win32/excxx_access.dsp @@ -7,16 +7,16 @@ CFG=excxx_access - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_access.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_access.mak" CFG="excxx_access - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_access - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_access - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_access - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_access - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_btrec.dsp b/VC++Files/bdb/build_win32/excxx_btrec.dsp index 403e438a6e1..a06904f2160 100644 --- a/VC++Files/bdb/build_win32/excxx_btrec.dsp +++ b/VC++Files/bdb/build_win32/excxx_btrec.dsp @@ -7,16 +7,16 @@ CFG=excxx_btrec - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_btrec.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_btrec.mak" CFG="excxx_btrec - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_btrec - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_btrec - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_btrec - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_btrec - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_env.dsp b/VC++Files/bdb/build_win32/excxx_env.dsp index 792358ee3ac..5f1b1c0a2e4 100644 --- a/VC++Files/bdb/build_win32/excxx_env.dsp +++ b/VC++Files/bdb/build_win32/excxx_env.dsp @@ -7,16 +7,16 @@ CFG=excxx_env - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_env.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_env.mak" CFG="excxx_env - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_env - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_env - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_env - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_env - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_lock.dsp b/VC++Files/bdb/build_win32/excxx_lock.dsp index d35605cb412..5fe931537a9 100644 --- a/VC++Files/bdb/build_win32/excxx_lock.dsp +++ b/VC++Files/bdb/build_win32/excxx_lock.dsp @@ -7,16 +7,16 @@ CFG=excxx_lock - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_lock.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_lock.mak" CFG="excxx_lock - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_lock - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_lock - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_lock - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_lock - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_mpool.dsp b/VC++Files/bdb/build_win32/excxx_mpool.dsp index 2159e75bb9a..213202b1726 100644 --- a/VC++Files/bdb/build_win32/excxx_mpool.dsp +++ b/VC++Files/bdb/build_win32/excxx_mpool.dsp @@ -7,16 +7,16 @@ CFG=excxx_mpool - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_mpool.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_mpool.mak" CFG="excxx_mpool - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_mpool - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_mpool - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_mpool - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_mpool - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/bdb/build_win32/excxx_tpcb.dsp b/VC++Files/bdb/build_win32/excxx_tpcb.dsp index 9033daa6cfe..ef89fc0de87 100644 --- a/VC++Files/bdb/build_win32/excxx_tpcb.dsp +++ b/VC++Files/bdb/build_win32/excxx_tpcb.dsp @@ -7,16 +7,16 @@ CFG=excxx_tpcb - Win32 Debug Static !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_tpcb.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "excxx_tpcb.mak" CFG="excxx_tpcb - Win32 Debug Static" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "excxx_tpcb - Win32 Release" (based on\ "Win32 (x86) Console Application") !MESSAGE "excxx_tpcb - Win32 Debug" (based on\ @@ -25,7 +25,7 @@ CFG=excxx_tpcb - Win32 Debug Static "Win32 (x86) Console Application") !MESSAGE "excxx_tpcb - Win32 Debug Static" (based on\ "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -131,7 +131,7 @@ LINK32=link.exe # ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no # ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/client/mysql.dsp b/VC++Files/client/mysql.dsp index 9560a4cfef1..1cd03ee2fcc 100644 --- a/VC++Files/client/mysql.dsp +++ b/VC++Files/client/mysql.dsp @@ -7,19 +7,19 @@ CFG=mysql - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysql.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysql.mak" CFG="mysql - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysql - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysql - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysql.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target @@ -99,7 +99,7 @@ SOURCE=.\mysql.cpp !ELSEIF "$(CFG)" == "mysql - Win32 Debug" -!ENDIF +!ENDIF # End Source File # End Target diff --git a/VC++Files/client/mysqladmin.dsp b/VC++Files/client/mysqladmin.dsp index 82794da57cb..11189ecb065 100644 --- a/VC++Files/client/mysqladmin.dsp +++ b/VC++Files/client/mysqladmin.dsp @@ -7,19 +7,19 @@ CFG=mysqladmin - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqladmin.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqladmin.mak" CFG="mysqladmin - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqladmin - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqladmin - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -78,7 +78,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqladmin.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/client/mysqlcheck.dsp b/VC++Files/client/mysqlcheck.dsp index b334c0a8f1c..30e7a365f04 100644 --- a/VC++Files/client/mysqlcheck.dsp +++ b/VC++Files/client/mysqlcheck.dsp @@ -7,18 +7,18 @@ CFG=mysqlcheck - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlcheck.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlcheck.mak" CFG="mysqlcheck - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlcheck - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 diff --git a/VC++Files/client/mysqlclient.dsp b/VC++Files/client/mysqlclient.dsp index d03623cedb9..99bc3296f95 100644 --- a/VC++Files/client/mysqlclient.dsp +++ b/VC++Files/client/mysqlclient.dsp @@ -7,19 +7,19 @@ CFG=mysqlclient - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlclient.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlclient.mak" CFG="mysqlclient - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlclient - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "mysqlclient - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\mysqlclient.lib" -!ENDIF +!ENDIF # Begin Target @@ -228,7 +228,7 @@ SOURCE=..\mysys\mf_iocache2.c # ADD CPP /Od -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/client/mysqlclient.dsw b/VC++Files/client/mysqlclient.dsw index 9c08bbf0407..0f35d0c2253 100644 --- a/VC++Files/client/mysqlclient.dsw +++ b/VC++Files/client/mysqlclient.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/client/mysqldump.dsp b/VC++Files/client/mysqldump.dsp index dcf1c1435a6..4fae9a5769a 100644 --- a/VC++Files/client/mysqldump.dsp +++ b/VC++Files/client/mysqldump.dsp @@ -7,19 +7,19 @@ CFG=mysqldump - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldump.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldump.mak" CFG="mysqldump - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqldump - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqldump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -78,7 +78,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"../client_debug/mysqldump.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target @@ -95,7 +95,7 @@ SOURCE=.\mysqldump.c # ADD CPP /W3 # SUBTRACT CPP /YX -!ENDIF +!ENDIF # End Source File # End Target diff --git a/VC++Files/client/mysqlimport.dsp b/VC++Files/client/mysqlimport.dsp index f10c1f90f58..8eb08f1411f 100644 --- a/VC++Files/client/mysqlimport.dsp +++ b/VC++Files/client/mysqlimport.dsp @@ -7,19 +7,19 @@ CFG=mysqlimport - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlimport.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlimport.mak" CFG="mysqlimport - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlimport - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqlimport - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqlimport.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/client/mysqlshow.dsp b/VC++Files/client/mysqlshow.dsp index dd0fc09c70f..78627246050 100644 --- a/VC++Files/client/mysqlshow.dsp +++ b/VC++Files/client/mysqlshow.dsp @@ -7,19 +7,19 @@ CFG=mysqlshow - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlshow.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlshow.mak" CFG="mysqlshow - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlshow - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqlshow - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -78,7 +78,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"../client_debug/mysqlshow.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/comp_err/comp_err.dsp b/VC++Files/comp_err/comp_err.dsp index 784266f4016..71582b84763 100644 --- a/VC++Files/comp_err/comp_err.dsp +++ b/VC++Files/comp_err/comp_err.dsp @@ -7,18 +7,18 @@ CFG=comp_err - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "comp_err.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "comp_err.mak" CFG="comp_err - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "comp_err - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 diff --git a/VC++Files/contrib/asm386/zlibvc.dsp b/VC++Files/contrib/asm386/zlibvc.dsp index a70d4d4a6b0..63d8fee6511 100644 --- a/VC++Files/contrib/asm386/zlibvc.dsp +++ b/VC++Files/contrib/asm386/zlibvc.dsp @@ -8,16 +8,16 @@ CFG=zlibvc - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlibvc.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 ReleaseAxp" (based on\ @@ -26,7 +26,7 @@ CFG=zlibvc - Win32 Release "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 ReleaseWithoutCrtdll" (based on\ "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -191,7 +191,7 @@ LINK32=link.exe # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_1\zlib.dll" # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target @@ -216,13 +216,13 @@ SOURCE=.\adler32.c DEP_CPP_ADLER=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -238,13 +238,13 @@ SOURCE=.\compress.c DEP_CPP_COMPR=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -260,13 +260,13 @@ SOURCE=.\crc32.c DEP_CPP_CRC32=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -284,13 +284,13 @@ DEP_CPP_DEFLA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -307,7 +307,7 @@ SOURCE=.\gvmat32c.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -324,13 +324,13 @@ DEP_CPP_GZIO_=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -351,13 +351,13 @@ DEP_CPP_INFBL=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -379,13 +379,13 @@ DEP_CPP_INFCO=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -407,13 +407,13 @@ DEP_CPP_INFFA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -431,13 +431,13 @@ DEP_CPP_INFLA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -455,13 +455,13 @@ DEP_CPP_INFTR=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -482,13 +482,13 @@ DEP_CPP_INFUT=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -506,13 +506,13 @@ DEP_CPP_TREES=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -528,13 +528,13 @@ SOURCE=.\uncompr.c DEP_CPP_UNCOM=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -551,7 +551,7 @@ SOURCE=.\unzip.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -568,7 +568,7 @@ SOURCE=.\zip.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -593,13 +593,13 @@ DEP_CPP_ZUTIL=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # End Group diff --git a/VC++Files/contrib/asm386/zlibvc.dsw b/VC++Files/contrib/asm386/zlibvc.dsw index 493cd870365..041a77a06a2 100644 --- a/VC++Files/contrib/asm386/zlibvc.dsw +++ b/VC++Files/contrib/asm386/zlibvc.dsw @@ -38,4 +38,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/contrib/minizip/zlibvc.dsp b/VC++Files/contrib/minizip/zlibvc.dsp index a70d4d4a6b0..63d8fee6511 100644 --- a/VC++Files/contrib/minizip/zlibvc.dsp +++ b/VC++Files/contrib/minizip/zlibvc.dsp @@ -8,16 +8,16 @@ CFG=zlibvc - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlibvc.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlibvc.mak" CFG="zlibvc - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "zlibvc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 ReleaseAxp" (based on\ @@ -26,7 +26,7 @@ CFG=zlibvc - Win32 Release "Win32 (x86) Dynamic-Link Library") !MESSAGE "zlibvc - Win32 ReleaseWithoutCrtdll" (based on\ "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -191,7 +191,7 @@ LINK32=link.exe # ADD LINK32 gvmat32.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib crtdll.lib /nologo /subsystem:windows /dll /map /machine:I386 /nodefaultlib /out:".\zlibvc_1\zlib.dll" # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target @@ -216,13 +216,13 @@ SOURCE=.\adler32.c DEP_CPP_ADLER=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -238,13 +238,13 @@ SOURCE=.\compress.c DEP_CPP_COMPR=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -260,13 +260,13 @@ SOURCE=.\crc32.c DEP_CPP_CRC32=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -284,13 +284,13 @@ DEP_CPP_DEFLA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -307,7 +307,7 @@ SOURCE=.\gvmat32c.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -324,13 +324,13 @@ DEP_CPP_GZIO_=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -351,13 +351,13 @@ DEP_CPP_INFBL=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -379,13 +379,13 @@ DEP_CPP_INFCO=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -407,13 +407,13 @@ DEP_CPP_INFFA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -431,13 +431,13 @@ DEP_CPP_INFLA=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -455,13 +455,13 @@ DEP_CPP_INFTR=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -482,13 +482,13 @@ DEP_CPP_INFUT=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -506,13 +506,13 @@ DEP_CPP_TREES=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -528,13 +528,13 @@ SOURCE=.\uncompr.c DEP_CPP_UNCOM=\ ".\zconf.h"\ ".\zlib.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -551,7 +551,7 @@ SOURCE=.\unzip.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -568,7 +568,7 @@ SOURCE=.\zip.c !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -593,13 +593,13 @@ DEP_CPP_ZUTIL=\ ".\zconf.h"\ ".\zlib.h"\ ".\zutil.h"\ - + !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutAsm" !ELSEIF "$(CFG)" == "zlibvc - Win32 ReleaseWithoutCrtdll" -!ENDIF +!ENDIF # End Source File # End Group diff --git a/VC++Files/contrib/minizip/zlibvc.dsw b/VC++Files/contrib/minizip/zlibvc.dsw index 493cd870365..041a77a06a2 100644 --- a/VC++Files/contrib/minizip/zlibvc.dsw +++ b/VC++Files/contrib/minizip/zlibvc.dsw @@ -38,4 +38,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/dbug/dbug.dsp b/VC++Files/dbug/dbug.dsp index 11721da98d6..5db7b05175b 100644 --- a/VC++Files/dbug/dbug.dsp +++ b/VC++Files/dbug/dbug.dsp @@ -7,19 +7,19 @@ CFG=dbug - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "dbug.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "dbug.mak" CFG="dbug - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "dbug - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "dbug - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\dbug.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/dbug/dbug.dsw b/VC++Files/dbug/dbug.dsw index a0cd4da7891..b1e978b2c8f 100644 --- a/VC++Files/dbug/dbug.dsw +++ b/VC++Files/dbug/dbug.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/heap/heap.dsp b/VC++Files/heap/heap.dsp index c21c3139519..1edeec80e9b 100644 --- a/VC++Files/heap/heap.dsp +++ b/VC++Files/heap/heap.dsp @@ -7,19 +7,19 @@ CFG=heap - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "heap.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "heap.mak" CFG="heap - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "heap - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "heap - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\heap.lib" -!ENDIF +!ENDIF # Begin Target @@ -128,7 +128,7 @@ SOURCE=.\hp_hash.c # SUBTRACT CPP /YX -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/innobase/innobase.dsp b/VC++Files/innobase/innobase.dsp index 0c2b656f043..2018b15be82 100644 --- a/VC++Files/innobase/innobase.dsp +++ b/VC++Files/innobase/innobase.dsp @@ -7,21 +7,21 @@ CFG=INNOBASE - WIN32 RELEASE !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "innobase.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "innobase.mak" CFG="INNOBASE - WIN32 RELEASE" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "innobase - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "innobase - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "innobase - Win32 nt" (based on "Win32 (x86) Static Library") !MESSAGE "innobase - Win32 Max nt" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -126,7 +126,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_release\innodb.lib" # ADD LIB32 /nologo /out:"..\lib_release\innodb.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/isam/isam.dsp b/VC++Files/isam/isam.dsp index 32832919654..12047145f6d 100644 --- a/VC++Files/isam/isam.dsp +++ b/VC++Files/isam/isam.dsp @@ -7,19 +7,19 @@ CFG=isam - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "isam.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "isam.mak" CFG="isam - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "isam - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "isam - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_Debug\isam.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/isam/isam.dsw b/VC++Files/isam/isam.dsw index 6874c8cf4c3..c18224a6d73 100644 --- a/VC++Files/isam/isam.dsw +++ b/VC++Files/isam/isam.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/isamchk/isamchk.dsp b/VC++Files/isamchk/isamchk.dsp index 7b9c03f23f4..e1e0f8aac3a 100644 --- a/VC++Files/isamchk/isamchk.dsp +++ b/VC++Files/isamchk/isamchk.dsp @@ -7,19 +7,19 @@ CFG=isamchk - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "isamchk.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "isamchk.mak" CFG="isamchk - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "isamchk - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "isamchk - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -80,7 +80,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/isamchk.exe" /pdbtype:sept # SUBTRACT LINK32 /verbose /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/libmysql/libmysql.dsp b/VC++Files/libmysql/libmysql.dsp index ea5ef096561..bddf1988e03 100644 --- a/VC++Files/libmysql/libmysql.dsp +++ b/VC++Files/libmysql/libmysql.dsp @@ -1,25 +1,25 @@ -# Microsoft Developer Studio Project File - Name="libmySQL" - Package Owner=<4> +# Microsoft Developer Studio Project File - Name="libmysql" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 -CFG=libmySQL - Win32 Debug +CFG=libmysql - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "libmySQL.mak". -!MESSAGE +!MESSAGE +!MESSAGE NMAKE /f "libmysql.mak". +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "libmySQL.mak" CFG="libmySQL - Win32 Debug" -!MESSAGE +!MESSAGE +!MESSAGE NMAKE /f "libmysql.mak" CFG="libmysql - Win32 Debug" +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "libmySQL - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "libmySQL - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE +!MESSAGE "libmysql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libmysql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -29,7 +29,7 @@ CPP=cl.exe MTL=midl.exe RSC=rc.exe -!IF "$(CFG)" == "libmySQL - Win32 Release" +!IF "$(CFG)" == "libmysql - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 @@ -54,15 +54,15 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /def:"libmysql.def" /out:"../lib_release/libmySQL.dll" /libpath:"." /libpath:"..\lib_release" +# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /def:"libmysql.def" /out:"..\lib_release\libmysql.dll" /libpath:"." /libpath:"..\lib_release" # SUBTRACT LINK32 /pdb:none # Begin Special Build Tool SOURCE="$(InputPath)" -PostBuild_Desc=Move DLL export lib -PostBuild_Cmds=xcopy release\libmysql.lib ..\lib_release /y +PostBuild_Desc=Copy .lib file +PostBuild_Cmds=xcopy release\libmysql.lib ..\lib_release\ # End Special Build Tool -!ELSEIF "$(CFG)" == "libmySQL - Win32 Debug" +!ELSEIF "$(CFG)" == "libmysql - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 @@ -87,20 +87,20 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 zlib.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /def:"libmysql.def" /out:"../lib_debug/libmySQL.dll" /pdbtype:sept /libpath:"." /libpath:"..\lib_debug" +# ADD LINK32 zlib.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /map /debug /machine:I386 /def:"libmysql.def" /out:"..\lib_debug\libmysql.dll" /pdbtype:sept /libpath:"." /libpath:"..\lib_debug" # SUBTRACT LINK32 /pdb:none # Begin Special Build Tool SOURCE="$(InputPath)" -PostBuild_Desc=Move DLL export lib -PostBuild_Cmds=xcopy ..\lib_debug\libmysql.dll C:\winnt\system32\ /y xcopy debug\libmysql.lib ..\lib_debug\ /y +PostBuild_Desc=Copy .lib file +PostBuild_Cmds=xcopy ..\lib_debug\libmysql.dll C:\winnt\system32\ xcopy debug\libmysql.lib ..\lib_debug\ # End Special Build Tool -!ENDIF +!ENDIF # Begin Target -# Name "libmySQL - Win32 Release" -# Name "libmySQL - Win32 Debug" +# Name "libmysql - Win32 Release" +# Name "libmysql - Win32 Debug" # Begin Source File SOURCE=..\mysys\array.c @@ -287,6 +287,10 @@ SOURCE=..\mysys\my_gethostbyname.c # End Source File # Begin Source File +SOURCE=..\mysys\my_getopt.c +# End Source File +# Begin Source File + SOURCE=..\mysys\my_getwd.c # End Source File # Begin Source File @@ -443,6 +447,10 @@ SOURCE=..\strings\strnmov.c # End Source File # Begin Source File +SOURCE=..\strings\strtoll.c +# End Source File +# Begin Source File + SOURCE=..\strings\strxmov.c # End Source File # Begin Source File diff --git a/VC++Files/libmysql/libmysql.dsw b/VC++Files/libmysql/libmysql.dsw index fe121fa65cc..36d5b9b330b 100644 --- a/VC++Files/libmysql/libmysql.dsw +++ b/VC++Files/libmysql/libmysql.dsw @@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 5.00 ############################################################################### -Project: "libmySQL"=".\libmySQL.dsp" - Package Owner=<4> +Project: "libmysql"=".\libmysql.dsp" - Package Owner=<4> Package=<5> {{{ @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/libmysqld/examples/test_libmysqld.dsp b/VC++Files/libmysqld/examples/test_libmysqld.dsp index 35d9689266d..d5fd0a0982d 100644 --- a/VC++Files/libmysqld/examples/test_libmysqld.dsp +++ b/VC++Files/libmysqld/examples/test_libmysqld.dsp @@ -7,18 +7,18 @@ CFG=test_libmysqld - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "test_libmysqld.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "test_libmysqld.mak" CFG="test_libmysqld - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "test_libmysqld - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp index bd20c75a24e..843bc0bd95f 100644 --- a/VC++Files/libmysqld/libmysqld.dsp +++ b/VC++Files/libmysqld/libmysqld.dsp @@ -7,19 +7,19 @@ CFG=libmysqld - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "libmysqld.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "libmysqld.mak" CFG="libmysqld - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "libmysqld - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libmysqld - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -83,7 +83,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\innodb.lib /nologo /dll /incremental:no /debug /machine:I386 /nodefaultlib:"LIBCMTD" /out:"../lib_debug/libmysqld.dll" /implib:"../lib_debug/libmysqld.lib" /pdbtype:sept # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/libmysqltest/myTest.dsp b/VC++Files/libmysqltest/myTest.dsp index fec250e7a40..744b2c04993 100644 --- a/VC++Files/libmysqltest/myTest.dsp +++ b/VC++Files/libmysqltest/myTest.dsp @@ -7,19 +7,19 @@ CFG=myTest - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myTest.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myTest.mak" CFG="myTest - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myTest - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "myTest - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -78,7 +78,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 libmysql.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept /libpath:"..\lib_debug" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/libmysqltest/mytest.dsw b/VC++Files/libmysqltest/mytest.dsw index 621899eb4d0..1aa804386bc 100644 --- a/VC++Files/libmysqltest/mytest.dsw +++ b/VC++Files/libmysqltest/mytest.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/merge/merge.dsp b/VC++Files/merge/merge.dsp index 70c0ce87d6b..8a8173fd606 100644 --- a/VC++Files/merge/merge.dsp +++ b/VC++Files/merge/merge.dsp @@ -7,19 +7,19 @@ CFG=merge - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "merge.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "merge.mak" CFG="merge - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "merge - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "merge - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\merge.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/merge/merge.dsw b/VC++Files/merge/merge.dsw index a2d5ccb2ff2..26d3bb5200c 100644 --- a/VC++Files/merge/merge.dsw +++ b/VC++Files/merge/merge.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/my_print_defaults/my_print_defaults.dsp b/VC++Files/my_print_defaults/my_print_defaults.dsp index c7727b49851..b485a20a844 100644 --- a/VC++Files/my_print_defaults/my_print_defaults.dsp +++ b/VC++Files/my_print_defaults/my_print_defaults.dsp @@ -7,19 +7,19 @@ CFG=my_print_defaults - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "my_print_defaults.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "my_print_defaults.mak" CFG="my_print_defaults - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "my_print_defaults - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "my_print_defaults - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -75,7 +75,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"LIBCMTD.lib" /pdbtype:sept -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/myisam/myisam.dsp b/VC++Files/myisam/myisam.dsp index 8346cddbc54..51d4fb73713 100644 --- a/VC++Files/myisam/myisam.dsp +++ b/VC++Files/myisam/myisam.dsp @@ -7,19 +7,19 @@ CFG=myisam - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisam.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisam.mak" CFG="myisam - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myisam - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "myisam - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -74,7 +74,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_Debug\myisam.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/myisamchk/myisamchk.dsp b/VC++Files/myisamchk/myisamchk.dsp index 7f0459d21d0..0c8e7c00f1a 100644 --- a/VC++Files/myisamchk/myisamchk.dsp +++ b/VC++Files/myisamchk/myisamchk.dsp @@ -7,19 +7,19 @@ CFG=myisamchk - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisamchk.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisamchk.mak" CFG="myisamchk - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myisamchk - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "myisamchk - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -78,7 +78,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/myisamchk.exe" /pdbtype:sept -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/myisamlog/myisamlog.dsp b/VC++Files/myisamlog/myisamlog.dsp index efc43914759..bbb6739cb16 100644 --- a/VC++Files/myisamlog/myisamlog.dsp +++ b/VC++Files/myisamlog/myisamlog.dsp @@ -7,19 +7,19 @@ CFG=myisamlog - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisamlog.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisamlog.mak" CFG="myisamlog - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myisamlog - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "myisamlog - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /pdb:"debug/myisamchk.pdb" /debug /machine:I386 /out:"../client_debug/myisamlog.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/myisammrg/myisammrg.dsp b/VC++Files/myisammrg/myisammrg.dsp index e8f86dac0e8..9363bd63e62 100644 --- a/VC++Files/myisammrg/myisammrg.dsp +++ b/VC++Files/myisammrg/myisammrg.dsp @@ -7,19 +7,19 @@ CFG=myisammrg - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisammrg.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisammrg.mak" CFG="myisammrg - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myisammrg - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "myisammrg - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -75,7 +75,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_Debug\myisammrg.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/myisampack/myisampack.dsp b/VC++Files/myisampack/myisampack.dsp index f576a93faf2..cdfc44331ea 100644 --- a/VC++Files/myisampack/myisampack.dsp +++ b/VC++Files/myisampack/myisampack.dsp @@ -7,19 +7,19 @@ CFG=myisampack - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisampack.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myisampack.mak" CFG="myisampack - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myisampack - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "myisampack - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -77,7 +77,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysql.dsp b/VC++Files/mysql.dsp index 41f2538a7e5..4f97866cc31 100644 --- a/VC++Files/mysql.dsp +++ b/VC++Files/mysql.dsp @@ -7,19 +7,19 @@ CFG=mysql - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysql.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysql.mak" CFG="mysql - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysql - Win32 Release" (based on "Win32 (x86) External Target") !MESSAGE "mysql - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE +!MESSAGE # Begin Project # PROP Scc_ProjName "" @@ -63,7 +63,7 @@ CFG=mysql - Win32 Debug # PROP Bsc_Name "mysql.bsc" # PROP Target_Dir "" -!ENDIF +!ENDIF # Begin Target @@ -74,7 +74,7 @@ CFG=mysql - Win32 Debug !ELSEIF "$(CFG)" == "mysql - Win32 Debug" -!ENDIF +!ENDIF # End Target # End Project diff --git a/VC++Files/mysql.dsw b/VC++Files/mysql.dsw index b576730b500..eef82588fa8 100644 --- a/VC++Files/mysql.dsw +++ b/VC++Files/mysql.dsw @@ -114,7 +114,7 @@ Package=<4> ############################################################################### -Project: "libmySQL"=".\libmysql\libmySQL.dsp" - Package Owner=<4> +Project: "libmysql"=".\libmysql\libmysql.dsp" - Package Owner=<4> Package=<5> {{{ @@ -192,7 +192,7 @@ Package=<5> Package=<4> {{{ Begin Project Dependency - Project_Dep_Name libmySQL + Project_Dep_Name libmysql End Project Dependency }}} @@ -708,7 +708,7 @@ Package=<5> Package=<4> {{{ Begin Project Dependency - Project_Dep_Name libmySQL + Project_Dep_Name libmysql End Project Dependency }}} @@ -797,4 +797,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/mysqlbinlog/mysqlbinlog.dsp b/VC++Files/mysqlbinlog/mysqlbinlog.dsp index 94723b0a127..a4e85becd49 100644 --- a/VC++Files/mysqlbinlog/mysqlbinlog.dsp +++ b/VC++Files/mysqlbinlog/mysqlbinlog.dsp @@ -7,19 +7,19 @@ CFG=mysqlbinlog - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlbinlog.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlbinlog.mak" CFG="mysqlbinlog - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlbinlog - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqlbinlog - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -77,7 +77,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqlbinlog.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlcheck/mysqlcheck.dsp b/VC++Files/mysqlcheck/mysqlcheck.dsp index 49c3fc2b702..9b821261672 100644 --- a/VC++Files/mysqlcheck/mysqlcheck.dsp +++ b/VC++Files/mysqlcheck/mysqlcheck.dsp @@ -7,19 +7,19 @@ CFG=mysqlcheck - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlcheck.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlcheck.mak" CFG="mysqlcheck - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlcheck - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqlcheck - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqlcheck.exe" /pdbtype:sept /libpath:"..\lib_debug\\" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqldemb/mysqldemb.dsp b/VC++Files/mysqldemb/mysqldemb.dsp index 25dc1f6fee1..67de948b9ad 100644 --- a/VC++Files/mysqldemb/mysqldemb.dsp +++ b/VC++Files/mysqldemb/mysqldemb.dsp @@ -7,19 +7,19 @@ CFG=mysqldemb - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldemb.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldemb.mak" CFG="mysqldemb - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqldemb - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "mysqldemb - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlmanager/MySqlManager.dsp b/VC++Files/mysqlmanager/MySqlManager.dsp index 60ee700b00c..f5b62bdabc9 100644 --- a/VC++Files/mysqlmanager/MySqlManager.dsp +++ b/VC++Files/mysqlmanager/MySqlManager.dsp @@ -7,19 +7,19 @@ CFG=MySqlManager - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "MySqlManager.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "MySqlManager.mak" CFG="MySqlManager - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "MySqlManager - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "MySqlManager - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -71,7 +71,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /G6 /MTd /W3 /Gm /GR /GX /Zi /Od /I "../include" /D "_DEBUG" /D "_WINDOWS" /FD /c # SUBTRACT CPP /Fr /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /o "NUL" /win32 @@ -86,7 +86,7 @@ LINK32=link.exe # ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /out:"../client_debug/MySqlManager.exe" /pdbtype:sept /libpath:"..\lib_debug\\" # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlmanager/mysqlmanager.dsw b/VC++Files/mysqlmanager/mysqlmanager.dsw index 02ec9a86dc5..013873b113b 100644 --- a/VC++Files/mysqlmanager/mysqlmanager.dsw +++ b/VC++Files/mysqlmanager/mysqlmanager.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/mysqlserver/mysqlserver.dsp b/VC++Files/mysqlserver/mysqlserver.dsp index 84c547ef453..0ef59eb226e 100644 --- a/VC++Files/mysqlserver/mysqlserver.dsp +++ b/VC++Files/mysqlserver/mysqlserver.dsp @@ -7,19 +7,19 @@ CFG=mysqlserver - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlserver.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlserver.mak" CFG="mysqlserver - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlserver - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "mysqlserver - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -74,7 +74,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlshutdown/myshutdown.dsp b/VC++Files/mysqlshutdown/myshutdown.dsp index 390921f599c..0119df3cd59 100644 --- a/VC++Files/mysqlshutdown/myshutdown.dsp +++ b/VC++Files/mysqlshutdown/myshutdown.dsp @@ -7,19 +7,19 @@ CFG=myshutdown - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myshutdown.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "myshutdown.mak" CFG="myshutdown - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "myshutdown - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "myshutdown - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlshutdown/mysqlshutdown.dsp b/VC++Files/mysqlshutdown/mysqlshutdown.dsp index 1489a5547ed..fd78c6ddb21 100644 --- a/VC++Files/mysqlshutdown/mysqlshutdown.dsp +++ b/VC++Files/mysqlshutdown/mysqlshutdown.dsp @@ -7,19 +7,19 @@ CFG=mysqlshutdown - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlshutdown.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlshutdown.mak" CFG="mysqlshutdown - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlshutdown - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "mysqlshutdown - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -85,7 +85,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"../client_release/mysqlshutdown.exe" # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"../client_debug/mysqlshutdown.exe" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/mysqlwatch/mysqlwatch.dsp b/VC++Files/mysqlwatch/mysqlwatch.dsp index 004f444e09b..5c209f55e51 100644 --- a/VC++Files/mysqlwatch/mysqlwatch.dsp +++ b/VC++Files/mysqlwatch/mysqlwatch.dsp @@ -7,18 +7,18 @@ CFG=mysqlwatch - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlwatch.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqlwatch.mak" CFG="mysqlwatch - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqlwatch - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index c4c21d9a6db..bc6e70fc339 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -7,20 +7,20 @@ CFG=mysys - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysys.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysys.mak" CFG="mysys - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysys - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "mysys - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE "mysys - Win32 Max" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -102,7 +102,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_release\mysys.lib" # ADD LIB32 /nologo /out:"..\lib_release\mysys-max.lib" -!ENDIF +!ENDIF # Begin Target @@ -121,7 +121,7 @@ SOURCE=.\array.c !ELSEIF "$(CFG)" == "mysys - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -406,6 +406,10 @@ SOURCE=.\my_seek.c # End Source File # Begin Source File +SOURCE=.\my_sleep.c +# End Source File +# Begin Source File + SOURCE=.\my_static.c # End Source File # Begin Source File @@ -496,7 +500,7 @@ SOURCE=.\thr_lock.c !ELSEIF "$(CFG)" == "mysys - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/mysys/mysys.dsw b/VC++Files/mysys/mysys.dsw index d5064051fc9..445079aed69 100644 --- a/VC++Files/mysys/mysys.dsw +++ b/VC++Files/mysys/mysys.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/pack_isam/pack_isam.dsp b/VC++Files/pack_isam/pack_isam.dsp index 1b377c0b68e..25e4ef4a2e0 100644 --- a/VC++Files/pack_isam/pack_isam.dsp +++ b/VC++Files/pack_isam/pack_isam.dsp @@ -7,19 +7,19 @@ CFG=pack_isam - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "pack_isam.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "pack_isam.mak" CFG="pack_isam - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "pack_isam - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "pack_isam - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -77,7 +77,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"../client_debug/pack_isam.exe" /pdbtype:sept -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/perror/perror.dsp b/VC++Files/perror/perror.dsp index 3e98e5e5ca9..6d5c96b2a84 100644 --- a/VC++Files/perror/perror.dsp +++ b/VC++Files/perror/perror.dsp @@ -7,19 +7,19 @@ CFG=perror - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "perror.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "perror.mak" CFG="perror - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "perror - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "perror - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -85,7 +85,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /incremental:no /debug /machine:I386 /pdbtype:sept # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/regex/regex.dsp b/VC++Files/regex/regex.dsp index 5ee617c58b7..59b55ffe46f 100644 --- a/VC++Files/regex/regex.dsp +++ b/VC++Files/regex/regex.dsp @@ -7,19 +7,19 @@ CFG=regex - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "regex.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\regex.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/regex/regex.dsw b/VC++Files/regex/regex.dsw index 102e07af409..1abe4485cd4 100644 --- a/VC++Files/regex/regex.dsw +++ b/VC++Files/regex/regex.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/replace/replace.dsp b/VC++Files/replace/replace.dsp index 011b62d08ec..f0c4848156a 100644 --- a/VC++Files/replace/replace.dsp +++ b/VC++Files/replace/replace.dsp @@ -7,19 +7,19 @@ CFG=replace - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "replace.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "replace.mak" CFG="replace - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "replace - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "replace - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib wsock32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib setargv.obj /nologo /subsystem:console /incremental:no /machine:I386 /out:"../client_debug/replace.exe" /pdbtype:sept # SUBTRACT LINK32 /debug -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/sql/mysqld.dsp b/VC++Files/sql/mysqld.dsp index c550407da30..7942f98dde0 100644 --- a/VC++Files/sql/mysqld.dsp +++ b/VC++Files/sql/mysqld.dsp @@ -7,22 +7,22 @@ CFG=mysqld - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqld.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqld.mak" CFG="mysqld - Win32 Release" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqld - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqld - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "mysqld - Win32 nt" (based on "Win32 (x86) Console Application") !MESSAGE "mysqld - Win32 Max nt" (based on "Win32 (x86) Console Application") !MESSAGE "mysqld - Win32 Max" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -167,7 +167,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys-max.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib ..\lib_release\zlib.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../client_release/mysqld-max.exe" # SUBTRACT LINK32 /debug -!ENDIF +!ENDIF # Begin Target @@ -193,7 +193,7 @@ SOURCE=.\convert.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -213,7 +213,7 @@ SOURCE=.\derror.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -237,7 +237,7 @@ SOURCE=.\field.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -257,7 +257,7 @@ SOURCE=.\field_conv.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -277,7 +277,7 @@ SOURCE=.\filesort.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -325,7 +325,7 @@ SOURCE=.\handler.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -344,7 +344,7 @@ SOURCE=.\hash_filo.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -367,7 +367,7 @@ SOURCE=.\hostname.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -387,7 +387,7 @@ SOURCE=.\init.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -407,7 +407,7 @@ SOURCE=.\item.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -427,7 +427,7 @@ SOURCE=.\item_buff.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -447,7 +447,7 @@ SOURCE=.\item_cmpfunc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -471,7 +471,7 @@ SOURCE=.\item_func.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -491,7 +491,7 @@ SOURCE=.\item_strfunc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -511,7 +511,7 @@ SOURCE=.\item_sum.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -530,7 +530,7 @@ SOURCE=.\item_timefunc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -550,7 +550,7 @@ SOURCE=.\item_uniq.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -570,7 +570,7 @@ SOURCE=.\key.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -590,7 +590,7 @@ SOURCE=.\lock.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -610,7 +610,7 @@ SOURCE=.\log.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -633,7 +633,7 @@ SOURCE=.\mf_iocache.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -657,7 +657,7 @@ SOURCE=.\mysqld.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -677,7 +677,7 @@ SOURCE=.\net_pkg.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -700,7 +700,7 @@ SOURCE=.\nt_servc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -727,7 +727,7 @@ SOURCE=.\opt_range.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -754,7 +754,7 @@ SOURCE=.\password.c !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -774,7 +774,7 @@ SOURCE=.\procedure.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -794,7 +794,7 @@ SOURCE=.\records.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -826,7 +826,7 @@ SOURCE=.\sql_acl.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -850,7 +850,7 @@ SOURCE=.\sql_base.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -874,7 +874,7 @@ SOURCE=.\sql_class.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -902,7 +902,7 @@ SOURCE=.\sql_db.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -922,7 +922,7 @@ SOURCE=.\sql_delete.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -950,7 +950,7 @@ SOURCE=.\sql_insert.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -970,7 +970,7 @@ SOURCE=.\sql_lex.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -990,7 +990,7 @@ SOURCE=.\sql_list.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1010,7 +1010,7 @@ SOURCE=.\sql_load.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1034,7 +1034,7 @@ SOURCE=.\sql_map.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1054,7 +1054,7 @@ SOURCE=.\sql_parse.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1082,7 +1082,7 @@ SOURCE=.\sql_select.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1102,7 +1102,7 @@ SOURCE=.\sql_show.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1122,7 +1122,7 @@ SOURCE=.\sql_string.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1142,7 +1142,7 @@ SOURCE=.\sql_table.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1162,7 +1162,7 @@ SOURCE=.\sql_test.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1190,7 +1190,7 @@ SOURCE=.\sql_update.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1210,7 +1210,7 @@ SOURCE=.\sql_yacc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1234,7 +1234,7 @@ SOURCE=.\thr_malloc.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1254,7 +1254,7 @@ SOURCE=.\time.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -1278,7 +1278,7 @@ SOURCE=.\unireg.cpp !ELSEIF "$(CFG)" == "mysqld - Win32 Max" -!ENDIF +!ENDIF # End Source File # End Target diff --git a/VC++Files/sql/mysqld.dsw b/VC++Files/sql/mysqld.dsw index ed820ed7a90..67948565f66 100644 --- a/VC++Files/sql/mysqld.dsw +++ b/VC++Files/sql/mysqld.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/sql/mysqldmax.dsp b/VC++Files/sql/mysqldmax.dsp index 4d24d033c51..24ea83159d9 100644 --- a/VC++Files/sql/mysqldmax.dsp +++ b/VC++Files/sql/mysqldmax.dsp @@ -7,20 +7,20 @@ CFG=mysqldmax - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldmax.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "mysqldmax.mak" CFG="mysqldmax - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "mysqldmax - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "mysqldmax - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE "mysqldmax - Win32 nt" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -103,7 +103,7 @@ LINK32=link.exe # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\zlib.lib ..\lib_release\innobase-nt.lib ..\lib_release\libdb32s.lib /nologo /subsystem:console /pdb:"NT/mysqld-nt.pdb" /map:"NT/mysqld-nt.map" /machine:I386 /nodefaultlib:"LIBC" /out:"../client_release/mysqld-max-nt.exe" # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target @@ -123,7 +123,7 @@ SOURCE=.\convert.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -139,7 +139,7 @@ SOURCE=.\derror.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -155,7 +155,7 @@ SOURCE=.\field.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -171,7 +171,7 @@ SOURCE=.\field_conv.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -187,7 +187,7 @@ SOURCE=.\filesort.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -231,7 +231,7 @@ SOURCE=.\handler.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -246,7 +246,7 @@ SOURCE=.\hash_filo.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -265,7 +265,7 @@ SOURCE=.\hostname.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -281,7 +281,7 @@ SOURCE=.\init.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -297,7 +297,7 @@ SOURCE=.\item.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -313,7 +313,7 @@ SOURCE=.\item_buff.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -329,7 +329,7 @@ SOURCE=.\item_cmpfunc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -349,7 +349,7 @@ SOURCE=.\item_func.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -365,7 +365,7 @@ SOURCE=.\item_strfunc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -381,7 +381,7 @@ SOURCE=.\item_sum.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -396,7 +396,7 @@ SOURCE=.\item_timefunc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -412,7 +412,7 @@ SOURCE=.\item_uniq.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -428,7 +428,7 @@ SOURCE=.\key.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -444,7 +444,7 @@ SOURCE=.\lock.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -460,7 +460,7 @@ SOURCE=.\log.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -483,7 +483,7 @@ SOURCE=.\mf_iocache.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -507,7 +507,7 @@ SOURCE=.\mysqld.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -523,7 +523,7 @@ SOURCE=.\net_pkg.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -542,7 +542,7 @@ SOURCE=.\nt_servc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -565,7 +565,7 @@ SOURCE=.\opt_range.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -588,7 +588,7 @@ SOURCE=.\password.c !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -604,7 +604,7 @@ SOURCE=.\procedure.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -620,7 +620,7 @@ SOURCE=.\records.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -640,7 +640,7 @@ SOURCE=.\sql_acl.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -660,7 +660,7 @@ SOURCE=.\sql_base.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -680,7 +680,7 @@ SOURCE=.\sql_class.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -704,7 +704,7 @@ SOURCE=.\sql_db.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -720,7 +720,7 @@ SOURCE=.\sql_delete.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -736,7 +736,7 @@ SOURCE=.\sql_insert.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -752,7 +752,7 @@ SOURCE=.\sql_lex.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -768,7 +768,7 @@ SOURCE=.\sql_list.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -784,7 +784,7 @@ SOURCE=.\sql_load.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -804,7 +804,7 @@ SOURCE=.\sql_map.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -820,7 +820,7 @@ SOURCE=.\sql_parse.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -844,7 +844,7 @@ SOURCE=.\sql_select.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -860,7 +860,7 @@ SOURCE=.\sql_show.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -876,7 +876,7 @@ SOURCE=.\sql_string.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -892,7 +892,7 @@ SOURCE=.\sql_table.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -908,7 +908,7 @@ SOURCE=.\sql_test.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -924,7 +924,7 @@ SOURCE=.\sql_update.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -940,7 +940,7 @@ SOURCE=.\sql_yacc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -960,7 +960,7 @@ SOURCE=.\thr_malloc.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -976,7 +976,7 @@ SOURCE=.\time.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -992,7 +992,7 @@ SOURCE=.\unireg.cpp !ELSEIF "$(CFG)" == "mysqldmax - Win32 nt" -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/sql/old/mysqld.dsw b/VC++Files/sql/old/mysqld.dsw index ed820ed7a90..67948565f66 100644 --- a/VC++Files/sql/old/mysqld.dsw +++ b/VC++Files/sql/old/mysqld.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/strings/MASM6x/strings.dsp b/VC++Files/strings/MASM6x/strings.dsp index 0c1a3bdc0c2..1f54910bf58 100644 --- a/VC++Files/strings/MASM6x/strings.dsp +++ b/VC++Files/strings/MASM6x/strings.dsp @@ -7,19 +7,19 @@ CFG=strings - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak" CFG="strings - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "strings - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "strings - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\strings.lib" -!ENDIF +!ENDIF # Begin Target @@ -186,7 +186,7 @@ InputName=Strings # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -233,7 +233,7 @@ InputName=Strxmov # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/strings/MASM6x/strings.dsw b/VC++Files/strings/MASM6x/strings.dsw index e3777b8e7d5..63fc3706c19 100644 --- a/VC++Files/strings/MASM6x/strings.dsw +++ b/VC++Files/strings/MASM6x/strings.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/strings/backup/strings.dsp b/VC++Files/strings/backup/strings.dsp index 45b22c52e21..a6be39b40ab 100644 --- a/VC++Files/strings/backup/strings.dsp +++ b/VC++Files/strings/backup/strings.dsp @@ -7,19 +7,19 @@ CFG=strings - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak" CFG="strings - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "strings - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "strings - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\strings.lib" -!ENDIF +!ENDIF # Begin Target @@ -186,7 +186,7 @@ InputName=Strings # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -233,7 +233,7 @@ InputName=Strxmov # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/strings/backup/strings.dsw b/VC++Files/strings/backup/strings.dsw index e3777b8e7d5..63fc3706c19 100644 --- a/VC++Files/strings/backup/strings.dsw +++ b/VC++Files/strings/backup/strings.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/strings/noMASM/strings.dsp b/VC++Files/strings/noMASM/strings.dsp index a84fb1b7835..6e2dbb3c013 100644 --- a/VC++Files/strings/noMASM/strings.dsp +++ b/VC++Files/strings/noMASM/strings.dsp @@ -7,19 +7,19 @@ CFG=strings - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak" CFG="strings - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "strings - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "strings - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\strings.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/strings/noMASM/strings.dsw b/VC++Files/strings/noMASM/strings.dsw index e3777b8e7d5..63fc3706c19 100644 --- a/VC++Files/strings/noMASM/strings.dsw +++ b/VC++Files/strings/noMASM/strings.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/strings/strings.dsp b/VC++Files/strings/strings.dsp index 52655947790..28cc1f39c0c 100644 --- a/VC++Files/strings/strings.dsp +++ b/VC++Files/strings/strings.dsp @@ -7,19 +7,19 @@ CFG=strings - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "strings.mak" CFG="strings - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "strings - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "strings - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -76,7 +76,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\strings.lib" -!ENDIF +!ENDIF # Begin Target @@ -190,7 +190,7 @@ InputName=Strings # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File @@ -237,7 +237,7 @@ InputName=Strxmov # End Custom Build -!ENDIF +!ENDIF # End Source File # Begin Source File diff --git a/VC++Files/strings/strings.dsw b/VC++Files/strings/strings.dsw index e3777b8e7d5..63fc3706c19 100644 --- a/VC++Files/strings/strings.dsw +++ b/VC++Files/strings/strings.dsw @@ -26,4 +26,3 @@ Package=<3> }}} ############################################################################### - diff --git a/VC++Files/test1/test1.dsp b/VC++Files/test1/test1.dsp index 50a165e3e4d..fb70ceda692 100644 --- a/VC++Files/test1/test1.dsp +++ b/VC++Files/test1/test1.dsp @@ -7,19 +7,19 @@ CFG=test1 - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "test1.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "test1.mak" CFG="test1 - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "test1 - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "test1 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD LINK32 libmysql.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\lib_debug" # SUBTRACT LINK32 /incremental:no -!ENDIF +!ENDIF # Begin Target @@ -95,7 +95,7 @@ SOURCE=.\mysql_thr.c !ELSEIF "$(CFG)" == "test1 - Win32 Debug" -!ENDIF +!ENDIF # End Source File # End Target diff --git a/VC++Files/thr_insert_test/thr_insert_test.dsp b/VC++Files/thr_insert_test/thr_insert_test.dsp index 770125ab65b..11028b926d1 100644 --- a/VC++Files/thr_insert_test/thr_insert_test.dsp +++ b/VC++Files/thr_insert_test/thr_insert_test.dsp @@ -7,19 +7,19 @@ CFG=thr_insert_test - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "thr_insert_test.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "thr_insert_test.mak" CFG="thr_insert_test - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "thr_insert_test - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "thr_insert_test - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -83,7 +83,7 @@ LINK32=link.exe # ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"debug/mysqldump.pdb" /debug /machine:I386 /out:"../client_debug/thr_insert_test.exe" /pdbtype:sept /libpath:"..\lib_debug\\" # SUBTRACT LINK32 /pdb:none -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/thr_test/thr_test.dsp b/VC++Files/thr_test/thr_test.dsp index 7256f8da2fa..a7854a66049 100644 --- a/VC++Files/thr_test/thr_test.dsp +++ b/VC++Files/thr_test/thr_test.dsp @@ -7,19 +7,19 @@ CFG=thr_test - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "thr_test.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "thr_test.mak" CFG="thr_test - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "thr_test - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "thr_test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -79,7 +79,7 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /pdbtype:sept -!ENDIF +!ENDIF # Begin Target @@ -97,7 +97,7 @@ SOURCE=.\thr_test.c # ADD CPP /FAcs -!ENDIF +!ENDIF # End Source File # End Target diff --git a/VC++Files/vio/vio.dsp b/VC++Files/vio/vio.dsp index d4b77aad391..50c920a465d 100644 --- a/VC++Files/vio/vio.dsp +++ b/VC++Files/vio/vio.dsp @@ -7,19 +7,19 @@ CFG=vio - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "vio.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "vio.mak" CFG="vio - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "vio - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "vio - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -74,7 +74,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\vio.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/VC++Files/zlib/zlib.dsp b/VC++Files/zlib/zlib.dsp index b46afad005c..fd9d6b2bd68 100644 --- a/VC++Files/zlib/zlib.dsp +++ b/VC++Files/zlib/zlib.dsp @@ -7,19 +7,19 @@ CFG=zlib - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlib.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "zlib.mak" CFG="zlib - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "zlib - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "zlib - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -75,7 +75,7 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\zlib.lib" -!ENDIF +!ENDIF # Begin Target diff --git a/include/my_global.h b/include/my_global.h index f98cc48ba20..49ca0e03f89 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -261,6 +261,7 @@ C_MODE_END #define CONFIG_SMP #include #endif +#include /* Recommended by debian */ /* Go around some bugs in different OS and compilers */ #if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) diff --git a/mysql-test/r/rpl_loaddatalocal.result b/mysql-test/r/rpl_loaddatalocal.result new file mode 100644 index 00000000000..e69de29bb2d diff --git a/mysql-test/t/rpl_loaddatalocal.test b/mysql-test/t/rpl_loaddatalocal.test new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sql/log_event.cc b/sql/log_event.cc index 645ac8076df..3c5a2eae38c 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1838,6 +1838,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, tables.db = thd->db; tables.alias = tables.real_name = (char*)table_name; tables.lock_type = TL_WRITE; + tables.updating= 1; // the table will be opened in mysql_load if (table_rules_on && !tables_ok(thd, &tables)) { diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index 1bc65eebd23..3b70dae2563 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -70,13 +70,18 @@ int _my_b_net_read(register IO_CACHE *info, byte *Buffer, /* to set up stuff for my_b_get (no _) */ info->read_end = (info->read_pos = (byte*) net->read_pos) + read_length; Buffer[0] = info->read_pos[0]; /* length is always 1 */ - info->read_pos++; /* info->request_pos is used by log_loaded_block() to know the size - of the current block + of the current block. + info->pos_in_file is used by log_loaded_block() too. */ + info->pos_in_file+= read_length; info->request_pos=info->read_pos; + + info->read_pos++; + +info->request_pos=info->read_pos; DBUG_RETURN(0); } From 4d3713d64dfd9b2f831933c93d54a17c0180ed84 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 1 Mar 2003 12:40:08 +0400 Subject: [PATCH 016/267] os_rename.c: Portability fix. GetLongPathName is not supported by Windows95. bdb/os_win32/os_rename.c: Portability fix. GetLongPathName is not supported by Windows95. --- bdb/os_win32/os_rename.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bdb/os_win32/os_rename.c b/bdb/os_win32/os_rename.c index ba14cb73bb0..35b94d9d834 100644 --- a/bdb/os_win32/os_rename.c +++ b/bdb/os_win32/os_rename.c @@ -47,8 +47,11 @@ __os_rename(dbenv, oldname, newname, flags) * There is no MoveFileEx for Win9x/Me, so we have to * do the best we can. */ - if (!GetLongPathName(oldname, oldbuf, sizeof oldbuf) || - !GetLongPathName(newname, newbuf, sizeof newbuf)) { + LPTSTR FilePath; + if (!GetFullPathName(oldname, sizeof(oldbuf), oldbuf, + &FilePath) || + !GetFullPathName(newname, sizeof(newbuf),newdbuf, + &FilePath)) { ret = __os_win32_errno(); goto done; } From 9ef473b96355944df3f6d2c84e83f82b5200785b Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 1 Mar 2003 12:43:09 +0400 Subject: [PATCH 017/267] os_rename.c: Typo fix. bdb/os_win32/os_rename.c: Typo fix. --- bdb/os_win32/os_rename.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bdb/os_win32/os_rename.c b/bdb/os_win32/os_rename.c index 35b94d9d834..67c3846649b 100644 --- a/bdb/os_win32/os_rename.c +++ b/bdb/os_win32/os_rename.c @@ -50,7 +50,7 @@ __os_rename(dbenv, oldname, newname, flags) LPTSTR FilePath; if (!GetFullPathName(oldname, sizeof(oldbuf), oldbuf, &FilePath) || - !GetFullPathName(newname, sizeof(newbuf),newdbuf, + !GetFullPathName(newname, sizeof(newbuf), newbuf, &FilePath)) { ret = __os_win32_errno(); goto done; From f29fb98d34c06c35e7c5ba3aaa74ff4aac738dcf Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 00:34:44 +0100 Subject: [PATCH 018/267] When the SQL thread cannot read an event from the relay log ("Event too big" etc), stop this thread instead of going on with the next event, which would certainly lead to slave's data corruption. BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + sql/log_event.cc | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 70aaa8d2a52..fcc23ea7073 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -16,6 +16,7 @@ bk@admin.bk davida@isil.mysql.com gluh@gluh.(none) greg@mysql.com +guilhem@mysql.com gweir@work.mysql.com heikki@donna.mysql.fi heikki@hundin.mysql.fi diff --git a/sql/log_event.cc b/sql/log_event.cc index 3c5a2eae38c..78470a2b198 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -588,6 +588,15 @@ err: sql_print_error("Error in Log_event::read_log_event(): '%s', \ data_len=%d,event_type=%d",error,data_len,head[EVENT_TYPE_OFFSET]); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); + /* + The SQL slave thread will check if file->error<0 to know + if there was an I/O error. Even if there is no "low-level" I/O errors + with 'file', any of the high-level above errors is worrying + enough to stop the SQL thread now ; as we are skipping the current event, + going on with reading and successfully executing other events can + only corrupt the slave's databases. So stop. + */ + file->error= -1; } return res; } From 14ea63cd1bfb3b2ebc95bd93d2b6373689e45604 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 00:45:19 +0100 Subject: [PATCH 019/267] Replication: simplification of init_relay_log_pos: always initialize, remove variable rli->log_pos_current. sql/slave.cc: Simplification of init_relay_log_pos : always initialize, remove variable rli->log_pos_current. sql/slave.h: Simplification of init_relay_log_pos : always initialize, remove variable rli->log_pos_current. --- sql/slave.cc | 9 +-------- sql/slave.h | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/sql/slave.cc b/sql/slave.cc index efab5b4c6b9..eaab2f00b6a 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -210,8 +210,6 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log, DBUG_ENTER("init_relay_log_pos"); *errmsg=0; - if (rli->log_pos_current) // TODO: When can this happen ? - DBUG_RETURN(0); pthread_mutex_t *log_lock=rli->relay_log.get_log_lock(); pthread_mutex_lock(log_lock); if (need_data_lock) @@ -273,7 +271,6 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log, } if (pos > BIN_LOG_HEADER_SIZE) my_b_seek(rli->cur_log,(off_t)pos); - rli->log_pos_current=1; err: pthread_cond_broadcast(&rli->data_cond); @@ -349,7 +346,6 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset, rli->log_space_total= BIN_LOG_HEADER_SIZE; rli->relay_log_pos= BIN_LOG_HEADER_SIZE; rli->relay_log.reset_bytes_written(); - rli->log_pos_current=0; if (!just_reset) error= init_relay_log_pos(rli, rli->relay_log_name, rli->relay_log_pos, 0 /* do not need data lock */, errmsg); @@ -1153,7 +1149,6 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname) rli->pending = 0; rli->cur_log_fd = -1; rli->slave_skip_counter=0; - rli->log_pos_current=0; rli->abort_pos_wait=0; rli->skip_log_purge=0; rli->log_space_limit = relay_log_space_limit; @@ -1581,7 +1576,7 @@ st_relay_log_info::st_relay_log_info() cur_log_old_open_count(0), log_space_total(0), slave_skip_counter(0), abort_pos_wait(0), slave_run_id(0), sql_thd(0), last_slave_errno(0), inited(0), abort_slave(0), - slave_running(0), log_pos_current(0), skip_log_purge(0), + slave_running(0), skip_log_purge(0), inside_transaction(0) /* the default is autocommit=1 */ { relay_log_name[0] = master_log_name[0] = 0; @@ -2459,7 +2454,6 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \ TODO: see if we can do this conditionally in next_event() instead to avoid unneeded position re-init */ - rli->log_pos_current=0; thd->temporary_tables = 0; // remove tempation from destructor to close them DBUG_ASSERT(thd->net.buff != 0); net_end(&thd->net); // destructor will not free it, because we are weird @@ -2795,7 +2789,6 @@ void end_relay_log_info(RELAY_LOG_INFO* rli) rli->cur_log_fd = -1; } rli->inited = 0; - rli->log_pos_current=0; rli->relay_log.close(1); DBUG_VOID_RETURN; } diff --git a/sql/slave.h b/sql/slave.h index ea7e2b4ef16..fe0f0b045f3 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -167,7 +167,6 @@ typedef struct st_relay_log_info /* if not set, the value of other members of the structure are undefined */ bool inited; volatile bool abort_slave, slave_running; - bool log_pos_current; bool skip_log_purge; bool inside_transaction; From 6a933b2e08037a4fb17ea98abf00d0990cef22ae Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 01:48:57 +0100 Subject: [PATCH 020/267] fix auto-increment in sub-key and insert ... select --- include/myisam.h | 1 + myisam/mi_check.c | 4 ++-- myisam/mi_create.c | 2 +- mysql-test/r/auto_increment.result | 10 ++++++++++ mysql-test/t/auto_increment.test | 8 ++++++++ sql/ha_myisam.cc | 7 ++++--- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/include/myisam.h b/include/myisam.h index 94b5d23bba6..def8b492681 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -100,6 +100,7 @@ typedef struct st_mi_create_info ulong raid_chunksize; uint old_options; uint8 language; + my_bool with_auto_increment; } MI_CREATE_INFO; struct st_myisam_info; /* For referense */ diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 67a7d6f363d..ca5c8f9ecb4 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -3694,8 +3694,8 @@ void mi_disable_non_unique_index(MI_INFO *info, ha_rows rows) MI_KEYDEF *key=share->keyinfo; for (i=0 ; i < share->base.keys ; i++,key++) { - if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows) && - info->s->base.auto_key != i+1) + if (!(key->flag & (HA_NOSAME|HA_AUTO_KEY)) && + ! mi_too_big_key_for_sort(key,rows)) { share->state.key_map&= ~ ((ulonglong) 1 << i); info->update|= HA_STATE_CHANGED; diff --git a/myisam/mi_create.c b/myisam/mi_create.c index 039066c5b37..9082c2b0d95 100644 --- a/myisam/mi_create.c +++ b/myisam/mi_create.c @@ -304,7 +304,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, if (keydef->flag & HA_BINARY_PACK_KEY) options|=HA_OPTION_PACK_KEYS; /* Using packed keys */ - if (keydef->flag & HA_AUTO_KEY) + if (keydef->flag & HA_AUTO_KEY && ci->with_auto_increment) share.base.auto_key=i+1; for (j=0, keyseg=keydef->seg ; j < keydef->keysegs ; j++, keyseg++) { diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index 66efd2ba567..e79e6aab56b 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -84,6 +84,16 @@ ordid ord 3 sdj 1 zzz drop table t1; +create table t1 (sid char(5), id int(2) NOT NULL auto_increment, key(sid, id)); +create table t2 (sid char(20), id int(2)); +insert into t2 values ('skr',NULL),('skr',NULL),('test',NULL); +insert into t1 select * from t2; +select * from t1; +sid id +skr 1 +skr 2 +test 1 +drop table t1,t2; create table t1 (a int not null primary key auto_increment); insert into t1 values (0); update t1 set a=0; diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index d86466572d8..5fba4bb9234 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -52,6 +52,13 @@ insert into t1 values (NULL,'sdj'),(NULL,'sdj'),(NULL,"abc"),(NULL,'abc'),(NULL, select * from t1; drop table t1; +create table t1 (sid char(5), id int(2) NOT NULL auto_increment, key(sid, id)); +create table t2 (sid char(20), id int(2)); +insert into t2 values ('skr',NULL),('skr',NULL),('test',NULL); +insert into t1 select * from t2; +select * from t1; +drop table t1,t2; + # # Test of auto_increment columns when they are set to 0 # @@ -62,3 +69,4 @@ update t1 set a=0; select * from t1; check table t1; drop table t1; + diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 81b04cf5ba7..6e055f57c83 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -1021,7 +1021,7 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, { int error; uint i,j,recpos,minpos,fieldpos,temp_length,length; - bool found_auto_increment=0; + bool found_auto_increment=0, found_real_auto_increment=0; enum ha_base_keytype type; char buff[FN_REFLEN]; KEY *pos; @@ -1091,11 +1091,11 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, keydef[i].seg[j].null_bit=0; keydef[i].seg[j].null_pos=0; } - if (j == 0 && field->flags & AUTO_INCREMENT_FLAG && - !found_auto_increment) + if (field->flags & AUTO_INCREMENT_FLAG && !found_auto_increment) { keydef[i].flag|=HA_AUTO_KEY; found_auto_increment=1; + found_real_auto_increment=(j==0); } if (field->type() == FIELD_TYPE_BLOB) { @@ -1177,6 +1177,7 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, bzero((char*) &create_info,sizeof(create_info)); create_info.max_rows=table_arg->max_rows; create_info.reloc_rows=table_arg->min_rows; + create_info.with_auto_increment=found_real_auto_increment; create_info.auto_increment=(info->auto_increment_value ? info->auto_increment_value -1 : (ulonglong) 0); From c5cd20fe8f37b4ff693bdb9cb24e8cf7d1b59194 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 14:07:32 +0100 Subject: [PATCH 021/267] optimizer should check for "field LIKE const" not "field like STRING" BitKeeper/etc/ignore: Added configure.lineno innobase/configure.lineno to the ignore list --- .bzrignore | 2 ++ mysql-test/r/func_like.result | 10 ++++++++++ mysql-test/t/func_like.test | 11 +++++++---- sql/item_cmpfunc.cc | 12 ++++++++---- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.bzrignore b/.bzrignore index f5e9775ee80..78d44a7704d 100644 --- a/.bzrignore +++ b/.bzrignore @@ -528,3 +528,5 @@ support-files/MacOSX/Info.plist support-files/MacOSX/StartupParameters.plist support-files/MacOSX/postinstall support-files/MacOSX/preinstall +configure.lineno +innobase/configure.lineno diff --git a/mysql-test/r/func_like.result b/mysql-test/r/func_like.result index c2085ba12da..f923c16b2ac 100644 --- a/mysql-test/r/func_like.result +++ b/mysql-test/r/func_like.result @@ -1,10 +1,20 @@ drop table if exists t1; create table t1 (a varchar(10), key(a)); insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); +explain select * from t1 where a like 'abc%'; +table type possible_keys key key_len ref rows Extra +t1 range a a 11 NULL 1 Using where; Using index +explain select * from t1 where a like concat('abc','%'); +table type possible_keys key key_len ref rows Extra +t1 range a a 11 NULL 1 Using where; Using index select * from t1 where a like "abc%"; a abc abcd +select * from t1 where a like concat("abc","%"); +a +abc +abcd select * from t1 where a like "ABC%"; a abc diff --git a/mysql-test/t/func_like.test b/mysql-test/t/func_like.test index 09746fcc817..a5d1193fd74 100644 --- a/mysql-test/t/func_like.test +++ b/mysql-test/t/func_like.test @@ -5,10 +5,13 @@ drop table if exists t1; create table t1 (a varchar(10), key(a)); insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); -select * from t1 where a like "abc%"; -select * from t1 where a like "ABC%"; -select * from t1 where a like "test%"; -select * from t1 where a like "te_t"; +explain select * from t1 where a like 'abc%'; +explain select * from t1 where a like concat('abc','%'); +select * from t1 where a like "abc%"; +select * from t1 where a like concat("abc","%"); +select * from t1 where a like "ABC%"; +select * from t1 where a like "test%"; +select * from t1 where a like "te_t"; # # The following will test the Turbo Boyer-Moore code diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 55e8ef7c4b5..d96069a17aa 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1409,12 +1409,16 @@ longlong Item_func_like::val_int() Item_func::optimize_type Item_func_like::select_optimize() const { - if (args[1]->type() == STRING_ITEM) + if (args[1]->const_item()) { - if (((Item_string *) args[1])->str_value[0] != wild_many) + String* res2= args[1]->val_str((String *)&tmp_value2); + + if (!res2) + return OPTIMIZE_NONE; + + if (*res2->ptr() != wild_many) { - if ((args[0]->result_type() != STRING_RESULT) || - ((Item_string *) args[1])->str_value[0] != wild_one) + if (args[0]->result_type() != STRING_RESULT || *res2->ptr() != wild_one) return OPTIMIZE_OP; } } From 0da0ce9312227e53ddc9f6139c8f744050cd9f04 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 19:35:37 +0500 Subject: [PATCH 022/267] URGENT fixed bug in shared memory (handler_count) sql/mysqld.cc: fixed bug in shared memory BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + sql/mysqld.cc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 8fc5509547c..62ae7f6af5b 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -107,6 +107,7 @@ vva@eagle.mysql.r18.ru vva@genie.(none) walrus@kishkin.ru walrus@mysql.com +wax@kishkin.ru wax@mysql.com worm@altair.is.lan zak@balfor.local diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ce87a8c15ac..ca0c66c008f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3346,7 +3346,9 @@ error: if (!event_connect_answer) CloseHandle(event_connect_answer); if (!event_connect_request) CloseHandle(event_connect_request); pthread_mutex_lock(&LOCK_thread_count); + handler_count--; pthread_mutex_unlock(&LOCK_thread_count); + pthread_cond_signal(&COND_handler_count); DBUG_RETURN(0); } #endif /* HAVE_SMEM */ From b331fe928c38666a7119aa62f7a8e3acbb4e330a Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 18:20:32 +0100 Subject: [PATCH 023/267] ChangeSet 1.1625 was faulty as regards sql/mf_iocache.cc and LOAD DATA LOCAL replication tests mysql-test/r/rpl_loaddatalocal.result: ChangeSet 1.1625 was faulty as regards this file (LOAD DATA LOCAL bug) mysql-test/t/rpl_loaddatalocal.test: ChangeSet 1.1625 was faulty as regards this file (LOAD DATA LOCAL bug) sql/mf_iocache.cc: ChangeSet 1.1625 was faulty as regards this file (LOAD DATA LOCAL bug) --- mysql-test/r/rpl_loaddatalocal.result | 14 +++++++++++ mysql-test/t/rpl_loaddatalocal.test | 36 +++++++++++++++++++++++++++ sql/mf_iocache.cc | 1 - 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/rpl_loaddatalocal.result b/mysql-test/r/rpl_loaddatalocal.result index e69de29bb2d..dc98b1b5bfb 100644 --- a/mysql-test/r/rpl_loaddatalocal.result +++ b/mysql-test/r/rpl_loaddatalocal.result @@ -0,0 +1,14 @@ +slave stop; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +slave start; +create table t1(a int); +select * into outfile '../../var/master-data/rpl_loaddatalocal.select_outfile' from t1; +truncate table t1; +load data local infile './var/master-data/rpl_loaddatalocal.select_outfile' into table t1; +select a,count(*) from t1 group by a; +a count(*) +1 10000 +drop table t1; diff --git a/mysql-test/t/rpl_loaddatalocal.test b/mysql-test/t/rpl_loaddatalocal.test index e69de29bb2d..70f4ab96b6a 100644 --- a/mysql-test/t/rpl_loaddatalocal.test +++ b/mysql-test/t/rpl_loaddatalocal.test @@ -0,0 +1,36 @@ +# See if "LOAD DATA LOCAL INFILE" is well replicated +# (LOAD DATA LOCAL INFILE is not written to the binlog +# the same way as LOAD DATA INFILE : Append_blocks are smaller). +# In MySQL 4.0 <4.0.12 there were 2 bugs with LOAD DATA LOCAL INFILE : +# - the loaded file was not written entirely to the master's binlog, +# only the first 4KB, 8KB or 16KB usually. +# - the loaded file's first line was not written entirely to the +# master's binlog (1st char was absent) +source include/master-slave.inc; + +create table t1(a int); +let $1=10000; +disable_query_log; +set SQL_LOG_BIN=0; +while ($1) +{ +#eval means expand $ expressions + eval insert into t1 values(1); + dec $1; +} +set SQL_LOG_BIN=1; +enable_query_log; +select * into outfile '../../var/master-data/rpl_loaddatalocal.select_outfile' from t1; +#This will generate a 20KB file, now test LOAD DATA LOCAL +truncate table t1; +load data local infile './var/master-data/rpl_loaddatalocal.select_outfile' into table t1; +system rm ./var/master-data/rpl_loaddatalocal.select_outfile ; +save_master_pos; +connection slave; +sync_with_master; +select a,count(*) from t1 group by a; +connection master; +drop table t1; +save_master_pos; +connection slave; +sync_with_master; diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc index 3b70dae2563..c79317cfeb3 100644 --- a/sql/mf_iocache.cc +++ b/sql/mf_iocache.cc @@ -81,7 +81,6 @@ int _my_b_net_read(register IO_CACHE *info, byte *Buffer, info->read_pos++; -info->request_pos=info->read_pos; DBUG_RETURN(0); } From 5387425aeb951b87121765610212de621f702c5f Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 22:34:09 +0200 Subject: [PATCH 024/267] trx0sys.c, trx0roll.c, srv0start.h: Print trx rollback progress info in crash recovery innobase/include/srv0start.h: Print trx rollback progress info in crash recovery innobase/trx/trx0roll.c: Print trx rollback progress info in crash recovery innobase/trx/trx0sys.c: Print trx rollback progress info in crash recovery --- innobase/include/srv0start.h | 1 + innobase/trx/trx0roll.c | 49 ++++++++++++++++++++++++++++++++---- innobase/trx/trx0sys.c | 26 +++++++++++++++++-- 3 files changed, 69 insertions(+), 7 deletions(-) diff --git a/innobase/include/srv0start.h b/innobase/include/srv0start.h index 24cdecb7341..aec3ebfeea9 100644 --- a/innobase/include/srv0start.h +++ b/innobase/include/srv0start.h @@ -81,6 +81,7 @@ innobase_shutdown_for_mysql(void); extern ulint srv_sizeof_trx_t_in_ha_innodb_cc; +extern ibool srv_is_being_started; extern ibool srv_startup_is_before_trx_rollback_phase; extern ibool srv_is_being_shut_down; diff --git a/innobase/trx/trx0roll.c b/innobase/trx/trx0roll.c index 1f0e0c58ac7..deaee16b7cc 100644 --- a/innobase/trx/trx0roll.c +++ b/innobase/trx/trx0roll.c @@ -21,6 +21,7 @@ Created 3/26/1996 Heikki Tuuri #include "que0que.h" #include "usr0sess.h" #include "srv0que.h" +#include "srv0start.h" #include "row0undo.h" #include "row0mysql.h" #include "lock0lock.h" @@ -29,6 +30,12 @@ Created 3/26/1996 Heikki Tuuri /* This many pages must be undone before a truncate is tried within rollback */ #define TRX_ROLL_TRUNC_THRESHOLD 1 +/* In crash recovery we set this to the undo n:o of the current trx to be +rolled back. Then we can print how many % the rollback has progressed. */ +ib_longlong trx_roll_max_undo_no; +/* Auxiliary variable which tells the previous progress % we printed */ +ulint trx_roll_progress_printed_pct; + /*********************************************************************** Rollback a transaction used in MySQL. */ @@ -174,6 +181,8 @@ trx_rollback_or_clean_all_without_sess(void) roll_node_t* roll_node; trx_t* trx; dict_table_t* table; + ib_longlong rows_to_undo; + char* unit = (char*)""; int err; mutex_enter(&kernel_mutex); @@ -219,8 +228,7 @@ loop: trx->sess = trx_dummy_sess; - if (trx->conc_state == TRX_COMMITTED_IN_MEMORY) { - + if (trx->conc_state == TRX_COMMITTED_IN_MEMORY) { fprintf(stderr, "InnoDB: Cleaning up trx with id %lu %lu\n", ut_dulint_get_high(trx->id), ut_dulint_get_low(trx->id)); @@ -248,9 +256,19 @@ loop: ut_a(thr == que_fork_start_command(fork, SESS_COMM_EXECUTE, 0)); - fprintf(stderr, "InnoDB: Rolling back trx with id %lu %lu\n", + trx_roll_max_undo_no = ut_conv_dulint_to_longlong(trx->undo_no); + trx_roll_progress_printed_pct = 0; + rows_to_undo = trx_roll_max_undo_no; + if (rows_to_undo > 1000000000) { + rows_to_undo = rows_to_undo / 1000000; + unit = (char*)"M"; + } + + fprintf(stderr, +"InnoDB: Rolling back trx with id %lu %lu, %lu%s rows to undo", ut_dulint_get_high(trx->id), - ut_dulint_get_low(trx->id)); + ut_dulint_get_low(trx->id), + (ulint)rows_to_undo, unit); mutex_exit(&kernel_mutex); if (trx->dict_operation) { @@ -300,7 +318,7 @@ loop: row_mysql_unlock_data_dictionary(trx); } - fprintf(stderr, "InnoDB: Rolling back of trx id %lu %lu completed\n", + fprintf(stderr, "\nInnoDB: Rolling back of trx id %lu %lu completed\n", ut_dulint_get_high(trx->id), ut_dulint_get_low(trx->id)); mem_heap_free(heap); @@ -614,6 +632,7 @@ trx_roll_pop_top_rec_of_trx( dulint undo_no; ibool is_insert; trx_rseg_t* rseg; + ulint progress_pct; mtr_t mtr; rseg = trx->rseg; @@ -676,6 +695,26 @@ try_again: ut_ad(ut_dulint_cmp(ut_dulint_add(undo_no, 1), trx->undo_no) == 0); + /* We print rollback progress info if we are in a crash recovery + and the transaction has at least 1000 row operations to undo */ + + if (srv_is_being_started && trx_roll_max_undo_no > 1000) { + progress_pct = 100 - + (ut_conv_dulint_to_longlong(undo_no) * 100) + / trx_roll_max_undo_no; + if (progress_pct != trx_roll_progress_printed_pct) { + if (trx_roll_progress_printed_pct == 0) { + fprintf(stderr, + "\nInnoDB: Progress in percents: %lu", progress_pct); + } else { + fprintf(stderr, + " %lu", progress_pct); + } + fflush(stderr); + trx_roll_progress_printed_pct = progress_pct; + } + } + trx->undo_no = undo_no; if (!trx_undo_arr_store_info(trx, undo_no)) { diff --git a/innobase/trx/trx0sys.c b/innobase/trx/trx0sys.c index 0c10040847e..c403cd447e3 100644 --- a/innobase/trx/trx0sys.c +++ b/innobase/trx/trx0sys.c @@ -699,6 +699,9 @@ trx_sys_init_at_db_start(void) /*==========================*/ { trx_sysf_t* sys_header; + ib_longlong rows_to_undo = 0; + char* unit = (char*)""; + trx_t* trx; mtr_t mtr; mtr_start(&mtr); @@ -734,9 +737,28 @@ trx_sys_init_at_db_start(void) trx_lists_init_at_db_start(); if (UT_LIST_GET_LEN(trx_sys->trx_list) > 0) { + trx = UT_LIST_GET_FIRST(trx_sys->trx_list); + + for (;;) { + rows_to_undo += + ut_conv_dulint_to_longlong(trx->undo_no); + trx = UT_LIST_GET_NEXT(trx_list, trx); + + if (!trx) { + break; + } + } + + if (rows_to_undo > 1000000000) { + unit = (char*)"M"; + rows_to_undo = rows_to_undo / 1000000; + } + fprintf(stderr, - "InnoDB: %lu transaction(s) which must be rolled back or cleaned up\n", - UT_LIST_GET_LEN(trx_sys->trx_list)); +"InnoDB: %lu transaction(s) which must be rolled back or cleaned up\n" +"InnoDB: in total %lu%s row operations to undo\n", + UT_LIST_GET_LEN(trx_sys->trx_list), + (ulint)rows_to_undo, unit); fprintf(stderr, "InnoDB: Trx id counter is %lu %lu\n", ut_dulint_get_high(trx_sys->max_trx_id), From 8fed78b6905125bad1e623d118cb49b9602bf45e Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 2 Mar 2003 14:05:51 -0800 Subject: [PATCH 025/267] Fix for the windows src distribution script - SCRUM: -- To take care of .zip and .tar -- Initialization of 'data' directory without any host dependancy data -- Incorporate all changes from Monty scripts/make_win_src_distribution.sh: Fix to take care of .zip and initialization of 'data' directory scripts/mysql_install_db.sh: Changes for Windows related though 'WINDOWS' flag --- scripts/make_win_src_distribution.sh | 274 +++++++++++++++------------ scripts/mysql_install_db.sh | 26 ++- 2 files changed, 169 insertions(+), 131 deletions(-) diff --git a/scripts/make_win_src_distribution.sh b/scripts/make_win_src_distribution.sh index da6592bd630..17df384522d 100755 --- a/scripts/make_win_src_distribution.sh +++ b/scripts/make_win_src_distribution.sh @@ -15,17 +15,38 @@ TMP=/tmp SUFFIX="" OUTTAR=0 -SRCDIR=$SOURCE -DSTDIR=$TMP - # # This script must run from MySQL top directory # -if [ ! -f scripts/make_win_src_distribution.sh ]; then +if [ ! -f scripts/make_win_src_distribution ]; then echo "ERROR : You must run this script from the MySQL top-level directory" exit 1 fi + +# +# Check for source compilation/configuration +# + +if [ ! -f sql/sql_yacc.cc ]; then + echo "ERROR : Sorry, you must run this script after the complete build," + echo " hope you know what you are trying to do !!" + exit 1 +fi + + +# +# Assign the tmp directory if it was set from the environment variables +# + +for i in $TMPDIR $TEMPDIR $TEMP +do + if [ $i ]; then + TMP=$i + break + fi +done + # # Usage of the script @@ -42,7 +63,7 @@ show_usage() { echo " --tar Create a tar.gz package instead of .zip" echo " --help Show this help message" - exit 1 + exit 0 } # @@ -68,20 +89,6 @@ parse_arguments() { parse_arguments "$@" -# -# Currently return an error if --tar is not used -# - -if [ x$OUTTAR = x0 ] && [ x$DEBUG = x0 ] -then - echo "ERROR: The default .zip doesn't yet work on Windows, as it can't load" - echo " the workspace files due to LF->CR+LF issues, instead use --tar" - echo " to create a .tar.gz package " - echo "" - show_usage; - exit 1 -fi - # # Create a tmp dest directory to copy files # @@ -89,24 +96,36 @@ fi BASE=$TMP/my_win_dist$SUFFIX if [ -d $BASE ] ; then + if [ x$DEBUG = x1 ]; then + echo "Destination directory '$BASE' already exists, deleting it" + fi rm -r -f $BASE fi $CP -r $SOURCE/VC++Files $BASE ( -find $BASE -name *.dsw -and -not -path \*SCCS\* -print -find $BASE -name *.dsp -and -not -path \*SCCS\* -print +find $BASE \( -name "*.dsp" -o -name "*.dsw" \) -and -not -path \*SCCS\* -print )|( while read v do - sed 's/$'"/`echo -e \\\r`/" $v > $v.tmp - rm $v - mv $v.tmp $v + if [ x$DEBUG = x1 ]; then + echo "Replacing LF -> CRLF from '$v'" + fi + + # ^M -> type CTRL V + CTRL M + cat $v | sed 's/ //' | sed 's/$/ /' > $v.tmp + rm $v + mv $v.tmp $v + + # awk '!/r\r$/ {print $0"\r"} /r\r$/ {print $0}' $v > $v done ) -# move all error message files to root directory +# +# Move all error message files to root directory +# + $CP -r $SOURCE/sql/share $BASE/ # @@ -118,9 +137,8 @@ then find $BASE/ -name SCCS -print | xargs rm -r -f rm -rf "$BASE/InstallShield/Script Files/SCCS" fi - -mkdir $BASE/Docs $BASE/extra $BASE/include +mkdir $BASE/Docs $BASE/extra $BASE/include # @@ -130,32 +148,26 @@ mkdir $BASE/Docs $BASE/extra $BASE/include copy_dir_files() { for arg do - + if [ x$DEBUG = x1 ]; then + echo "Copying files from directory '$arg'" + fi cd $SOURCE/$arg/ - ( - ls -A1|grep \\.[ch]$ - ls -A1|grep \\.ih$ - ls -A1|grep \\.i$ - ls -A1|grep \\.ic$ - ls -A1|grep \\.asm$ - ls -A1|grep README - ls -A1|grep INSTALL - ls -A1|grep LICENSE - )|( - while read v - do - $CP $SOURCE/$arg/$v $BASE/$arg/$v - done - ) - - cd $SOURCE/$arg/ - ( - ls -A1|grep \\.cc$|sed 's/.cc$//g')|( - while read v - do - $CP $SOURCE/$arg/$v.cc $BASE/$arg/$v.cpp - done - ) + for i in *.c *.h *.ih *.i *.ic *.asm \ + README INSTALL* LICENSE + do + if [ -f $i ] + then + $CP $SOURCE/$arg/$i $BASE/$arg/$i + fi + done + for i in *.cc + do + if [ -f $i ] + then + i=`echo $i | sed 's/.cc$//g'` + $CP $SOURCE/$arg/$i.cc $BASE/$arg/$i.cpp + fi + done done } @@ -169,27 +181,21 @@ copy_dir_dirs() { basedir=$arg - if [ ! -d $BASE/$arg ]; then + if [ ! -d $BASE/$arg ]; then mkdir $BASE/$arg - fi - + fi copy_dir_files $arg - cd $SOURCE/$arg/ - ( - ls -l |grep "^d"|awk '{print($9)}' - - )|( - while read dir_name - do - if [ x$dir_name != x"SCCS" ] - then - if [ ! -d $BASE/$basedir/$dir_name ]; then - mkdir $BASE/$basedir/$dir_name - fi - copy_dir_files $basedir/$dir_name + cd $SOURCE/$arg/ + for i in * + do + if [ -d $SOURCE/$basedir/$i ] && [ "$i" != "SCCS" ]; then + if [ ! -d $BASE/$basedir/$i ]; then + mkdir $BASE/$basedir/$i fi - done - ) + copy_dir_files $basedir/$i + fi + done done } @@ -197,49 +203,37 @@ copy_dir_dirs() { # Input directories to be copied # -copy_dir_files 'bdb' -copy_dir_files 'bdb/build_win32' -copy_dir_files 'client' -copy_dir_files 'dbug' -copy_dir_files 'extra' -copy_dir_files 'heap' -copy_dir_files 'include' -copy_dir_files 'innobase' -copy_dir_files 'isam' -copy_dir_files 'libmysql' -copy_dir_files 'libmysqld' -copy_dir_files 'merge' -copy_dir_files 'myisam' -copy_dir_files 'myisammrg' -copy_dir_files 'mysys' -copy_dir_files 'regex' -copy_dir_files 'sql' -copy_dir_files 'strings' -copy_dir_files 'vio' -copy_dir_files 'zlib' +for i in client dbug extra heap include isam \ + libmysql libmysqld merge myisam \ + myisammrg mysys regex sql strings \ + vio zlib +do + copy_dir_files $i +done # # Input directories to be copied recursively # -copy_dir_dirs 'bdb' -copy_dir_dirs 'innobase' +for i in bdb innobase +do + copy_dir_dirs $i +done -# create dummy innobase configure header -if [ -f $BASE/innobase/ib_config.h ] -then +# +# Create dummy innobase configure header +# + +if [ -f $BASE/innobase/ib_config.h ]; then rm -f $BASE/innobase/ib_config.h - touch $BASE/innobase/ib_config.h fi +touch $BASE/innobase/ib_config.h + # # Copy miscellaneous files # -$CP $SOURCE/myisam/myisampack.c $BASE/myisampack/ -$CP $SOURCE/client/mysqlbinlog.cc $BASE/mysqlbinlog/mysqlbinlog.cpp -$CP $SOURCE/isam/pack_isam.c $BASE/pack_isam/pack_isam.c - cd $SOURCE for i in COPYING ChangeLog README \ INSTALL-SOURCE INSTALL-WIN \ @@ -248,16 +242,26 @@ for i in COPYING ChangeLog README \ Docs/mysqld_error.txt Docs/INSTALL-BINARY do + if [ x$DEBUG = x1 ]; then + echo "Copying file '$i'" + fi if [ -f $i ] then - $CP $i $BASE/$i + $CP $i $BASE/$i fi done # -# TODO: Initialize the initial data directory +# Initialize the initial data directory # +if [ -f scripts/mysql_install_db ]; then + if [ x$DEBUG = x1 ]; then + echo "Initializing the 'data' directory" + fi + scripts/mysql_install_db -WINDOWS --datadir=$BASE/data +fi + # # Specify the distribution package name and copy it @@ -305,36 +309,56 @@ which_1 () } # -# Create the result zip file +# Create the result zip/tar file # +set_tarzip_options() +{ + for arg + do + if [ x$arg = x"tar" ]; then + ZIPFILE1=gnutar + ZIPFILE2=gtar + OPT=cvf + EXT=".tar" + NEED_COMPRESS=1 + if [ x$SILENT = x1 ] ; then + OPT=cf + fi + else + ZIPFILE1=zip + ZIPFILE2="" + OPT="-vr" + EXT=".zip" + NEED_COMPRESS=0 + if [ x$SILENT = x1 ] ; then + OPT="-r" + fi + fi + done +} + if [ x$OUTTAR = x1 ]; then - ZIPFILE1=gnutar - ZIPFILE2=gtar - OPT=cvf - EXT=".tar" - NEED_COMPRESS=1 - if [ x$SILENT = x1 ] ; then - OPT=cf - fi + set_tarzip_options 'tar' else - ZIPFILE1=zip - ZIPFILE2="" - OPT="-lvr" - EXT=".zip" - NEED_COMPRESS=0 - if [ x$SILENT = x1 ] ; then - OPT="-lr" - fi + set_tarzip_options 'zip' fi tar=`which_1 $ZIPFILE1 $ZIPFILE2` if test "$?" = "1" -o "$tar" = "" then tar=tar + set_tarzip_options 'tar' +fi + +# +# Create the archive +# + +if [ xDEBUG = x1 ]; then + echo "Using $tar to create archive" fi -echo "Using $tar to create archive" cd $TMP $tar $OPT $SOURCE/$NEW_NAME$EXT $NEW_NAME @@ -342,19 +366,21 @@ cd $SOURCE if [ x$NEED_COMPRESS = x1 ] then - echo "Compressing archive" + if [ xDEBUG = x1 ]; then + echo "Compressing archive" + fi gzip -9 $NEW_NAME$EXT - EXT=".tar.gz" + EXT="$EXT.gz" fi -echo "Removing temporary directory" +if [ xDEBUG = x1 ]; then + echo "Removing temporary directory" +fi rm -r -f $BASE echo "$NEW_NAME$EXT created successfully !!" -# # End of script -# diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 862cffb0cb7..f108eb8b7dc 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -13,6 +13,12 @@ case "$1" in IN_RPM="1"; shift ;; esac +windows=0 +case "$1" in + -WINDOWS) + windows="1"; shift + ;; +esac defaults= case "$1" in --no-defaults|--defaults-file=*|--defaults-extra-file=*) @@ -94,7 +100,7 @@ fi mdata=$ldata/mysql -if test ! -x $execdir/mysqld +if test "$windows" -eq 0 -a ! -x $execdir/mysqld then if test "$IN_RPM" -eq 1 then @@ -110,7 +116,7 @@ fi hostname=`@HOSTNAME@` # Install this too in the user table # Check if hostname is valid -if test "$IN_RPM" -eq 0 -a $force -eq 0 +if test "$windows" -eq 0 -a "$IN_RPM" -eq 0 -a $force -eq 0 then resolved=`$bindir/resolveip $hostname 2>&1` if [ $? -ne 0 ] @@ -134,7 +140,7 @@ then fi # Create database directories mysql & test -if test "$IN_RPM" -eq 0 +if test "$IN_RPM" -eq 0 || "$windows" -eq 0 then if test ! -d $ldata; then mkdir $ldata; chmod 700 $ldata ; fi if test ! -d $ldata/mysql; then mkdir $ldata/mysql; chmod 700 $ldata/mysql ; fi @@ -247,13 +253,19 @@ then c_u="$c_u comment='Users and global privileges';" i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); - INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); + + INSERT INTO user (host,user) values ('localhost','');" + + if test "$windows" -eq 0 + then + i_u="$i_u INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); + REPLACE INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); - INSERT INTO user (host,user) values ('localhost',''); INSERT INTO user (host,user) values ('$hostname','');" + fi fi if test ! -f $mdata/func.frm @@ -330,7 +342,7 @@ END_OF_DATA --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args" then echo "" - if test "$IN_RPM" -eq 0 + if test "$IN_RPM" -eq 0 || "$windows" -eq 0 then echo "To start mysqld at boot time you have to copy support-files/mysql.server" echo "to the right place for your system" @@ -351,7 +363,7 @@ then echo "able to use the new GRANT command!" fi echo - if test "$IN_RPM" -eq 0 + if test "$IN_RPM" -eq 0 -a "$windows" -eq 0 then echo "You can start the MySQL daemon with:" echo "cd @prefix@ ; $bindir/mysqld_safe &" From 310545adf0de5e933cfa346499991beace33f24c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 10:53:08 +0400 Subject: [PATCH 026/267] Strings which appear without charset context, like number-to-string-convertion-result, now takes current database character set, instead of thread character set. This makes it easy to be SQL99 conformant and 4.0 compatible. Item->thd_charset() is renamed to Item->default_charset() as old name doesn't describe its nature anymore. --- sql/item.cc | 20 +++++------ sql/item.h | 6 ++-- sql/item_cmpfunc.cc | 4 +-- sql/item_func.cc | 30 ++++++++--------- sql/item_strfunc.cc | 12 +++---- sql/item_strfunc.h | 12 +++---- sql/item_subselect.cc | 4 +-- sql/item_sum.cc | 18 +++++----- sql/item_timefunc.cc | 28 ++++++++-------- sql/item_timefunc.h | 78 +++++++++++++++++++++---------------------- sql/procedure.h | 10 +++--- 11 files changed, 111 insertions(+), 111 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index ef2d68ab2bf..decd0ec044b 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -163,9 +163,9 @@ bool Item::get_time(TIME *ltime) return 0; } -CHARSET_INFO * Item::thd_charset() const +CHARSET_INFO * Item::default_charset() const { - return current_thd->variables.thd_charset; + return current_thd->db_charset; } Item_field::Item_field(Field *f) :Item_ident(NullS,f->table_name,f->field_name) @@ -303,7 +303,7 @@ Item *Item_field::get_tmp_table_item(THD *thd) String *Item_int::val_str(String *str) { - str->set(value, thd_charset()); + str->set(value, default_charset()); return str; } @@ -311,7 +311,7 @@ void Item_int::print(String *str) { if (!name) { - str_value.set(value, thd_charset()); + str_value.set(value, default_charset()); name=str_value.c_ptr(); } str->append(name); @@ -319,7 +319,7 @@ void Item_int::print(String *str) String *Item_uint::val_str(String *str) { - str->set((ulonglong) value, thd_charset()); + str->set((ulonglong) value, default_charset()); return str; } @@ -327,7 +327,7 @@ void Item_uint::print(String *str) { if (!name) { - str_value.set((ulonglong) value, thd_charset()); + str_value.set((ulonglong) value, default_charset()); name=str_value.c_ptr(); } str->append(name); @@ -336,7 +336,7 @@ void Item_uint::print(String *str) String *Item_real::val_str(String *str) { - str->set(value,decimals,thd_charset()); + str->set(value,decimals,default_charset()); return str; } @@ -377,7 +377,7 @@ void Item_param::set_double(double value) void Item_param::set_value(const char *str, uint length) { - str_value.set(str,length,thd_charset()); + str_value.set(str,length,default_charset()); item_type = STRING_ITEM; } @@ -474,10 +474,10 @@ String *Item_param::val_str(String* str) { switch (item_result_type) { case INT_RESULT: - str->set(int_value, thd_charset()); + str->set(int_value, default_charset()); return str; case REAL_RESULT: - str->set(real_value, 2, thd_charset()); + str->set(real_value, 2, default_charset()); return str; default: return (String*) &str_value; diff --git a/sql/item.h b/sql/item.h index ddf704ea1db..3cf8a885018 100644 --- a/sql/item.h +++ b/sql/item.h @@ -110,7 +110,7 @@ public: virtual bool binary() const { return str_value.charset()->state & MY_CS_BINSORT ? 1 : 0 ; } - CHARSET_INFO *thd_charset() const; + CHARSET_INFO *default_charset() const; CHARSET_INFO *charset() const { return str_value.charset(); }; void set_charset(CHARSET_INFO *cs) { str_value.set_charset(cs); } virtual void set_outer_resolving() {} @@ -773,7 +773,7 @@ public: } double val() { return (double) value; } longlong val_int() { return value; } - String* val_str(String *str) { str->set(value, thd_charset()); return str; } + String* val_str(String *str) { str->set(value, default_charset()); return str; } enum Item_result result_type() const { return INT_RESULT; } }; @@ -792,7 +792,7 @@ public: longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); } String* val_str(String *str) { - str->set(value, decimals, thd_charset()); + str->set(value, decimals, default_charset()); return str; } enum Item_result result_type() const { return REAL_RESULT; } diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 0993b8b155a..7ff36bb32ed 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -873,7 +873,7 @@ String *Item_func_case::val_str(String *str) longlong Item_func_case::val_int() { char buff[MAX_FIELD_WIDTH]; - String dummy_str(buff,sizeof(buff),thd_charset()); + String dummy_str(buff,sizeof(buff),default_charset()); Item *item=find_item(&dummy_str); longlong res; @@ -890,7 +890,7 @@ longlong Item_func_case::val_int() double Item_func_case::val() { char buff[MAX_FIELD_WIDTH]; - String dummy_str(buff,sizeof(buff),thd_charset()); + String dummy_str(buff,sizeof(buff),default_charset()); Item *item=find_item(&dummy_str); double res; diff --git a/sql/item_func.cc b/sql/item_func.cc index 1382766c205..545cb14bf2a 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -286,7 +286,7 @@ String *Item_real_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -299,9 +299,9 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr,thd_charset()); + str->set(nr,default_charset()); else - str->set((ulonglong) nr,thd_charset()); + str->set((ulonglong) nr,default_charset()); } else { @@ -309,7 +309,7 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); } return str; } @@ -336,9 +336,9 @@ String *Item_int_func::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,thd_charset()); + str->set(nr,default_charset()); else - str->set((ulonglong) nr,thd_charset()); + str->set((ulonglong) nr,default_charset()); return str; } @@ -365,9 +365,9 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr,thd_charset()); + str->set(nr,default_charset()); else - str->set((ulonglong) nr,thd_charset()); + str->set((ulonglong) nr,default_charset()); } else { @@ -375,7 +375,7 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); } return str; } @@ -890,9 +890,9 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,thd_charset()); + str->set(nr,default_charset()); else - str->set((ulonglong) nr,thd_charset()); + str->set((ulonglong) nr,default_charset()); return str; } case REAL_RESULT: @@ -901,7 +901,7 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } case STRING_RESULT: @@ -1563,7 +1563,7 @@ String *Item_func_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -1584,9 +1584,9 @@ String *Item_func_udf_int::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,thd_charset()); + str->set(nr,default_charset()); else - str->set((ulonglong) nr,thd_charset()); + str->set((ulonglong) nr,default_charset()); return str; } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index b1bc92a1210..68f186982ed 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1429,14 +1429,14 @@ String *Item_func_database::val_str(String *str) str->length(0); else str->copy((const char*) thd->db,(uint) strlen(thd->db), - system_charset_info, thd->variables.thd_charset); + system_charset_info, default_charset()); return str; } String *Item_func_user::val_str(String *str) { THD *thd=current_thd; - CHARSET_INFO *cs=thd->variables.thd_charset; + CHARSET_INFO *cs= default_charset(); const char *host=thd->host ? thd->host : thd->ip ? thd->ip : ""; uint32 res_length=(strlen(thd->user)+strlen(host)+10) * cs->mbmaxlen; @@ -1543,7 +1543,7 @@ String *Item_func_format::val_str(String *str) if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ dec= decimals ? decimals+1 : 0; - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); str_length=str->length(); if (nr < 0) str_length--; // Don't count sign @@ -2007,7 +2007,7 @@ String *Item_func_conv::val_str(String *str) else dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err); ptr= longlong2str(dec,ans,to_base); - if (str->copy(ans,(uint32) (ptr-ans), thd_charset())) + if (str->copy(ans,(uint32) (ptr-ans), default_charset())) return &empty_string; return str; } @@ -2242,7 +2242,7 @@ String *Item_func_charset::val_str(String *str) if ((null_value=(args[0]->null_value || !res->charset()))) return 0; str->copy(res->charset()->csname,strlen(res->charset()->csname), - &my_charset_latin1, thd_charset()); + &my_charset_latin1, default_charset()); return str; } @@ -2253,7 +2253,7 @@ String *Item_func_collation::val_str(String *str) if ((null_value=(args[0]->null_value || !res->charset()))) return 0; str->copy(res->charset()->name,strlen(res->charset()->name), - &my_charset_latin1, thd_charset()); + &my_charset_latin1, default_charset()); return str; } diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 63b3bb20dc3..b01787d0d20 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -333,8 +333,8 @@ public: String *val_str(String *); void fix_length_and_dec() { - max_length= MAX_FIELD_NAME * thd_charset()->mbmaxlen; - set_charset(thd_charset()); + max_length= MAX_FIELD_NAME * default_charset()->mbmaxlen; + set_charset(default_charset()); } const char *func_name() const { return "database"; } }; @@ -346,8 +346,8 @@ public: String *val_str(String *); void fix_length_and_dec() { - max_length= (USERNAME_LENGTH+HOSTNAME_LENGTH+1)*thd_charset()->mbmaxlen; - set_charset(thd_charset()); + max_length= (USERNAME_LENGTH+HOSTNAME_LENGTH+1)*default_charset()->mbmaxlen; + set_charset(default_charset()); } const char *func_name() const { return "user"; } }; @@ -612,7 +612,7 @@ public: void fix_length_and_dec() { max_length=40; // should be enough - set_charset(thd_charset()); + set_charset(default_charset()); }; }; @@ -625,7 +625,7 @@ public: void fix_length_and_dec() { max_length=40; // should be enough - set_charset(thd_charset()); + set_charset(default_charset()); }; }; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index fb51b5561e9..a29cf57b4e1 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -372,7 +372,7 @@ String *Item_exists_subselect::val_str(String *str) reset(); return 0; } - str->set(value,thd_charset()); + str->set(value,default_charset()); return str; } @@ -415,7 +415,7 @@ String *Item_in_subselect::val_str(String *str) null_value= 1; return 0; } - str->set(value,thd_charset()); + str->set(value,default_charset()); return str; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index ca6f17d486a..a0f8bc8b8a2 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -124,7 +124,7 @@ Item_sum_num::val_str(String *str) double nr=val(); if (null_value) return 0; - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -135,7 +135,7 @@ Item_sum_int::val_str(String *str) longlong nr=val_int(); if (null_value) return 0; - str->set(nr,thd_charset()); + str->set(nr,default_charset()); return str; } @@ -416,13 +416,13 @@ Item_sum_hybrid::val_str(String *str) case STRING_RESULT: return &value; case REAL_RESULT: - str->set(sum,decimals,thd_charset()); + str->set(sum,decimals,default_charset()); break; case INT_RESULT: if (unsigned_flag) - str->set((ulonglong) sum_int,thd_charset()); + str->set((ulonglong) sum_int,default_charset()); else - str->set((longlong) sum_int,thd_charset()); + str->set((longlong) sum_int,default_charset()); break; case ROW_RESULT: default: @@ -879,7 +879,7 @@ String *Item_avg_field::val_str(String *str) double nr=Item_avg_field::val(); if (null_value) return 0; - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -927,7 +927,7 @@ String *Item_variance_field::val_str(String *str) double nr=val(); if (null_value) return 0; - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -1281,7 +1281,7 @@ String *Item_sum_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,thd_charset()); + str->set(nr,decimals,default_charset()); return str; } @@ -1300,7 +1300,7 @@ String *Item_sum_udf_int::val_str(String *str) if (null_value) return 0; else - str->set(nr,thd_charset()); + str->set(nr,default_charset()); return str; } diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index a032e25cec8..997247b6141 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -162,7 +162,7 @@ String* Item_func_monthname::val_str(String* str) null_value=0; String *m=&month_names[month-1]; - str->copy(m->ptr(), m->length(), m->charset(), thd_charset()); + str->copy(m->ptr(), m->length(), m->charset(), default_charset()); return str; } @@ -252,7 +252,7 @@ String* Item_func_dayname::val_str(String* str) return (String*) 0; String *d=&day_names[weekday]; - str->copy(d->ptr(), d->length(), d->charset(), thd_charset()); + str->copy(d->ptr(), d->length(), d->charset(), default_charset()); return str; } @@ -416,7 +416,7 @@ String *Item_date::val_str(String *str) return (String*) 0; if (!value) // zero daynr { - str->copy("0000-00-00",10,&my_charset_latin1,thd_charset()); + str->copy("0000-00-00",10,&my_charset_latin1,default_charset()); return str; } @@ -425,7 +425,7 @@ String *Item_date::val_str(String *str) (int) (value/10000L) % 10000, (int) (value/100)%100, (int) (value%100)); - str->copy(tmpbuff,10,&my_charset_latin1,thd_charset()); + str->copy(tmpbuff,10,&my_charset_latin1,default_charset()); return str; } @@ -463,9 +463,9 @@ void Item_func_curdate::fix_length_and_dec() struct tm tm_tmp,*start; time_t query_start=current_thd->query_start(); - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=10*thd_charset()->mbmaxlen; + max_length=10*default_charset()->mbmaxlen; localtime_r(&query_start,&tm_tmp); start=&tm_tmp; value=(longlong) ((ulong) ((uint) start->tm_year+1900)*10000L+ @@ -492,7 +492,7 @@ bool Item_func_curdate::get_date(TIME *res, String *Item_func_curtime::val_str(String *str) { - str_value.set(buff,buff_length,thd_charset()); + str_value.set(buff,buff_length,default_charset()); return &str_value; } @@ -500,7 +500,7 @@ void Item_func_curtime::fix_length_and_dec() { struct tm tm_tmp,*start; time_t query_start=current_thd->query_start(); - CHARSET_INFO *cs=thd_charset(); + CHARSET_INFO *cs=default_charset(); decimals=0; max_length=8*cs->mbmaxlen; @@ -520,7 +520,7 @@ void Item_func_curtime::fix_length_and_dec() String *Item_func_now::val_str(String *str) { - str_value.set(buff,buff_length,thd_charset()); + str_value.set(buff,buff_length,default_charset()); return &str_value; } @@ -595,7 +595,7 @@ String *Item_func_sec_to_time::val_str(String *str) uint sec= (uint) ((ulonglong) seconds % 3600); length= my_sprintf(buff,(buff,"%s%02lu:%02u:%02u",sign,(long) (seconds/3600), sec/60, sec % 60)); - str->copy(buff, length, &my_charset_latin1, thd_charset()); + str->copy(buff, length, &my_charset_latin1, default_charset()); return str; } @@ -940,7 +940,7 @@ String *Item_func_from_unixtime::val_str(String *str) struct tm tm_tmp,*start; time_t tmp=(time_t) args[0]->val_int(); uint32 l; - CHARSET_INFO *cs=thd_charset(); + CHARSET_INFO *cs=default_charset(); if ((null_value=args[0]->null_value)) return 0; @@ -1003,9 +1003,9 @@ bool Item_func_from_unixtime::get_date(TIME *ltime, void Item_date_add_interval::fix_length_and_dec() { enum_field_types arg0_field_type; - set_charset(thd_charset()); + set_charset(default_charset()); maybe_null=1; - max_length=19*thd_charset()->mbmaxlen; + max_length=19*default_charset()->mbmaxlen; value.alloc(32); /* @@ -1124,7 +1124,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, bool fuzzy_date) String *Item_date_add_interval::val_str(String *str) { TIME ltime; - CHARSET_INFO *cs=thd_charset(); + CHARSET_INFO *cs=default_charset(); uint32 l; if (Item_date_add_interval::get_date(<ime,0)) diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 03180793d8a..2ed126b58e5 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -29,7 +29,7 @@ public: const char *func_name() const { return "period_add"; } void fix_length_and_dec() { - max_length=6*thd_charset()->mbmaxlen; + max_length=6*default_charset()->mbmaxlen; } }; @@ -43,7 +43,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=6*thd_charset()->mbmaxlen; + max_length=6*default_charset()->mbmaxlen; } }; @@ -57,7 +57,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=6*thd_charset()->mbmaxlen; + max_length=6*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -72,7 +72,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -86,16 +86,16 @@ public: double val() { return (double) Item_func_month::val_int(); } String *val_str(String *str) { - str->set(val_int(), thd_charset()); + str->set(val_int(), default_charset()); return null_value ? 0 : str; } const char *func_name() const { return "month"; } enum Item_result result_type () const { return INT_RESULT; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -110,9 +110,9 @@ public: enum Item_result result_type () const { return STRING_RESULT; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=10*thd_charset()->mbmaxlen; + max_length=10*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -127,7 +127,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=3*thd_charset()->mbmaxlen; + max_length=3*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -142,7 +142,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -157,7 +157,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -172,7 +172,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=1*thd_charset()->mbmaxlen; + max_length=1*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -187,7 +187,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -202,7 +202,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=2*thd_charset()->mbmaxlen; + max_length=2*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -216,7 +216,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=6*thd_charset()->mbmaxlen; + max_length=6*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -231,7 +231,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=4*thd_charset()->mbmaxlen; + max_length=4*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -247,16 +247,16 @@ public: double val() { return (double) val_int(); } String *val_str(String *str) { - str->set(val_int(), thd_charset()); + str->set(val_int(), default_charset()); return null_value ? 0 : str; } const char *func_name() const { return "weekday"; } enum Item_result result_type () const { return INT_RESULT; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=1*thd_charset()->mbmaxlen; + max_length=1*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -270,9 +270,9 @@ class Item_func_dayname :public Item_func_weekday enum Item_result result_type () const { return STRING_RESULT; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=9*thd_charset()->mbmaxlen; + max_length=9*default_charset()->mbmaxlen; maybe_null=1; } }; @@ -289,7 +289,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=10*thd_charset()->mbmaxlen; + max_length=10*default_charset()->mbmaxlen; } }; @@ -303,7 +303,7 @@ public: void fix_length_and_dec() { decimals=0; - max_length=10*thd_charset()->mbmaxlen; + max_length=10*default_charset()->mbmaxlen; } }; @@ -322,15 +322,15 @@ public: const char *func_name() const { return "date"; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=10*thd_charset()->mbmaxlen; + max_length=10*default_charset()->mbmaxlen; } int save_in_field(Field *to, bool no_conversions); Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_date(maybe_null, name, t_arg, thd_charset())); + return (new Field_date(maybe_null, name, t_arg, default_charset())); } }; @@ -345,7 +345,7 @@ public: Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_datetime(maybe_null, name, t_arg, thd_charset())); + return (new Field_datetime(maybe_null, name, t_arg, default_charset())); } }; @@ -368,7 +368,7 @@ public: Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_time(maybe_null, name, t_arg, thd_charset())); + return (new Field_time(maybe_null, name, t_arg, default_charset())); } }; @@ -440,9 +440,9 @@ class Item_func_from_unixtime :public Item_date_func const char *func_name() const { return "from_unixtime"; } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); decimals=0; - max_length=19*thd_charset()->mbmaxlen; + max_length=19*default_charset()->mbmaxlen; } bool get_date(TIME *res,bool fuzzy_date); }; @@ -457,16 +457,16 @@ public: String *val_str(String *); void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); maybe_null=1; - max_length=13*thd_charset()->mbmaxlen; + max_length=13*default_charset()->mbmaxlen; } enum_field_types field_type() const { return MYSQL_TYPE_TIME; } const char *func_name() const { return "sec_to_time"; } Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_time(maybe_null, name, t_arg, thd_charset())); + return (new Field_time(maybe_null, name, t_arg, default_charset())); } }; @@ -532,7 +532,7 @@ public: } void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); max_length=args[0]->max_length; } void print(String *str); @@ -545,7 +545,7 @@ public: Item_char_typecast(Item *a) :Item_typecast(a) {} void fix_length_and_dec() { - set_charset(thd_charset()); + set_charset(default_charset()); max_length=args[0]->max_length; } }; @@ -560,7 +560,7 @@ public: Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_date(maybe_null, name, t_arg, thd_charset())); + return (new Field_date(maybe_null, name, t_arg, default_charset())); } }; @@ -574,7 +574,7 @@ public: Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_time(maybe_null, name, t_arg, thd_charset())); + return (new Field_time(maybe_null, name, t_arg, default_charset())); } }; @@ -588,6 +588,6 @@ public: Field *tmp_table_field() { return result_field; } Field *tmp_table_field(TABLE *t_arg) { - return (new Field_datetime(maybe_null, name, t_arg, thd_charset())); + return (new Field_datetime(maybe_null, name, t_arg, default_charset())); } }; diff --git a/sql/procedure.h b/sql/procedure.h index 03a45488b03..5365b2e1102 100644 --- a/sql/procedure.h +++ b/sql/procedure.h @@ -38,7 +38,7 @@ public: virtual void set(const char *str,uint length,CHARSET_INFO *cs)=0; virtual void set(longlong nr)=0; virtual enum_field_types field_type() const=0; - void set(const char *str) { set(str,(uint) strlen(str), thd_charset()); } + void set(const char *str) { set(str,(uint) strlen(str), default_charset()); } void make_field(Send_field *tmp_field) { init_make_field(tmp_field,field_type()); @@ -62,7 +62,7 @@ public: { int err; value=my_strntod(cs,(char*) str,length,(char**)0,&err); } double val() { return value; } longlong val_int() { return (longlong) value; } - String *val_str(String *s) { s->set(value,decimals,thd_charset()); return s; } + String *val_str(String *s) { s->set(value,decimals,default_charset()); return s; } unsigned int size_of() { return sizeof(*this);} }; @@ -80,7 +80,7 @@ public: { int err; value=my_strntoll(cs,str,length,10,NULL,&err); } double val() { return (double) value; } longlong val_int() { return value; } - String *val_str(String *s) { s->set(value, thd_charset()); return s; } + String *val_str(String *s) { s->set(value, default_charset()); return s; } unsigned int size_of() { return sizeof(*this);} }; @@ -92,8 +92,8 @@ public: { this->max_length=length; } enum Item_result result_type () const { return STRING_RESULT; } enum_field_types field_type() const { return MYSQL_TYPE_STRING; } - void set(double nr) { str_value.set(nr, 2, thd_charset()); } - void set(longlong nr) { str_value.set(nr, thd_charset()); } + void set(double nr) { str_value.set(nr, 2, default_charset()); } + void set(longlong nr) { str_value.set(nr, default_charset()); } void set(const char *str, uint length, CHARSET_INFO *cs) { str_value.copy(str,length,cs); } double val() From 48df5b7537b38c2af6297cfffb0e9124940558bd Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 13:16:39 +0400 Subject: [PATCH 027/267] Coercibility is now stored in user vars sql/item.h: Change constant values order according to the word "coercibility" nature sql/item_func.cc: Change constant values order according to the word "coercibility" nature --- sql/item.h | 4 ++-- sql/item_func.cc | 17 +++++++++++------ sql/item_func.h | 3 ++- sql/log_event.cc | 2 +- sql/sql_class.h | 1 + 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/sql/item.h b/sql/item.h index 3cf8a885018..e262a9cb4e6 100644 --- a/sql/item.h +++ b/sql/item.h @@ -39,8 +39,8 @@ public: SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM}; enum cond_result { COND_UNDEF,COND_OK,COND_TRUE,COND_FALSE }; - enum coercion { COER_NOCOLL=0, COER_COERCIBLE=1, - COER_IMPLICIT=2, COER_EXPLICIT=3 }; + enum coercion { COER_NOCOLL=3, COER_COERCIBLE=2, + COER_IMPLICIT=1, COER_EXPLICIT=0 }; String str_value; /* used to store value */ my_string name; /* Name from select */ diff --git a/sql/item_func.cc b/sql/item_func.cc index 545cb14bf2a..e5d32042641 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -132,7 +132,7 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) coercibility= (*arg)->coercibility; set_charset((*arg)->charset()); } - else if ((*arg)->coercibility > coercibility) + else if ((*arg)->coercibility < coercibility) { if (strcmp(charset()->csname,(*arg)->charset()->csname)) { @@ -2007,6 +2007,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name, } + bool Item_func_set_user_var::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) { @@ -2030,7 +2031,8 @@ Item_func_set_user_var::fix_length_and_dec() void Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type, - CHARSET_INFO *cs) + CHARSET_INFO *cs, + enum coercion coercibility) { if ((null_value=args[0]->null_value)) { @@ -2040,6 +2042,7 @@ void Item_func_set_user_var::update_hash(void *ptr, uint length, entry->value=0; entry->length=0; entry->var_charset=cs; + entry->var_coercibility= coercibility; } else { @@ -2071,6 +2074,7 @@ void Item_func_set_user_var::update_hash(void *ptr, uint length, entry->length= length; entry->type=type; entry->var_charset=cs; + entry->var_coercibility= coercibility; } return; @@ -2112,7 +2116,8 @@ double Item_func_set_user_var::val() { double value=args[0]->val(); - update_hash((void*) &value,sizeof(value), REAL_RESULT, default_charset_info); + update_hash((void*) &value,sizeof(value), REAL_RESULT, + &my_charset_bin, COER_NOCOLL); return value; } @@ -2121,7 +2126,7 @@ Item_func_set_user_var::val_int() { longlong value=args[0]->val_int(); update_hash((void*) &value, sizeof(longlong), INT_RESULT, - default_charset_info); + &my_charset_bin, COER_NOCOLL); return value; } @@ -2130,10 +2135,10 @@ Item_func_set_user_var::val_str(String *str) { String *res=args[0]->val_str(str); if (!res) // Null value - update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin); + update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin, COER_NOCOLL); else update_hash((void*) res->ptr(), res->length(), STRING_RESULT, - res->charset()); + res->charset(), args[0]->coercibility); return res; } diff --git a/sql/item_func.h b/sql/item_func.h index b958b72d514..fc7145705b2 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -934,7 +934,8 @@ public: double val(); longlong val_int(); String *val_str(String *str); - void update_hash(void *ptr, uint length, enum Item_result type, CHARSET_INFO *cs); + void update_hash(void *ptr, uint length, enum Item_result type, + CHARSET_INFO *cs, enum coercion coercibility); bool update(); enum Item_result result_type () const { return cached_result_type; } bool fix_fields(THD *thd, struct st_table_list *tables, Item **ref); diff --git a/sql/log_event.cc b/sql/log_event.cc index a1cb144a894..0f0bc0d5727 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2177,7 +2177,7 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) } Item_func_set_user_var e(user_var_name, it); e.fix_fields(thd, 0, 0); - e.update_hash(val, val_len, type, charset); + e.update_hash(val, val_len, type, charset, Item::COER_NOCOLL); free_root(&thd->mem_root,0); rli->inc_pending(get_event_len()); diff --git a/sql/sql_class.h b/sql/sql_class.h index f943a611d08..1a613f987f6 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -935,6 +935,7 @@ class user_var_entry ulong length, update_query_id, used_query_id; Item_result type; CHARSET_INFO *var_charset; + enum Item::coercion var_coercibility; }; /* Class for unique (removing of duplicates) */ From 285541505844c01546c37a46fcad92685e99cd3c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 14:57:02 +0100 Subject: [PATCH 028/267] Replication: small bug fixes in mysql-test-run.sh and in replication code (more reinitializations) + fix for #70 + test result fix for LOAD DATA LOCAL bug #82 client/mysqltest.c: Removed wrong comment and useless sleep mysql-test/mysql-test-run.sh: Fix $slave_datadir variable because this if [ -n "$1" ] ; slave_datadir="var/$slave_ident-data/" else slave_datadir=$SLAVE_MYDDIR was not coherent and led to problems of master.info not being deleted. Delete relay-log.info too. mysql-test/r/rpl000001.result: SUM is 1022 (1021 was when we had the LOAD DATA LOCAL bug #82). It's logical to have an even number as we load the same file twice. sql/slave.cc: When we RESET SLAVE, clear rli->master_log_* to give a good display in SHOW SLAVE STATUS ; seeing the old values may confuse the user. When we START SLAVE, clear rli->master_log_name, not only rli->master_log_pos. sql/sql_repl.cc: When we RESET SLAVE, clear mi->master_log_* to give a good display in SHOW SLAVE STATUS (bug #70) --- client/mysqltest.c | 7 ------- mysql-test/mysql-test-run.sh | 8 ++++---- mysql-test/r/rpl000001.result | 2 +- sql/slave.cc | 33 +++++++++++++++++++++++++++------ sql/sql_repl.cc | 6 ++++++ 5 files changed, 38 insertions(+), 18 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index cad13fe1349..7c577bca9f2 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -994,13 +994,6 @@ int do_sync_with_master2(const char* p) if (rpl_parse) mysql_enable_rpl_parse(mysql); -#ifndef TO_BE_REMOVED - /* - We need this because wait_for_pos() only waits for the relay log, - which doesn't guarantee that the slave has executed the statement. - */ - my_sleep(2*1000000L); -#endif return 0; } diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 48bb94ea0e4..ae5b47fbc04 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -810,8 +810,8 @@ start_master() $RM -f $MASTER_MYDDIR/log.* # Remove stale binary logs $RM -f $MYSQL_TEST_DIR/var/log/master-bin.* - # Remove old master.info files - $RM -f $MYSQL_TEST_DIR/var/master-data/master.info + # Remove old master.info and relay-log.info files + $RM -f $MYSQL_TEST_DIR/var/master-data/master.info $MYSQL_TEST_DIR/var/master-data/relay-log.info #run master initialization shell script if one exists @@ -915,7 +915,7 @@ start_slave() slave_port=`expr $SLAVE_MYPORT + $1` slave_log="$SLAVE_MYLOG.$1" slave_err="$SLAVE_MYERR.$1" - slave_datadir="var/$slave_ident-data/" + slave_datadir="$SLAVE_MYDDIR/../$slave_ident-data/" slave_pid="$MYRUN_DIR/mysqld-$slave_ident.pid" slave_sock="$SLAVE_MYSOCK-$1" else @@ -930,7 +930,7 @@ start_slave() fi # Remove stale binary logs and old master.info files $RM -f $MYSQL_TEST_DIR/var/log/$slave_ident-*bin.* - $RM -f $MYSQL_TEST_DIR/$slave_datadir/master.info + $RM -f $slave_datadir/master.info $slave_datadir/relay-log.info #run slave initialization shell script if one exists if [ -f "$slave_init_script" ] ; diff --git a/mysql-test/r/rpl000001.result b/mysql-test/r/rpl000001.result index 2d277571296..f3b52b43b19 100644 --- a/mysql-test/r/rpl000001.result +++ b/mysql-test/r/rpl000001.result @@ -32,7 +32,7 @@ n 2 select sum(length(word)) from t1; sum(length(word)) -1021 +1022 drop table t1,t3; reset master; slave stop; diff --git a/sql/slave.cc b/sql/slave.cc index eaab2f00b6a..4d08fcbbd5a 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -322,17 +322,37 @@ int purge_relay_logs(RELAY_LOG_INFO* rli, THD *thd, bool just_reset, { int error=0; DBUG_ENTER("purge_relay_logs"); + + /* + Even if rli->inited==0, we still try to empty rli->master_log_* variables. + Indeed, rli->inited==0 does not imply that they already are empty. + It could be that slave's info initialization partly succeeded : + for example if relay-log.info existed but *relay-bin*.* + have been manually removed, init_relay_log_info reads the old + relay-log.info and fills rli->master_log_*, then init_relay_log_info + checks for the existence of the relay log, this fails and + init_relay_log_info leaves rli->inited to 0. + In that pathological case, rli->master_log_pos* will be properly reinited + at the next START SLAVE (as RESET SLAVE or CHANGE + MASTER, the callers of purge_relay_logs, will delete bogus *.info files + or replace them with correct files), however if the user does SHOW SLAVE + STATUS before START SLAVE, he will see old, confusing rli->master_log_*. + In other words, we reinit rli->master_log_* for SHOW SLAVE STATUS + to display fine in any case. + */ + + rli->master_log_name[0]= 0; + rli->master_log_pos= 0; + rli->pending= 0; + if (!rli->inited) - DBUG_RETURN(0); /* successfully do nothing */ + DBUG_RETURN(0); DBUG_ASSERT(rli->slave_running == 0); DBUG_ASSERT(rli->mi->slave_running == 0); rli->slave_skip_counter=0; pthread_mutex_lock(&rli->data_lock); - rli->pending=0; - rli->master_log_name[0]=0; - rli->master_log_pos=0; // 0 means uninitialized if (rli->relay_log.reset_logs(thd)) { *errmsg = "Failed during log reset"; @@ -1193,8 +1213,9 @@ int init_relay_log_info(RELAY_LOG_INFO* rli, const char* info_fname) if (init_relay_log_pos(rli,NullS,BIN_LOG_HEADER_SIZE,0 /* no data lock */, &msg)) goto err; - rli->master_log_pos = 0; // uninitialized - rli->info_fd = info_fd; + rli->master_log_name[0]= 0; + rli->master_log_pos= 0; + rli->info_fd= info_fd; } else // file exists { diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 6a14a7c5d16..5e90bbf1b0f 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -734,12 +734,18 @@ int reset_slave(THD *thd, MASTER_INFO* mi) error=1; goto err; } + //delete relay logs, clear relay log coordinates if ((error= purge_relay_logs(&mi->rli, thd, 1 /* just reset */, &errmsg))) goto err; + //Clear master's log coordinates (only for good display of SHOW SLAVE STATUS) + mi->master_log_name[0]= 0; + mi->master_log_pos= BIN_LOG_HEADER_SIZE; + //close master_info_file, relay_log_info_file, set mi->inited=rli->inited=0 end_master_info(mi); + //and delete these two files fn_format(fname, master_info_file, mysql_data_home, "", 4+32); if (my_stat(fname, &stat_area, MYF(0)) && my_delete(fname, MYF(MY_WME))) { From 9ca8f13734d103a44f1653ef7bf1a3ae2747e750 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 16:29:16 +0200 Subject: [PATCH 029/267] srv0start.c: Print a more precise error message if log files or data files are of a size different from what is specified in my.cnf innobase/srv/srv0start.c: Print a more precise error message if log files or data files are of a size different from what is specified in my.cnf --- innobase/srv/srv0start.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/innobase/srv/srv0start.c b/innobase/srv/srv0start.c index 65284d51b04..20e7514a4ea 100644 --- a/innobase/srv/srv0start.c +++ b/innobase/srv/srv0start.c @@ -577,8 +577,11 @@ open_or_create_log_file( || size_high != srv_calc_high32(srv_log_file_size)) { fprintf(stderr, - "InnoDB: Error: log file %s is of different size\n" - "InnoDB: than specified in the .cnf file!\n", name); +"InnoDB: Error: log file %s is of different size %lu %lu bytes\n" +"InnoDB: than specified in the .cnf file %lu %lu bytes!\n", + name, size_high, size, + srv_calc_high32(srv_log_file_size), + srv_calc_low32(srv_log_file_size)); return(DB_ERROR); } @@ -770,8 +773,13 @@ open_or_create_data_files( rounded_size_pages)) { fprintf(stderr, - "InnoDB: Error: data file %s is of a different size\n" - "InnoDB: than specified in the .cnf file!\n", name); +"InnoDB: Error: auto-extending data file %s is of a different size\n" +"InnoDB: %lu pages (rounded down to MB) than specified in the .cnf file:\n" +"InnoDB: initial %lu pages, max %lu (relevant if non-zero) pages!\n", + name, rounded_size_pages, + srv_data_file_sizes[i], srv_last_file_size_max); + + return(DB_ERROR); } srv_data_file_sizes[i] = @@ -782,8 +790,11 @@ open_or_create_data_files( != srv_data_file_sizes[i]) { fprintf(stderr, - "InnoDB: Error: data file %s is of a different size\n" - "InnoDB: than specified in the .cnf file!\n", name); +"InnoDB: Error: data file %s is of a different size\n" +"InnoDB: %lu pages (rounded down to MB)\n" +"InnoDB: than specified in the .cnf file %lu pages!\n", name, + rounded_size_pages, + srv_data_file_sizes[i]); return(DB_ERROR); } From 8c689249af6da0b23609415341e3a4d0ed450f95 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 16:01:05 +0100 Subject: [PATCH 030/267] - added option "--skip-dmg" to skip the building of the disk image after packaging - enclosed some variables in quotes for safeguarding - add a license file (GPL or MySQLEULA) to the package so it will be displayed during installation (needs to be tested) --- Build-tools/Do-pkg | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/Build-tools/Do-pkg b/Build-tools/Do-pkg index 67c0e612828..24360cbeefc 100755 --- a/Build-tools/Do-pkg +++ b/Build-tools/Do-pkg @@ -3,6 +3,15 @@ # Do-pkg - convert a binary distribution into a Mac OS X PKG and put it # inside a Disk Image (.dmg) # +# The script currently assumes the following environment (which should exist +# like that, if the Do-compile script was used to build the binary +# distribution) +# +# - there must be a binary distribution (*.tar.gz) in the directory +# `hostname` of the current directory +# - the extracted and compiled source tree should be located in the +# `hostname` directory, too +# # Use the "--help" option for more info! # # written by Lenz Grimmer @@ -15,6 +24,7 @@ $opt_dry_run= undef; $opt_help= undef; $opt_log= undef; $opt_mail= ""; +$opt_skip_dmg= undef; $opt_suffix= undef; $opt_verbose= undef; $opt_version= undef; @@ -24,6 +34,7 @@ GetOptions( "help|h", "log|l:s", "mail|m=s", + "skip-dmg", "suffix=s", "verbose|v", "version=s", @@ -32,7 +43,7 @@ GetOptions( # Include helper functions chomp($PWD= `pwd`); $LOGGER= "$PWD/logger.pm"; -if (-f $LOGGER) +if (-f "$LOGGER") { do "$LOGGER"; } @@ -42,7 +53,8 @@ else } $PM= "/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker"; -$TMP= "/tmp/PKGBUILD"; +$TMP= $ENV{TMPDIR}; +$TMP eq "" ? $TMP= $TMP . "/PKGBUILD": $TMP= "/tmp/PKGBUILD"; $PKGROOT= "$TMP/PMROOT"; $PKGDEST= "$TMP/PKG"; $RESOURCE_DIR= "$TMP/Resources"; @@ -56,11 +68,13 @@ $HOST=~ /^([^.-]*)/; $HOST= $1; $LOGFILE= "$PWD/Logs/$HOST-$MAJOR.$MINOR$SUFFIX.log"; $BUILDDIR= "$PWD/$HOST"; -$SUPFILEDIR= <$BUILDDIR/mysql*-$VERSION/support-files/MacOSX>; +$SRCBASEDIR= <$BUILDDIR/mysql*-$VERSION>; +$SUPFILEDIR= <$SRCBASEDIR/support-files/MacOSX>; $TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>; $INFO= <$SUPFILEDIR/Info.plist>; $DESC= <$SUPFILEDIR/Description.plist>; @RESOURCES= qw/ ReadMe.txt postinstall preinstall /; +@LICENSES= qw{ $SRCBASEDIR/COPYING $SRCBASEDIR/MySQLEULA.txt }; &print_help("") if ($opt_help || !$opt_suffix || !$opt_version); @@ -87,7 +101,7 @@ die("You must be root to run this script!") if ($ID ne "root" && !$opt_dry_run); foreach $file ($TAR, $INFO, $DESC) { - &abort("Unable to find $file!") if (!-f $file); + &abort("Unable to find $file!") unless (-f "$file"); } # Remove old temporary build directories first @@ -108,6 +122,16 @@ foreach $resfile (@RESOURCES) &run_command($command, "Error while copying $SUPFILEDIR/$resfile to $RESOURCE_DIR"); } +# Search for license file +foreach $license (@LICENSES) +{ + last if (-f "$license") +} + +&abort("Could not find a license file!") unless (-f "$license"); +$command= "cp $license $RESOURCE_DIR/License.txt"; +&run_command($command, "Error while copying $license to $RESOURCE_DIR"); + # Extract the binary tarball and create the "mysql" symlink &logger("Extracting $TAR to $PKGROOT"); &run_command("gnutar zxf $TAR -C $PKGROOT", "Unable to extract $TAR!"); @@ -124,6 +148,12 @@ $command= "$PM -build -p $PKGDEST/$NAME.pkg -f $PKGROOT -r $RESOURCE_DIR -i $INF &logger("Removing $PKGROOT"); &run_command("rm -rf $PKGROOT", "Unable to remove $PKGROOT!"); +if ($opt_skip_dmg) +{ + &logger("SUCCESS: Package $PKGDEST/$NAME.pkg created"); + exit 0; +} + # Determine the size of the Disk image to be created and add a 5% safety # margin for filesystem overhead &logger("Determining required disk image size for $PKGDEST"); @@ -198,6 +228,8 @@ Options: is enabled) Note that the \@-Sign needs to be quoted! Example: --mail=user\\\@domain.com + --skip-dmg Just build the PKG, don't put it into a + disk image afterwards --suffix= The package suffix (e.g. "-standard" or "-pro) --version= The MySQL version number (e.g. 4.0.11-gamma) -v, --verbose Verbose execution From e70b22e55c5756a8318c07ab337a1c31acf1aa86 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 19:31:01 +0200 Subject: [PATCH 031/267] ha_innodb.h, ha_innodb.cc, handler.h, handler.cc, sql_class.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/sql_class.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/handler.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/handler.h: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/ha_innodb.cc: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time sql/ha_innodb.h: Fix a hang on the adaptive hash S-latch if an application program uses mysql_use_result() and performs queries on two connections at the same time --- sql/ha_innodb.cc | 13 +++++++++++++ sql/ha_innodb.h | 1 + sql/handler.cc | 30 ++++++++++++++++++++++++++++++ sql/handler.h | 1 + sql/sql_class.cc | 16 ++++++++++++++++ 5 files changed, 61 insertions(+) diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index b5962526d9e..1c6de24ed75 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -150,6 +150,19 @@ innobase_release_stat_resources( } } +/************************************************************************ +Call this function when mysqld passes control to the client. That is to +avoid deadlocks on the adaptive hash S-latch possibly held by thd. For more +documentation, see handler.cc. */ + +void +innobase_release_temporary_latches( +/*===============================*/ + void* innobase_tid) +{ + innobase_release_stat_resources((trx_t*)innobase_tid); +} + /************************************************************************ Increments innobase_active_counter and every INNOBASE_WAKE_INTERVALth time calls srv_active_wake_master_thread. This function should be used diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h index d2639f39c5b..8031fa0aa29 100644 --- a/sql/ha_innodb.h +++ b/sql/ha_innodb.h @@ -208,3 +208,4 @@ int innodb_show_status(THD* thd); my_bool innobase_query_caching_of_table_permitted(THD* thd, char* full_name, uint full_name_len); +void innobase_release_temporary_latches(void* innobase_tid); diff --git a/sql/handler.cc b/sql/handler.cc index fb33888e91e..3fae7c3bd72 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -238,8 +238,10 @@ int ha_autocommit_or_rollback(THD *thd, int error) handler must be the same as in the binlog. arguments: + thd: the thread handle of the current connection log_file_name: latest binlog file name end_offset: the offset in the binlog file up to which we wrote + return value: 0 if success, 1 if error */ int ha_report_binlog_offset_and_commit(THD *thd, @@ -266,6 +268,34 @@ int ha_report_binlog_offset_and_commit(THD *thd, return error; } +/* + This function should be called when MySQL sends rows of a SELECT result set + or the EOF mark to the client. It releases a possible adaptive hash index + S-latch held by thd in InnoDB and also releases a possible InnoDB query + FIFO ticket to enter InnoDB. To save CPU time, InnoDB allows a thd to + keep them over several calls of the InnoDB handler interface when a join + is executed. But when we let the control to pass to the client they have + to be released because if the application program uses mysql_use_result(), + it may deadlock on the S-latch if the application on another connection + performs another SQL query. In MySQL-4.1 this is even more important because + there a connection can have several SELECT queries open at the same time. + + arguments: + thd: the thread handle of the current connection + return value: always 0 +*/ + +int ha_release_temporary_latches(THD *thd) +{ +#ifdef HAVE_INNOBASE_DB + THD_TRANS *trans; + trans = &thd->transaction.all; + if (trans->innobase_tid) + innobase_release_temporary_latches(trans->innobase_tid); +#endif + return 0; +} + int ha_commit_trans(THD *thd, THD_TRANS* trans) { int error=0; diff --git a/sql/handler.h b/sql/handler.h index b9209d087a0..8f1d00f64b5 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -371,6 +371,7 @@ void ha_resize_key_cache(void); int ha_start_stmt(THD *thd); int ha_report_binlog_offset_and_commit(THD *thd, char *log_file_name, my_off_t end_offset); +int ha_release_temporary_latches(THD *thd); int ha_commit_trans(THD *thd, THD_TRANS *trans); int ha_rollback_trans(THD *thd, THD_TRANS *trans); int ha_autocommit_or_rollback(THD *thd, int error); diff --git a/sql/sql_class.cc b/sql/sql_class.cc index e5ba58a0543..a99d17b0ec4 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -463,6 +463,14 @@ bool select_send::send_data(List &items) String *packet= &thd->packet; DBUG_ENTER("send_data"); +#ifdef HAVE_INNOBASE_DB + /* We may be passing the control from mysqld to the client: release the + InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved + by thd */ + if (thd->transaction.all.innobase_tid) + ha_release_temporary_latches(thd); +#endif + if (thd->offset_limit) { // using limit offset,count thd->offset_limit--; @@ -486,6 +494,14 @@ bool select_send::send_data(List &items) bool select_send::send_eof() { +#ifdef HAVE_INNOBASE_DB + /* We may be passing the control from mysqld to the client: release the + InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved + by thd */ + if (thd->transaction.all.innobase_tid) + ha_release_temporary_latches(thd); +#endif + /* Unlock tables before sending packet to gain some speed */ if (thd->lock) { From 374ea106f5098e4a6ee79f217bf799d181d20a25 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 20:42:49 +0200 Subject: [PATCH 032/267] Fixed a deadlock problem when using LOCK TABLE in one thread and DROP TABLE in another sql/lock.cc: Added functions to handle list of table name locks sql/mysql_priv.h: Added functions to handle list of named locks sql/sql_rename.cc: Use new general table name lock functions sql/sql_table.cc: Require table name locks when doing drop table. This fixed a deadlock problem when using LOCK TABLE in one thread and DROP TABLE in another --- sql/lock.cc | 76 +++++++++++++++++++++++++++++++++++++++++++++-- sql/mysql_priv.h | 3 ++ sql/sql_rename.cc | 32 +++++++------------- sql/sql_table.cc | 11 ++++--- 4 files changed, 94 insertions(+), 28 deletions(-) diff --git a/sql/lock.cc b/sql/lock.cc index 84d10d61366..e46e2aac7bc 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -416,10 +416,11 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list) { TABLE *table; char key[MAX_DBKEY_LENGTH]; + char *db= table_list->db ? table_list->db : (thd->db ? thd->db : (char*) ""); uint key_length; DBUG_ENTER("lock_table_name"); - key_length=(uint) (strmov(strmov(key,table_list->db)+1,table_list->real_name) + key_length=(uint) (strmov(strmov(key,db)+1,table_list->real_name) -key)+ 1; /* Only insert the table if we haven't insert it already */ @@ -447,7 +448,7 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list) my_free((gptr) table,MYF(0)); DBUG_RETURN(-1); } - if (remove_table_from_cache(thd, table_list->db, table_list->real_name)) + if (remove_table_from_cache(thd, db, table_list->real_name)) DBUG_RETURN(1); // Table is in use DBUG_RETURN(0); } @@ -490,6 +491,77 @@ bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list) DBUG_RETURN(result); } + +/* + Lock all tables in list with a name lock + + SYNOPSIS + lock_table_names() + thd Thread handle + table_list Names of tables to lock + + NOTES + One must have a lock on LOCK_open when calling this + + RETURN + 0 ok + 1 Fatal error (end of memory ?) +*/ + +bool lock_table_names(THD *thd, TABLE_LIST *table_list) +{ + bool got_all_locks=1; + TABLE_LIST *lock_table; + + for (lock_table=table_list ; lock_table ; lock_table=lock_table->next) + { + int got_lock; + if ((got_lock=lock_table_name(thd,lock_table)) < 0) + goto end; // Fatal error + if (got_lock) + got_all_locks=0; // Someone is using table + } + + /* If some table was in use, wait until we got the lock */ + if (!got_all_locks && wait_for_locked_table_names(thd, table_list)) + goto end; + return 0; + +end: + unlock_table_names(thd, table_list, lock_table); + return 1; +} + + +/* + Unlock all tables in list with a name lock + + SYNOPSIS + unlock_table_names() + thd Thread handle + table_list Names of tables to unlock + last_table Don't unlock any tables after this one. + (default 0, which will unlock all tables) + + NOTES + One must have a lock on LOCK_open when calling this + This function will send a COND_refresh signal to inform other threads + that the name locks are removed + + RETURN + 0 ok + 1 Fatal error (end of memory ?) +*/ + +void unlock_table_names(THD *thd, TABLE_LIST *table_list, + TABLE_LIST *last_table) +{ + for (TABLE_LIST *table=table_list ; table != last_table ; table=table->next) + unlock_table_name(thd,table); + pthread_cond_broadcast(&COND_refresh); +} + + static void print_lock_error(int error) { int textno; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 49f1713bbc9..237a8a79acd 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -594,6 +594,9 @@ MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); int lock_table_name(THD *thd, TABLE_LIST *table_list); void unlock_table_name(THD *thd, TABLE_LIST *table_list); bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list); +bool lock_table_names(THD *thd, TABLE_LIST *table_list); +void unlock_table_names(THD *thd, TABLE_LIST *table_list, + TABLE_LIST *last_table= 0); /* old unireg functions */ diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc index a6614f3f3f6..9eee8ccf7ac 100644 --- a/sql/sql_rename.cc +++ b/sql/sql_rename.cc @@ -31,8 +31,8 @@ static TABLE_LIST *rename_tables(THD *thd, TABLE_LIST *table_list, bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list) { - bool error=1,cerror,got_all_locks=1; - TABLE_LIST *lock_table,*ren_table=0; + bool error=1, cerror; + TABLE_LIST *ren_table= 0; DBUG_ENTER("mysql_rename_tables"); /* Avoid problems with a rename on a table that we have locked or @@ -45,23 +45,11 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list) } VOID(pthread_mutex_lock(&LOCK_open)); - for (lock_table=table_list ; lock_table ; lock_table=lock_table->next) - { - int got_lock; - if ((got_lock=lock_table_name(thd,lock_table)) < 0) - goto end; - if (got_lock) - got_all_locks=0; - } - - if (!got_all_locks && wait_for_locked_table_names(thd,table_list)) - goto end; + if (lock_table_names(thd, table_list)) + goto err; - if (!(ren_table=rename_tables(thd,table_list,0))) - error=0; - -end: - if (ren_table) + error= 0; + if ((ren_table=rename_tables(thd,table_list,0))) { /* Rename didn't succeed; rename back the tables in reverse order */ TABLE_LIST *prev=0,*table; @@ -83,7 +71,7 @@ end: table=table->next->next; // Skipp error table /* Revert to old names */ rename_tables(thd, table, 1); - /* Note that lock_table == 0 here, so the unlock loop will work */ + error= 1; } /* Lets hope this doesn't fail as the result will be messy */ @@ -103,9 +91,9 @@ end: send_ok(&thd->net); } - for (TABLE_LIST *table=table_list ; table != lock_table ; table=table->next) - unlock_table_name(thd,table); - pthread_cond_broadcast(&COND_refresh); + unlock_table_names(thd,table_list); + +err: pthread_mutex_unlock(&LOCK_open); DBUG_RETURN(error); } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 4691c2fd494..2ff7c9c1a75 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -49,7 +49,7 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists) char path[FN_REFLEN]; String wrong_tables; bool some_tables_deleted=0; - uint error; + uint error= 1; db_type table_type; TABLE_LIST *table; DBUG_ENTER("mysql_rm_table"); @@ -66,7 +66,6 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists) { my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE,MYF(0), tables->real_name); - error = 1; goto err; } while (global_read_lock && ! thd->killed) @@ -76,9 +75,12 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists) } + if (lock_table_names(thd, tables)) + goto err; + for (table=tables ; table ; table=table->next) { - char *db=table->db ? table->db : thd->db; + char *db=table->db ? table->db : (thd->db ? thd->db : (char*) ""); if (!close_temporary_table(thd, db, table->real_name)) { some_tables_deleted=1; // Log query @@ -149,9 +151,10 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists) } error = 0; + unlock_table_names(thd, tables); + err: pthread_mutex_unlock(&LOCK_open); - VOID(pthread_cond_broadcast(&COND_refresh)); // Signal to refresh pthread_mutex_lock(&thd->mysys_var->mutex); thd->mysys_var->current_mutex= 0; From a49822237db8b4b4620475abbcc79aefcf9c9a13 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 23:12:17 +0100 Subject: [PATCH 033/267] Do not give an error when the user does START SLAVE on an already running slave, just give a warning. Same thing for STOP SLAVE. This will make scripts writing easier for users. include/mysqld_error.h: New error codes (warning codes in fact) to warn that the slave was already started or stopped mysql-test/include/master-slave.inc: STOP SLAVE now prints a warning, not an error, so we should expect a warning here sql/share/czech/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/danish/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/dutch/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/english/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/estonian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/french/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/german/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/greek/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/hungarian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/italian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/japanese/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/korean/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/norwegian-ny/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/norwegian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/polish/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/portuguese/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/romanian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/russian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/serbian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/slovak/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/spanish/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/swedish/errmsg.txt: New messages to warn that the slave was already started or stopped sql/share/ukrainian/errmsg.txt: New messages to warn that the slave was already started or stopped sql/sql_repl.cc: Do not give an error when the user does START SLAVE on an already running slave, just give a warning. Same thing for STOP SLAVE. --- include/mysqld_error.h | 4 ++- mysql-test/include/master-slave.inc | 7 +++-- sql/share/czech/errmsg.txt | 2 ++ sql/share/danish/errmsg.txt | 2 ++ sql/share/dutch/errmsg.txt | 2 ++ sql/share/english/errmsg.txt | 2 ++ sql/share/estonian/errmsg.txt | 2 ++ sql/share/french/errmsg.txt | 2 ++ sql/share/german/errmsg.txt | 2 ++ sql/share/greek/errmsg.txt | 2 ++ sql/share/hungarian/errmsg.txt | 2 ++ sql/share/italian/errmsg.txt | 2 ++ sql/share/japanese/errmsg.txt | 2 ++ sql/share/korean/errmsg.txt | 2 ++ sql/share/norwegian-ny/errmsg.txt | 2 ++ sql/share/norwegian/errmsg.txt | 2 ++ sql/share/polish/errmsg.txt | 2 ++ sql/share/portuguese/errmsg.txt | 2 ++ sql/share/romanian/errmsg.txt | 2 ++ sql/share/russian/errmsg.txt | 2 ++ sql/share/serbian/errmsg.txt | 2 ++ sql/share/slovak/errmsg.txt | 2 ++ sql/share/spanish/errmsg.txt | 2 ++ sql/share/swedish/errmsg.txt | 2 ++ sql/share/ukrainian/errmsg.txt | 2 ++ sql/sql_repl.cc | 43 ++++++++++++++++++++++++----- 26 files changed, 90 insertions(+), 10 deletions(-) diff --git a/include/mysqld_error.h b/include/mysqld_error.h index ca3fe07e889..2f4158110cd 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -268,4 +268,6 @@ #define ER_NOT_SUPPORTED_AUTH_MODE 1249 #define ER_SPATIAL_CANT_HAVE_NULL 1250 #define ER_COLLATION_CHARSET_MISMATCH 1251 -#define ER_ERROR_MESSAGES 252 +#define ER_SLAVE_WAS_RUNNING 1252 +#define ER_SLAVE_WAS_NOT_RUNNING 1253 +#define ER_ERROR_MESSAGES 254 diff --git a/mysql-test/include/master-slave.inc b/mysql-test/include/master-slave.inc index 008466c426f..5ec4b4379f8 100644 --- a/mysql-test/include/master-slave.inc +++ b/mysql-test/include/master-slave.inc @@ -3,8 +3,11 @@ connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,); connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,); connect (slave1,127.0.0.1,root,,test,$SLAVE_MYPORT,); connection slave; ---error 0,1199 -!stop slave; +#we expect STOP SLAVE to produce a warning as the slave is stopped +#(the server was started with skip-slave-start) +--disable_warnings +stop slave; +--enable_warnings @r/slave-stopped.result show status like 'Slave_running'; connection master; --disable_warnings diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index dd64cd1dbf0..169595c34c5 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -262,3 +262,5 @@ v/* "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index c17f983d995..ff58079f4c8 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -256,3 +256,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index 574d029ef0b..a0a6755c693 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -264,3 +264,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index b89556bd92c..0f48416d6db 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index 2b56e648fa2..4503f011692 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -258,3 +258,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 199f85b6e8e..9474d67f2f2 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index feeb8b73d3e..ef4110a6b93 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -263,3 +263,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client", "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index 31bc7aeec27..3f54e7740bd 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 0dd1a8584f4..7519448ef33 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -255,3 +255,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 7d502c29685..71a02896c01 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 2685994c9f2..b10ddb1d1d2 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -255,3 +255,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index d2ccc9197eb..be1e85ad33c 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index c8f15851abf..84c96a0540e 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -255,3 +255,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index 3d3091d2182..b57eb19906d 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -255,3 +255,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index f8c813c30c3..7ffec4b6519 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -257,3 +257,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 1477c60c151..8db48115c49 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index b1f116ff875..337cfd0963e 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -257,3 +257,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 848d9969d58..666f8e01232 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -256,3 +256,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index 748bada66b4..d6883efc96b 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -249,3 +249,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index 6bf1440e2a6..ee7d1e9c4fb 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -261,3 +261,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 6033e19cb7c..2dfdc7573fa 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -254,3 +254,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 02a0c445c26..517232fe2a9 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -253,3 +253,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index 68a94e43d97..be8fe2afea5 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -258,3 +258,5 @@ "Client does not support authentication protocol requested by server. Consider upgrading MySQL client" "All parts of a SPATIAL KEY must be NOT NULL" "COLLATION '%s' is not valid for CHARACTER SET '%s'" +"The slave was already running" +"The slave was already stopped" diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 05a70c24bfd..90beb89bb37 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -622,7 +622,7 @@ Increase max_allowed_packet on master"; int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) { - int slave_errno = 0; + int slave_errno; if (!thd) thd = current_thd; int thread_mask; @@ -631,10 +631,17 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) if (check_access(thd, SUPER_ACL, any_db)) DBUG_RETURN(1); lock_slave_threads(mi); // this allows us to cleanly read slave_running + // Get a mask of _stopped_ threads init_thread_mask(&thread_mask,mi,1 /* inverse */); + /* + Below we will start all stopped threads. + But if the user wants to start only one thread, do as if the other thread + was running (as we don't wan't to touch the other thread), so set the + bit to 0 for the other thread + */ if (thd->lex.slave_thd_opt) thread_mask &= thd->lex.slave_thd_opt; - if (thread_mask) + if (thread_mask) //some threads are stopped, start them { if (init_master_info(mi,master_info_file,relay_log_info_file, 0)) slave_errno=ER_MASTER_INFO; @@ -648,7 +655,12 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) slave_errno = ER_BAD_SLAVE; } else - slave_errno = ER_SLAVE_MUST_STOP; + { + //no error if all threads are already started, only a warning + slave_errno= 0; + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_SLAVE_WAS_RUNNING, + ER(ER_SLAVE_WAS_RUNNING)); + } unlock_slave_threads(mi); @@ -667,7 +679,7 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report) int stop_slave(THD* thd, MASTER_INFO* mi, bool net_report ) { - int slave_errno = 0; + int slave_errno; if (!thd) thd = current_thd; @@ -676,12 +688,29 @@ int stop_slave(THD* thd, MASTER_INFO* mi, bool net_report ) thd->proc_info = "Killing slave"; int thread_mask; lock_slave_threads(mi); + // Get a mask of _running_ threads init_thread_mask(&thread_mask,mi,0 /* not inverse*/); + /* + Below we will stop all running threads. + But if the user wants to stop only one thread, do as if the other thread + was stopped (as we don't wan't to touch the other thread), so set the + bit to 0 for the other thread + */ if (thd->lex.slave_thd_opt) thread_mask &= thd->lex.slave_thd_opt; - slave_errno = (thread_mask) ? - terminate_slave_threads(mi,thread_mask, - 1 /*skip lock */) : ER_SLAVE_NOT_RUNNING; + + if (thread_mask) + { + slave_errno= terminate_slave_threads(mi,thread_mask, + 1 /*skip lock */); + } + else + { + //no error if both threads are already stopped, only a warning + slave_errno= 0; + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE, ER_SLAVE_WAS_NOT_RUNNING, + ER(ER_SLAVE_WAS_NOT_RUNNING)); + } unlock_slave_threads(mi); thd->proc_info = 0; From 5de78932d11a01adc13dbf16be327a5272e9530e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 23:00:49 -0500 Subject: [PATCH 034/267] novell40b.patch netware/mysql_fix_privilege_tables.pl: Import patch novell40b.patch --- netware/mysql_fix_privilege_tables.pl | 125 ++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 netware/mysql_fix_privilege_tables.pl diff --git a/netware/mysql_fix_privilege_tables.pl b/netware/mysql_fix_privilege_tables.pl new file mode 100644 index 00000000000..fd5bc11dde1 --- /dev/null +++ b/netware/mysql_fix_privilege_tables.pl @@ -0,0 +1,125 @@ +#----------------------------------------------------------------------------- +# Copyright (C) 2002 MySQL AB +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#----------------------------------------------------------------------------- + +#----------------------------------------------------------------------------- +# This notice applies to changes, created by or for Novell, Inc., +# to preexisting works for which notices appear elsewhere in this file. + +# Copyright (c) 2003 Novell, Inc. All Rights Reserved. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#----------------------------------------------------------------------------- + +use strict; +use Mysql; + +print "MySQL Fix Privilege Tables Script\n\n"; + +print "NOTE: This script updates your privilege tables to the lastest\n"; +print " specifications!\n\n"; + +#----------------------------------------------------------------------------- +# get the current root password +#----------------------------------------------------------------------------- + +print "In order to log into MySQL to update it, we'll need the current\n"; +print "password for the root user. If you've just installed MySQL, and\n"; +print "you haven't set the root password yet, the password will be blank,\n"; +print "so you should just press enter here.\n\n"; + +print "Enter the current password for root: "; +my $password = ; +chomp $password; +print "\n"; + +my $conn = Mysql->connect("localhost", "mysql", "root", $password) + || die "Unable to connect to MySQL."; + +print "OK, successfully used the password, moving on...\n\n"; + + +#----------------------------------------------------------------------------- +# MySQL 4.0.2 +#----------------------------------------------------------------------------- + +print "Adding new fields used by MySQL 4.0.2 to the privilege tables...\n"; +print "NOTE: You can ignore any Duplicate column errors.\n"; +$conn->query(" \ +ALTER TABLE user \ +ADD Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER alter_priv, \ +ADD Super_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Show_db_priv, \ +ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Super_priv, \ +ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv, \ +ADD Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Lock_tables_priv, \ +ADD Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Execute_priv, \ +ADD Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Repl_slave_priv; \ +") && $conn->query(" \ +UPDATE user SET show_db_priv=select_priv, super_priv=process_priv, execute_priv=process_priv, create_tmp_table_priv='Y', Lock_tables_priv='Y', Repl_slave_priv=file_priv, Repl_client_priv=file_priv where user<>''; \ +"); + +#----------------------------------------------------------------------------- +# MySQL 4.0 Limitations +#----------------------------------------------------------------------------- + +print "Adding new fields used by MySQL 4.0 security limitations...\n"; + +$conn->query(" \ +ALTER TABLE user \ +ADD max_questions int(11) NOT NULL AFTER x509_subject, \ +ADD max_updates int(11) unsigned NOT NULL AFTER max_questions, \ +ADD max_connections int(11) unsigned NOT NULL AFTER max_updates; \ +"); + +#----------------------------------------------------------------------------- +# MySQL 4.0 DB and Host privs +#----------------------------------------------------------------------------- + +print "Adding new fields used by MySQL 4.0 locking and temporary table security...\n"; + +$conn->query(" \ +ALTER TABLE db \ +ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, \ +ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL; \ +"); + +$conn->query(" \ +ALTER TABLE host \ +ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, \ +ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL; \ +"); + +#----------------------------------------------------------------------------- +# done +#----------------------------------------------------------------------------- + +print "\n\nAll done!\n\n"; + +print "Thanks for using MySQL!\n\n"; + From aeee04d278ca5aacb081df69e8bbdeaf26027f45 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Mar 2003 23:04:36 -0500 Subject: [PATCH 035/267] New build scripts for NetWare BitKeeper/deleted/.del-mwenv~35c8b56062f4b6aa: Delete: netware/mw/mwenv BitKeeper/deleted/.del-mwasmnlm~bc5746809d67feb5: Delete: netware/mw/mwasmnlm BitKeeper/deleted/.del-mwccnlm~be63afd25a14c3f: Delete: netware/mw/mwccnlm BitKeeper/deleted/.del-mwldnlm~efb26c57cba3c980: Delete: netware/mw/mwldnlm --- netware/BUILD/compile-AUTOTOOLS | 16 +++ netware/BUILD/compile-linux-tools | 52 ++++++++ netware/BUILD/compile-netware-END | 35 ++++++ netware/BUILD/compile-netware-START | 23 ++++ netware/BUILD/compile-netware-all | 8 ++ netware/BUILD/compile-netware-debug | 15 +++ netware/BUILD/compile-netware-standard | 14 +++ netware/{mw => BUILD}/mwasmnlm | 0 netware/{mw => BUILD}/mwccnlm | 0 netware/BUILD/mwenv | 29 +++++ netware/{mw => BUILD}/mwldnlm | 0 netware/BUILD/nwbootstrap | 166 +++++++++++++++++++++++++ netware/mw/mwenv | 12 -- 13 files changed, 358 insertions(+), 12 deletions(-) create mode 100644 netware/BUILD/compile-AUTOTOOLS create mode 100644 netware/BUILD/compile-linux-tools create mode 100644 netware/BUILD/compile-netware-END create mode 100644 netware/BUILD/compile-netware-START create mode 100644 netware/BUILD/compile-netware-all create mode 100644 netware/BUILD/compile-netware-debug create mode 100644 netware/BUILD/compile-netware-standard rename netware/{mw => BUILD}/mwasmnlm (100%) rename netware/{mw => BUILD}/mwccnlm (100%) create mode 100644 netware/BUILD/mwenv rename netware/{mw => BUILD}/mwldnlm (100%) create mode 100644 netware/BUILD/nwbootstrap delete mode 100644 netware/mw/mwenv diff --git a/netware/BUILD/compile-AUTOTOOLS b/netware/BUILD/compile-AUTOTOOLS new file mode 100644 index 00000000000..0688ea5aaca --- /dev/null +++ b/netware/BUILD/compile-AUTOTOOLS @@ -0,0 +1,16 @@ +#! /bin/sh + +for package in . ./innobase +do + (cd $package + rm -rf config.cache autom4te.cache + aclocal + autoheader + libtoolize --force + aclocal + automake --add-missing --force-missing + autoconf) +done + +#rm -rf ./bdb/build_unix/config.cache ./bdb/dist/autom4te.cache +#(cd ./bdb/dist && sh s_all) diff --git a/netware/BUILD/compile-linux-tools b/netware/BUILD/compile-linux-tools new file mode 100644 index 00000000000..598be96ab66 --- /dev/null +++ b/netware/BUILD/compile-linux-tools @@ -0,0 +1,52 @@ +#! /bin/sh + +#debug +#set -x + +if test ! -r ./sql/mysqld.cc +then + echo "you must start from the top source directory" + exit 1 +fi + +path=`dirname $0` + +# clean +if test -e "Makefile"; then make -k clean; fi + +# remove files +rm -f NEW-RPMS/* +rm -f */.deps/*.P +rm -f */*.linux + +# run autotools +. $path/compile-AUTOTOOLS + +# configure +./configure --without-innodb --without-docs + +# build tools only +make clean config.h +(cd dbug; make libdbug.a) +(cd strings; make libmystrings.a) +(cd mysys; make libmysys.a) +(cd heap; make libheap.a) +(cd vio; make libvio.a) +(cd regex; make libregex.a) +(cd isam; make libnisam.a) +(cd merge; make libmerge.a) +(cd myisam; make libmyisam.a) +(cd myisammrg; make libmyisammrg.a) +(cd extra; make comp_err) +(cd libmysql; make conf_to_src) +(cd libmysql_r; make conf_to_src) +(cd sql; make gen_lex_hash) +(cd strings; make conf_to_src) + +# copying required linux tools +cp extra/comp_err extra/comp_err.linux +cp libmysql/conf_to_src libmysql/conf_to_src.linux +cp libmysql_r/conf_to_src libmysql_r/conf_to_src.linux +cp sql/gen_lex_hash sql/gen_lex_hash.linux +cp strings/conf_to_src strings/conf_to_src.linux + diff --git a/netware/BUILD/compile-netware-END b/netware/BUILD/compile-netware-END new file mode 100644 index 00000000000..beb15fbeda3 --- /dev/null +++ b/netware/BUILD/compile-netware-END @@ -0,0 +1,35 @@ +#! /bin/sh + +path=`dirname $0` + +# clean +if test -e "Makefile"; then make -k clean; fi + +# remove files +rm -f NEW-RPMS/* +rm -f */.deps/*.P +rm -rf Makefile.in.bk + +# Metrowerks enviornment +. $path/mwenv + +# run auto tools +. $path/compile-AUTOTOOLS + +# configure +./configure $base_configs $extra_configs + +# make +make clean bin-dist + +# mark the build +for file in *.tar.gz +do + if (expr "$file" : "mysql-[1-9].*" > /dev/null) + then + new_file=`echo $file | sed -e "s/mysql-/mysql-$suffix-/"` + if test -e "$new_file"; then mv -f $new_file $new_file.old; fi + mv $file $new_file + fi +done + diff --git a/netware/BUILD/compile-netware-START b/netware/BUILD/compile-netware-START new file mode 100644 index 00000000000..2941d8868e4 --- /dev/null +++ b/netware/BUILD/compile-netware-START @@ -0,0 +1,23 @@ +#! /bin/sh + +#debug +#set -x + +if test ! -r ./sql/mysqld.cc +then + echo "you must start from the top source directory" + exit 1 +fi + +path=`dirname $0` + +# stop on errors +set -e + +base_configs=" \ + --host=i686-pc-netware \ + --enable-local-infile \ + --with-extra-charsets=all \ + --prefix=N:/mysql \ + " + diff --git a/netware/BUILD/compile-netware-all b/netware/BUILD/compile-netware-all new file mode 100644 index 00000000000..f8dea0f7583 --- /dev/null +++ b/netware/BUILD/compile-netware-all @@ -0,0 +1,8 @@ +#! /bin/sh + +path=`dirname $0` + +$path/compile-netware-standard +$path/compile-netware-debug +#$path/compile-netware-max +#$path/compile-netware-max-debug diff --git a/netware/BUILD/compile-netware-debug b/netware/BUILD/compile-netware-debug new file mode 100644 index 00000000000..2cd292c82fd --- /dev/null +++ b/netware/BUILD/compile-netware-debug @@ -0,0 +1,15 @@ +#! /bin/sh + +path=`dirname $0` +. $path/compile-netware-START + +suffix="debug" + +extra_configs=" \ + --with-innodb \ + --with-debug=full \ + " + +. $path/compile-netware-END + + diff --git a/netware/BUILD/compile-netware-standard b/netware/BUILD/compile-netware-standard new file mode 100644 index 00000000000..c09337b5fe0 --- /dev/null +++ b/netware/BUILD/compile-netware-standard @@ -0,0 +1,14 @@ +#! /bin/sh + +path=`dirname $0` +. $path/compile-netware-START + +suffix="standard" + +extra_configs=" \ + --with-innodb + " + +. $path/compile-netware-END + + diff --git a/netware/mw/mwasmnlm b/netware/BUILD/mwasmnlm similarity index 100% rename from netware/mw/mwasmnlm rename to netware/BUILD/mwasmnlm diff --git a/netware/mw/mwccnlm b/netware/BUILD/mwccnlm similarity index 100% rename from netware/mw/mwccnlm rename to netware/BUILD/mwccnlm diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv new file mode 100644 index 00000000000..d2b64409c88 --- /dev/null +++ b/netware/BUILD/mwenv @@ -0,0 +1,29 @@ +#! /bin/sh + +# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be changed before compiling +# This values are normally changed by the nwbootstrap script + +# the default for WINE_BUILD_DIR is "F:/mydev" +export MYDEV="WINE_BUILD_DIR" + +export MWCNWx86Includes="$MYDEV/libc/include" +export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib" +export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib" + +export WINEPATH="$MYDEV/mw/bin" + +# the default for BUILD_DIR is "$HOME/mydev" +export PATH="$PATH:BUILD_DIR/mysql-VERSION/netware/BUILD" + +export AR='mwldnlm' +export AR_FLAGS='-type library -o' +export AS='mwasmnlm' +export CC='mwccnlm -gccincludes' +export CFLAGS='-dialect c -proc 686 -bool on -relax_pointers -DUSE_OLD_FUNCTIONS' +export CXX='mwccnlm -gccincludes' +export CXXFLAGS='-dialect c++ -proc 686 -bool on -relax_pointers' +export LD='mwldnlm' +export LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -flags pseudopreemption' +export RANLIB=: +export STRIP=: + diff --git a/netware/mw/mwldnlm b/netware/BUILD/mwldnlm similarity index 100% rename from netware/mw/mwldnlm rename to netware/BUILD/mwldnlm diff --git a/netware/BUILD/nwbootstrap b/netware/BUILD/nwbootstrap new file mode 100644 index 00000000000..a8ed956811e --- /dev/null +++ b/netware/BUILD/nwbootstrap @@ -0,0 +1,166 @@ +#! /bin/sh + +# debug +#set -x + +path=`dirname $0` + +# stop on errors +set -e + +# repository direcotry +repo_dir=`pwd` + +# build direcotry +build_dir="$HOME/mydev" +wine_build_dir="F:/mydev" + +# doc directory +doc_dir="$repo_dir/../mysqldoc" + +# init +target_dir="" +temp_dir="" +revision="" +rev="" +build="" +mwenv="" + +# show usage +show_usage() +{ + cat << EOF + +usage: nwbootstrap [options] + +Exports a revision of the BitKeeper tree (nwbootstrap must be run inside a +directory of the BitKeeper tree to be used). Creates the ChangeLog file. +Adds the latest manual.texi from the mysqldoc BitKeeper tree. Builds the +Linux tools required for cross-platform builds. Optionally, builds the +binary distributions for NetWare. + +options: + +--build= Build the binary distributions for NetWare, + where is "standard", "debug", or "all" + (default is to not build a binary distribution) + +--build-dir= Export the BitKeeper tree to the directroy + (default is "$build_dir") + +--doc-dir= Use the mysqldoc BitKeeper tree located in the + directory + (default is parallel to current BitKeeper tree) + +--help Show this help information + +--revision= Export the BitKeeper tree as of revision + (default is the latest revision) + +--wine-build-dir= Use the WINE directory , which should + correspond to the --build-dir directory + (default is "$wine_build_dir") + +examples: + + nwbootstrap + + nwbootstrap --revision=1.1594 --build=all + + nwbootstrap --build-dir=/home/jdoe/dev --wine-build-dir=F:/dev + + +EOF + exit 0; +} + +# parse arguments +for arg do + case "$arg" in + --build-dir=*) build_dir=`echo "$arg" | sed -e "s;--build-dir=;;"` ;; + --wine-build-dir=*) wine_build_dir=`echo "$arg" | sed -e "s;--wine-build-dir=;;"` ;; + --revision=*) revision=`echo "$arg" | sed -e "s;--revision=;;"` ;; + --build=*) build=`echo "$arg" | sed -e "s;--build=;;"` ;; + --doc-dir=*) doc_dir=`echo "$arg" | sed -e "s;--doc-dir=;;"` ;; + *) show_usage ;; + esac +done + +echo "starting build..." + +# check for bk and repo_dir +bk help > /dev/null +repo_dir=`bk root $repo_dir` +cd $repo_dir +doc_dir="$repo_dir/../mysqldoc" + +# build temporary directory +temp_dir="$build_dir/mysql-$$.tmp" + +# export the bk tree +command="bk export"; +if test $revision; then command="$command -r$revision"; fi +command="$command $temp_dir" +echo "exporting $repo_dir..." +$command + +# determine version +version=`grep -e "AM_INIT_AUTOMAKE(mysql, .*)" < $temp_dir/configure.in | sed -e "s/AM_INIT_AUTOMAKE(mysql, \(.*\))/\1/"` +echo "version: $version" + +# build target directory +target_dir="$build_dir/mysql-$version" + +# delete any old target +if test -d $target_dir.old; then rm -rf $target_dir.old; fi + +# rename old target +if test -d $target_dir; then mv -f $target_dir $target_dir.old; fi + +# rename directory to use version +mv $temp_dir $target_dir + +# create ChangeLog +if test $revision +then + rev=`bk changes -r..$revision -t -d':REV:' -n | head -2 | tail -1` +else + rev=`bk changes -t -d':REV:' -n | head -1` +fi + +echo "creating ChangeLog..." +bk changes -v -r$rev > $target_dir/ChangeLog + +# add the latest manual +if test -d $doc_dir +then + echo "adding the latest manual..." + install -m 644 $doc_dir/Docs/{manual,reservedwords}.texi $target_dir/Docs/ +fi + +# make files writeable +cd $target_dir +chmod -R u+rw,g+rw . + +# edit the mvenv file +mwenv="./netware/BUILD/mwenv" +mv -f $mwenv $mwenv.org +sed -e "s;WINE_BUILD_DIR;$wine_build_dir;g" \ + -e "s;BUILD_DIR;$build_dir;g" \ + -e "s;VERSION;$version;g" $mwenv.org > $mwenv +chmod +rwx $mwenv + +# build linux tools +echo "compiling linux tools..." +./netware/BUILD/compile-linux-tools + +# compile +if test $build +then + echo "compiling $build..." + ./netware/BUILD/compile-netware-$build +fi + +echo "done" + + diff --git a/netware/mw/mwenv b/netware/mw/mwenv deleted file mode 100644 index b82dbdc0c7f..00000000000 --- a/netware/mw/mwenv +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh - -export MYDEV="F:/mysql" - -export MWCNWx86Includes="$MYDEV/libc/include" -export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib" -export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib" - -export WINEPATH="$MYDEV/mw/bin" - -export PATH="$PATH:$HOME/mysql/mysql-4.0/netware/mw" - From 9d02a87cf34e76faf2692a7f3a8bcd0cc5d1bd33 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 11:04:19 +0400 Subject: [PATCH 036/267] Every character set now has binary collation --- mysys/charset.c | 45 ++++++++++++++++------- sql/share/charsets/Index.xml | 65 ++++++++++++++++++++++++++------- sql/share/charsets/MacCE.xml | 22 +---------- sql/share/charsets/MacRoman.xml | 21 +---------- sql/share/charsets/armscii8.xml | 2 + sql/share/charsets/ascii.xml | 2 + sql/share/charsets/cp1250.xml | 2 + sql/share/charsets/cp1251.xml | 21 +---------- sql/share/charsets/cp1256.xml | 1 + sql/share/charsets/cp1257.xml | 21 +---------- sql/share/charsets/cp866.xml | 2 + sql/share/charsets/dec8.xml | 1 + sql/share/charsets/greek.xml | 2 + sql/share/charsets/hebrew.xml | 2 + sql/share/charsets/hp8.xml | 2 + sql/share/charsets/keybcs2.xml | 2 + sql/share/charsets/koi8r.xml | 2 + sql/share/charsets/koi8u.xml | 2 + sql/share/charsets/latin1.xml | 21 +---------- sql/share/charsets/latin2.xml | 1 + sql/share/charsets/latin5.xml | 1 + sql/share/charsets/latin7.xml | 1 + sql/share/charsets/pclatin1.xml | 2 + sql/share/charsets/swe7.xml | 2 + strings/ctype.c | 2 + 25 files changed, 119 insertions(+), 128 deletions(-) diff --git a/mysys/charset.c b/mysys/charset.c index 1b53eac77df..c5d86f9c856 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -57,22 +57,40 @@ static void set_max_sort_char(CHARSET_INFO *cs) static void simple_cs_init_functions(CHARSET_INFO *cs) { - cs->strnxfrm = my_strnxfrm_simple; - cs->strnncoll = my_strnncoll_simple; - cs->strnncollsp = my_strnncollsp_simple; - cs->like_range = my_like_range_simple; - cs->wildcmp = my_wildcmp_8bit; - cs->mb_wc = my_mb_wc_8bit; - cs->wc_mb = my_wc_mb_8bit; + if (cs->state & MY_CS_BINSORT) + { + CHARSET_INFO *b= &my_charset_bin; + cs->strnxfrm = b->strnxfrm; + cs->like_range = b->like_range; + cs->wildcmp = b->wildcmp; + cs->strnncoll = b->strnncoll; + cs->strnncollsp = b->strnncollsp; + cs->tosort = b->tosort; + cs->strcasecmp = b->strcasecmp; + cs->strncasecmp = b->strncasecmp; + cs->hash_caseup = b->hash_caseup; + cs->hash_sort = b->hash_sort; + } + else + { + cs->strnxfrm = my_strnxfrm_simple; + cs->like_range = my_like_range_simple; + cs->wildcmp = my_wildcmp_8bit; + cs->strnncoll = my_strnncoll_simple; + cs->strnncollsp = my_strnncollsp_simple; + cs->tosort = my_tosort_8bit; + cs->strcasecmp = my_strcasecmp_8bit; + cs->strncasecmp = my_strncasecmp_8bit; + cs->hash_caseup = my_hash_caseup_simple; + cs->hash_sort = my_hash_sort_simple; + } + cs->caseup_str = my_caseup_str_8bit; cs->casedn_str = my_casedn_str_8bit; cs->caseup = my_caseup_8bit; cs->casedn = my_casedn_8bit; - cs->tosort = my_tosort_8bit; - cs->strcasecmp = my_strcasecmp_8bit; - cs->strncasecmp = my_strncasecmp_8bit; - cs->hash_caseup = my_hash_caseup_simple; - cs->hash_sort = my_hash_sort_simple; + cs->mb_wc = my_mb_wc_8bit; + cs->wc_mb = my_wc_mb_8bit; cs->snprintf = my_snprintf_8bit; cs->long10_to_str= my_long10_to_str_8bit; cs->longlong10_to_str= my_longlong10_to_str_8bit; @@ -223,7 +241,8 @@ static my_bool simple_cs_is_full(CHARSET_INFO *cs) { return ((cs->csname && cs->tab_to_uni && cs->ctype && cs->to_upper && cs->to_lower) && - (cs->number && cs->name && cs->sort_order)); + (cs->number && cs->name && + (cs->sort_order || (cs->state & MY_CS_BINSORT) ))); } diff --git a/sql/share/charsets/Index.xml b/sql/share/charsets/Index.xml index e6cea7bc615..4d54b8b53ce 100644 --- a/sql/share/charsets/Index.xml +++ b/sql/share/charsets/Index.xml @@ -1,6 +1,6 @@ - + This file lists all of the available character sets. @@ -16,7 +16,10 @@ To make maintaining easier please: big-five cn-big5 csbig5 - + + primary + compiled" + @@ -39,10 +42,12 @@ To make maintaining easier please: + Western + Dutch English @@ -71,6 +76,7 @@ To make maintaining easier please: Pogtuguese Spanish + @@ -86,7 +92,7 @@ To make maintaining easier please: - + Dutch English @@ -112,6 +118,7 @@ To make maintaining easier please: Western hproman8 + Dutch English @@ -129,12 +136,14 @@ To make maintaining easier please: koi8-r cskoi8r + Western iso-646-se + @@ -145,6 +154,7 @@ To make maintaining easier please: iso-ir-6 iso646-us + @@ -175,8 +185,8 @@ To make maintaining easier please: Mongolian Ukrainian - - + + Belarusian Bulgarian @@ -203,19 +213,26 @@ To make maintaining easier please: iso-8859-8 iso-ir-138 + Thai tis-620 - + + primary + compiled + Korean euc_kr euc-kr - + + primary + compiled" + @@ -226,19 +243,24 @@ To make maintaining easier please: + Cyrillic koi8-u + Simplified Chinese chinese iso-ir-58 - + + primary + compiled" + @@ -249,6 +271,7 @@ To make maintaining easier please: iso-8859-7 iso-ir-126 + @@ -265,20 +288,24 @@ To make maintaining easier please: Sorbian + East Asian cp936 - + + primary + compiled + Baltic WinBaltRim windows-1257 - - + + Latvian Lithuanian @@ -302,12 +329,14 @@ To make maintaining easier please: latin5 turkish + South Asian armscii-8 + @@ -328,11 +357,13 @@ To make maintaining easier please: ibm866 DOSCyrillicRussian + Central European + @@ -347,7 +378,7 @@ To make maintaining easier please: Slovenian Sorbian - + Hungarian Polish @@ -392,7 +423,7 @@ To make maintaining easier please: Pogtuguese Spanish - + Dutch English @@ -439,12 +470,14 @@ To make maintaining easier please: Slovenian Sorbian + Arabic ms-arab windows-1256 + Arabic Persian @@ -454,7 +487,11 @@ To make maintaining easier please: - + + primary + compiled + + diff --git a/sql/share/charsets/MacCE.xml b/sql/share/charsets/MacCE.xml index fe64fd18abc..9a6a392b426 100644 --- a/sql/share/charsets/MacCE.xml +++ b/sql/share/charsets/MacCE.xml @@ -115,27 +115,7 @@ - - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - - - + diff --git a/sql/share/charsets/MacRoman.xml b/sql/share/charsets/MacRoman.xml index b17860f56b2..9dc4d73b3ef 100644 --- a/sql/share/charsets/MacRoman.xml +++ b/sql/share/charsets/MacRoman.xml @@ -111,26 +111,7 @@ - - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - - + diff --git a/sql/share/charsets/armscii8.xml b/sql/share/charsets/armscii8.xml index 99ab5eb336d..5012a3d84a9 100644 --- a/sql/share/charsets/armscii8.xml +++ b/sql/share/charsets/armscii8.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/ascii.xml b/sql/share/charsets/ascii.xml index 67ab57de88f..c94901b1ae7 100644 --- a/sql/share/charsets/ascii.xml +++ b/sql/share/charsets/ascii.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/cp1250.xml b/sql/share/charsets/cp1250.xml index a863aceffc9..b858fbff2a0 100644 --- a/sql/share/charsets/cp1250.xml +++ b/sql/share/charsets/cp1250.xml @@ -116,6 +116,8 @@ + + diff --git a/sql/share/charsets/cp1251.xml b/sql/share/charsets/cp1251.xml index 48c525eb797..79b71df9baf 100644 --- a/sql/share/charsets/cp1251.xml +++ b/sql/share/charsets/cp1251.xml @@ -116,26 +116,7 @@ - - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - - + diff --git a/sql/share/charsets/cp1256.xml b/sql/share/charsets/cp1256.xml index 2a6f6032358..a747c7c3a93 100644 --- a/sql/share/charsets/cp1256.xml +++ b/sql/share/charsets/cp1256.xml @@ -116,6 +116,7 @@ + diff --git a/sql/share/charsets/cp1257.xml b/sql/share/charsets/cp1257.xml index 5ac2b746ff9..7f1f8293aae 100644 --- a/sql/share/charsets/cp1257.xml +++ b/sql/share/charsets/cp1257.xml @@ -115,26 +115,7 @@ - - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - - + diff --git a/sql/share/charsets/cp866.xml b/sql/share/charsets/cp866.xml index 2b050f3c993..43bab971bb3 100644 --- a/sql/share/charsets/cp866.xml +++ b/sql/share/charsets/cp866.xml @@ -116,6 +116,8 @@ + + diff --git a/sql/share/charsets/dec8.xml b/sql/share/charsets/dec8.xml index 4e76bbffd14..7b40041ec53 100644 --- a/sql/share/charsets/dec8.xml +++ b/sql/share/charsets/dec8.xml @@ -114,6 +114,7 @@ + diff --git a/sql/share/charsets/greek.xml b/sql/share/charsets/greek.xml index eeb22236675..1ad3d1bc9d2 100644 --- a/sql/share/charsets/greek.xml +++ b/sql/share/charsets/greek.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/hebrew.xml b/sql/share/charsets/hebrew.xml index 3bf8bec370e..fbd4ea0c1d2 100644 --- a/sql/share/charsets/hebrew.xml +++ b/sql/share/charsets/hebrew.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/hp8.xml b/sql/share/charsets/hp8.xml index 036f1cd067c..619297fa988 100644 --- a/sql/share/charsets/hp8.xml +++ b/sql/share/charsets/hp8.xml @@ -115,6 +115,8 @@ + + diff --git a/sql/share/charsets/keybcs2.xml b/sql/share/charsets/keybcs2.xml index bdbb364822f..e509207c1c5 100644 --- a/sql/share/charsets/keybcs2.xml +++ b/sql/share/charsets/keybcs2.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/koi8r.xml b/sql/share/charsets/koi8r.xml index dae780f14fc..c5aeea23997 100644 --- a/sql/share/charsets/koi8r.xml +++ b/sql/share/charsets/koi8r.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/koi8u.xml b/sql/share/charsets/koi8u.xml index e6cba068997..fd963ff0da5 100644 --- a/sql/share/charsets/koi8u.xml +++ b/sql/share/charsets/koi8u.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/latin1.xml b/sql/share/charsets/latin1.xml index c14e369454e..87abbe06f77 100644 --- a/sql/share/charsets/latin1.xml +++ b/sql/share/charsets/latin1.xml @@ -162,26 +162,7 @@ - - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F - 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F - 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F - 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F - 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F - 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F - 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F - 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F - 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F - A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF - B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF - C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF - D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF - E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF - F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF - - + diff --git a/sql/share/charsets/latin2.xml b/sql/share/charsets/latin2.xml index 377ab19e8ad..9be39dee47d 100644 --- a/sql/share/charsets/latin2.xml +++ b/sql/share/charsets/latin2.xml @@ -161,6 +161,7 @@ + diff --git a/sql/share/charsets/latin5.xml b/sql/share/charsets/latin5.xml index a072ffc5072..c73cc645d42 100644 --- a/sql/share/charsets/latin5.xml +++ b/sql/share/charsets/latin5.xml @@ -119,6 +119,7 @@ + diff --git a/sql/share/charsets/latin7.xml b/sql/share/charsets/latin7.xml index eae4d501f44..89c14a3acd8 100644 --- a/sql/share/charsets/latin7.xml +++ b/sql/share/charsets/latin7.xml @@ -162,6 +162,7 @@ + diff --git a/sql/share/charsets/pclatin1.xml b/sql/share/charsets/pclatin1.xml index 742dcaec459..da4b6d2ac92 100644 --- a/sql/share/charsets/pclatin1.xml +++ b/sql/share/charsets/pclatin1.xml @@ -114,6 +114,8 @@ + + diff --git a/sql/share/charsets/swe7.xml b/sql/share/charsets/swe7.xml index ffa1d90608d..2768768cd9b 100644 --- a/sql/share/charsets/swe7.xml +++ b/sql/share/charsets/swe7.xml @@ -114,6 +114,8 @@ + + diff --git a/strings/ctype.c b/strings/ctype.c index 4f6d34ddd7a..04e4e75890b 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -201,6 +201,8 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len) case _CS_FLAG: if (!strncmp("primary",attr,len)) i->cs.state|= MY_CS_PRIMARY; + else if (!strncmp("binary",attr,len)) + i->cs.state|= MY_CS_BINSORT; break; case _CS_UPPERMAP: fill_uchar(i->to_upper,MY_CS_TO_UPPER_TABLE_SIZE,attr,len); From 7e2aca564e765934ff352f3207a77600ab721771 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 12:33:52 +0400 Subject: [PATCH 037/267] Fix for SHOW, it didn't display CHARACTER SET and COLLATE clause for binary collations --- mysql-test/r/ctype_collate.result | 27 +++++++++++++++++++++++++++ mysql-test/t/ctype_collate.test | 15 +++++++++++++++ sql/field.cc | 19 ++++++++++++------- sql/field.h | 11 +---------- sql/sql_show.cc | 2 +- 5 files changed, 56 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index cf93de4b7c6..4217bd5de23 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -483,4 +483,31 @@ Z z SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `latin1_f` char(32) NOT NULL default '' +) TYPE=MyISAM CHARSET=latin1 +SHOW FIELDS FROM t1; +Field Type Collation Null Key Default Extra +latin1_f char(32) latin1 +ALTER TABLE t1 CHANGE latin1_f +latin1_f CHAR(32) CHARACTER SET latin1 COLLATE latin1_bin; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `latin1_f` char(32) character set latin1 collate latin1_bin default NULL +) TYPE=MyISAM CHARSET=latin1 +SHOW FIELDS FROM t1; +Field Type Collation Null Key Default Extra +latin1_f char(32) character set latin1 latin1_bin YES NULL +ALTER TABLE t1 CHARACTER SET latin1 COLLATE latin1_bin; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `latin1_f` char(32) collate latin1_bin default NULL +) TYPE=MyISAM CHARSET=latin1 COLLATE=latin1_bin +SHOW FIELDS FROM t1; +Field Type Collation Null Key Default Extra +latin1_f char(32) latin1_bin YES NULL DROP TABLE t1; diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 741db4d55e7..26a18c5f279 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -112,4 +112,19 @@ SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; --FROM t1 --HAVING (_latin1'Mu"ller' COLLATE latin1_de) = k + +# +# Check that SHOW displays COLLATE clause +# + +SHOW CREATE TABLE t1; +SHOW FIELDS FROM t1; +ALTER TABLE t1 CHANGE latin1_f +latin1_f CHAR(32) CHARACTER SET latin1 COLLATE latin1_bin; +SHOW CREATE TABLE t1; +SHOW FIELDS FROM t1; +ALTER TABLE t1 CHARACTER SET latin1 COLLATE latin1_bin; +SHOW CREATE TABLE t1; +SHOW FIELDS FROM t1; + DROP TABLE t1; diff --git a/sql/field.cc b/sql/field.cc index b96b987ec90..5a8cbdfbb1c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -248,7 +248,7 @@ void Field_str::make_field(Send_field *field) void Field_str::add_binary_or_charset(String &res) const { - if (binary()) + if (charset() == &my_charset_bin) res.append(" binary"); else if (field_charset != table->table_charset && !(current_thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS) && @@ -3875,13 +3875,18 @@ void Field_datetime::sql_type(String &res) const /* Copy a string and fill with space */ +static bool use_conversion(CHARSET_INFO *cs1, CHARSET_INFO *cs2) +{ + return (cs1 != &my_charset_bin) && (cs2 != &my_charset_bin) && (cs1!=cs2); +} + int Field_string::store(const char *from,uint length,CHARSET_INFO *cs) { int error= 0; char buff[80]; String tmpstr(buff,sizeof(buff), &my_charset_bin); /* Convert character set if nesessary */ - if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary())) + if (use_conversion(cs, field_charset)) { tmpstr.copy(from, length, cs, field_charset); from= tmpstr.ptr(); @@ -4063,7 +4068,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs) char buff[80]; String tmpstr(buff,sizeof(buff), &my_charset_bin); /* Convert character set if nesessary */ - if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary())) + if (use_conversion(cs, field_charset)) { tmpstr.copy(from, length, cs, field_charset); from= tmpstr.ptr(); @@ -4380,7 +4385,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs) char buff[80]; String tmpstr(buff,sizeof(buff), &my_charset_bin); /* Convert character set if nesessary */ - if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary())) + if (use_conversion(cs, field_charset)) { tmpstr.copy(from, length, cs, field_charset); from= tmpstr.ptr(); @@ -4627,7 +4632,7 @@ void Field_blob::sql_type(String &res) const case 4: str="long"; length=4; break; } res.set_latin1(str,length); - if (binary()) + if (charset() == &my_charset_bin) res.append("blob"); else { @@ -4857,7 +4862,7 @@ int Field_enum::store(const char *from,uint length,CHARSET_INFO *cs) char buff[80]; String tmpstr(buff,sizeof(buff), &my_charset_bin); /* Convert character set if nesessary */ - if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary())) + if (use_conversion(cs, field_charset)) { tmpstr.copy(from, length, cs, field_charset); from= tmpstr.ptr(); @@ -5072,7 +5077,7 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs) char buff[80]; String tmpstr(buff,sizeof(buff), &my_charset_bin); /* Convert character set if nesessary */ - if ((cs != field_charset) && (cs!=&my_charset_bin) && (!binary())) + if (use_conversion(cs, field_charset)) { tmpstr.copy(from, length, cs, field_charset); from= tmpstr.ptr(); diff --git a/sql/field.h b/sql/field.h index 04225158270..37d194ac372 100644 --- a/sql/field.h +++ b/sql/field.h @@ -160,8 +160,6 @@ public: { get_image(buff,length,cs); } virtual void set_key_image(char *buff,uint length, CHARSET_INFO *cs) { set_image(buff,length,cs); } - inline int cmp_image(char *buff,uint length) - { return memcmp(ptr,buff,length); } inline longlong val_int_offset(uint row_offset) { ptr+=row_offset; @@ -265,7 +263,7 @@ public: unireg_check_arg, field_name_arg, table_arg) { field_charset=charset; - if (binary()) + if (charset->state & MY_CS_BINSORT) flags|=BINARY_FLAG; } Item_result result_type () const { return STRING_RESULT; } @@ -277,13 +275,6 @@ public: void set_charset(CHARSET_INFO *charset) { field_charset=charset; } bool binary() const { return field_charset->state & MY_CS_BINSORT ? 1 : 0; } - inline int cmp_image(char *buff,uint length) - { - if (binary()) - return memcmp(ptr,buff,length); - else - return my_strncasecmp(field_charset,ptr,buff,length); - } friend class create_field; }; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index fd7127bcd00..9c2280768da 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1074,7 +1074,7 @@ store_create_info(THD *thd, TABLE *table, String *packet) For string types dump collation name only if collation is not primary for the given charset */ - if (!field->binary() && !(field->charset()->state & MY_CS_PRIMARY) && + if (!(field->charset()->state & MY_CS_PRIMARY) && !limited_mysql_mode && !foreign_db_mode) { packet->append(" collate ", 9); From 3446199d8e421da02a5546f439ee76b368594700 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 12:22:35 +0200 Subject: [PATCH 038/267] Fixed bug in LOCK TABLE + DROP TABLE when other thread was waiting for a table that was locked bug not droped client/mysqltest.c: Fixed bug that comments did a ping include/thr_lock.h: Added function to abort a lock for a specific thread mysql-test/mysql-test-run.sh: Fixed where mysqltest traces are put mysql-test/r/lock_multi.result: Test for LOCK TABLE + DROP TABLE bug mysql-test/t/lock_multi.test: Test for LOCK TABLE + DROP TABLE bug mysys/thr_lock.c: Added function to abort a lock for a specific thread sql/handler.cc: Indentation cleanup sql/lock.cc: Added function to abort a lock for a specific thread sql/mysql_priv.h: Added function to abort a lock for a specific thread sql/mysqld.cc: Use automatic recover even with --safe --- client/mysqltest.c | 1 + include/thr_lock.h | 1 + mysql-test/mysql-test-run.sh | 3 ++- mysql-test/r/lock_multi.result | 9 ++++++- mysql-test/t/lock_multi.test | 24 +++++++++++++++-- mysys/thr_lock.c | 48 ++++++++++++++++++++++++++++++++++ sql/handler.cc | 3 ++- sql/lock.cc | 19 ++++++++++++++ sql/mysql_priv.h | 1 + sql/mysqld.cc | 4 +-- sql/sql_base.cc | 46 ++++++++++++++++++++++++++------ 11 files changed, 144 insertions(+), 15 deletions(-) diff --git a/client/mysqltest.c b/client/mysqltest.c index cad13fe1349..9d5d9f9cd35 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -2484,6 +2484,7 @@ int main(int argc, char** argv) } case Q_COMMENT: /* Ignore row */ case Q_COMMENT_WITH_COMMAND: + break; case Q_PING: (void) mysql_ping(&cur_con->mysql); break; diff --git a/include/thr_lock.h b/include/thr_lock.h index 6650d25e145..f1bda0ce6b4 100644 --- a/include/thr_lock.h +++ b/include/thr_lock.h @@ -107,6 +107,7 @@ void thr_unlock(THR_LOCK_DATA *data); int thr_multi_lock(THR_LOCK_DATA **data,uint count); void thr_multi_unlock(THR_LOCK_DATA **data,uint count); void thr_abort_locks(THR_LOCK *lock); +void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread); void thr_print_locks(void); /* For debugging */ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data); my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data); diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 48bb94ea0e4..b12ed2b3739 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -349,7 +349,8 @@ while test $# -gt 0; do --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/master.trace" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \ --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/slave.trace" - EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug" + EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT \ + --debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqltest.trace" ;; --fast) FAST_START=1 diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result index 20bc9b9572f..b808fca0acf 100644 --- a/mysql-test/r/lock_multi.result +++ b/mysql-test/r/lock_multi.result @@ -1,4 +1,4 @@ -drop table if exists t1; +drop table if exists t1,t2; create table t1(n int); insert into t1 values (1); lock tables t1 write; @@ -17,3 +17,10 @@ unlock tables; n 1 drop table t1; +create table t1 (a int); +create table t2 (a int); +lock table t1 write, t2 write; + insert t1 select * from t2; +drop table t2; +Table 'test.t2' doesn't exist +drop table t1; diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test index 792ae956e2a..0295fca29e7 100644 --- a/mysql-test/t/lock_multi.test +++ b/mysql-test/t/lock_multi.test @@ -6,8 +6,9 @@ # -- source include/not_embedded.inc -drop table if exists t1; -#test to see if select will get the lock ahead of low priority update +drop table if exists t1,t2; + +# test to see if select will get the lock ahead of low priority update connect (locker,localhost,root,,); connect (reader,localhost,root,,); @@ -48,3 +49,22 @@ reap; connection reader; reap; drop table t1; + +# +# Test problem when using locks on many tables and droping a table that +# is to-be-locked by another thread +# + +connection locker; +create table t1 (a int); +create table t2 (a int); +lock table t1 write, t2 write; +connection reader; +send insert t1 select * from t2; +connection locker; +drop table t2; +connection reader; +--error 1146 +reap; +connection locker; +drop table t1; diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c index 0288c7c1cbe..61616a4cf2b 100644 --- a/mysys/thr_lock.c +++ b/mysys/thr_lock.c @@ -945,6 +945,54 @@ void thr_abort_locks(THR_LOCK *lock) } +/* + Abort all locks for specific table/thread combination + + This is used to abort all locks for a specific thread +*/ + +void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread) +{ + THR_LOCK_DATA *data; + DBUG_ENTER("thr_abort_locks_for_thread"); + + pthread_mutex_lock(&lock->mutex); + for (data= lock->read_wait.data; data ; data= data->next) + { + if (pthread_equal(thread, data->thread)) + { + DBUG_PRINT("info",("Aborting read-wait lock")); + data->type= TL_UNLOCK; /* Mark killed */ + pthread_cond_signal(data->cond); + data->cond= 0; /* Removed from list */ + + if (((*data->prev)= data->next)) + data->next->prev= data->prev; + else + lock->read_wait.last= data->prev; + } + } + for (data= lock->write_wait.data; data ; data= data->next) + { + if (pthread_equal(thread, data->thread)) + { + DBUG_PRINT("info",("Aborting write-wait lock")); + data->type= TL_UNLOCK; + pthread_cond_signal(data->cond); + data->cond= 0; + + if (((*data->prev)= data->next)) + data->next->prev= data->prev; + else + lock->write_wait.last= data->prev; + } + } + pthread_mutex_unlock(&lock->mutex); + DBUG_VOID_RETURN; +} + + + /* Upgrade a WRITE_DELAY lock to a WRITE_LOCK */ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data) diff --git a/sql/handler.cc b/sql/handler.cc index fb33888e91e..52ec910dd01 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -473,7 +473,8 @@ int handler::ha_open(const char *name, int mode, int test_if_locked) int error; DBUG_ENTER("handler::open"); DBUG_PRINT("enter",("name: %s db_type: %d db_stat: %d mode: %d lock_test: %d", - name, table->db_type, table->db_stat, mode, test_if_locked)); + name, table->db_type, table->db_stat, mode, + test_if_locked)); if ((error=open(name,mode,test_if_locked))) { diff --git a/sql/lock.cc b/sql/lock.cc index 4c84bbb6e69..64456e6ec36 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -313,6 +313,25 @@ void mysql_lock_abort(THD *thd, TABLE *table) } +/* Abort one thread / table combination */ + +void mysql_lock_abort_for_thread(THD *thd, TABLE *table) +{ + MYSQL_LOCK *locked; + TABLE *write_lock_used; + DBUG_ENTER("mysql_lock_abort_for_thread"); + + if ((locked = get_lock_data(thd,&table,1,1,&write_lock_used))) + { + for (uint i=0; i < locked->lock_count; i++) + thr_abort_locks_for_thread(locked->locks[i]->lock, + table->in_use->real_id); + my_free((gptr) locked,MYF(0)); + } + DBUG_VOID_RETURN; +} + + MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b) { MYSQL_LOCK *sql_lock; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 83b41359192..7d830859fb2 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -711,6 +711,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock); void mysql_unlock_some_tables(THD *thd, TABLE **table,uint count); void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table); void mysql_lock_abort(THD *thd, TABLE *table); +void mysql_lock_abort_for_thread(THD *thd, TABLE *table); MYSQL_LOCK *mysql_lock_merge(MYSQL_LOCK *a,MYSQL_LOCK *b); bool lock_global_read_lock(THD *thd); void unlock_global_read_lock(THD *thd); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2e47312f588..a5241d33132 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4416,8 +4416,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), case (int) OPT_SAFE: opt_specialflag|= SPECIAL_SAFE_MODE; delay_key_write_options= (uint) DELAY_KEY_WRITE_NONE; - myisam_recover_options= HA_RECOVER_NONE; // To be changed - ha_open_options&= ~(HA_OPEN_ABORT_IF_CRASHED | HA_OPEN_DELAY_KEY_WRITE); + myisam_recover_options= HA_RECOVER_DEFAULT; + ha_open_options&= ~(HA_OPEN_DELAY_KEY_WRITE); break; case (int) OPT_SKIP_PRIOR: opt_specialflag|= SPECIAL_NO_PRIOR; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index b53c05c0357..4d1e57f0c1e 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1244,25 +1244,44 @@ bool drop_locked_tables(THD *thd,const char *db, const char *table_name) } -/* lock table to force abort of any threads trying to use table */ +/* + If we have the table open, which only happens when a LOCK TABLE has been + done on the table, change the lock type to a lock that will abort all + other threads trying to get the lock. +*/ void abort_locked_tables(THD *thd,const char *db, const char *table_name) { TABLE *table; - for (table=thd->open_tables; table ; table=table->next) + for (table= thd->open_tables; table ; table= table->next) { if (!strcmp(table->real_name,table_name) && !strcmp(table->table_cache_key,db)) + { mysql_lock_abort(thd,table); + break; + } } } -/**************************************************************************** -** open_unireg_entry -** Purpose : Load a table definition from file and open unireg table -** Args : entry with DB and table given -** Returns : 0 if ok -** Note that the extra argument for open is taken from thd->open_options + +/* + Load a table definition from file and open unireg table + + SYNOPSIS + open_unireg_entry() + thd Thread handle + entry Store open table definition here + db Database name + name Table name + alias Alias name + + NOTES + Extra argument for open is taken from thd->open_options + + RETURN + 0 ok + # Error */ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, @@ -2277,6 +2296,17 @@ bool remove_table_from_cache(THD *thd, const char *db, const char *table_name, } pthread_mutex_unlock(&in_use->mysys_var->mutex); } + /* + Now we must abort all tables locks used by this thread + as the thread may be waiting to get a lock for another table + */ + for (TABLE *thd_table= in_use->open_tables; + thd_table ; + thd_table= thd_table->next) + { + if (thd_table->db_stat) // If table is open + mysql_lock_abort_for_thread(thd, thd_table); + } } else result= result || return_if_owned_by_thd; From b308fe3b595e1961f7ecd29cfc3b0cc60ea4b5d8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 14:05:23 +0200 Subject: [PATCH 039/267] buf0buf.c: Do not try to resolve the table name of a corrupt page if the code is in ibbackup, i.e., the dict system is not initialized innobase/buf/buf0buf.c: Do not try to resolve the table name of a corrupt page if the code is in ibbackup, i.e., the dict system is not initialized --- innobase/buf/buf0buf.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/innobase/buf/buf0buf.c b/innobase/buf/buf0buf.c index c9a5ec5307f..bbce52f0b00 100644 --- a/innobase/buf/buf0buf.c +++ b/innobase/buf/buf0buf.c @@ -324,13 +324,21 @@ buf_page_print( ut_dulint_get_high(btr_page_get_index_id(read_buf)), ut_dulint_get_low(btr_page_get_index_id(read_buf))); - index = dict_index_find_on_id_low( + /* If the code is in ibbackup, dict_sys may be uninitialized, + i.e., NULL */ + + if (dict_sys != NULL) { + + index = dict_index_find_on_id_low( btr_page_get_index_id(read_buf)); - if (index) { - fprintf(stderr, "InnoDB: and table %s index %s\n", + if (index) { + fprintf(stderr, + "InnoDB: and table %s index %s\n", index->table_name, index->name); + } } + } else if (fil_page_get_type(read_buf) == FIL_PAGE_INODE) { fprintf(stderr, "InnoDB: Page may be an 'inode' page\n"); } else if (fil_page_get_type(read_buf) == FIL_PAGE_IBUF_FREE_LIST) { From 6d1ab2314fe4dfacf25f6a8d05e48222c0aea01a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 15:02:49 +0200 Subject: [PATCH 040/267] Fix for using unitialized mutex when running version compiled with --debug include/mysql_embed.h: Disable shared memory for embedded version libmysqld/lib_sql.cc: Fix for --debug version (init_thread_environment was called in wrong place) sql/log_event.h: Portability fix sql/mysqld.cc: Fix for --debug version (init_thread_environment was called in wrong place) sql/sql_parse.cc: Simply code cleanup --- include/mysql_embed.h | 1 + libmysqld/lib_sql.cc | 6 ------ sql/log_event.h | 4 ++-- sql/mysqld.cc | 10 ++++------ sql/sql_parse.cc | 6 ++---- 5 files changed, 9 insertions(+), 18 deletions(-) diff --git a/include/mysql_embed.h b/include/mysql_embed.h index bc75c3fbcb8..d48b0440660 100644 --- a/include/mysql_embed.h +++ b/include/mysql_embed.h @@ -25,6 +25,7 @@ #undef HAVE_OPENSSL #undef HAVE_VIO #undef HAVE_ISAM +#undef HAVE_SMEM /* No shared memory */ #define DONT_USE_RAID diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index cc3358de186..68a7b940220 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -200,12 +200,6 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) if (!opt_mysql_tmpdir || !opt_mysql_tmpdir[0]) opt_mysql_tmpdir=(char*) P_tmpdir; /* purecov: inspected */ - if (init_thread_environment()) - { - mysql_server_end(); - return 1; - } - umask(((~my_umask) & 0666)); if (init_server_components()) { diff --git a/sql/log_event.h b/sql/log_event.h index b9b1355a304..62b5873fabb 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -583,7 +583,7 @@ public: ~Intvar_log_event() {} Log_event_type get_type_code() { return INTVAR_EVENT;} const char* get_var_type_name(); - int get_data_size() { return sizeof(type) + sizeof(val);} + int get_data_size() { return 9; /* sizeof(type) + sizeof(val) */;} int write_data(IO_CACHE* file); bool is_valid() { return 1; } }; @@ -616,7 +616,7 @@ class Rand_log_event: public Log_event 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 get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ } int write_data(IO_CACHE* file); bool is_valid() { return 1; } }; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ce87a8c15ac..85cde682c58 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -494,6 +494,7 @@ static void start_signal_handler(void); extern "C" pthread_handler_decl(signal_hand, arg); static void set_options(void); static void get_options(int argc,char **argv); +static int init_thread_environment(); static char *get_relative_path(const char *path); static void fix_paths(void); extern "C" pthread_handler_decl(handle_connections_sockets,arg); @@ -504,11 +505,9 @@ static bool read_init_file(char *file_name); #ifdef __NT__ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg); #endif -#if !defined(EMBEDDED_LIBRARY) #ifdef HAVE_SMEM static pthread_handler_decl(handle_connections_shared_memory,arg); #endif -#endif /* EMBEDDED_LIBRARY */ extern "C" pthread_handler_decl(handle_slave,arg); #ifdef SET_RLIMIT_NOFILE static uint set_maximum_open_files(uint max_file_limit); @@ -2033,6 +2032,8 @@ static int init_common_variables(const char *conf_file_name, int argc, defaults_argv=argv; set_options(); get_options(argc,argv); + if (init_thread_environment()) + return 1; if (opt_log || opt_update_log || opt_slow_log || opt_bin_log) strcat(server_version,"-log"); DBUG_PRINT("info",("%s Ver %s for %s on %s\n",my_progname, @@ -2300,7 +2301,6 @@ static void handle_connections_methods() handler_count--; } } -#if !defined(EMBEDDED_LIBRARY) #ifdef HAVE_SMEM if (opt_enable_shared_memory) { @@ -2313,7 +2313,6 @@ static void handle_connections_methods() } } #endif -#endif // EMBEDDED_LIBRARY while (handler_count > 0) pthread_cond_wait(&COND_handler_count,&LOCK_thread_count); @@ -2349,8 +2348,6 @@ int main(int argc, char **argv) init_signals(); if (!(opt_specialflag & SPECIAL_NO_PRIOR)) my_pthread_setprio(pthread_self(),CONNECT_PRIOR); - if (init_thread_environment()) - unireg_abort(1); pthread_attr_setstacksize(&connection_attrib,thread_stack); #ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE { @@ -2683,6 +2680,7 @@ static int bootstrap(FILE *file) int error= 0; DBUG_ENTER("bootstrap"); #ifndef EMBEDDED_LIBRARY // TODO: Enable this + THD *thd= new THD; thd->bootstrap=1; thd->client_capabilities=0; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d9aea74c55e..b336f41aa7e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1059,9 +1059,6 @@ bool do_command(THD *thd) bool dispatch_command(enum enum_server_command command, THD *thd, char* packet, uint packet_length) { -#ifndef EMBEDDED_LIBRARY - int res; -#endif NET *net= &thd->net; bool error= 0; /* @@ -1138,7 +1135,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd, char tmp_db[NAME_LEN+1]; ACL_USER* cached_user ; /* Cached user */ uint cur_priv_version; /* Cached grant version */ - ulong pkt_len=0; /* Length of reply packet */ + int res; + ulong pkt_len= 0; /* Length of reply packet */ bzero((char*) prepared_scramble, sizeof(prepared_scramble)); /* Small check for incomming packet */ From 9dfa4eb60af7661e613f900d620de15d29bce54b Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 15:17:29 +0200 Subject: [PATCH 041/267] Fix for reading variables from binary log. --- sql/log_event.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 0f0bc0d5727..2774a6a3e9b 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2142,10 +2142,12 @@ void User_var_log_event::print(FILE* file, bool short_form, char* last_db) int User_var_log_event::exec_event(struct st_relay_log_info* rli) { Item *it= 0; - CHARSET_INFO *charset= log_cs; + CHARSET_INFO *charset= 0; LEX_STRING user_var_name; user_var_name.str= name; user_var_name.length= name_len; + double real_val; + longlong int_val; if (type != ROW_RESULT) init_sql_alloc(&thd->mem_root, 8192,0); @@ -2158,12 +2160,16 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) { switch (type) { case REAL_RESULT: - double real_val; float8get(real_val, val); it= new Item_real(real_val); + val= (char*) &real_val; // Pointer to value in native format + val_len= sizeof(real_val); break; case INT_RESULT: - it= new Item_int((longlong) uint8korr(val)); + int_val= (longlong) uint8korr(val); + it= new Item_int(int_val); + val= (char*) &int_val; // Pointer to value in native format + val_len= sizeof(int_val); break; case STRING_RESULT: it= new Item_string(val, val_len, charset); From 3cbb978d51ce694c941671f8bc4efd673d80e4e0 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 18:01:59 +0400 Subject: [PATCH 042/267] stringcmp() and sortcmp() have been unified into the only one sortcmp() with additional CHARSET_INFO *cmp_charset argument. --- sql/item.cc | 6 ++-- sql/item_buff.cc | 4 +-- sql/item_cmpfunc.cc | 72 ++++++++++++++++++++++++++------------------- sql/item_cmpfunc.h | 57 ++++++++++++----------------------- sql/item_func.cc | 25 +++++++++------- sql/item_func.h | 1 - sql/item_sum.cc | 21 ++++++++----- sql/item_sum.h | 8 +++-- sql/sql_analyse.cc | 22 ++++---------- sql/sql_string.cc | 18 +----------- sql/sql_string.h | 6 ++-- 11 files changed, 105 insertions(+), 135 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index decd0ec044b..3c6b85e933b 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -120,8 +120,8 @@ bool Item_string::eq(const Item *item, bool binary_cmp) const if (type() == item->type()) { if (binary_cmp) - return !stringcmp(&str_value, &item->str_value); - return !sortcmp(&str_value, &item->str_value); + return !sortcmp(&str_value, &item->str_value, &my_charset_bin); + return !sortcmp(&str_value, &item->str_value, charset()); } return 0; } @@ -1355,7 +1355,7 @@ bool field_is_equal_to_item(Field *field,Item *item) if (item->null_value) return 1; // This must be true field->val_str(&field_tmp,&field_tmp); - return !stringcmp(&field_tmp,item_result); + return !sortcmp(&field_tmp,item_result,&my_charset_bin); } if (res_type == INT_RESULT) return 1; // Both where of type int diff --git a/sql/item_buff.cc b/sql/item_buff.cc index 573d4ab17e3..c4431294dff 100644 --- a/sql/item_buff.cc +++ b/sql/item_buff.cc @@ -56,10 +56,8 @@ bool Item_str_buff::cmp(void) } else if (null_value) return 0; // new and old value was null - else if (!item->binary()) - tmp= sortcmp(&value,res) != 0; else - tmp= stringcmp(&value,res) != 0; + tmp= sortcmp(&value,res,item->charset()) != 0; if (tmp) value.copy(*res); // Remember for next cmp return tmp; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 7ff36bb32ed..3ca3a556658 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -125,7 +125,9 @@ void Item_bool_func2::fix_length_and_dec() } } set_cmp_func(); - binary_cmp= args[0]->binary() || args[1]->binary(); + /* QQ: COERCIBILITY */ + cmp_charset= (args[0]->binary() || args[1]->binary()) ? + &my_charset_bin : args[0]->charset(); } @@ -167,7 +169,7 @@ int Arg_comparator::compare_string() if ((res2= (*b)->val_str(&owner->tmp_value2))) { owner->null_value= 0; - return owner->binary_cmp ? stringcmp(res1,res2) : sortcmp(res1,res2); + return sortcmp(res1,res2,owner->cmp_charset); } } owner->null_value= 1; @@ -181,8 +183,7 @@ int Arg_comparator::compare_e_string() res2= (*b)->val_str(&owner->tmp_value2); if (!res1 || !res2) return test(res1 == res2); - return (owner->binary_cmp ? test(stringcmp(res1, res2) == 0) : - test(sortcmp(res1, res2) == 0)); + return test(sortcmp(res1, res2, owner->cmp_charset) == 0); } @@ -402,7 +403,7 @@ longlong Item_func_strcmp::val_int() null_value=1; return 0; } - int value= binary_cmp ? stringcmp(a,b) : sortcmp(a,b); + int value= sortcmp(a,b,cmp_charset); null_value=0; return !value ? 0 : (value < 0 ? (longlong) -1 : (longlong) 1); } @@ -482,10 +483,11 @@ void Item_func_between::fix_length_and_dec() cmp_type=item_cmp_type(args[0]->result_type(), item_cmp_type(args[1]->result_type(), args[2]->result_type())); + /* QQ: COERCIBILITY */ if (args[0]->binary() | args[1]->binary() | args[2]->binary()) - string_compare=stringcmp; + cmp_charset= &my_charset_bin; else - string_compare=sortcmp; + cmp_charset= args[0]->charset(); /* Make a special case of compare with date/time and longlong fields. @@ -517,17 +519,17 @@ longlong Item_func_between::val_int() a=args[1]->val_str(&value1); b=args[2]->val_str(&value2); if (!args[1]->null_value && !args[2]->null_value) - return (string_compare(value,a) >= 0 && string_compare(value,b) <= 0) ? - 1 : 0; + return (sortcmp(value,a,cmp_charset) >= 0 && + sortcmp(value,b,cmp_charset) <= 0) ? 1 : 0; if (args[1]->null_value && args[2]->null_value) null_value=1; else if (args[1]->null_value) { - null_value= string_compare(value,b) <= 0; // not null if false range. + null_value= sortcmp(value,b,cmp_charset) <= 0; // not null if false range. } else { - null_value= string_compare(value,a) >= 0; // not null if false range. + null_value= sortcmp(value,a,cmp_charset) >= 0; // not null if false range. } } else if (cmp_type == INT_RESULT) @@ -809,12 +811,13 @@ Item *Item_func_case::find_item(String *str) } if ((tmp=args[i]->val_str(str))) // If not null { + /* QQ: COERCIBILITY */ if (first_expr_is_binary || args[i]->binary()) { - if (stringcmp(tmp,first_expr_str)==0) + if (sortcmp(tmp,first_expr_str,&my_charset_bin)==0) return args[i+1]; } - else if (sortcmp(tmp,first_expr_str)==0) + else if (sortcmp(tmp,first_expr_str,tmp->charset())==0) return args[i+1]; } break; @@ -1211,10 +1214,7 @@ cmp_item* cmp_item::get_comparator(Item *item) { switch (item->result_type()) { case STRING_RESULT: - if (item->binary()) - return new cmp_item_binary_string; - else - return new cmp_item_sort_string; + return new cmp_item_sort_string(item->charset()); break; case INT_RESULT: return new cmp_item_int; @@ -1234,12 +1234,7 @@ cmp_item* cmp_item::get_comparator(Item *item) cmp_item* cmp_item_sort_string::make_same() { - return new cmp_item_sort_string_in_static(); -} - -cmp_item* cmp_item_binary_string::make_same() -{ - return new cmp_item_binary_string_in_static(); + return new cmp_item_sort_string_in_static(cmp_charset); } cmp_item* cmp_item_int::make_same() @@ -1346,6 +1341,22 @@ bool Item_func_in::nulls_in_row() return 0; } +static int srtcmp_in(const String *x,const String *y) +{ + CHARSET_INFO *cs= x->charset(); + return cs->strnncollsp(cs, + (unsigned char *) x->ptr(),x->length(), + (unsigned char *) y->ptr(),y->length()); +} + +static int bincmp_in(const String *x,const String *y) +{ + CHARSET_INFO *cs= &my_charset_bin; + return cs->strnncollsp(cs, + (unsigned char *) x->ptr(),x->length(), + (unsigned char *) y->ptr(),y->length()); +} + void Item_func_in::fix_length_and_dec() { /* @@ -1357,9 +1368,9 @@ void Item_func_in::fix_length_and_dec() switch (item->result_type()) { case STRING_RESULT: if (item->binary()) - array=new in_string(arg_count,(qsort_cmp) stringcmp); + array=new in_string(arg_count,(qsort_cmp) srtcmp_in); else - array=new in_string(arg_count,(qsort_cmp) sortcmp); + array=new in_string(arg_count,(qsort_cmp) bincmp_in); break; case INT_RESULT: array= new in_longlong(arg_count); @@ -1759,8 +1770,9 @@ bool Item_func_like::fix_fields(THD *thd, TABLE_LIST *tlist, Item ** ref) /* Comparision is by default done according to character set of LIKE + QQ: COERCIBILITY */ - if (binary_cmp) + if (cmp_charset == &my_charset_bin) set_charset(&my_charset_bin); else set_charset(args[1]->charset()); @@ -1877,7 +1889,7 @@ longlong Item_func_regex::val_int() null_value=1; return 0; } - if (!regex_compiled || stringcmp(res2,&prev_regexp)) + if (!regex_compiled || sortcmp(res2,&prev_regexp,&my_charset_bin)) { prev_regexp.copy(*res2); if (regex_compiled) @@ -1936,7 +1948,7 @@ void Item_func_like::turboBM_compute_suffixes(int *suff) *splm1 = pattern_len; - if (binary_cmp) + if (cmp_charset == &my_charset_bin) { int i; for (i = pattern_len - 2; i >= 0; i--) @@ -2039,7 +2051,7 @@ void Item_func_like::turboBM_compute_bad_character_shifts() for (i = bmBc; i < end; i++) *i = pattern_len; - if (binary_cmp) + if (cmp_charset == &my_charset_bin) { for (j = 0; j < plm1; j++) bmBc[(uint) (uchar) pattern[j]] = plm1 - j; @@ -2070,7 +2082,7 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const const int tlmpl= text_len - pattern_len; /* Searching */ - if (binary_cmp) + if (cmp_charset == &my_charset_bin) { while (j <= tlmpl) { diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index c05d0317341..cc0ce455019 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -112,7 +112,7 @@ class Item_bool_func2 :public Item_int_func protected: Arg_comparator cmp; String tmp_value1,tmp_value2; - bool binary_cmp; + CHARSET_INFO *cmp_charset; public: Item_bool_func2(Item *a,Item *b): @@ -127,7 +127,7 @@ public: bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; } void print(String *str) { Item_func::print_op(str); } bool is_null() { return test(args[0]->is_null() || args[1]->is_null()); } - virtual bool binary() const { return binary_cmp; } + virtual bool binary() const { return test(cmp_charset->state & MY_CS_BINSORT); } static Item_bool_func2* eq_creator(Item *a, Item *b); static Item_bool_func2* ne_creator(Item *a, Item *b); @@ -242,7 +242,7 @@ public: class Item_func_between :public Item_int_func { - int (*string_compare)(const String *x,const String *y); + CHARSET_INFO *cmp_charset; public: Item_result cmp_type; String value0,value1,value2; @@ -263,7 +263,9 @@ public: void fix_length_and_dec() { max_length=2; - binary_cmp= args[0]->binary() || args[1]->binary(); + /* QQ: COERCIBILITY */ + cmp_charset= args[0]->binary() || args[1]->binary() ? + &my_charset_bin : args[0]->charset(); } optimize_type select_optimize() const { return OPTIMIZE_NONE; } const char *func_name() const { return "strcmp"; } @@ -439,7 +441,8 @@ public: class cmp_item :public Sql_alloc { public: - cmp_item() {} + CHARSET_INFO *cmp_charset; + cmp_item() { cmp_charset= &my_charset_bin; } virtual ~cmp_item() {} virtual void store_value(Item *item)= 0; virtual int cmp(Item *item)= 0; @@ -453,18 +456,14 @@ public: } }; -typedef int (*str_cmp_func_pointer)(const String *, const String *); class cmp_item_string :public cmp_item { protected: - str_cmp_func_pointer str_cmp_func; String *value_res; public: - cmp_item_string (str_cmp_func_pointer cmp): str_cmp_func(cmp) {} + cmp_item_string (CHARSET_INFO *cs) { cmp_charset= cs; } friend class cmp_item_sort_string; - friend class cmp_item_binary_string; friend class cmp_item_sort_string_in_static; - friend class cmp_item_binary_string_in_static; }; class cmp_item_sort_string :public cmp_item_string @@ -473,12 +472,9 @@ protected: char value_buff[80]; String value; public: - cmp_item_sort_string(str_cmp_func_pointer cmp): - cmp_item_string(cmp), - value(value_buff, sizeof(value_buff), default_charset_info) {} - cmp_item_sort_string(): - cmp_item_string(&sortcmp), - value(value_buff, sizeof(value_buff), default_charset_info) {} + cmp_item_sort_string(CHARSET_INFO *cs): + cmp_item_string(cs), + value(value_buff, sizeof(value_buff), cs) {} void store_value(Item *item) { value_res= item->val_str(&value); @@ -489,22 +485,16 @@ public: String tmp(buff, sizeof(buff), default_charset_info), *res; if (!(res= arg->val_str(&tmp))) return 1; /* Can't be right */ - return (*str_cmp_func)(value_res, res); + return sortcmp(value_res, res, cmp_charset); } int compare(cmp_item *c) { cmp_item_string *cmp= (cmp_item_string *)c; - return (*str_cmp_func)(value_res, cmp->value_res); + return sortcmp(value_res, cmp->value_res, cmp_charset); } cmp_item *make_same(); }; -class cmp_item_binary_string :public cmp_item_sort_string { -public: - cmp_item_binary_string(): cmp_item_sort_string(&stringcmp) {} - cmp_item *make_same(); -}; - class cmp_item_int :public cmp_item { longlong value; @@ -590,9 +580,8 @@ class cmp_item_sort_string_in_static :public cmp_item_string protected: String value; public: - cmp_item_sort_string_in_static(str_cmp_func_pointer cmp): - cmp_item_string(cmp) {} - cmp_item_sort_string_in_static(): cmp_item_string(&sortcmp) {} + cmp_item_sort_string_in_static(CHARSET_INFO *cs): + cmp_item_string(cs) {} void store_value(Item *item) { value_res= item->val_str(&value); @@ -606,21 +595,11 @@ public: int compare(cmp_item *c) { cmp_item_string *cmp= (cmp_item_string *)c; - return (*str_cmp_func)(value_res, cmp->value_res); + return sortcmp(value_res, cmp->value_res, cmp_charset); } cmp_item * make_same() { - return new cmp_item_sort_string_in_static(); - } -}; - -class cmp_item_binary_string_in_static :public cmp_item_sort_string_in_static { -public: - cmp_item_binary_string_in_static(): - cmp_item_sort_string_in_static(&stringcmp) {} - cmp_item * make_same() - { - return new cmp_item_binary_string_in_static(); + return new cmp_item_sort_string_in_static(cmp_charset); } }; diff --git a/sql/item_func.cc b/sql/item_func.cc index e5d32042641..53d15e838b2 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -107,7 +107,7 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) return 0; // Fatal error if flag is set! if (arg_count) { // Print purify happy - coercibility= COER_NOCOLL; + bool first_coll= 1; for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++) { if ((*arg)->fix_fields(thd, tables, arg) || @@ -122,16 +122,18 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) Set return character set to first argument if we are returning a string. */ - if ((*arg)->binary()) + if (first_coll) + { + set_charset((*arg)->charset()); + coercibility= (*args)->coercibility; + first_coll= 0; + } + else if ((*arg)->charset() == &my_charset_bin || + charset() == &my_charset_bin) { set_charset(&my_charset_bin); coercibility= COER_NOCOLL; } - else if (coercibility== COER_NOCOLL) - { - coercibility= (*arg)->coercibility; - set_charset((*arg)->charset()); - } else if ((*arg)->coercibility < coercibility) { if (strcmp(charset()->csname,(*arg)->charset()->csname)) @@ -864,6 +866,7 @@ void Item_func_min_max::fix_length_and_dec() max_length=0; maybe_null=1; cmp_type=args[0]->result_type(); + for (uint i=0 ; i < arg_count ; i++) { if (max_length < args[i]->max_length) @@ -873,11 +876,11 @@ void Item_func_min_max::fix_length_and_dec() if (!args[i]->maybe_null) maybe_null=0; cmp_type=item_cmp_type(cmp_type,args[i]->result_type()); - if (args[i]->binary()) + if (i==0) + set_charset(args[i]->charset()); + else if (args[i]->charset() == &my_charset_bin) set_charset(&my_charset_bin); } - if (cmp_type == STRING_RESULT) - str_cmp_function= binary() ? stringcmp : sortcmp; } @@ -922,7 +925,7 @@ String *Item_func_min_max::val_str(String *str) res2= args[i]->val_str(res == str ? &tmp_value : str); if (res2) { - int cmp= (*str_cmp_function)(res,res2); + int cmp= sortcmp(res,res2,charset()); if ((cmp_sign < 0 ? cmp : -cmp) < 0) res=res2; } diff --git a/sql/item_func.h b/sql/item_func.h index fc7145705b2..860ddbbbadf 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -524,7 +524,6 @@ class Item_func_min_max :public Item_func Item_result cmp_type; String tmp_value; int cmp_sign; - int (*str_cmp_function)(const String *x,const String *y); public: Item_func_min_max(List &list,int cmp_sign_arg) :Item_func(list), cmp_type(INT_RESULT), cmp_sign(cmp_sign_arg) {} diff --git a/sql/item_sum.cc b/sql/item_sum.cc index a0f8bc8b8a2..e303c26262e 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -183,12 +183,17 @@ Item_sum_hybrid::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) return 1; hybrid_type=item->result_type(); if (hybrid_type == INT_RESULT) - max_length=20; - else if (hybrid_type == REAL_RESULT) - max_length=float_length(decimals); - else { - str_cmp_function= item->binary() ? stringcmp : sortcmp; + cmp_charset= &my_charset_bin; + max_length=20; + } + else if (hybrid_type == REAL_RESULT) + { + cmp_charset= &my_charset_bin; + max_length=float_length(decimals); + }else + { + cmp_charset= item->charset(); max_length=item->max_length; } decimals=item->decimals; @@ -440,7 +445,7 @@ bool Item_sum_min::add() { String *result=args[0]->val_str(&tmp_value); if (!args[0]->null_value && - (null_value || (*str_cmp_function)(&value,result) > 0)) + (null_value || sortcmp(&value,result,cmp_charset) > 0)) { value.copy(*result); null_value=0; @@ -487,7 +492,7 @@ bool Item_sum_max::add() { String *result=args[0]->val_str(&tmp_value); if (!args[0]->null_value && - (null_value || (*str_cmp_function)(&value,result) < 0)) + (null_value || sortcmp(&value,result,cmp_charset) < 0)) { value.copy(*result); null_value=0; @@ -762,7 +767,7 @@ Item_sum_hybrid::min_max_update_str_field(int offset) result_field->ptr-=offset; if (result_field->is_null() || - (cmp_sign * (*str_cmp_function)(res_str,&tmp_value)) < 0) + (cmp_sign * sortcmp(res_str,&tmp_value,cmp_charset)) < 0) result_field->store(res_str->ptr(),res_str->length(),res_str->charset()); else { // Use old value diff --git a/sql/item_sum.h b/sql/item_sum.h index db8bded9946..74c7b11a7ba 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -369,17 +369,19 @@ class Item_sum_hybrid :public Item_sum enum_field_types hybrid_field_type; int cmp_sign; table_map used_table_cache; - int (*str_cmp_function)(const String *x,const String *y); + CHARSET_INFO *cmp_charset; public: Item_sum_hybrid(Item *item_par,int sign) :Item_sum(item_par), hybrid_type(INT_RESULT), cmp_sign(sign), - used_table_cache(~(table_map) 0) + used_table_cache(~(table_map) 0), + cmp_charset(&my_charset_bin) {} Item_sum_hybrid(THD *thd, Item_sum_hybrid &item): Item_sum(thd, item), value(item.value), tmp_value(item.tmp_value), sum(item.sum), sum_int(item.sum_int), hybrid_type(item.hybrid_type), - cmp_sign(item.cmp_sign), used_table_cache(used_table_cache) {} + cmp_sign(item.cmp_sign), used_table_cache(used_table_cache), + cmp_charset(item.cmp_charset) {} bool fix_fields(THD *, TABLE_LIST *, Item **); table_map used_tables() const { return used_table_cache; } bool const_item() const { return !used_table_cache; } diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 9e9d7a08925..36464126ae5 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -41,13 +41,13 @@ int sortcmp2(void* cmp_arg __attribute__((unused)), const String *a,const String *b) { - return sortcmp(a,b); + return sortcmp(a,b,a->charset()); } int stringcmp2(void* cmp_arg __attribute__((unused)), const String *a,const String *b) { - return stringcmp(a,b); + return sortcmp(a,b,&my_charset_bin); } int compare_double2(void* cmp_arg __attribute__((unused)), @@ -329,20 +329,10 @@ void field_str::add() if (length > max_length) max_length = length; - if (item->binary()) - { - if (stringcmp(res, &min_arg) < 0) - min_arg.copy(*res); - if (stringcmp(res, &max_arg) > 0) - max_arg.copy(*res); - } - else - { - if (sortcmp(res, &min_arg) < 0) - min_arg.copy(*res); - if (sortcmp(res, &max_arg) > 0) - max_arg.copy(*res); - } + if (sortcmp(res, &min_arg,item->charset()) < 0) + min_arg.copy(*res); + if (sortcmp(res, &max_arg,item->charset()) > 0) + max_arg.copy(*res); } if (room_in_tree) diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 21e38397842..1a0366112f4 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -538,30 +538,14 @@ void String::qs_append(const char &c) } -int sortcmp(const String *x,const String *y) +int sortcmp(const String *x,const String *y, CHARSET_INFO *cs) { - CHARSET_INFO *cs= x->str_charset; return cs->strnncollsp(cs, (unsigned char *) x->ptr(),x->length(), (unsigned char *) y->ptr(),y->length()); } -int stringcmp(const String *x,const String *y) -{ - const char *s= x->ptr(); - const char *t= y->ptr(); - uint32 x_len=x->length(),y_len=y->length(),len=min(x_len,y_len); - - while (len--) - { - if (*s++ != *t++) - return ((int) (uchar) s[-1] - (int) (uchar) t[-1]); - } - return (int) (x_len-y_len); -} - - String *copy_if_not_alloced(String *to,String *from,uint32 from_length) { if (from->Alloced_length >= from_length) diff --git a/sql/sql_string.h b/sql/sql_string.h index 047faf3e3db..8e0705844ad 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -25,8 +25,7 @@ #endif class String; -int sortcmp(const String *a,const String *b); -int stringcmp(const String *a,const String *b); +int sortcmp(const String *a,const String *b, CHARSET_INFO *cs); String *copy_if_not_alloced(String *a,String *b,uint32 arg_length); class String @@ -205,8 +204,7 @@ public: void strip_sp(); inline void caseup() { my_caseup(str_charset,Ptr,str_length); } inline void casedn() { my_casedn(str_charset,Ptr,str_length); } - friend int sortcmp(const String *a,const String *b); - friend int stringcmp(const String *a,const String *b); + friend int sortcmp(const String *a,const String *b, CHARSET_INFO *cs); friend String *copy_if_not_alloced(String *a,String *b,uint32 arg_length); uint32 numchars(); int charpos(int i,uint32 offset=0); From 4d9b1f3be63a86b4a99b74a829c95797fba9a2e6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 10:34:32 -0500 Subject: [PATCH 043/267] novell41.patch BitKeeper/deleted/.del-libmysqld.def~6ca0fa0537a3431c: Delete: netware/libmysqld.def BitKeeper/deleted/.del-mwenv~35c8b56062f4b6aa: Delete: netware/mw/mwenv BitKeeper/deleted/.del-nwconfigure~86da352b5e031ed9: Delete: netware/nwconfigure netware/BUILD/mwasmnlm: Import patch novell41.patch netware/BUILD/mwccnlm: Import patch novell41.patch netware/BUILD/mwldnlm: Import patch novell41.patch netware/BUILD/nwbootstrap: Import patch novell41.patch scripts/make_binary_distribution.sh: Import patch novell41.patch --- netware/BUILD/compile-AUTOTOOLS | 16 +++ netware/BUILD/compile-linux-tools | 52 ++++++++ netware/BUILD/compile-netware-END | 35 ++++++ netware/BUILD/compile-netware-START | 23 ++++ netware/BUILD/compile-netware-all | 8 ++ netware/BUILD/compile-netware-debug | 15 +++ netware/BUILD/compile-netware-standard | 14 +++ netware/{mw => BUILD}/mwasmnlm | 0 netware/{mw => BUILD}/mwccnlm | 0 netware/BUILD/mwenv | 29 +++++ netware/{mw => BUILD}/mwldnlm | 0 netware/BUILD/nwbootstrap | 166 +++++++++++++++++++++++++ netware/libmysqld.def | 65 ---------- netware/mw/mwenv | 11 -- netware/nwbootstrap | 145 --------------------- netware/nwconfigure | 23 ---- scripts/make_binary_distribution.sh | 9 +- 17 files changed, 363 insertions(+), 248 deletions(-) create mode 100644 netware/BUILD/compile-AUTOTOOLS create mode 100644 netware/BUILD/compile-linux-tools create mode 100644 netware/BUILD/compile-netware-END create mode 100644 netware/BUILD/compile-netware-START create mode 100644 netware/BUILD/compile-netware-all create mode 100644 netware/BUILD/compile-netware-debug create mode 100644 netware/BUILD/compile-netware-standard rename netware/{mw => BUILD}/mwasmnlm (100%) rename netware/{mw => BUILD}/mwccnlm (100%) create mode 100644 netware/BUILD/mwenv rename netware/{mw => BUILD}/mwldnlm (100%) create mode 100755 netware/BUILD/nwbootstrap delete mode 100644 netware/libmysqld.def delete mode 100644 netware/mw/mwenv delete mode 100755 netware/nwbootstrap delete mode 100644 netware/nwconfigure diff --git a/netware/BUILD/compile-AUTOTOOLS b/netware/BUILD/compile-AUTOTOOLS new file mode 100644 index 00000000000..0688ea5aaca --- /dev/null +++ b/netware/BUILD/compile-AUTOTOOLS @@ -0,0 +1,16 @@ +#! /bin/sh + +for package in . ./innobase +do + (cd $package + rm -rf config.cache autom4te.cache + aclocal + autoheader + libtoolize --force + aclocal + automake --add-missing --force-missing + autoconf) +done + +#rm -rf ./bdb/build_unix/config.cache ./bdb/dist/autom4te.cache +#(cd ./bdb/dist && sh s_all) diff --git a/netware/BUILD/compile-linux-tools b/netware/BUILD/compile-linux-tools new file mode 100644 index 00000000000..598be96ab66 --- /dev/null +++ b/netware/BUILD/compile-linux-tools @@ -0,0 +1,52 @@ +#! /bin/sh + +#debug +#set -x + +if test ! -r ./sql/mysqld.cc +then + echo "you must start from the top source directory" + exit 1 +fi + +path=`dirname $0` + +# clean +if test -e "Makefile"; then make -k clean; fi + +# remove files +rm -f NEW-RPMS/* +rm -f */.deps/*.P +rm -f */*.linux + +# run autotools +. $path/compile-AUTOTOOLS + +# configure +./configure --without-innodb --without-docs + +# build tools only +make clean config.h +(cd dbug; make libdbug.a) +(cd strings; make libmystrings.a) +(cd mysys; make libmysys.a) +(cd heap; make libheap.a) +(cd vio; make libvio.a) +(cd regex; make libregex.a) +(cd isam; make libnisam.a) +(cd merge; make libmerge.a) +(cd myisam; make libmyisam.a) +(cd myisammrg; make libmyisammrg.a) +(cd extra; make comp_err) +(cd libmysql; make conf_to_src) +(cd libmysql_r; make conf_to_src) +(cd sql; make gen_lex_hash) +(cd strings; make conf_to_src) + +# copying required linux tools +cp extra/comp_err extra/comp_err.linux +cp libmysql/conf_to_src libmysql/conf_to_src.linux +cp libmysql_r/conf_to_src libmysql_r/conf_to_src.linux +cp sql/gen_lex_hash sql/gen_lex_hash.linux +cp strings/conf_to_src strings/conf_to_src.linux + diff --git a/netware/BUILD/compile-netware-END b/netware/BUILD/compile-netware-END new file mode 100644 index 00000000000..beb15fbeda3 --- /dev/null +++ b/netware/BUILD/compile-netware-END @@ -0,0 +1,35 @@ +#! /bin/sh + +path=`dirname $0` + +# clean +if test -e "Makefile"; then make -k clean; fi + +# remove files +rm -f NEW-RPMS/* +rm -f */.deps/*.P +rm -rf Makefile.in.bk + +# Metrowerks enviornment +. $path/mwenv + +# run auto tools +. $path/compile-AUTOTOOLS + +# configure +./configure $base_configs $extra_configs + +# make +make clean bin-dist + +# mark the build +for file in *.tar.gz +do + if (expr "$file" : "mysql-[1-9].*" > /dev/null) + then + new_file=`echo $file | sed -e "s/mysql-/mysql-$suffix-/"` + if test -e "$new_file"; then mv -f $new_file $new_file.old; fi + mv $file $new_file + fi +done + diff --git a/netware/BUILD/compile-netware-START b/netware/BUILD/compile-netware-START new file mode 100644 index 00000000000..ceac111b36c --- /dev/null +++ b/netware/BUILD/compile-netware-START @@ -0,0 +1,23 @@ +#! /bin/sh + +#debug +#set -x + +if test ! -r ./sql/mysqld.cc +then + echo "you must start from the top source directory" + exit 1 +fi + +path=`dirname $0` + +# stop on errors +set -e + +base_configs=" \ + --host=i686-pc-netware \ + --enable-local-infile \ + --with-extra-charsets=latin1_de \ + --prefix=N:/mysql \ + " + diff --git a/netware/BUILD/compile-netware-all b/netware/BUILD/compile-netware-all new file mode 100644 index 00000000000..f8dea0f7583 --- /dev/null +++ b/netware/BUILD/compile-netware-all @@ -0,0 +1,8 @@ +#! /bin/sh + +path=`dirname $0` + +$path/compile-netware-standard +$path/compile-netware-debug +#$path/compile-netware-max +#$path/compile-netware-max-debug diff --git a/netware/BUILD/compile-netware-debug b/netware/BUILD/compile-netware-debug new file mode 100644 index 00000000000..2cd292c82fd --- /dev/null +++ b/netware/BUILD/compile-netware-debug @@ -0,0 +1,15 @@ +#! /bin/sh + +path=`dirname $0` +. $path/compile-netware-START + +suffix="debug" + +extra_configs=" \ + --with-innodb \ + --with-debug=full \ + " + +. $path/compile-netware-END + + diff --git a/netware/BUILD/compile-netware-standard b/netware/BUILD/compile-netware-standard new file mode 100644 index 00000000000..c09337b5fe0 --- /dev/null +++ b/netware/BUILD/compile-netware-standard @@ -0,0 +1,14 @@ +#! /bin/sh + +path=`dirname $0` +. $path/compile-netware-START + +suffix="standard" + +extra_configs=" \ + --with-innodb + " + +. $path/compile-netware-END + + diff --git a/netware/mw/mwasmnlm b/netware/BUILD/mwasmnlm similarity index 100% rename from netware/mw/mwasmnlm rename to netware/BUILD/mwasmnlm diff --git a/netware/mw/mwccnlm b/netware/BUILD/mwccnlm similarity index 100% rename from netware/mw/mwccnlm rename to netware/BUILD/mwccnlm diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv new file mode 100644 index 00000000000..d2b64409c88 --- /dev/null +++ b/netware/BUILD/mwenv @@ -0,0 +1,29 @@ +#! /bin/sh + +# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be changed before compiling +# This values are normally changed by the nwbootstrap script + +# the default for WINE_BUILD_DIR is "F:/mydev" +export MYDEV="WINE_BUILD_DIR" + +export MWCNWx86Includes="$MYDEV/libc/include" +export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib" +export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib" + +export WINEPATH="$MYDEV/mw/bin" + +# the default for BUILD_DIR is "$HOME/mydev" +export PATH="$PATH:BUILD_DIR/mysql-VERSION/netware/BUILD" + +export AR='mwldnlm' +export AR_FLAGS='-type library -o' +export AS='mwasmnlm' +export CC='mwccnlm -gccincludes' +export CFLAGS='-dialect c -proc 686 -bool on -relax_pointers -DUSE_OLD_FUNCTIONS' +export CXX='mwccnlm -gccincludes' +export CXXFLAGS='-dialect c++ -proc 686 -bool on -relax_pointers' +export LD='mwldnlm' +export LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -flags pseudopreemption' +export RANLIB=: +export STRIP=: + diff --git a/netware/mw/mwldnlm b/netware/BUILD/mwldnlm similarity index 100% rename from netware/mw/mwldnlm rename to netware/BUILD/mwldnlm diff --git a/netware/BUILD/nwbootstrap b/netware/BUILD/nwbootstrap new file mode 100755 index 00000000000..a8ed956811e --- /dev/null +++ b/netware/BUILD/nwbootstrap @@ -0,0 +1,166 @@ +#! /bin/sh + +# debug +#set -x + +path=`dirname $0` + +# stop on errors +set -e + +# repository direcotry +repo_dir=`pwd` + +# build direcotry +build_dir="$HOME/mydev" +wine_build_dir="F:/mydev" + +# doc directory +doc_dir="$repo_dir/../mysqldoc" + +# init +target_dir="" +temp_dir="" +revision="" +rev="" +build="" +mwenv="" + +# show usage +show_usage() +{ + cat << EOF + +usage: nwbootstrap [options] + +Exports a revision of the BitKeeper tree (nwbootstrap must be run inside a +directory of the BitKeeper tree to be used). Creates the ChangeLog file. +Adds the latest manual.texi from the mysqldoc BitKeeper tree. Builds the +Linux tools required for cross-platform builds. Optionally, builds the +binary distributions for NetWare. + +options: + +--build= Build the binary distributions for NetWare, + where is "standard", "debug", or "all" + (default is to not build a binary distribution) + +--build-dir= Export the BitKeeper tree to the directroy + (default is "$build_dir") + +--doc-dir= Use the mysqldoc BitKeeper tree located in the + directory + (default is parallel to current BitKeeper tree) + +--help Show this help information + +--revision= Export the BitKeeper tree as of revision + (default is the latest revision) + +--wine-build-dir= Use the WINE directory , which should + correspond to the --build-dir directory + (default is "$wine_build_dir") + +examples: + + nwbootstrap + + nwbootstrap --revision=1.1594 --build=all + + nwbootstrap --build-dir=/home/jdoe/dev --wine-build-dir=F:/dev + + +EOF + exit 0; +} + +# parse arguments +for arg do + case "$arg" in + --build-dir=*) build_dir=`echo "$arg" | sed -e "s;--build-dir=;;"` ;; + --wine-build-dir=*) wine_build_dir=`echo "$arg" | sed -e "s;--wine-build-dir=;;"` ;; + --revision=*) revision=`echo "$arg" | sed -e "s;--revision=;;"` ;; + --build=*) build=`echo "$arg" | sed -e "s;--build=;;"` ;; + --doc-dir=*) doc_dir=`echo "$arg" | sed -e "s;--doc-dir=;;"` ;; + *) show_usage ;; + esac +done + +echo "starting build..." + +# check for bk and repo_dir +bk help > /dev/null +repo_dir=`bk root $repo_dir` +cd $repo_dir +doc_dir="$repo_dir/../mysqldoc" + +# build temporary directory +temp_dir="$build_dir/mysql-$$.tmp" + +# export the bk tree +command="bk export"; +if test $revision; then command="$command -r$revision"; fi +command="$command $temp_dir" +echo "exporting $repo_dir..." +$command + +# determine version +version=`grep -e "AM_INIT_AUTOMAKE(mysql, .*)" < $temp_dir/configure.in | sed -e "s/AM_INIT_AUTOMAKE(mysql, \(.*\))/\1/"` +echo "version: $version" + +# build target directory +target_dir="$build_dir/mysql-$version" + +# delete any old target +if test -d $target_dir.old; then rm -rf $target_dir.old; fi + +# rename old target +if test -d $target_dir; then mv -f $target_dir $target_dir.old; fi + +# rename directory to use version +mv $temp_dir $target_dir + +# create ChangeLog +if test $revision +then + rev=`bk changes -r..$revision -t -d':REV:' -n | head -2 | tail -1` +else + rev=`bk changes -t -d':REV:' -n | head -1` +fi + +echo "creating ChangeLog..." +bk changes -v -r$rev > $target_dir/ChangeLog + +# add the latest manual +if test -d $doc_dir +then + echo "adding the latest manual..." + install -m 644 $doc_dir/Docs/{manual,reservedwords}.texi $target_dir/Docs/ +fi + +# make files writeable +cd $target_dir +chmod -R u+rw,g+rw . + +# edit the mvenv file +mwenv="./netware/BUILD/mwenv" +mv -f $mwenv $mwenv.org +sed -e "s;WINE_BUILD_DIR;$wine_build_dir;g" \ + -e "s;BUILD_DIR;$build_dir;g" \ + -e "s;VERSION;$version;g" $mwenv.org > $mwenv +chmod +rwx $mwenv + +# build linux tools +echo "compiling linux tools..." +./netware/BUILD/compile-linux-tools + +# compile +if test $build +then + echo "compiling $build..." + ./netware/BUILD/compile-netware-$build +fi + +echo "done" + + diff --git a/netware/libmysqld.def b/netware/libmysqld.def deleted file mode 100644 index c6615ee971c..00000000000 --- a/netware/libmysqld.def +++ /dev/null @@ -1,65 +0,0 @@ -LIBRARY LIBMYSQLD -DESCRIPTION 'MySQL 4.0 Embedded Server Library' -VERSION 4.0 -EXPORTS - mysql_server_end - mysql_server_init - mysql_use_result - mysql_thread_safe - mysql_thread_id - mysql_store_result - mysql_stat - mysql_shutdown - mysql_select_db - mysql_row_tell - mysql_row_seek - mysql_real_query - mysql_real_connect - mysql_query - mysql_ping - mysql_options - mysql_num_rows - mysql_num_fields - mysql_list_tables - mysql_list_processes - mysql_list_fields - mysql_list_dbs - mysql_kill - mysql_insert_id - mysql_init - mysql_info - mysql_get_server_info - mysql_get_proto_info - mysql_get_host_info - mysql_get_client_info - mysql_free_result - mysql_field_tell - mysql_field_count - mysql_field_seek - mysql_fetch_row - mysql_fetch_lengths - mysql_fetch_fields - mysql_fetch_field_direct - mysql_fetch_field - mysql_escape_string - mysql_real_escape_string - mysql_error - mysql_errno - mysql_eof - mysql_dump_debug_info - mysql_drop_db - mysql_debug - mysql_data_seek - mysql_create_db - mysql_character_set_name - mysql_change_user - mysql_connect - mysql_close - mysql_affected_rows - mysql_thread_init - mysql_thread_end - mysql_send_query - mysql_read_query_result - mysql_refresh - mysql_odbc_escape_string - myodbc_remove_escape diff --git a/netware/mw/mwenv b/netware/mw/mwenv deleted file mode 100644 index 31500ae400f..00000000000 --- a/netware/mw/mwenv +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/sh - -export MYDEV="F:/mydev" - -export MWCNWx86Includes="$MYDEV/libc/include;$MYDEV/zlib-1.1.4" -export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib;$MYDEV/zlib-1.1.4" -export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib;libz.a" - -export WINEPATH="$MYDEV/mw/bin" - -export PATH="$PATH:$HOME/mydev/mysql-4.1/netware/mw" diff --git a/netware/nwbootstrap b/netware/nwbootstrap deleted file mode 100755 index 3e4b03de0f5..00000000000 --- a/netware/nwbootstrap +++ /dev/null @@ -1,145 +0,0 @@ -#! /bin/sh - -# show executed commands -# set -x - -# stop on errors -set -e - -BD=`pwd` - -build=0 -build_debug=0 -skip_linux=0 - -# parse arguments -for arg do - case "$arg" in - --build) build=1 ;; - --build-debug) build_debug=1 ;; - --skip-linux) skip_linux=1 ;; - *) echo "$0: unrecognized option: $arg" ;; - esac -done - -# run the auto tools -autotools() -{ - for package in $BD $BD/innobase - do - echo "cd $package" - cd $package - rm -f config.cache - echo "aclocal" - aclocal - echo "autoheader" - autoheader - echo "libtoolize --force" - libtoolize --force - echo "aclocal" - aclocal - echo "automake --add-missing --force-missing" - automake --add-missing --force-missing - echo "autoconf" - autoconf - done - - cd $BD -} - -# check the source direcotry -echo "looking for \"$BD/sql/mysqld.cc\"..." -if test ! -r ./sql/mysqld.cc -then - echo "./netware/nwbootstrap must be started from the top source directory" - exit 1 -fi - -# clean -# make -j 2 -k distclean -rm -f NEW-RPMS/* -rm -f */.deps/*.P - -# make files writeable -chmod -R u+rw,g+rw . - -# skip linux? -if test $skip_linux -ne 1 -then - echo "starting linux build..." - - echo "autotools..." - autotools - - echo "configuring for linux..." - ./configure --without-docs --without-innodb - - echo "building for linux..." - make clean all - - echo "copying required linux binaries..." - rm -f */*.linux - cp extra/comp_err extra/comp_err.linux - cp libmysql/conf_to_src libmysql/conf_to_src.linux - cp libmysql/conf_to_src libmysql_r/conf_to_src.linux - cp sql/gen_lex_hash sql/gen_lex_hash.linux - cp strings/conf_to_src strings/conf_to_src.linux - - echo "cleaning linux build..." - make clean distclean -fi - -echo "starting netware build..." - -# remove stale Makefile.in.bk files -rm -rf Makefile.in.bk - -# start mw enviornment -chmod +x ./netware/nwconfigure -chmod +x ./netware/mw/mwenv -chmod +x ./netware/mw/mwasmnlm -chmod +x ./netware/mw/mwccnlm -chmod +x ./netware/mw/mwldnlm - -. ./netware/mw/mwenv - -# link nwconfigure -rm -f ./nwconfigure -ln ./netware/nwconfigure ./nwconfigure - -# save old builds from previous run -if test -e *.tar.gz -then - rm -f *.tar.gz.old - rename .tar.gz .tar.gz.old *.tar.gz -fi - -echo "autotools..." -autotools - -# debug build -if test $build_debug -eq 1 -then - echo "configuring for netware (debug)..." - ./nwconfigure --with-debug=full - - echo "building for netware (debug)..." - make clean bin-dist - - # mark the debug build - rename .tar.gz -debug.tar.gz *.tar.gz -fi - -# release build -if test $build -eq 1 -then - echo "configuring for netware..." - ./nwconfigure - - echo "building for netware..." - make clean bin-dist -fi - -echo "done" - - diff --git a/netware/nwconfigure b/netware/nwconfigure deleted file mode 100644 index 3d89377dea8..00000000000 --- a/netware/nwconfigure +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/sh -CMD="\ - AR='mwldnlm' \ - AR_FLAGS='-type library -o' \ - AS='mwasmnlm' \ - CC='mwccnlm -gccincludes' \ - CFLAGS='-dialect c -proc 686 -bool on -relax_pointers -DUSE_OLD_FUNCTIONS' \ - CXX='mwccnlm -gccincludes' \ - CXXFLAGS='-dialect c++ -proc 686 -bool on -relax_pointers' \ - LD='mwldnlm' \ - LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -flags pseudopreemption' \ - RANLIB=: \ - STRIP=: \ - ./configure --host=i686-pc-netware $* \ - --without-docs \ - --enable-local-infile \ - --with-extra-charsets=latin1_de \ - --prefix=N:/mysql \ - " -#rm -f config.cache config.log config.status -echo $CMD -eval $CMD - diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 78eb1343f47..874896c33b4 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -64,16 +64,17 @@ case $system in esac -mkdir $BASE $BASE/bin $BASE/data $BASE/data/mysql $BASE/data/test \ +mkdir $BASE $BASE/bin \ $BASE/include $BASE/lib $BASE/support-files $BASE/share $BASE/scripts \ $BASE/mysql-test $BASE/mysql-test/t $BASE/mysql-test/r \ $BASE/mysql-test/include $BASE/mysql-test/std_data if [ $BASE_SYSTEM != "netware" ] ; then - mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $BASE/man $BASE/man/man1 -fi + mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $BASE/man \ + $BASE/man/man1 $BASE/data $BASE/data/mysql $BASE/data/test -chmod o-rwx $BASE/data $BASE/data/* + chmod o-rwx $BASE/data $BASE/data/* +fi for i in ChangeLog COPYING COPYING.LIB README Docs/INSTALL-BINARY \ MySQLEULA.txt Docs/manual.html Docs/manual.txt Docs/manual_toc.html \ From 92754ae2db37f30ae5eebbfcfbf04b699681f816 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 19:53:53 +0400 Subject: [PATCH 044/267] SELECT BINARY expr is now synonim for SELECT expr COLLATE _bin --- include/my_sys.h | 3 ++- mysql-test/r/type_ranges.result | 2 +- mysys/charset.c | 6 ++++-- sql/item_strfunc.cc | 36 ++++++++++++++++++++++++--------- sql/item_strfunc.h | 6 ++---- sql/set_var.cc | 2 +- sql/sql_lex.cc | 3 ++- sql/sql_yacc.yy | 16 +++++++++++---- 8 files changed, 51 insertions(+), 23 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index c4fc157e6f2..b23de114ede 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -211,7 +211,8 @@ extern const char *get_charset_name(uint cs_number); extern CHARSET_INFO *get_charset(uint cs_number, myf flags); extern my_bool set_default_charset(uint cs, myf flags); extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); -extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, myf flags); +extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, + uint cs_flags, myf my_flags); extern my_bool set_default_charset_by_name(const char *cs_name, myf flags); extern void free_charsets(void); extern char *list_charsets(myf want_flags); /* my_free() this string... */ diff --git a/mysql-test/r/type_ranges.result b/mysql-test/r/type_ranges.result index 8215977ea39..1b2c775509e 100644 --- a/mysql-test/r/type_ranges.result +++ b/mysql-test/r/type_ranges.result @@ -233,7 +233,7 @@ auto bigint(17) unsigned binary PRI 0 select,insert,update,references t1 bigint(1) binary 0 select,insert,update,references t2 char(1) latin1 select,insert,update,references t3 mediumtext latin1 select,insert,update,references -t4 mediumblob binary select,insert,update,references +t4 mediumtext character set latin1 latin1_bin select,insert,update,references select * from t2; auto t1 t2 t3 t4 11 1 a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb diff --git a/mysys/charset.c b/mysys/charset.c index c5d86f9c856..cfe1dcefcaf 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -572,7 +572,9 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags) } -CHARSET_INFO *get_charset_by_csname(const char *cs_name, myf flags) +CHARSET_INFO *get_charset_by_csname(const char *cs_name, + uint cs_flags, + myf flags) { CHARSET_INFO *cs=NULL; CHARSET_INFO **css; @@ -580,7 +582,7 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name, myf flags) for (css= all_charsets; css < all_charsets+255; ++css) { - if ( css[0] && (css[0]->state & MY_CS_PRIMARY) && + if ( css[0] && (css[0]->state & cs_flags) && css[0]->csname && !strcmp(css[0]->csname, cs_name)) { cs= css[0]->number ? get_internal_charset(css[0]->number,flags) : NULL; diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 68f186982ed..5738f217063 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2181,12 +2181,15 @@ String *Item_func_set_collation::val_str(String *str) str=args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; - str->set_charset(set_collation); + str->set_charset(charset()); return str; } bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, Item **ref) { + CHARSET_INFO *set_collation; + String tmp, *str; + const char *colname; char buff[STACK_BUFF_ALLOC]; // Max argument in function used_tables_cache=0; const_item_cache=1; @@ -2195,17 +2198,32 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, return 0; // Fatal error if flag is set! if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1)) return 1; - maybe_null=args[0]->maybe_null; + if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1)) + return 2; + maybe_null=args[0]->maybe_null || args[1]->maybe_null; + + str= args[1]->val_str(&tmp); + colname= str->c_ptr(); + if (!strncmp(colname,"BINARY",6)) + set_collation= get_charset_by_csname(args[0]->charset()->csname, + MY_CS_BINSORT,MYF(0)); + else + set_collation= get_charset_by_name(colname,MYF(0)); + + if (!set_collation) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), str->c_ptr()); + return 1; + } + if (strcmp(args[0]->charset()->csname,set_collation->csname)) { - if (strcmp(set_collation->name,"binary")) - { - my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), - set_collation->name,args[0]->charset()->csname); - return 1; - } + my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), + set_collation->name,args[0]->charset()->csname); + return 1; } set_charset(set_collation); + coercibility= COER_EXPLICIT; with_sum_func= with_sum_func || args[0]->with_sum_func; used_tables_cache=args[0]->used_tables(); @@ -2227,7 +2245,7 @@ bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const func_name() != item_func->func_name()) return 0; Item_func_set_collation *item_func_sc=(Item_func_set_collation*) item; - if (set_collation != item_func_sc->set_collation) + if (charset() != item_func_sc->charset()) return 0; for (uint i=0; i < arg_count ; i++) if (!args[i]->eq(item_func_sc->args[i], binary_cmp)) diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index b01787d0d20..8bfa4317698 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -581,12 +581,10 @@ public: class Item_func_set_collation :public Item_str_func { - CHARSET_INFO *set_collation; public: - Item_func_set_collation(Item *a, CHARSET_INFO *cs) :Item_str_func(a) - { set_collation=cs; } - bool fix_fields(THD *thd,struct st_table_list *tables, Item **ref); + Item_func_set_collation(Item *a, Item *b) :Item_str_func(a,b) {}; String *val_str(String *); + bool fix_fields(THD *thd,struct st_table_list *tables, Item **ref); void fix_length_and_dec() { max_length = args[0]->max_length; } bool eq(const Item *item, bool binary_cmp) const; diff --git a/sql/set_var.cc b/sql/set_var.cc index 1f31633980a..89e86471f67 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1194,7 +1194,7 @@ bool sys_var_thd_client_charset::check(THD *thd, set_var *var) if (!(res=var->value->val_str(&str))) res= &empty_string; - if (!(tmp=get_charset_by_csname(res->c_ptr(),MYF(0)))) + if (!(tmp=get_charset_by_csname(res->c_ptr(),MY_CS_PRIMARY,MYF(0)))) { my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr()); return 1; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 9181b41be67..94c06d41634 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -578,7 +578,8 @@ int yylex(void *arg, void *yythd) */ if ((yylval->lex_str.str[0]=='_') && - (lex->charset=get_charset_by_csname(yylval->lex_str.str+1,MYF(0)))) + (lex->charset=get_charset_by_csname(yylval->lex_str.str+1, + MY_CS_PRIMARY,MYF(0)))) return(UNDERSCORE_CHARSET); else return(IDENT); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 54d70910d57..fe87a1a9a2e 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1304,7 +1304,7 @@ attribute: charset_name: ident { - if (!($$=get_charset_by_csname($1.str,MYF(0)))) + if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0)))) { net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str); YYABORT; @@ -1989,8 +1989,12 @@ expr_expr: { $$= new Item_date_add_interval($1,$3,$4,0); } | expr '-' interval_expr interval { $$= new Item_date_add_interval($1,$3,$4,1); } - | expr COLLATE_SYM collation_name - { $$= new Item_func_set_collation($1,$3); }; + | expr COLLATE_SYM ident + { + $$= new Item_func_set_collation($1,new Item_string($3.str,$3.length, + YYTHD->variables.thd_charset)); + } + ; /* expressions that begin with 'expr' that do NOT follow IN_SYM */ no_in_expr: @@ -2142,7 +2146,11 @@ simple_expr: { Select->add_ftfunc_to_list((Item_func_match *) ($$=new Item_func_match_bool(*$2,$5))); } | ASCII_SYM '(' expr ')' { $$= new Item_func_ascii($3); } - | BINARY expr %prec NEG { $$= new Item_func_set_collation($2,&my_charset_bin); } + | BINARY expr %prec NEG + { + $$= new Item_func_set_collation($2,new Item_string("BINARY",6, + &my_charset_latin1)); + } | CAST_SYM '(' expr AS cast_type ')' { $$= create_func_cast($3, $5); } | CASE_SYM opt_expr WHEN_SYM when_list opt_else END { $$= new Item_func_case(* $4, $2, $5 ); } From 5247c5bf515d5c1ef55b3d56ef87bc2d73628fe2 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 18:23:15 +0200 Subject: [PATCH 045/267] Fix for SHOW VARIABLES on 64-bit platforms --- sql/mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c188a015ef3..7f7d3225b56 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3162,7 +3162,7 @@ struct show_var_st init_vars[]= { {"record_rnd_buffer", (char*) &record_rnd_cache_size, SHOW_LONG}, {"query_buffer_size", (char*) &query_buff_size, SHOW_LONG}, {"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL}, - {"server_id", (char*) &server_id, SHOW_LONG}, + {"server_id", (char*) &server_id, SHOW_INT}, {"slave_net_timeout", (char*) &slave_net_timeout, SHOW_LONG}, {"skip_locking", (char*) &my_disable_locking, SHOW_MY_BOOL}, {"skip_networking", (char*) &opt_disable_networking, SHOW_BOOL}, From 8529b744b7dbddb0be58c7c2a62ab1131a35ccad Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 18:02:56 +0100 Subject: [PATCH 046/267] fixed Field::eq() to work with CHAR(0) fields BitKeeper/etc/ignore: Added configure.lineno innobase/configure.lineno to the ignore list --- .bzrignore | 2 ++ mysql-test/r/delete.result | 4 ++++ mysql-test/t/delete.test | 20 ++++++++++++++++++++ sql/field.h | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/delete.result diff --git a/.bzrignore b/.bzrignore index 5b35d1f6611..7929adbf881 100644 --- a/.bzrignore +++ b/.bzrignore @@ -333,3 +333,5 @@ innobase/autom4te.cache/requests innobase/autom4te.cache/traces.0 innobase/stamp-h1 stamp-h1 +configure.lineno +innobase/configure.lineno diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result new file mode 100644 index 00000000000..169232b72d8 --- /dev/null +++ b/mysql-test/r/delete.result @@ -0,0 +1,4 @@ +bool not_null misc +NULL c 6 +NULL d 7 +bool not_null misc diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test index 953e22cdd55..13fa617b3cf 100644 --- a/mysql-test/t/delete.test +++ b/mysql-test/t/delete.test @@ -35,3 +35,23 @@ create table t1 (a bigint not null, primary key (a,a,a,a,a,a,a,a,a,a)); insert into t1 values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27); delete from t1 where a=27; drop table t1; + +# +# CHAR(0) bug - not actually DELETE bug, but anyway... +# + +CREATE TABLE t1 ( + bool char(0) default NULL, + not_null varchar(20) binary NOT NULL default '', + misc integer not null, + PRIMARY KEY (not_null) +) TYPE=MyISAM; + +INSERT INTO t1 VALUES (NULL,'a',4), (NULL,'b',5), (NULL,'c',6), (NULL,'d',7); + +select * from t1 where misc > 5 and bool is null; +delete from t1 where misc > 5 and bool is null; +select * from t1 where misc > 5 and bool is null; + +drop table t1; + diff --git a/sql/field.h b/sql/field.h index e822f6a71d6..fb3cf2178e2 100644 --- a/sql/field.h +++ b/sql/field.h @@ -64,7 +64,7 @@ public: virtual String *val_str(String*,String *)=0; virtual Item_result result_type () const=0; virtual Item_result cmp_type () const { return result_type(); } - bool eq(Field *field) { return ptr == field->ptr; } + 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()); } From 9541dd83c6f56843f21c4045dc411263e8d408e1 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 19:06:40 +0200 Subject: [PATCH 047/267] ha_innodb.cc: Remove (already commented out) code about storing the latest relay log pos info to InnoDB: we will probably use only the master log pos info when we restart a slave after a crash sql/ha_innodb.cc: Remove (already commented out) code about storing the latest relay log pos info to InnoDB: we will probably use only the master log pos info when we restart a slave after a crash --- sql/ha_innodb.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 1c6de24ed75..d07c015f73e 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -892,10 +892,7 @@ innobase_commit_low( { if (current_thd->slave_thread) { /* Update the replication position info inside InnoDB */ -#ifdef NEED_TO_BE_FIXED - trx->mysql_relay_log_file_name = active_mi->rli.log_file_name; - trx->mysql_relay_log_pos = active_mi->rli.relay_log_pos; -#endif + trx->mysql_master_log_file_name = active_mi->rli.master_log_name; trx->mysql_master_log_pos = ((ib_longlong) From b1a8b36394524ec1acd5b00fb93bab628229c957 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 19:14:37 +0200 Subject: [PATCH 048/267] ha_innodb.cc: Add comment that Guilhem should check master_log_name, pending etc are right if the master log gets rotated sql/ha_innodb.cc: Add comment that Guilhem should check master_log_name, pending etc are right if the master log gets rotated --- sql/ha_innodb.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index d07c015f73e..0af1fb7b50a 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -890,6 +890,10 @@ innobase_commit_low( /*================*/ trx_t* trx) /* in: transaction handle */ { + /* TODO: Guilhem should check if master_log_name, pending + etc. are right if the master log gets rotated! Possible bug here. + Comment by Heikki March 4, 2003. */ + if (current_thd->slave_thread) { /* Update the replication position info inside InnoDB */ From 37d1dd03d8100ea8a963b1fcc80f07d3f7536be6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 18:18:05 +0100 Subject: [PATCH 049/267] - added missing file mysql-test/std_data/des_key_file to source and binary distribution to fix a test failure in test "func_encrypt" --- mysql-test/Makefile.am | 2 ++ scripts/make_binary_distribution.sh | 1 + 2 files changed, 3 insertions(+) diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 06897852f17..66f931133e3 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -31,6 +31,7 @@ dist-hook: $(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include $(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r $(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.001 $(distdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data install-data-local: $(mkinstalldirs) \ @@ -47,6 +48,7 @@ install-data-local: $(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r $(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include $(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data SUFFIXES = .sh diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 78eb1343f47..f0113ee1780 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -183,6 +183,7 @@ done $CP mysql-test/include/*.inc $BASE/mysql-test/include $CP mysql-test/std_data/*.dat mysql-test/std_data/*.001 $BASE/mysql-test/std_data +$CP mysql-test/std_data/des_key_file $BASE/mysql-test/std_data $CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t $CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r From 230147990d21682a382ca19e2e186cf19bfcbe6a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 18:20:11 +0100 Subject: [PATCH 050/267] Many files: Change mode to -rwxrwxr-x netware/BUILD/compile-AUTOTOOLS: Change mode to -rwxrwxr-x netware/BUILD/compile-linux-tools: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-END: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-START: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-all: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-debug: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-standard: Change mode to -rwxrwxr-x netware/BUILD/mwasmnlm: Change mode to -rwxrwxr-x netware/BUILD/mwccnlm: Change mode to -rwxrwxr-x netware/BUILD/mwenv: Change mode to -rwxrwxr-x netware/BUILD/mwldnlm: Change mode to -rwxrwxr-x netware/BUILD/nwbootstrap: Change mode to -rwxrwxr-x --- netware/BUILD/compile-AUTOTOOLS | 0 netware/BUILD/compile-linux-tools | 0 netware/BUILD/compile-netware-END | 0 netware/BUILD/compile-netware-START | 0 netware/BUILD/compile-netware-all | 0 netware/BUILD/compile-netware-debug | 0 netware/BUILD/compile-netware-standard | 0 netware/BUILD/mwasmnlm | 0 netware/BUILD/mwccnlm | 0 netware/BUILD/mwenv | 0 netware/BUILD/mwldnlm | 0 netware/BUILD/nwbootstrap | 0 12 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 netware/BUILD/compile-AUTOTOOLS mode change 100644 => 100755 netware/BUILD/compile-linux-tools mode change 100644 => 100755 netware/BUILD/compile-netware-END mode change 100644 => 100755 netware/BUILD/compile-netware-START mode change 100644 => 100755 netware/BUILD/compile-netware-all mode change 100644 => 100755 netware/BUILD/compile-netware-debug mode change 100644 => 100755 netware/BUILD/compile-netware-standard mode change 100644 => 100755 netware/BUILD/mwasmnlm mode change 100644 => 100755 netware/BUILD/mwccnlm mode change 100644 => 100755 netware/BUILD/mwenv mode change 100644 => 100755 netware/BUILD/mwldnlm mode change 100644 => 100755 netware/BUILD/nwbootstrap diff --git a/netware/BUILD/compile-AUTOTOOLS b/netware/BUILD/compile-AUTOTOOLS old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-linux-tools b/netware/BUILD/compile-linux-tools old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-END b/netware/BUILD/compile-netware-END old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-START b/netware/BUILD/compile-netware-START old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-all b/netware/BUILD/compile-netware-all old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-debug b/netware/BUILD/compile-netware-debug old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-standard b/netware/BUILD/compile-netware-standard old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwasmnlm b/netware/BUILD/mwasmnlm old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwccnlm b/netware/BUILD/mwccnlm old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwldnlm b/netware/BUILD/mwldnlm old mode 100644 new mode 100755 diff --git a/netware/BUILD/nwbootstrap b/netware/BUILD/nwbootstrap old mode 100644 new mode 100755 From 5f1f2216b3424cf898cf13a39df9a5159c455419 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 12:30:29 -0500 Subject: [PATCH 051/267] Many files: Change mode to -rwxrwxr-x netware/BUILD/compile-AUTOTOOLS: Change mode to -rwxrwxr-x netware/BUILD/compile-linux-tools: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-END: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-START: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-all: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-debug: Change mode to -rwxrwxr-x netware/BUILD/compile-netware-standard: Change mode to -rwxrwxr-x netware/BUILD/mwasmnlm: Change mode to -rwxrwxr-x netware/BUILD/mwccnlm: Change mode to -rwxrwxr-x netware/BUILD/mwenv: Change mode to -rwxrwxr-x netware/BUILD/mwldnlm: Change mode to -rwxrwxr-x --- netware/BUILD/compile-AUTOTOOLS | 0 netware/BUILD/compile-linux-tools | 0 netware/BUILD/compile-netware-END | 0 netware/BUILD/compile-netware-START | 0 netware/BUILD/compile-netware-all | 0 netware/BUILD/compile-netware-debug | 0 netware/BUILD/compile-netware-standard | 0 netware/BUILD/mwasmnlm | 0 netware/BUILD/mwccnlm | 0 netware/BUILD/mwenv | 0 netware/BUILD/mwldnlm | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 netware/BUILD/compile-AUTOTOOLS mode change 100644 => 100755 netware/BUILD/compile-linux-tools mode change 100644 => 100755 netware/BUILD/compile-netware-END mode change 100644 => 100755 netware/BUILD/compile-netware-START mode change 100644 => 100755 netware/BUILD/compile-netware-all mode change 100644 => 100755 netware/BUILD/compile-netware-debug mode change 100644 => 100755 netware/BUILD/compile-netware-standard mode change 100644 => 100755 netware/BUILD/mwasmnlm mode change 100644 => 100755 netware/BUILD/mwccnlm mode change 100644 => 100755 netware/BUILD/mwenv mode change 100644 => 100755 netware/BUILD/mwldnlm diff --git a/netware/BUILD/compile-AUTOTOOLS b/netware/BUILD/compile-AUTOTOOLS old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-linux-tools b/netware/BUILD/compile-linux-tools old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-END b/netware/BUILD/compile-netware-END old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-START b/netware/BUILD/compile-netware-START old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-all b/netware/BUILD/compile-netware-all old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-debug b/netware/BUILD/compile-netware-debug old mode 100644 new mode 100755 diff --git a/netware/BUILD/compile-netware-standard b/netware/BUILD/compile-netware-standard old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwasmnlm b/netware/BUILD/mwasmnlm old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwccnlm b/netware/BUILD/mwccnlm old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv old mode 100644 new mode 100755 diff --git a/netware/BUILD/mwldnlm b/netware/BUILD/mwldnlm old mode 100644 new mode 100755 From b10c79a889b33ab706ba22ededa6637bc8e5a360 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 22:24:00 +0100 Subject: [PATCH 052/267] - added missing file mysql-test/std_data/des_key_file to source and binary distribution to fix a test failure in test "func_encrypt" --- mysql-test/Makefile.am | 2 ++ scripts/make_binary_distribution.sh | 1 + 2 files changed, 3 insertions(+) diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 9f0936b1264..6c53e7949c7 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -31,6 +31,7 @@ dist-hook: $(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include $(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r $(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data install-data-local: $(mkinstalldirs) \ @@ -47,6 +48,7 @@ install-data-local: $(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r $(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include $(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data SUFFIXES = .sh diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 874896c33b4..2fff531c4c8 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -184,6 +184,7 @@ done $CP mysql-test/include/*.inc $BASE/mysql-test/include $CP mysql-test/std_data/*.dat mysql-test/std_data/*.001 $BASE/mysql-test/std_data +$CP mysql-test/std_data/des_key_file $BASE/mysql-test/std_data $CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t $CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r From ade3fbc390bcb39f7459ac486ab7b71cd2508e0e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 14:22:30 -0800 Subject: [PATCH 053/267] Fix EXPLAIN bug with binary protocol Added new client tests (EXPLAIN + DECIMAL conv) sql/sql_prepare.cc: Fix EXPLAIN bug with binary protocol tests/client_test.c: New tests for EXPLAIN + DECIMAL conv --- sql/sql_prepare.cc | 58 +++++++----- tests/client_test.c | 221 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 249 insertions(+), 30 deletions(-) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 7639f32353c..2e5b60d5f3f 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -572,34 +572,42 @@ static bool mysql_test_select_fields(PREP_STMT *stmt, TABLE_LIST *tables, if (open_and_lock_tables(thd, tables)) DBUG_RETURN(1); - - fix_tables_pointers(thd->lex.all_selects_list); - if (!result && !(result= new select_send())) + if (lex->describe) { - delete select_lex->having; - delete select_lex->where; - send_error(thd, ER_OUT_OF_RESOURCES); - DBUG_RETURN(1); + if (!(result= new select_send())) + { + send_error(thd, ER_OUT_OF_RESOURCES); + DBUG_RETURN(1); + } + if (send_prep_stmt(stmt, 0) || send_item_params(stmt)) + DBUG_RETURN(1); + } + else + { + fix_tables_pointers(thd->lex.all_selects_list); + if (!result && !(result= new select_send())) + { + delete select_lex->having; + delete select_lex->where; + send_error(thd, ER_OUT_OF_RESOURCES); + DBUG_RETURN(1); + } + + JOIN *join= new JOIN(thd, fields, select_options, result); + thd->used_tables= 0; // Updated by setup_fields + + if (join->prepare(&select_lex->ref_pointer_array, tables, + wild_num, conds, og_num, order, group, having, proc, + select_lex, unit, 0, 0)) + DBUG_RETURN(1); + + if (send_prep_stmt(stmt, fields.elements) || + thd->protocol_simple.send_fields(&fields, 0) || + send_item_params(stmt)) + DBUG_RETURN(1); + join->cleanup(thd); } - - JOIN *join= new JOIN(thd, fields, select_options, result); - thd->used_tables= 0; // Updated by setup_fields - - if (join->prepare(&select_lex->ref_pointer_array, tables, - wild_num, conds, og_num, order, group, having, proc, - select_lex, unit, 0, 0)) - DBUG_RETURN(1); - - /* - Currently return only column list info only, and we are not - sending any info on where clause. - */ - if (send_prep_stmt(stmt, fields.elements) || - thd->protocol_simple.send_fields(&fields, 0) || - send_item_params(stmt)) - DBUG_RETURN(1); - join->cleanup(thd); DBUG_RETURN(0); } diff --git a/tests/client_test.c b/tests/client_test.c index 4d8be29c525..bd2ec4930ef 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -5926,7 +5926,7 @@ static void test_field_misc() /* To test SET OPTION feature with prepare stmts - bug #85 + bug #85 (reported by mark@mysql.com) */ static void test_set_option() { @@ -5991,7 +5991,7 @@ static void test_set_option() /* To test a misc GRANT option - bug #89 + bug #89 (reported by mark@mysql.com) */ static void test_prepare_grant() { @@ -6084,8 +6084,8 @@ static void test_prepare_grant() /* To test a crash when invalid/corrupted .frm is used in the - SHOW TABLE STATUS (in debug mode) - bug #93 + SHOW TABLE STATUS + bug #93 (reported by serg@mysql.com). */ static void test_frm_bug() { @@ -6167,6 +6167,215 @@ static void test_frm_bug() mysql_query(mysql,"drop table if exists test_frm_bug"); } +/* + To test DECIMAL conversion +*/ +static void test_decimal_bug() +{ + MYSQL_STMT *stmt; + MYSQL_BIND bind[1]; + double data; + int rc; + my_bool is_null; + + myheader("test_decimal_bug"); + + mysql_autocommit(mysql, TRUE); + + rc= mysql_query(mysql,"drop table if exists test_decimal_bug"); + myquery(rc); + + rc = mysql_query(mysql, "create table test_decimal_bug(c1 decimal(10,2))"); + myquery(rc); + + rc = mysql_query(mysql, "insert into test_decimal_bug value(8),(10.22),(5.61)"); + myquery(rc); + + stmt = mysql_prepare(mysql,"select c1 from test_decimal_bug where c1= ?",50); + mystmt_init(stmt); + + bind[0].buffer_type= MYSQL_TYPE_DOUBLE; + bind[0].buffer= (char *)&data; + bind[0].buffer_length= 0; + bind[0].is_null= &is_null; + bind[0].length= 0; + + is_null= 0; + rc = mysql_bind_param(stmt, bind); + mystmt(stmt,rc); + + data= 8.0; + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + data=0; + rc = mysql_bind_result(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + + fprintf(stdout, "\n data: %g", data); + myassert(data == 8.0); + + rc = mysql_fetch(stmt); + myassert(rc == MYSQL_NO_DATA); + + data= 5.61; + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + data=0; + rc = mysql_bind_result(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + + fprintf(stdout, "\n data: %g", data); + myassert(data == 5.61); + + rc = mysql_fetch(stmt); + myassert(rc == MYSQL_NO_DATA); + + is_null= 1; + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + rc = mysql_fetch(stmt); + myassert(rc == MYSQL_NO_DATA); + + data= 10.22; is_null= 0; + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + data=0; + rc = mysql_bind_result(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + + fprintf(stdout, "\n data: %g", data); + myassert(data == 10.22); + + rc = mysql_fetch(stmt); + myassert(rc == MYSQL_NO_DATA); + + mysql_stmt_close(stmt); +} + + +/* + To test EXPLAIN bug + bug #115 (reported by mark@mysql.com & georg@php.net). +*/ + +static void test_explain_bug() +{ + MYSQL_STMT *stmt; + MYSQL_RES *result; + int rc; + + myheader("test_explain_bug"); + + mysql_autocommit(mysql,TRUE); + + rc = mysql_query(mysql, "DROP TABLE IF EXISTS test_explain"); + myquery(rc); + + rc = mysql_query(mysql, "CREATE TABLE test_explain(id int, name char(2))"); + myquery(rc); + + stmt = mysql_prepare(mysql, "explain test_explain", 30); + mystmt_init(stmt); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + myassert( 2 == my_process_stmt_result(stmt)); + + result = mysql_prepare_result(stmt); + mytest(result); + + fprintf(stdout, "\n total fields in the result: %d", + mysql_num_fields(result)); + myassert(7 == mysql_num_fields(result)); + + verify_prepare_field(result,0,"Field","",MYSQL_TYPE_STRING, + "","","",NAME_LEN); + + verify_prepare_field(result,1,"Type","",MYSQL_TYPE_STRING, + "","","",40); + + verify_prepare_field(result,2,"Collation","",MYSQL_TYPE_STRING, + "","","",40); + + verify_prepare_field(result,3,"Null","",MYSQL_TYPE_STRING, + "","","",1); + + verify_prepare_field(result,4,"Key","",MYSQL_TYPE_STRING, + "","","",3); + + verify_prepare_field(result,5,"Default","",MYSQL_TYPE_STRING, + "","","",NAME_LEN); + + verify_prepare_field(result,6,"Extra","",MYSQL_TYPE_STRING, + "","","",20); + + mysql_free_result(result); + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "explain select id, name FROM test_explain", 50); + mystmt_init(stmt); + + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + myassert( 1 == my_process_stmt_result(stmt)); + + result = mysql_prepare_result(stmt); + mytest(result); + + fprintf(stdout, "\n total fields in the result: %d", + mysql_num_fields(result)); + myassert(10 == mysql_num_fields(result)); + + verify_prepare_field(result,0,"id","",MYSQL_TYPE_LONGLONG, + "","","",3); + + verify_prepare_field(result,1,"select_type","",MYSQL_TYPE_STRING, + "","","",19); + + verify_prepare_field(result,2,"table","",MYSQL_TYPE_STRING, + "","","",NAME_LEN); + + verify_prepare_field(result,3,"type","",MYSQL_TYPE_STRING, + "","","",10); + + verify_prepare_field(result,4,"possible_keys","",MYSQL_TYPE_STRING, + "","","",NAME_LEN*32); + + verify_prepare_field(result,5,"key","",MYSQL_TYPE_STRING, + "","","",NAME_LEN); + + verify_prepare_field(result,6,"key_len","",MYSQL_TYPE_LONGLONG, + "","","",3); + + verify_prepare_field(result,7,"ref","",MYSQL_TYPE_STRING, + "","","",NAME_LEN*16); + + verify_prepare_field(result,8,"rows","",MYSQL_TYPE_LONGLONG, + "","","",10); + + verify_prepare_field(result,9,"Extra","",MYSQL_TYPE_STRING, + "","","",255); + + mysql_free_result(result); + mysql_stmt_close(stmt); +} + + /* Read and parse arguments and MySQL options from my.cnf @@ -6385,10 +6594,12 @@ int main(int argc, char **argv) test_ushort_bug(); /* test a simple conv bug from php */ test_sshort_bug(); /* test a simple conv bug from php */ test_stiny_bug(); /* test a simple conv bug from php */ - test_field_misc(); /* check the field info for misc case, bug: #74 */ + test_field_misc(); /* check the field info for misc case, bug: #74 */ test_set_option(); /* test the SET OPTION feature, bug #85 */ test_prepare_grant(); /* to test the GRANT command, bug #89 */ test_frm_bug(); /* test the crash when .frm is invalid, bug #93 */ + test_explain_bug(); /* test for the EXPLAIN, bug #115 */ + test_decimal_bug(); /* test for the decimal bug */ end_time= time((time_t *)0); total_time+= difftime(end_time, start_time); From df22e3c21586b30782fd85d423619e40b1d2f558 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Mar 2003 14:31:42 -0800 Subject: [PATCH 054/267] sql_prepare.cc: Remove the unused code (from previous commit) sql/sql_prepare.cc: Remove the unused code (from previous commit) --- sql/sql_prepare.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 2e5b60d5f3f..3d85a46f3fd 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -575,11 +575,6 @@ static bool mysql_test_select_fields(PREP_STMT *stmt, TABLE_LIST *tables, if (lex->describe) { - if (!(result= new select_send())) - { - send_error(thd, ER_OUT_OF_RESOURCES); - DBUG_RETURN(1); - } if (send_prep_stmt(stmt, 0) || send_item_params(stmt)) DBUG_RETURN(1); } From b7b75213dc2df3d8095889737cf62fac66e9cf9c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 08:13:37 +0100 Subject: [PATCH 055/267] - typo fix (replaced blanks with a tab) --- 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 6c53e7949c7..fb97dd5b1de 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -31,7 +31,7 @@ dist-hook: $(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include $(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r $(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data - $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data + $(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data install-data-local: $(mkinstalldirs) \ From 64d48cd6d1d668256bdb639c6467be6112c58164 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 12:37:39 +0400 Subject: [PATCH 056/267] SET NAMES has been extended to support optional collation: SET NAMES [COLLATE ] --- mysql-test/r/ctype_collate.result | 18 ++++++++++++++++ mysql-test/t/ctype_collate.test | 14 +++++++++++++ sql/set_var.cc | 18 ++++++++-------- sql/set_var.h | 4 ++-- sql/sql_yacc.yy | 34 ++++++++++++++++++++++++------- 5 files changed, 70 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index 4217bd5de23..4e48a94bb57 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -510,4 +510,22 @@ t1 CREATE TABLE `t1` ( SHOW FIELDS FROM t1; Field Type Collation Null Key Default Extra latin1_f char(32) latin1_bin YES NULL +SET NAMES 'latin1'; +SET NAMES latin1; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +latin1 latin1 2 1 +SET NAMES latin1 COLLATE latin1_bin; +SET NAMES 'latin1' COLLATE 'latin1_bin'; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +latin1 latin1_bin 2 0 +SET NAMES DEFAULT; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +latin1 latin1 2 1 +SET NAMES latin1 COLLATE koi8r; +COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' +SET NAMES 'DEFAULT'; +Unknown character set: 'DEFAULT' DROP TABLE t1; diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 26a18c5f279..3dc6d3a2dfe 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -127,4 +127,18 @@ ALTER TABLE t1 CHARACTER SET latin1 COLLATE latin1_bin; SHOW CREATE TABLE t1; SHOW FIELDS FROM t1; +SET NAMES 'latin1'; +SET NAMES latin1; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +SET NAMES latin1 COLLATE latin1_bin; +SET NAMES 'latin1' COLLATE 'latin1_bin'; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +SET NAMES DEFAULT; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +--error 1251 +SET NAMES latin1 COLLATE koi8r; +--error 1115 +SET NAMES 'DEFAULT'; + + DROP TABLE t1; diff --git a/sql/set_var.cc b/sql/set_var.cc index 89e86471f67..0c73da992e1 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -104,7 +104,7 @@ sys_var_str sys_charset("character_set", sys_check_charset, sys_update_charset, sys_set_default_charset); -sys_var_thd_client_charset sys_client_charset("client_character_set"); +sys_var_client_collation sys_client_collation("client_collation"); sys_var_thd_conv_charset sys_convert_charset("convert_character_set"); sys_var_bool_ptr sys_concurrent_insert("concurrent_insert", &myisam_concurrent_insert); @@ -332,7 +332,7 @@ sys_var *sys_variables[]= &sys_binlog_cache_size, &sys_buffer_results, &sys_bulk_insert_buff_size, - &sys_client_charset, + &sys_client_collation, &sys_concurrent_insert, &sys_connect_timeout, &sys_convert_charset, @@ -439,7 +439,7 @@ struct show_var_st init_vars[]= { {sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS}, {sys_charset.name, (char*) &sys_charset, SHOW_SYS}, {"character_sets", (char*) &charsets_list, SHOW_CHAR_PTR}, - {sys_client_charset.name, (char*) &sys_client_charset, SHOW_SYS}, + {sys_client_collation.name, (char*) &sys_client_collation, SHOW_SYS}, {sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS}, {sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS}, {sys_convert_charset.name, (char*) &sys_convert_charset, SHOW_SYS}, @@ -1177,7 +1177,7 @@ byte *sys_var_thd_conv_charset::value_ptr(THD *thd, enum_var_type type) } -bool sys_var_thd_client_charset::check(THD *thd, set_var *var) +bool sys_var_client_collation::check(THD *thd, set_var *var) { CHARSET_INFO *tmp; char buff[80]; @@ -1187,14 +1187,14 @@ bool sys_var_thd_client_charset::check(THD *thd, set_var *var) { var->save_result.charset= (var->type != OPT_GLOBAL ? global_system_variables.thd_charset - : default_charset_info); + : thd->db_charset); return 0; } if (!(res=var->value->val_str(&str))) res= &empty_string; - if (!(tmp=get_charset_by_csname(res->c_ptr(),MY_CS_PRIMARY,MYF(0)))) + if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0)))) { my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr()); return 1; @@ -1203,7 +1203,7 @@ bool sys_var_thd_client_charset::check(THD *thd, set_var *var) return 0; } -bool sys_var_thd_client_charset::update(THD *thd, set_var *var) +bool sys_var_client_collation::update(THD *thd, set_var *var) { if (var->type == OPT_GLOBAL) global_system_variables.thd_charset= var->save_result.charset; @@ -1217,12 +1217,12 @@ bool sys_var_thd_client_charset::update(THD *thd, set_var *var) } -byte *sys_var_thd_client_charset::value_ptr(THD *thd, enum_var_type type) +byte *sys_var_client_collation::value_ptr(THD *thd, enum_var_type type) { CHARSET_INFO *cs= ((type == OPT_GLOBAL) ? global_system_variables.thd_charset : thd->variables.thd_charset); - return cs ? (byte*) cs->csname : (byte*) ""; + return cs ? (byte*) cs->name : (byte*) ""; } diff --git a/sql/set_var.h b/sql/set_var.h index d80285d0e40..b84e0b888e2 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -423,10 +423,10 @@ public: bool check_default(enum_var_type type) { return 0; } }; -class sys_var_thd_client_charset :public sys_var_thd +class sys_var_client_collation :public sys_var_thd { public: - sys_var_thd_client_charset(const char *name_arg) :sys_var_thd(name_arg) + sys_var_client_collation(const char *name_arg) :sys_var_thd(name_arg) {} bool check(THD *thd, set_var *var); bool update(THD *thd, set_var *var); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index fe87a1a9a2e..e5d94c30521 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -635,6 +635,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %type user grant_user %type + opt_collate charset_name charset_name_or_default collation_name @@ -1302,7 +1303,7 @@ attribute: charset_name: - ident + ident_or_text { if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0)))) { @@ -1316,7 +1317,7 @@ charset_name_or_default: | DEFAULT { $$=NULL; } ; collation_name: - ident + ident_or_text { if (!($$=get_charset_by_name($1.str,MYF(0)))) { @@ -1325,6 +1326,11 @@ collation_name: } }; +opt_collate: + /* empty */ { $$=NULL; } + | COLLATE_SYM collation_name { $$=$2; } + ; + collation_name_or_default: collation_name { $$=$1; } | DEFAULT { $$=NULL; } ; @@ -1989,7 +1995,7 @@ expr_expr: { $$= new Item_date_add_interval($1,$3,$4,0); } | expr '-' interval_expr interval { $$= new Item_date_add_interval($1,$3,$4,1); } - | expr COLLATE_SYM ident + | expr COLLATE_SYM ident_or_text { $$= new Item_func_set_collation($1,new Item_string($3.str,$3.length, YYTHD->variables.thd_charset)); @@ -4216,12 +4222,26 @@ option_value: find_sys_var("convert_character_set"), $4)); } - | NAMES_SYM opt_equal set_expr_or_default + | NAMES_SYM charset_name_or_default opt_collate { - LEX *lex=Lex; + THD* thd= YYTHD; + LEX *lex= &thd->lex; + system_variables vars= thd->variables; + CHARSET_INFO *cs= $2 ? $2 : thd->db_charset; + CHARSET_INFO *cl= $3 ? $3 : cs; + + if ((cl != cs) && strcmp(cs->csname,cl->csname)) + { + net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH, + cl->name,cs->csname); + YYABORT; + } + Item_string *csname= new Item_string(cl->name, + strlen(cl->name), + &my_charset_latin1); lex->var_list.push_back(new set_var(lex->option_type, - find_sys_var("client_character_set"), - $3)); + find_sys_var("client_collation"), + csname)); } | PASSWORD equal text_or_password { From 4c1782eab758c383dbd211292d26efb058794ff7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 09:49:28 +0100 Subject: [PATCH 057/267] - safeguard against an endless loop when MIT pthreads are not installed (Bug #121) --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 2e28b1d7db4..35a2e3702c1 100644 --- a/configure.in +++ b/configure.in @@ -2583,7 +2583,7 @@ EOF echo "" echo "Configuring MIT Pthreads" # We will never install so installation paths are not needed. - (cd mit-pthreads; sh ./configure) + (cd mit-pthreads && sh ./configure) || exit 1 echo "End of MIT Pthreads configuration" echo "" LIBS="$MT_LD_ADD $LIBS" From dbb8c13d7ae8901cd1be56b31562d856b63a503a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 12:42:10 +0100 Subject: [PATCH 058/267] - Fixed URL to Using_stack_trace.html (the old one still works, but gets redirected to the new location --- sql/stacktrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/stacktrace.c b/sql/stacktrace.c index f5c0a59b572..73a7ecdc7ba 100644 --- a/sql/stacktrace.c +++ b/sql/stacktrace.c @@ -197,7 +197,7 @@ terribly wrong...\n"); fprintf(stderr, "Stack trace seems successful - bottom reached\n"); end: - fprintf(stderr, "Please read http://www.mysql.com/doc/U/s/Using_stack_trace.html and follow instructions on how to resolve the stack trace. Resolved\n\ + fprintf(stderr, "Please read http://www.mysql.com/doc/en/Using_stack_trace.html and follow instructions on how to resolve the stack trace. Resolved\n\ stack trace is much more helpful in diagnosing the problem, so please do \n\ resolve it\n"); } From dfa4fad414aa5d1cd1680c62d5a5d421b966f1be Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 16:07:12 +0400 Subject: [PATCH 059/267] Bug fix: we should set proper my_errno --- myisam/rt_index.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/myisam/rt_index.c b/myisam/rt_index.c index 131ab5bd0b7..e3f64940203 100644 --- a/myisam/rt_index.c +++ b/myisam/rt_index.c @@ -158,7 +158,10 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length, MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) + { + my_errno= HA_ERR_END_OF_FILE; return -1; + } /* Save searched key */ memcpy(info->lastkey2, key, keyinfo->keylength - info->s->base.rec_reflength); @@ -217,7 +220,10 @@ int rtree_find_next(MI_INFO *info, uint keynr, uint search_flag) } } if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) + { + my_errno= HA_ERR_END_OF_FILE; return -1; + } nod_cmp_flag = ((search_flag & (MBR_EQUAL | MBR_WITHIN)) ? MBR_WITHIN : MBR_INTERSECT); @@ -340,7 +346,10 @@ int rtree_get_first(MI_INFO *info, uint keynr, uint key_length) MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) + { + my_errno= HA_ERR_END_OF_FILE; return -1; + } info->rtree_recursion_depth = -1; info->buff_used = 1; @@ -383,7 +392,10 @@ int rtree_get_next(MI_INFO *info, uint keynr, uint key_length) else { if ((root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) + { + my_errno= HA_ERR_END_OF_FILE; return -1; + } return rtree_get_req(info, &keyinfo[keynr], key_length, root, 0); } @@ -732,7 +744,7 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) { - my_errno = HA_ERR_KEY_NOT_FOUND; + my_errno= HA_ERR_END_OF_FILE; return -1; } From 121d4f478fd559d8b9b4b2abb89a66e3f90c51aa Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 13:10:23 +0100 Subject: [PATCH 060/267] my_dir.h is included by raid.h --- include/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/Makefile.am b/include/Makefile.am index 7a02b38020d..cb6da7bbb3a 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -20,12 +20,12 @@ pkginclude_HEADERS = dbug.h m_string.h my_sys.h my_list.h \ mysql.h mysql_com.h mysqld_error.h mysql_embed.h \ my_semaphore.h my_pthread.h my_no_pthread.h raid.h \ errmsg.h my_global.h my_net.h my_alloc.h \ - my_getopt.h sslopt-longopts.h \ + my_getopt.h sslopt-longopts.h my_dir.h \ sslopt-vars.h sslopt-case.h $(BUILT_SOURCES) noinst_HEADERS = config-win.h config-os2.h config-netware.h \ nisam.h heap.h merge.h my_bitmap.h\ myisam.h myisampack.h myisammrg.h ft_global.h\ - my_dir.h mysys_err.h my_base.h \ + mysys_err.h my_base.h \ my_nosys.h my_alarm.h queues.h rijndael.h sha1.h \ my_aes.h my_tree.h hash.h thr_alarm.h \ thr_lock.h t_ctype.h violite.h md5.h mysql_version.h.in From a6597812a8661841d642303ad5d945bb0b7fb6c2 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 16:43:10 +0400 Subject: [PATCH 061/267] New fields in CHARSET_INFO structure to optimize searching for binary and primary collations in the future --- include/m_ctype.h | 2 + mysys/charset.c | 10 +++++ sql/sql_yacc.yy | 28 ++++++------ strings/ctype-big5.c | 2 +- strings/ctype-bin.c | 2 +- strings/ctype-czech.c | 2 +- strings/ctype-euc_kr.c | 2 +- strings/ctype-extra.c | 94 ++++++++++++++++++++++++++++----------- strings/ctype-gb2312.c | 2 +- strings/ctype-gbk.c | 2 +- strings/ctype-latin1.c | 2 +- strings/ctype-latin1_de.c | 2 +- strings/ctype-sjis.c | 2 +- strings/ctype-tis620.c | 2 +- strings/ctype-ujis.c | 2 +- strings/ctype-utf8.c | 4 +- strings/ctype-win1250ch.c | 2 +- strings/ctype.c | 10 +++++ 18 files changed, 116 insertions(+), 56 deletions(-) diff --git a/include/m_ctype.h b/include/m_ctype.h index 4ed5c6eec6a..19c7d315f4a 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -77,6 +77,8 @@ typedef struct my_uni_idx_st typedef struct charset_info_st { uint number; + uint primary_number; + uint binary_number; uint state; const char *csname; const char *name; diff --git a/mysys/charset.c b/mysys/charset.c index cfe1dcefcaf..b1abd460c2e 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -257,7 +257,13 @@ static int add_collation(CHARSET_INFO *cs) return MY_XML_ERROR; bzero((void*)all_charsets[cs->number],sizeof(CHARSET_INFO)); } + + if (cs->primary_number == cs->number) + cs->state |= MY_CS_PRIMARY; + if (cs->primary_number == cs->number) + cs->state |= MY_CS_BINSORT; + if (!(all_charsets[cs->number]->state & MY_CS_COMPILED)) { simple_cs_copy_data(all_charsets[cs->number],cs); @@ -267,6 +273,10 @@ static int add_collation(CHARSET_INFO *cs) all_charsets[cs->number]->state |= MY_CS_LOADED; } } + else + { + all_charsets[cs->number]->state |= cs->state; + } cs->number= 0; cs->name= NULL; cs->state= 0; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e5d94c30521..e093a822303 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -674,7 +674,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); handler_rkey_function handler_read_or_scan single_multi table_wild_list table_wild_one opt_wild union_clause union_list union_option - precision subselect_start opt_and + precision subselect_start opt_and charset subselect_end select_var_list select_var_list_init help opt_len END_OF_INPUT @@ -927,10 +927,9 @@ create_database_options: create_database_option: COLLATE_SYM collation_name_or_default { Lex->create_info.table_charset=$2; } - | opt_default CHAR_SYM SET charset_name_or_default - { Lex->create_info.table_charset=$4; } - | opt_default CHARSET charset_name_or_default - { Lex->create_info.table_charset=$3; }; + | opt_default charset charset_name_or_default + { Lex->create_info.table_charset=$3; } + ; opt_table_options: /* empty */ { $$= 0; } @@ -989,16 +988,11 @@ create_table_option: table_list->next=0; lex->create_info.used_fields|= HA_CREATE_USED_UNION; } - | opt_default CHARSET opt_equal charset_name_or_default + | opt_default charset opt_equal charset_name_or_default { Lex->create_info.table_charset= $4; Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; } - | opt_default CHAR_SYM SET opt_equal charset_name_or_default - { - Lex->create_info.table_charset= $5; - Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; - } | COLLATE_SYM opt_equal collation_name_or_default { Lex->create_info.table_charset= $3; @@ -1301,6 +1295,10 @@ attribute: } ; +charset: + CHAR_SYM SET {} + | CHARSET {} + ; charset_name: ident_or_text @@ -1352,7 +1350,7 @@ opt_binary: YYABORT; } } - | CHAR_SYM SET charset_name { Lex->charset=$3; } ; + | charset charset_name { Lex->charset=$2; } ; opt_primary: /* empty */ @@ -3543,7 +3541,7 @@ show_param: thd->lex.sql_command= SQLCOM_SHOW_VARIABLES; thd->lex.option_type= (enum_var_type) $1; } - | CHAR_SYM SET wild + | charset wild { Lex->sql_command= SQLCOM_SHOW_CHARSETS; } | LOGS_SYM { Lex->sql_command= SQLCOM_SHOW_LOGS; } @@ -4215,12 +4213,12 @@ option_value: find_sys_var("tx_isolation"), new Item_int((int32) $4))); } - | CHAR_SYM SET opt_equal set_expr_or_default + | charset opt_equal set_expr_or_default { LEX *lex=Lex; lex->var_list.push_back(new set_var(lex->option_type, find_sys_var("convert_character_set"), - $4)); + $3)); } | NAMES_SYM charset_name_or_default opt_collate { diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index 7827b8714ec..c1d6d9e63de 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -6233,7 +6233,7 @@ my_mb_wc_big5(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_big5 = { - 1, /* number */ + 1,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "big5", /* cs name */ "big5", /* name */ diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index c219bd95fd4..e7c3a941109 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -295,7 +295,7 @@ static int my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_bin = { - 63, /* number */ + 63,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY,/* state */ "binary", /* cs name */ "binary", /* name */ diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index f42ab66fed9..9bdf666cc21 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -607,7 +607,7 @@ int my_strnncollsp_czech(CHARSET_INFO * cs, CHARSET_INFO my_charset_czech = { - 2, /* number */ + 2,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ "latin2", /* cs name */ "czech", /* name */ diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c index e49bf6a38fd..bd588c351c4 100644 --- a/strings/ctype-euc_kr.c +++ b/strings/ctype-euc_kr.c @@ -8641,7 +8641,7 @@ my_mb_wc_euc_kr(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_euc_kr = { - 19, /* number */ + 19,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ "euckr", /* cs name */ "euckr", /* name */ diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index 3e3cd38c063..cd82ffdd9bb 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -1187,7 +1187,7 @@ static uchar sort_order_german1[] = { }; #endif -#ifdef HAVE_CHARSET_greek +#ifdef HAVE_CHARSET_greek_bad /* The greek character set. Generated automatically by * the ./conf_to_src program @@ -2807,7 +2807,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_latin1 { - 8, /* number */ + 8,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ "latin1", /* cs name */ "latin1", /* name */ @@ -2858,7 +2858,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_cp1251 { - 14, /* number */ + 14,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp1251", /* cs name */ "cp1251", /* name */ @@ -2908,7 +2908,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_cp1257 { - 29, /* number */ + 29,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp1257", /* cs name */ "cp1257", /* name */ @@ -2958,7 +2958,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_croat { - 27, /* number */ + 27,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin2", /* cs name */ "croat", /* name */ @@ -2979,6 +2979,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3007,7 +3009,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_danish { - 15, /* number */ + 15,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin1", /* cs name */ "danish", /* name */ @@ -3028,6 +3030,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3055,7 +3059,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_dec8 { - 3, /* number */ + 3,0,0, /* number */ MY_CS_COMPILED, /* state */ "dec8", /* cs name */ "dec8", /* name */ @@ -3076,6 +3080,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3103,7 +3109,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_dos { - 4, /* number */ + 4,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp850", /* cs name */ "dos", /* name */ @@ -3124,6 +3130,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3151,7 +3159,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_estonia { - 20, /* number */ + 20,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin7", /* cs name */ "estonia", /* name */ @@ -3172,6 +3180,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3200,7 +3210,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_german1 { - 5, /* number */ + 5,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin1", /* cs name */ "german1", /* name */ @@ -3221,6 +3231,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3246,9 +3258,9 @@ CHARSET_INFO compiled_charsets[] = { }, #endif -#ifdef HAVE_CHARSET_greek +#ifdef HAVE_CHARSET_greek_bad { - 25, /* number */ + 25,0,0, /* number */ MY_CS_COMPILED, /* state */ "greek", /* cs name */ "greek", /* name */ @@ -3269,6 +3281,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3296,7 +3310,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_hebrew { - 16, /* number */ + 16,0,0, /* number */ MY_CS_COMPILED, /* state */ "hebrew", /* cs name */ "hebrew", /* name */ @@ -3317,6 +3331,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3344,7 +3360,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_hp8 { - 6, /* number */ + 6,0,0, /* number */ MY_CS_COMPILED, /* state */ "hp8", /* cs name */ "hp8", /* name */ @@ -3365,6 +3381,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3392,7 +3410,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_hungarian { - 21, /* number */ + 21,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin2", /* cs name */ "hungarian", /* name */ @@ -3413,6 +3431,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3440,7 +3460,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_koi8_ru { - 7, /* number */ + 7,0,0, /* number */ MY_CS_COMPILED, /* state */ "koi8r", /* cs name */ "koi8r", /* name */ @@ -3461,6 +3481,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3488,7 +3510,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_koi8_ukr { - 22, /* number */ + 22,0,0, /* number */ MY_CS_COMPILED, /* state */ "koi8u", /* cs name */ "koi8u", /* name */ @@ -3509,6 +3531,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3537,7 +3561,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_latin2 { - 9, /* number */ + 9,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin2", /* cs name */ "latin2", /* name */ @@ -3558,6 +3582,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3585,7 +3611,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_latin5 { - 30, /* number */ + 30,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin5", /* cs name */ "latin5", /* name */ @@ -3606,6 +3632,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3634,7 +3662,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_swe7 { - 10, /* number */ + 10,0,0, /* number */ MY_CS_COMPILED, /* state */ "swe7", /* cs name */ "swe7", /* name */ @@ -3655,6 +3683,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3683,7 +3713,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_usa7 { - 11, /* number */ + 11,0,0, /* number */ MY_CS_COMPILED, /* state */ "ascii", /* cs name */ "ascii", /* name */ @@ -3704,6 +3734,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3731,7 +3763,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_win1250 { - 26, /* number */ + 26,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp1250", /* cs name */ "cp1250", /* name */ @@ -3752,6 +3784,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3779,7 +3813,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_win1251ukr { - 23, /* number */ + 23,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp1251", /* cs name */ "win1251ukr", /* name */ @@ -3800,14 +3834,16 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, my_casedn_str_8bit, my_caseup_8bit, my_casedn_8bit, - my_strcasecmp_8bit, my_tosort_8bit, + my_strcasecmp_8bit, my_strncasecmp_8bit, my_hash_caseup_simple, my_hash_sort_simple, @@ -3827,7 +3863,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_armscii8 { - 32, /* number */ + 32,0,0, /* number */ MY_CS_COMPILED, /* state */ "armscii8", /* cs name */ "armscii8", /* name */ @@ -3848,6 +3884,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3875,7 +3913,7 @@ CHARSET_INFO compiled_charsets[] = { #ifdef HAVE_CHARSET_win1251 { - 17, /* number */ + 17,0,0, /* number */ MY_CS_COMPILED, /* state */ "cp1251", /* cs name */ "win1251", /* name */ @@ -3896,6 +3934,8 @@ CHARSET_INFO compiled_charsets[] = { NULL, /* ismbchar */ NULL, /* ismbhead */ NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, my_mb_wc_8bit, /* mb_wc */ my_wc_mb_8bit, /* wc_mb */ my_caseup_str_8bit, @@ -3922,7 +3962,7 @@ CHARSET_INFO compiled_charsets[] = { #endif { - 0, /* end-of-list marker */ + 0,0,0, /* end-of-list marker */ 0, /* state */ NullS, /* cs name */ NullS, /* name */ diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c index 9cc19dc46ef..9eca4383176 100644 --- a/strings/ctype-gb2312.c +++ b/strings/ctype-gb2312.c @@ -5691,7 +5691,7 @@ my_mb_wc_gb2312(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_gb2312 = { - 24, /* number */ + 24,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ "gb2312", /* cs name */ "gb2312", /* name */ diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index 42a3686475a..c1a65c48aef 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -9888,7 +9888,7 @@ my_mb_wc_gbk(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_gbk = { - 28, /* number */ + 28,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "gbk", /* cs name */ "gbk", /* name */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index 518418a9050..36260356816 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -177,7 +177,7 @@ int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_latin1 = { - 8, /* number */ + 8,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin1", /* cs name */ "latin1", /* name */ diff --git a/strings/ctype-latin1_de.c b/strings/ctype-latin1_de.c index 93c8ba54bc0..66f47bb7326 100644 --- a/strings/ctype-latin1_de.c +++ b/strings/ctype-latin1_de.c @@ -348,7 +348,7 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_latin1_de = { - 31, /* number */ + 31,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ "latin1", /* cs name */ "latin1_de", /* name */ diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index a266fa71199..af87c550727 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -4475,7 +4475,7 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_sjis = { - 13, /* number */ + 13,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "sjis", /* cs name */ "sjis", /* name */ diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index bf3d332880d..fd3a9318c25 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -698,7 +698,7 @@ void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length) CHARSET_INFO my_charset_tis620 = { - 18, /* number */ + 18,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "tis620", /* cs name */ "tis620", /* name */ diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c index d39be825ef0..6c238d50dcc 100644 --- a/strings/ctype-ujis.c +++ b/strings/ctype-ujis.c @@ -8432,7 +8432,7 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e) CHARSET_INFO my_charset_ujis = { - 12, /* number */ + 12,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ "ujis", /* cs name */ "ujis", /* name */ diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index e63405001f9..ecd163ac4c5 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1977,7 +1977,7 @@ static int my_mbcharlen_utf8(CHARSET_INFO *cs __attribute__((unused)) , uint c) CHARSET_INFO my_charset_utf8 = { - 33, /* number */ + 33,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "utf8", /* cs name */ "utf8", /* name */ @@ -3084,7 +3084,7 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_ucs2 = { - 35, /* number */ + 35,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ "ucs2", /* cs name */ "ucs2", /* name */ diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c index 467d1ba4c91..978a5e8a55b 100644 --- a/strings/ctype-win1250ch.c +++ b/strings/ctype-win1250ch.c @@ -642,7 +642,7 @@ static my_bool my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_win1250ch = { - 34, /* number */ + 34,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ "cp1250", /* cs name */ "cp1250_czech", /* name */ diff --git a/strings/ctype.c b/strings/ctype.c index 04e4e75890b..45bc2589f76 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -52,6 +52,8 @@ struct my_cs_file_section_st #define _CS_UNIMAP 12 #define _CS_COLLMAP 13 #define _CS_CTYPEMAP 14 +#define _CS_PRIMARY_ID 15 +#define _CS_BINARY_ID 16 static struct my_cs_file_section_st sec[] = { @@ -62,6 +64,8 @@ static struct my_cs_file_section_st sec[] = {_CS_MISC, "charsets.max-id"}, {_CS_MISC, "charsets.description"}, {_CS_CHARSET, "charsets.charset"}, + {_CS_PRIMARY_ID, "charsets.charset.primary-id"}, + {_CS_BINARY_ID, "charsets.charset.binary-id"}, {_CS_CSNAME, "charsets.charset.name"}, {_CS_FAMILY, "charsets.charset.family"}, {_CS_MISC, "charsets.charset.alias"}, @@ -192,6 +196,12 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len) case _CS_ID: i->cs.number= strtol(attr,(char**)NULL,10); break; + case _CS_BINARY_ID: + i->cs.binary_number= strtol(attr,(char**)NULL,10); + break; + case _CS_PRIMARY_ID: + i->cs.primary_number= strtol(attr,(char**)NULL,10); + break; case _CS_COLNAME: i->cs.name=mstr(i->name,attr,len,MY_CS_NAME_SIZE-1); break; From a300406b4f599d1ab676d6fb1cbca93be466926e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 15:34:58 +0200 Subject: [PATCH 062/267] A better, but larger fix for server_id bug .. --- client/mysqlbinlog.cc | 2 +- sql/log_event.h | 2 +- sql/mysql_priv.h | 2 +- sql/mysqld.cc | 6 +++--- sql/sql_repl.h | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index e05fd63e344..6d1e711fa98 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -33,7 +33,7 @@ extern "C" #endif char server_version[SERVER_VERSION_LENGTH]; -uint32 server_id = 0; +ulong server_id = 0; // needed by net_serv.c ulong bytes_sent = 0L, bytes_received = 0L; diff --git a/sql/log_event.h b/sql/log_event.h index 7cd84a8c001..39ab1f7c6b4 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -59,7 +59,7 @@ enum Int_event_type { INVALID_INT_EVENT = 0, LAST_INSERT_ID_EVENT = 1, INSERT_ID class String; #endif -extern uint32 server_id; +extern ulong server_id; class Log_event { diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 49f1713bbc9..63f3069ef63 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -506,7 +506,7 @@ void sql_perror(const char *message); void sql_print_error(const char *format,...) __attribute__ ((format (printf, 1, 2))); -extern uint32 server_id; +extern ulong server_id; extern char mysql_data_home[2],server_version[SERVER_VERSION_LENGTH], max_sort_char, mysql_real_data_home[]; extern my_string mysql_unix_port,mysql_tmpdir; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7f7d3225b56..0ca8659e7f6 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -273,7 +273,7 @@ I_List replicate_do_db, replicate_ignore_db; I_List binlog_do_db, binlog_ignore_db; /* if we guessed server_id , we need to know about it */ -uint32 server_id = 0; +ulong server_id = 0; bool server_id_supplied = 0; uint mysql_port; @@ -3162,7 +3162,7 @@ struct show_var_st init_vars[]= { {"record_rnd_buffer", (char*) &record_rnd_cache_size, SHOW_LONG}, {"query_buffer_size", (char*) &query_buff_size, SHOW_LONG}, {"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL}, - {"server_id", (char*) &server_id, SHOW_INT}, + {"server_id", (char*) &server_id, SHOW_LONG}, {"slave_net_timeout", (char*) &slave_net_timeout, SHOW_LONG}, {"skip_locking", (char*) &my_disable_locking, SHOW_MY_BOOL}, {"skip_networking", (char*) &opt_disable_networking, SHOW_BOOL}, @@ -3966,7 +3966,7 @@ static void get_options(int argc,char **argv) break; } case OPT_SERVER_ID: - server_id = atoi(optarg); + server_id = atol(optarg); server_id_supplied = 1; break; case OPT_DELAY_KEY_WRITE: diff --git a/sql/sql_repl.h b/sql/sql_repl.h index aa07d859aec..3b8f161dcd0 100644 --- a/sql/sql_repl.h +++ b/sql/sql_repl.h @@ -5,7 +5,7 @@ extern char* master_host; extern my_string opt_bin_logname, master_info_file; -extern uint32 server_id; +extern ulong server_id; extern bool server_id_supplied; extern I_List binlog_do_db, binlog_ignore_db; From 401f3fb41807062707ae949a9554765db3ba9351 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 16:10:40 +0200 Subject: [PATCH 063/267] Fixed character set bug when replicating user variables sql/log_event.cc: Fixed character set bug when replicating user variables. Simple optimisation of User_var_log_event::write_data --- sql/log_event.cc | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 2774a6a3e9b..12921eb0c01 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2030,6 +2030,7 @@ User_var_log_event::User_var_log_event(const char* buf, bool old_format) if (is_null) { type= STRING_RESULT; + charset_number= my_charset_bin.number; val_len= 0; val= 0; } @@ -2050,15 +2051,22 @@ int User_var_log_event::write_data(IO_CACHE* file) char buf[UV_NAME_LEN_SIZE]; char buf1[UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE]; - char buf2[8]; - char *pos= buf2; + char buf2[8], *pos= buf2; + uint buf1_length; + int4store(buf, name_len); - buf1[0]= is_null; - if (!is_null) + + if ((buf1[0]= is_null)) + { + buf1_length= 1; + val_len= 0; + } + else { buf1[1]= type; int4store(buf1 + 2, charset_number); int4store(buf1 + 2 + UV_CHARSET_NUMBER_SIZE, val_len); + buf1_length= 10; switch (type) { case REAL_RESULT: @@ -2075,17 +2083,14 @@ int User_var_log_event::write_data(IO_CACHE* file) DBUG_ASSERT(1); return 0; } - return (my_b_safe_write(file, (byte*) buf, sizeof(buf)) || - my_b_safe_write(file, (byte*) name, name_len) || - my_b_safe_write(file, (byte*) buf1, sizeof(buf1)) || - my_b_safe_write(file, (byte*) pos, val_len)); } - return (my_b_safe_write(file, (byte*) buf, sizeof(buf)) || - my_b_safe_write(file, (byte*) name, name_len) || - my_b_safe_write(file, (byte*) buf1, 1)); + my_b_safe_write(file, (byte*) name, name_len) || + my_b_safe_write(file, (byte*) buf1, buf1_length) || + my_b_safe_write(file, (byte*) pos, val_len)); } + /***************************************************************************** User_var_log_event::print() @@ -2142,7 +2147,7 @@ void User_var_log_event::print(FILE* file, bool short_form, char* last_db) int User_var_log_event::exec_event(struct st_relay_log_info* rli) { Item *it= 0; - CHARSET_INFO *charset= 0; + CHARSET_INFO *charset= get_charset(charset_number, MYF(0)); LEX_STRING user_var_name; user_var_name.str= name; user_var_name.length= name_len; @@ -2179,7 +2184,6 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) DBUG_ASSERT(1); return 0; } - charset= get_charset(charset_number, MYF(0)); } Item_func_set_user_var e(user_var_name, it); e.fix_fields(thd, 0, 0); From e5382ef74f5887d3befb0916c8dc17c277898c3d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 18:43:56 +0100 Subject: [PATCH 064/267] --new option and local variable to optionally turn on "very new functions" - for now 4.1-compatible TIMESTAMT format --- mysql-test/r/type_timestamp.result | 20 ++++++++++++++++++++ mysql-test/t/type_timestamp.test | 14 ++++++++++++++ sql/field.cc | 29 +++++++++++++++++++++++------ sql/mysqld.cc | 17 ++++++++--------- sql/set_var.cc | 3 +++ sql/sql_class.h | 3 ++- sql/unireg.h | 3 +-- 7 files changed, 71 insertions(+), 18 deletions(-) diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 088f3b205b9..85e5c2c194f 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -84,3 +84,23 @@ date date_time time_stamp 2005-01-01 2005-01-01 00:00:00 20050101000000 2030-01-01 2030-01-01 00:00:00 20300101000000 drop table t1; +show variables like 'new'; +Variable_name Value +new OFF +create table t1 (t2 timestamp(2), t4 timestamp(4), t6 timestamp(6), +t8 timestamp(8), t10 timestamp(10), t12 timestamp(12), +t14 timestamp(14)); +insert t1 values (0,0,0,0,0,0,0), +("1997-12-31 23:47:59", "1997-12-31 23:47:59", "1997-12-31 23:47:59", +"1997-12-31 23:47:59", "1997-12-31 23:47:59", "1997-12-31 23:47:59", +"1997-12-31 23:47:59"); +select * from t1; +t2 t4 t6 t8 t10 t12 t14 +00 0000 000000 00000000 0000000000 000000000000 00000000000000 +97 9712 971231 19971231 9712312347 971231234759 19971231234759 +set new=1; +select * from t1; +t2 t4 t6 t8 t10 t12 t14 +00 00-00 00-00-00 0000-00-00 00-00-00 00:00 00-00-00 00:00:00 0000-00-00 00:00:00 +97 97-12 97-12-31 1997-12-31 97-12-31 23:47 97-12-31 23:47:59 1997-12-31 23:47:59 +drop table t1; diff --git a/mysql-test/t/type_timestamp.test b/mysql-test/t/type_timestamp.test index 2929184df93..eb0def74a17 100644 --- a/mysql-test/t/type_timestamp.test +++ b/mysql-test/t/type_timestamp.test @@ -55,3 +55,17 @@ INSERT INTO t1 VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000); #INSERT INTO t1 VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000); SELECT * FROM t1; drop table t1; + +show variables like 'new'; +create table t1 (t2 timestamp(2), t4 timestamp(4), t6 timestamp(6), + t8 timestamp(8), t10 timestamp(10), t12 timestamp(12), + t14 timestamp(14)); +insert t1 values (0,0,0,0,0,0,0), +("1997-12-31 23:47:59", "1997-12-31 23:47:59", "1997-12-31 23:47:59", +"1997-12-31 23:47:59", "1997-12-31 23:47:59", "1997-12-31 23:47:59", +"1997-12-31 23:47:59"); +select * from t1; +set new=1; +select * from t1; +drop table t1; + diff --git a/sql/field.cc b/sql/field.cc index aae4fac2a38..5eabccab21b 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2616,14 +2616,17 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr __attribute__((unused))) { uint pos; + int extra; int part_time; uint32 temp; time_t time_arg; struct tm *l_time; struct tm tm_tmp; + my_bool new_format= (current_thd->variables.new_mode), + full_year=(field_length == 8 || field_length == 14); + static const uint extras[]={0,1,2,2,4,5,5}; - val_buffer->alloc(field_length+1); - char *to=(char*) val_buffer->ptr(),*end=to+field_length; + extra= new_format ? extras[field_length/2-1] : 0; #ifdef WORDS_BIGENDIAN if (table->db_low_byte_first) @@ -2634,17 +2637,24 @@ String *Field_timestamp::val_str(String *val_buffer, if (temp == 0L) { /* Zero time is "000000" */ - VOID(strfill(to,field_length,'0')); - val_buffer->length(field_length); + if (new_format) + val_buffer->copy("0000-00-00 00:00:00"+2*(1-full_year), + field_length+extra); + else + val_buffer->copy("00000000000000", field_length); return val_buffer; } time_arg=(time_t) temp; localtime_r(&time_arg,&tm_tmp); l_time=&tm_tmp; + + val_buffer->alloc(field_length+extra+1); + char *to=(char*) val_buffer->ptr(),*end=to+field_length+extra; + for (pos=0; to < end ; pos++) { bool year_flag=0; - switch (dayord.pos[pos]) { + switch (pos) { case 0: part_time=l_time->tm_year % 100; year_flag=1; break; case 1: part_time=l_time->tm_mon+1; break; case 2: part_time=l_time->tm_mday; break; @@ -2653,7 +2663,7 @@ String *Field_timestamp::val_str(String *val_buffer, case 5: part_time=l_time->tm_sec; break; default: part_time=0; break; /* purecov: deadcode */ } - if (year_flag && (field_length == 8 || field_length == 14)) + if (year_flag && full_year) { if (part_time < YY_PART_YEAR) { @@ -2666,7 +2676,14 @@ String *Field_timestamp::val_str(String *val_buffer, } *to++=(char) ('0'+((uint) part_time/10)); *to++=(char) ('0'+((uint) part_time % 10)); + if (new_format) + { + static const char delim[6]="-- ::"; + *to++=delim[pos]; + } } + if (new_format) + to--; *to=0; // Safeguard val_buffer->length((uint) (to-val_buffer->ptr())); return val_buffer; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a5241d33132..a03c4f5db8b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3340,7 +3340,7 @@ struct my_option my_long_options[] = {"log-long-format", OPT_LONG_FORMAT, "Log some extra information to update log", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"log-slave-updates", OPT_LOG_SLAVE_UPDATES, + {"log-slave-updates", OPT_LOG_SLAVE_UPDATES, "Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves.", (gptr*) &opt_log_slave_updates, (gptr*) &opt_log_slave_updates, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, @@ -3349,7 +3349,7 @@ struct my_option my_long_options[] = (gptr*) &global_system_variables.low_priority_updates, (gptr*) &max_system_variables.low_priority_updates, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"master-host", OPT_MASTER_HOST, + {"master-host", OPT_MASTER_HOST, "Master hostname or IP address for replication. If not set, the slave thread will not be started. Note that the setting of master-host will be ignored if there exists a valid master.info file.", (gptr*) &master_host, (gptr*) &master_host, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -3423,8 +3423,10 @@ struct my_option my_long_options[] = {"safemalloc-mem-limit", OPT_SAFEMALLOC_MEM_LIMIT, "Simulate memory shortage when compiled with the --with-debug=full option", 0, 0, 0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"new", 'n', "Use very new possible 'unsafe' functions", 0, 0, 0, GET_NO_ARG, - NO_ARG, 0, 0, 0, 0, 0, 0}, + {"new", 'n', "Use very new possible 'unsafe' functions", + (gptr*) &global_system_variables.new_mode, + (gptr*) &max_system_variables.new_mode, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #ifdef NOT_YET {"no-mix-table-types", OPT_NO_MIX_TYPE, "Don't allow commands with uses two different table types", (gptr*) &opt_no_mix_types, (gptr*) &opt_no_mix_types, 0, GET_BOOL, NO_ARG, @@ -4222,9 +4224,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), case 'L': strmake(language, argument, sizeof(language)-1); break; - case 'n': - opt_specialflag|= SPECIAL_NEW_FUNC; - break; case 'o': protocol_version=PROTOCOL_VERSION-1; break; @@ -4232,9 +4231,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), init_slave_skip_errors(argument); break; case OPT_SAFEMALLOC_MEM_LIMIT: -#if !defined(DBUG_OFF) && defined(SAFEMALLOC) +#if !defined(DBUG_OFF) && defined(SAFEMALLOC) safemalloc_mem_limit = atoi(argument); -#endif +#endif break; #ifdef EMBEDDED_LIBRARY case OPT_MAX_ALLOWED_PACKET: diff --git a/sql/set_var.cc b/sql/set_var.cc index 5cfd027bc58..9ae813e1c51 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -179,6 +179,7 @@ sys_var_thd_ulong sys_net_write_timeout("net_write_timeout", sys_var_thd_ulong sys_net_retry_count("net_retry_count", &SV::net_retry_count, fix_net_retry_count); +sys_var_thd_bool sys_new_mode("new", &SV::new_mode); sys_var_thd_ulong sys_read_buff_size("read_buffer_size", &SV::read_buff_size); sys_var_thd_ulong sys_read_rnd_buff_size("read_rnd_buffer_size", @@ -347,6 +348,7 @@ sys_var *sys_variables[]= &sys_net_retry_count, &sys_net_wait_timeout, &sys_net_write_timeout, + &sys_new_mode, &sys_query_cache_size, #ifdef HAVE_QUERY_CACHE &sys_query_cache_limit, @@ -490,6 +492,7 @@ struct show_var_st init_vars[]= { {sys_net_read_timeout.name, (char*) &sys_net_read_timeout, SHOW_SYS}, {sys_net_retry_count.name, (char*) &sys_net_retry_count, SHOW_SYS}, {sys_net_write_timeout.name,(char*) &sys_net_write_timeout, SHOW_SYS}, + {sys_new_mode.name, (char*) &sys_new_mode, SHOW_SYS}, {"open_files_limit", (char*) &open_files_limit, SHOW_LONG}, {"pid_file", (char*) pidfile_name, SHOW_CHAR}, {"log_error", (char*) log_error_file, SHOW_CHAR}, diff --git a/sql/sql_class.h b/sql/sql_class.h index a8eaf1b200d..f7d9d93a606 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -310,7 +310,8 @@ struct system_variables ulong table_type; my_bool log_warnings; - my_bool low_priority_updates; + my_bool low_priority_updates; + my_bool new_mode; CONVERT *convert_set; }; diff --git a/sql/unireg.h b/sql/unireg.h index eec89fcee0f..7e98d0d3cbe 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -82,7 +82,7 @@ #define SPECIAL_USE_LOCKS 1 /* Lock used databases */ #define SPECIAL_NO_NEW_FUNC 2 /* Skip new functions */ -#define SPECIAL_NEW_FUNC 4 /* New nonstandard functions */ +#define SPECIAL_SKIP_SHOW_DB 4 /* Don't allow 'show db' */ #define SPECIAL_WAIT_IF_LOCKED 8 /* Wait if locked database */ #define SPECIAL_SAME_DB_NAME 16 /* form name = file name */ #define SPECIAL_ENGLISH 32 /* English error messages */ @@ -92,7 +92,6 @@ #define SPECIAL_NO_HOST_CACHE 512 /* Don't cache hosts */ #define SPECIAL_LONG_LOG_FORMAT 1024 #define SPECIAL_SAFE_MODE 2048 -#define SPECIAL_SKIP_SHOW_DB 4096 /* Don't allow 'show db' */ /* Extern defines */ #define store_record(A,B) bmove_allign((A)->record[B],(A)->record[0],(size_t) (A)->reclength) From b2ded34fbce979c10d340f64841f60adebab3648 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 18:47:08 -0500 Subject: [PATCH 065/267] Remove netware.patch (not needed) BitKeeper/deleted/.del-netware.patch~f70a3a965f54d9ee: Delete: netware/netware.patch --- netware/netware.patch | 4162 ----------------------------------------- 1 file changed, 4162 deletions(-) delete mode 100644 netware/netware.patch diff --git a/netware/netware.patch b/netware/netware.patch deleted file mode 100644 index 2dcf36a2d9c..00000000000 --- a/netware/netware.patch +++ /dev/null @@ -1,4162 +0,0 @@ -*** mysql-4.0.7-gamma/ltmain.sh Fri Dec 20 07:25:10 2002 ---- mysql40/ltmain.sh Mon Jan 6 09:26:55 2003 -*************** -*** 49,62 **** - fi - - # The name of this program. -! progname=`$echo "$0" | sed 's%^.*/%%'` - modename="$progname" - - # Constants. - PROGRAM=ltmain.sh - PACKAGE=libtool -! VERSION=1.4.2 -! TIMESTAMP=" (1.922.2.53 2001/09/11 03:18:52)" - - default_mode= - help="Try \`$progname --help' for more information." ---- 49,62 ---- - fi - - # The name of this program. -! progname=`$echo "$0" | ${SED} 's%^.*/%%'` - modename="$progname" - - # Constants. - PROGRAM=ltmain.sh - PACKAGE=libtool -! VERSION=1.4e -! TIMESTAMP=" (1.1125 2002/06/26 07:15:36)" - - default_mode= - help="Try \`$progname --help' for more information." -*************** -*** 67,76 **** - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='sed -e 1s/^X//' - sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -! SP2NL='tr \040 \012' -! NL2SP='tr \015\012 \040\040' - - # NLS nuisances. - # Only set LANG and LC_ALL to C if already set. ---- 67,85 ---- - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed="${SED}"' -e 1s/^X//' - sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -! # test EBCDIC or ASCII -! case `echo A|od -x` in -! *[Cc]1*) # EBCDIC based system -! SP2NL="tr '\100' '\n'" -! NL2SP="tr '\r\n' '\100\100'" -! ;; -! *) # Assume ASCII based system -! SP2NL="tr '\040' '\012'" -! NL2SP="tr '\015\012' '\040\040'" -! ;; -! esac - - # NLS nuisances. - # Only set LANG and LC_ALL to C if already set. -*************** -*** 106,112 **** - o2lo="s/\\.${objext}\$/.lo/" - - # Parse our command line options once, thoroughly. -! while test $# -gt 0 - do - arg="$1" - shift ---- 115,121 ---- - o2lo="s/\\.${objext}\$/.lo/" - - # Parse our command line options once, thoroughly. -! while test "$#" -gt 0 - do - arg="$1" - shift -*************** -*** 122,127 **** ---- 131,163 ---- - execute_dlfiles) - execute_dlfiles="$execute_dlfiles $arg" - ;; -+ tag) -+ tagname="$arg" -+ -+ # Check whether tagname contains only valid characters -+ case $tagname in -+ *[!-_A-Za-z0-9,/]*) -+ echo "$progname: invalid tag name: $tagname" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ case $tagname in -+ CC) -+ # Don't test for the "default" C tag, as we know, it's there, but -+ # not specially marked. -+ ;; -+ *) -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then -+ taglist="$taglist $tagname" -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" -+ else -+ echo "$progname: ignoring unknown tag $tagname" 1>&2 -+ fi -+ ;; -+ esac -+ ;; - *) - eval "$prev=\$arg" - ;; -*************** -*** 140,150 **** - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - exit 0 - ;; - - --config) -! sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 - exit 0 - ;; - ---- 176,195 ---- - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" -+ echo -+ echo "Copyright 1996, 1997, 1998, 1999, 2000, 2001" -+ echo "Free Software Foundation, Inc." -+ echo "This is free software; see the source for copying conditions. There is NO" -+ echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - exit 0 - ;; - - --config) -! ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 -! # Now print the configurations for the tags. -! for tagname in $taglist; do -! ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" -! done - exit 0 - ;; - -*************** -*** 177,186 **** ---- 222,240 ---- - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - -+ --preserve-dup-deps) duplicate_deps="yes" ;; -+ - --quiet | --silent) - show=: - ;; - -+ --tag) prevopt="--tag" prev=tag ;; -+ --tag=*) -+ set tag "$optarg" ${1+"$@"} -+ shift -+ prev=tag -+ ;; -+ - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles -*************** -*** 270,317 **** - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= -! prev= -! lastarg= -! srcfile="$nonopt" - suppress_output= - -- user_target=no - for arg - do -! case $prev in -! "") ;; -! xcompiler) -! # Aesthetically quote the previous argument. -! prev= -! lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -! -! case $arg in -! # Double-quote args containing other shell metacharacters. -! # Many Bourne shells cannot handle close brackets correctly -! # in scan sets, so we specify it separately. -! *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -! arg="\"$arg\"" - ;; -- esac - -! # Add the previous argument to base_compile. -! if test -z "$base_compile"; then -! base_compile="$lastarg" -! else -! base_compile="$base_compile $lastarg" -! fi - continue - ;; -- esac - - # Accept any command-line options. - case $arg in - -o) -! if test "$user_target" != "no"; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi -! user_target=next - ;; - - -static) ---- 324,359 ---- - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= -! srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_output= -+ arg_mode=normal -+ libobj= - - for arg - do -! case "$arg_mode" in -! arg ) -! # do not "continue". Instead, add this to base_compile -! lastarg="$arg" -! arg_mode=normal - ;; - -! target ) -! libobj="$arg" -! arg_mode=normal - continue - ;; - -+ normal ) - # Accept any command-line options. - case $arg in - -o) -! if test -n "$libobj" ; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi -! arg_mode=target -! continue - ;; - - -static) -*************** -*** 330,338 **** - ;; - - -Xcompiler) -! prev=xcompiler -! continue -! ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` ---- 372,380 ---- - ;; - - -Xcompiler) -! arg_mode=arg # the next one goes into the "base_compile" arg list -! continue # The current "srcfile" will either be retained or -! ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` -*************** -*** 355,427 **** - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. -- if test -z "$base_compile"; then -- base_compile="$lastarg" -- else - base_compile="$base_compile $lastarg" -- fi - continue - ;; -- esac -- -- case $user_target in -- next) -- # The next one is the -o target name -- user_target=yes -- continue -- ;; -- yes) -- # We got the output file -- user_target=set -- libobj="$arg" -- continue -- ;; -- esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. -- -- # Backslashify any backslashes, double quotes, and dollar signs. -- # These are the only characters that are still specially -- # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. -- case $lastarg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - -- # Add the previous argument to base_compile. -- if test -z "$base_compile"; then -- base_compile="$lastarg" -- else - base_compile="$base_compile $lastarg" -! fi -! done - -! case $user_target in -! set) -! ;; -! no) -! # Get the name of the library object. -! libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; -! *) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo -! xform='[cCFSfmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; ---- 397,450 ---- - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - base_compile="$base_compile $lastarg" - continue - ;; - -+ * ) - # Accept the current argument as the source file. -+ # The previous "srcfile" becomes the current argument. -+ # - lastarg="$srcfile" - srcfile="$arg" -+ ;; -+ esac # case $arg -+ ;; -+ esac # case $arg_mode - - # Aesthetically quote the previous argument. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - -+ case $lastarg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - base_compile="$base_compile $lastarg" -! done # for arg - -! case $arg_mode in -! arg) -! $echo "$modename: you must specify an argument for -Xcompile" -! exit 1 - ;; -! target) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; -+ *) -+ # Get the name of the library object. -+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` -+ ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo -! xform='[cCFSifmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; -*************** -*** 429,438 **** ---- 452,464 ---- - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; -+ *.ii) xform=ii ;; -+ *.class) xform=class ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; -+ *.java) xform=java ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` -*************** -*** 445,450 **** ---- 471,526 ---- - ;; - esac - -+ # Infer tagged configuration to use if any are available and -+ # if one wasn't chosen via the "--tag" command line option. -+ # Only attempt this if the compiler in the base compile -+ # command doesn't match the default compiler. -+ if test -n "$available_tags" && test -z "$tagname"; then -+ case $base_compile in -+ # Blanks in the command may have been stripped by the calling shell, -+ # but not from the CC environment variable when ltconfig was run. -+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; -+ # Blanks at the start of $base_compile will cause this to fail -+ # if we don't check for them as well. -+ *) -+ for z in $available_tags; do -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" -+ case "$base_compile " in -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) -+ # The compiler in the base compile command matches -+ # the one in the tagged configuration. -+ # Assume this is the tagged configuration we want. -+ tagname=$z -+ break -+ ;; -+ esac -+ fi -+ done -+ # If $tagname still isn't set, then no tagged configuration -+ # was found and let the user know that the "--tag" command -+ # line option must be used. -+ if test -z "$tagname"; then -+ echo "$modename: unable to infer tagged configuration" -+ echo "$modename: specify a tag with \`--tag'" 1>&2 -+ exit 1 -+ # else -+ # echo "$modename: using $tagname tagged configuration" -+ fi -+ ;; -+ esac -+ fi -+ -+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$obj"; then -+ xdir= -+ else -+ xdir=$xdir/ -+ fi -+ lobj=${xdir}$objdir/$objname -+ - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 -*************** -*** 453,461 **** - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then -! removelist="$obj $libobj" - else -! removelist="$libobj" - fi - - $run $rm $removelist ---- 529,537 ---- - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then -! removelist="$obj $lobj $libobj ${libobj}T" - else -! removelist="$lobj $libobj ${libobj}T" - fi - - $run $rm $removelist -*************** -*** 467,473 **** - pic_mode=default - ;; - esac -! if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi ---- 543,549 ---- - pic_mode=default - ;; - esac -! if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi -*************** -*** 480,485 **** ---- 556,562 ---- - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit 1" 1 2 15 - else -+ output_obj= - need_locks=no - lockfile= - fi -*************** -*** 514,562 **** - eval srcfile=\"$fix_srcfile_path\" - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then -! # All platforms use -DPIC, to notify preprocessed assembler code. -! command="$base_compile $srcfile $pic_flag -DPIC" - else - # Don't build PIC code - command="$base_compile $srcfile" - fi -- if test "$build_old_libs" = yes; then -- lo_libobj="$libobj" -- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$dir" = "X$libobj"; then -- dir="$objdir" -- else -- dir="$dir/$objdir" -- fi -- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - -! if test -d "$dir"; then -! $show "$rm $libobj" -! $run $rm $libobj -! else -! $show "$mkdir $dir" -! $run $mkdir $dir - status=$? -! if test $status -ne 0 && test ! -d $dir; then - exit $status - fi - fi -! fi -! if test "$compiler_o_lo" = yes; then -! output_obj="$libobj" -! command="$command -o $output_obj" -! elif test "$compiler_c_o" = yes; then -! output_obj="$obj" -! command="$command -o $output_obj" - fi - -! $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else ---- 591,638 ---- - eval srcfile=\"$fix_srcfile_path\" - fi - -+ $run $rm "$libobj" "${libobj}T" -+ -+ # Create a libtool object file (analogous to a ".la" file), -+ # but don't create it if we're doing a dry run. -+ test -z "$run" && cat > ${libobj}T </dev/null`" != x"$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` ---- 641,647 ---- - fi - - if test "$need_locks" = warn && -! test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` -*************** -*** 585,593 **** - fi - - # Just move the object if needed, then go on to compile the next one -! if test x"$output_obj" != x"$libobj"; then -! $show "$mv $output_obj $libobj" -! if $run $mv $output_obj $libobj; then : - else - error=$? - $run $rm $removelist ---- 661,669 ---- - fi - - # Just move the object if needed, then go on to compile the next one -! if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then -! $show "$mv $output_obj $lobj" -! if $run $mv $output_obj $lobj; then : - else - error=$? - $run $rm $removelist -*************** -*** 595,642 **** - fi - fi - -! # If we have no pic_flag, then copy the object into place and finish. -! if (test -z "$pic_flag" || test "$pic_mode" != default) && -! test "$build_old_libs" = yes; then -! # Rename the .lo from within objdir to obj -! if test -f $obj; then -! $show $rm $obj -! $run $rm $obj -! fi - -! $show "$mv $libobj $obj" -! if $run $mv $libobj $obj; then : -! else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! -! xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$obj"; then -! xdir="." -! else -! xdir="$xdir" -! fi -! baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` -! libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -! # Now arrange that obj and lo_libobj become the same file -! $show "(cd $xdir && $LN_S $baseobj $libobj)" -! if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then -! # Unlock the critical section if it was locked -! if test "$need_locks" != no; then -! $run $rm "$lockfile" -! fi -! exit 0 -! else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! fi - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # Only build a position-dependent object if we build old libraries. ---- 671,691 ---- - fi - fi - -! # Append the name of the PIC object to the libtool object file. -! test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != x"$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` ---- 711,717 ---- - fi - - if test "$need_locks" = warn && -! test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` -*************** -*** 684,690 **** - fi - - # Just move the object if needed -! if test x"$output_obj" != x"$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else ---- 731,737 ---- - fi - - # Just move the object if needed -! if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else -*************** -*** 694,716 **** - fi - fi - -! # Create an invalid libtool object if no PIC, so that we do not -! # accidentally link it into a program. -! if test "$build_libtool_libs" != yes; then -! $show "echo timestamp > $libobj" -! $run eval "echo timestamp > \$libobj" || exit $? -! else -! # Move the .lo from within objdir -! $show "$mv $libobj $lo_libobj" -! if $run $mv $libobj $lo_libobj; then : - else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! fi - fi - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $run $rm "$lockfile" ---- 741,765 ---- - fi - fi - -! # Append the name of the non-PIC object the libtool object file. -! # Only append if the libtool object file exists. -! test -z "$run" && cat >> ${libobj}T <> ${libobj}T <\?\'\ \ ]*|*]*|"") ---- 863,871 ---- - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. -! while test "$#" -gt 0; do - arg="$1" -+ base_compile="$base_compile $arg" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -*************** -*** 892,897 **** ---- 944,1056 ---- - prev= - continue - ;; -+ objectlist) -+ if test -f "$arg"; then -+ save_arg=$arg -+ moreargs= -+ for fil in `cat $save_arg` -+ do -+ # moreargs="$moreargs $fil" -+ arg=$fil -+ # A libtool-controlled object. -+ -+ # Check to see that this really is a libtool object. -+ if (${SED} -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -+ pic_object= -+ non_pic_object= -+ -+ # Read the .lo file -+ # If there is no directory component, then add one. -+ case $arg in -+ */* | *\\*) . $arg ;; -+ *) . ./$arg ;; -+ esac -+ -+ if test -z "$pic_object" || \ -+ test -z "$non_pic_object" || -+ test "$pic_object" = none && \ -+ test "$non_pic_object" = none; then -+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -+ exit 1 -+ fi -+ -+ # Extract subdirectory from the argument. -+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$arg"; then -+ xdir= -+ else -+ xdir="$xdir/" -+ fi -+ -+ if test "$pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ pic_object="$xdir$pic_object" -+ -+ if test "$prev" = dlfiles; then -+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -+ dlfiles="$dlfiles $pic_object" -+ prev= -+ continue -+ else -+ # If libtool objects are unsupported, then we need to preload. -+ prev=dlprefiles -+ fi -+ fi -+ -+ # CHECK ME: I think I busted this. -Ossama -+ if test "$prev" = dlprefiles; then -+ # Preload the old-style object. -+ dlprefiles="$dlprefiles $pic_object" -+ prev= -+ fi -+ -+ # A PIC object. -+ libobjs="$libobjs $pic_object" -+ arg="$pic_object" -+ fi -+ -+ # Non-PIC object. -+ if test "$non_pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ non_pic_object="$xdir$non_pic_object" -+ -+ # A standard non-PIC object -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ if test -z "$pic_object" || test "$pic_object" = none ; then -+ arg="$non_pic_object" -+ fi -+ fi -+ else -+ # Only an error if not doing a dry-run. -+ if test -z "$run"; then -+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -+ exit 1 -+ else -+ # Dry-run case. -+ -+ # Extract subdirectory from the argument. -+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$arg"; then -+ xdir= -+ else -+ xdir="$xdir/" -+ fi -+ -+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -+ libobjs="$libobjs $pic_object" -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ fi -+ fi -+ done -+ else -+ $echo "$modename: link input file \`$save_arg' does not exist" -+ exit 1 -+ fi -+ arg=$save_arg -+ prev= -+ continue -+ ;; - rpath | xrpath) - # We need an absolute path. - case $arg in -*************** -*** 936,945 **** - continue - ;; - esac -! fi # test -n $prev - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then ---- 1095,1122 ---- - continue - ;; - esac -! fi # test -n "$prev" - - prevarg="$arg" - -+ # Pass Metrowerks x86 NLM linker flags to linker. -+ case "$LD" in -+ mwldnlm) -+ case "$arg" in -+ -check | -commandfile | -entry | -exit | -flags | -map) -+ linker_flags="$linker_flags $qarg" -+ prev=xlinker -+ ;; -+ -nocheck | -zerobss | -nozerobss) -+ linker_flags="$linker_flags $qarg" -+ ;; -+ -g) -+ # If -g then include symbols for NetWare internal debugger -+ linker_flags="$linker_flags -sym internal" -+ ;; -+ esac -+ ;; -+ esac - case $arg in - -all-static) - if test -n "$link_static_flag"; then -*************** -*** 992,998 **** - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in -! no/*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; ---- 1169,1175 ---- - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in -! no/*-*-irix* | /*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; -*************** -*** 1043,1056 **** - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; -! *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in -! *-*-openbsd*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; ---- 1220,1237 ---- - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; -+ *-*-rhapsody* | *-*-darwin1.[012]) -+ # Rhapsody C and math libraries are in the System framework -+ deplibs="$deplibs -framework System" -+ continue - esac - elif test "X$arg" = "X-lc_r"; then - case $host in -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; -*************** -*** 1089,1094 **** ---- 1270,1280 ---- - continue - ;; - -+ -objectlist) -+ prev=objectlist -+ continue -+ ;; -+ - -o) prev=output ;; - - -release) -*************** -*** 1201,1212 **** - esac - ;; - -! *.lo | *.$objext) -! # A library or standard object. - if test "$prev" = dlfiles; then -- # This file was specified with -dlopen. - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -! dlfiles="$dlfiles $arg" - prev= - continue - else ---- 1387,1435 ---- - esac - ;; - -! *.$objext) -! # A standard object. -! objs="$objs $arg" -! ;; -! -! *.lo) -! # A libtool-controlled object. -! -! # Check to see that this really is a libtool object. -! if (${SED} -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -! pic_object= -! non_pic_object= -! -! # Read the .lo file -! # If there is no directory component, then add one. -! case $arg in -! */* | *\\*) . $arg ;; -! *) . ./$arg ;; -! esac -! -! if test -z "$pic_object" || \ -! test -z "$non_pic_object" || -! test "$pic_object" = none && \ -! test "$non_pic_object" = none; then -! $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -! exit 1 -! fi -! -! # Extract subdirectory from the argument. -! xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$arg"; then -! xdir= -! else -! xdir="$xdir/" -! fi -! -! if test "$pic_object" != none; then -! # Prepend the subdirectory the object is found in. -! pic_object="$xdir$pic_object" -! - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -! dlfiles="$dlfiles $pic_object" - prev= - continue - else -*************** -*** 1215,1229 **** - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. -! dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` - prev= - else -! case $arg in -! *.lo) libobjs="$libobjs $arg" ;; -! *) objs="$objs $arg" ;; -! esac - fi - ;; - ---- 1438,1487 ---- - fi - fi - -+ # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. -! dlprefiles="$dlprefiles $pic_object" - prev= -+ fi -+ -+ # A PIC object. -+ libobjs="$libobjs $pic_object" -+ arg="$pic_object" -+ fi -+ -+ # Non-PIC object. -+ if test "$non_pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ non_pic_object="$xdir$non_pic_object" -+ -+ # A standard non-PIC object -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ if test -z "$pic_object" || test "$pic_object" = none ; then -+ arg="$non_pic_object" -+ fi -+ fi - else -! # Only an error if not doing a dry-run. -! if test -z "$run"; then -! $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -! exit 1 -! else -! # Dry-run case. -! -! # Extract subdirectory from the argument. -! xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$arg"; then -! xdir= -! else -! xdir="$xdir/" -! fi -! -! pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -! non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -! libobjs="$libobjs $pic_object" -! non_pic_objects="$non_pic_objects $non_pic_object" -! fi - fi - ;; - -*************** -*** 1277,1288 **** ---- 1535,1617 ---- - exit 1 - fi - -+ # Special handling for Metrowerks compiler for NetWare -+ case "$LD" in -+ mwldnlm) -+ # If building debug (-g) add internal debug symbols. -+ compile_command=`echo $compile_command | ${SED} -e 's/ -g / -g -sym internal /'` -+ -+ # When using the Metrowerks linker for NetWare, if there is a -+ # .def or .exp file with the same filename as the $output file, -+ # add it as a -commandfile to $compile_command and $linker_flags -+ # (if no -commandfile yet) -+ base=`echo $output | ${SED} 's,\(.*\)\..*$,\1,'` -+ cmd_file= -+ for ext in def exp; do -+ if test -f "$base.$ext"; then -+ cmd_file="$base.$ext" -+ break -+ fi -+ done -+ if test -n "$cmd_file"; then -+ if ! ( expr "$compile_command" : ".*-commandfile.*" > /dev/null ); then -+ compile_command="$compile_command -commandfile $cmd_file" -+ fi -+ if ! ( expr "$linker_flags" : ".*-commandfile.*" > /dev/null ); then -+ linker_flags="$linker_flags -commandfile $cmd_file" -+ fi -+ fi -+ ;; -+ esac -+ -+ # Infer tagged configuration to use if any are available and -+ # if one wasn't chosen via the "--tag" command line option. -+ # Only attempt this if the compiler in the base link -+ # command doesn't match the default compiler. -+ if test -n "$available_tags" && test -z "$tagname"; then -+ case $base_compile in -+ # Blanks in the command may have been stripped by the calling shell, -+ # but not from the CC environment variable when ltconfig was run. -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; -+ # Blanks at the start of $base_compile will cause this to fail -+ # if we don't check for them as well. -+ *) -+ for z in $available_tags; do -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" -+ case $base_compile in -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) -+ # The compiler in $compile_command matches -+ # the one in the tagged configuration. -+ # Assume this is the tagged configuration we want. -+ tagname=$z -+ break -+ ;; -+ esac -+ fi -+ done -+ # If $tagname still isn't set, then no tagged configuration -+ # was found and let the user know that the "--tag" command -+ # line option must be used. -+ if test -z "$tagname"; then -+ echo "$modename: unable to infer tagged configuration" -+ echo "$modename: specify a tag with \`--tag'" 1>&2 -+ exit 1 -+ # else -+ # echo "$modename: using $tagname tagged configuration" -+ fi -+ ;; -+ esac -+ fi -+ - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - -+ oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" -*************** -*** 1303,1313 **** - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. -! if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? -! if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi ---- 1632,1642 ---- - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. -! if test ! -d "$output_objdir"; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? -! if test "$status" -ne 0 && test ! -d "$output_objdir"; then - exit $status - fi - fi -*************** -*** 1325,1340 **** ---- 1654,1713 ---- - *) linkmode=prog ;; # Anything else should be a program. - esac - -+ case $host in -+ *cygwin*) -+ # This is a hack, but we run into problems on cygwin. -+ # libgcc.a depends on libcygwin, but gcc puts -lgcc onto -+ # the link line twice: once before the "normal" libs -+ # (-lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32) and -+ # once AFTER those. However, the "eliminate dup deps" -+ # proceedure keeps only the LAST duplicate -- thus -+ # messing up the order, since after dup elimination -+ # -lgcc comes AFTER -lcygwin. In normal C operation, -+ # you don't notice the problem, because -lgcc isn't -+ # really used. However, now that C++ libraries are -+ # libtool-able, you DO see the problem. So, it must -+ # be fixed. We could always force "--preserve-dup-deps" -+ # but that could lead to other problems. So, on cygwin, -+ # always preserve dups of -lgcc...but only -lgcc. That -+ # way, the dependency order won't get corrupted. -+ specialdeplibs="-lgcc" -+ ;; -+ *) - specialdeplibs= -+ ;; -+ esac -+ - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - libs="$libs $deplib" - done -+ -+ if test "$linkmode" = lib; then -+ libs="$predeps $libs $compiler_lib_search_path $postdeps" -+ -+ # Compute libraries that are listed more than once in $predeps -+ # $postdeps and mark them as special (i.e., whose duplicates are -+ # not to be eliminated). -+ pre_post_deps= -+ if test "X$duplicate_deps" = "Xyes" ; then -+ for pre_post_dep in $predeps $postdeps; do -+ case "$pre_post_deps " in -+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; -+ esac -+ pre_post_deps="$pre_post_deps $pre_post_dep" -+ done -+ fi -+ pre_post_deps= -+ fi -+ - deplibs= - newdependency_libs= - newlib_search_path= -*************** -*** 1366,1393 **** - ;; - esac - for pass in $passes; do -! if test $linkmode = prog; then -! # Determine which files to process -! case $pass in -! dlopen) -! libs="$dlfiles" -! save_deplibs="$deplibs" # Collect dlpreopened libraries - deplibs= -! ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) -! if test $linkmode = oldlib && test $linkmode = obj; then -! $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 - continue - fi -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi ---- 1739,1771 ---- - ;; - esac - for pass in $passes; do -! if test "$linkmode,$pass" = "lib,link" || -! test "$linkmode,$pass" = "prog,scan"; then -! libs="$deplibs" - deplibs= -! fi -! if test "$linkmode" = prog; then -! case $pass in -! dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi -+ if test "$pass" = dlopen; then -+ # Collect dlpreopened libraries -+ save_deplibs="$deplibs" -+ deplibs= -+ fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) -! if test "$linkmode" != lib && test "$linkmode" != prog; then -! $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -*************** -*** 1407,1413 **** - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" -! test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi ---- 1785,1791 ---- - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" -! test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi -*************** -*** 1416,1431 **** - case $linkmode in - lib) - deplibs="$deplib $deplibs" -! test $pass = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi -! if test $pass = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else ---- 1794,1809 ---- - case $linkmode in - lib) - deplibs="$deplib $deplibs" -! test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -! if test "$pass" = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else -*************** -*** 1434,1446 **** - fi - ;; - *) -! $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) -! if test $pass = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in ---- 1812,1824 ---- - fi - ;; - *) -! $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) -! if test "$pass" = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in -*************** -*** 1453,1459 **** - ;; - *.la) lib="$deplib" ;; - *.$libext) -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi ---- 1831,1837 ---- - ;; - *.la) lib="$deplib" ;; - *.$libext) -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -*************** -*** 1461,1470 **** - lib) - if test "$deplibs_check_method" != pass_all; then - echo -! echo "*** Warning: This library needs some functionality provided by $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - else - echo - echo "*** Warning: Linking the shared library $output against the" ---- 1839,1850 ---- - lib) - if test "$deplibs_check_method" != pass_all; then - echo -! echo "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because the file extensions .$libext of this argument makes me believe" -! echo "*** that it is just a static archive that I should not used here." - else - echo - echo "*** Warning: Linking the shared library $output against the" -*************** -*** 1474,1480 **** - continue - ;; - prog) -! if test $pass != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" ---- 1854,1860 ---- - continue - ;; - prog) -! if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" -*************** -*** 1485,1491 **** - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) -! if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" ---- 1865,1874 ---- - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) -! if test "$pass" = conv; then -! deplibs="$deplib $deplibs" -! elif test "$linkmode" = prog; then -! if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" -*************** -*** 1494,1499 **** ---- 1877,1883 ---- - else - newdlfiles="$newdlfiles $deplib" - fi -+ fi - continue - ;; - %DEPLIBS%) -*************** -*** 1501,1514 **** - continue - ;; - esac # case $deplib -! if test $found = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 1885,1898 ---- - continue - ;; - esac # case $deplib -! if test "$found" = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 1535,1547 **** - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || -! { test $linkmode = oldlib && test $linkmode = obj; }; then -! # Add dl[pre]opened files of deplib - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - -! if test $pass = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then ---- 1919,1930 ---- - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || -! { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - -! if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then -*************** -*** 1555,1566 **** - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done -! elif test $linkmode != prog && test $linkmode != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi ---- 1938,1951 ---- - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done -! elif test "$linkmode" != prog && test "$linkmode" != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi -*************** -*** 1578,1592 **** - fi - - # This library was specified with -dlopen. -! if test $pass = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking -! # statically, we need to preload. -! dlprefiles="$dlprefiles $lib" - else - newdlfiles="$newdlfiles $lib" - fi ---- 1963,1979 ---- - fi - - # This library was specified with -dlopen. -! if test "$pass" = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking -! # statically, we need to preload. We also need to preload any -! # dependent libraries so libltdl's deplib preloader doesn't -! # bomb out in the load deplibs phase. -! dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi -*************** -*** 1627,1633 **** - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. -! if test $pass = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 ---- 2014,2020 ---- - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. -! if test "$pass" = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 -*************** -*** 1646,1663 **** - - if test -z "$libdir"; then - # Link the convenience library -! if test $linkmode = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else -! deplibs="$lib $deplibs" - fi - continue - fi - -! if test $linkmode = prog && test $pass != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - ---- 2033,2050 ---- - - if test -z "$libdir"; then - # Link the convenience library -! if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else -! deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - -! if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - -*************** -*** 1673,1700 **** - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? -! if test $linkalldeplibs = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - -! link_static=no # Whether the deplib will be linked statically - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then -! # Link against this shared library - -- if test "$linkmode,$pass" = "prog,link" || -- { test $linkmode = lib && test $hardcode_into_libs = yes; }; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. ---- 2060,2095 ---- - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? -! if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - -! if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then -! # We need to hardcode the library path -! if test -n "$shlibpath_var"; then -! # Make sure the rpath contains only unique directories. -! case "$temp_rpath " in -! *" $dir "*) ;; -! *" $absdir "*) ;; -! *) temp_rpath="$temp_rpath $dir" ;; -! esac -! fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. -*************** -*** 1716,1732 **** - esac - ;; - esac -- if test $linkmode = prog; then -- # We need to hardcode the library path -- if test -n "$shlibpath_var"; then -- # Make sure the rpath contains only unique directories. -- case "$temp_rpath " in -- *" $dir "*) ;; -- *" $absdir "*) ;; -- *) temp_rpath="$temp_rpath $dir" ;; -- esac -- fi -- fi - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && ---- 2111,2116 ---- -*************** -*** 1736,1746 **** ---- 2120,2159 ---- - # We only need to search for static libraries - continue - fi -+ fi - -+ link_static=no # Whether the deplib will be linked statically -+ if test -n "$library_names" && -+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi -+ # This is a shared library -+ if test "$linkmode" = lib && -+ test "$hardcode_into_libs" = yes; then -+ # Hardcode the library path. -+ # Skip directories that are in the system default run-time -+ # search path. -+ case " $sys_lib_dlsearch_path " in -+ *" $absdir "*) ;; -+ *) -+ case "$compile_rpath " in -+ *" $absdir "*) ;; -+ *) compile_rpath="$compile_rpath $absdir" -+ esac -+ ;; -+ esac -+ case " $sys_lib_dlsearch_path " in -+ *" $libdir "*) ;; -+ *) -+ case "$finalize_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_rpath="$finalize_rpath $libdir" -+ esac -+ ;; -+ esac -+ fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname -*************** -*** 1766,1773 **** - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" -! soname=`echo $soroot | sed -e 's/^.*\///'` -! newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : ---- 2179,2186 ---- - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" -! soname=`echo $soroot | ${SED} -e 's/^.*\///'` -! newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : -*************** -*** 1798,1806 **** - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib -! fi # test -n $old_archive_from_expsyms_cmds - -! if test $linkmode = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= ---- 2211,2219 ---- - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib -! fi # test -n "$old_archive_from_expsyms_cmds" - -! if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= -*************** -*** 1808,1813 **** ---- 2221,2229 ---- - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then -+ case $host in -+ *-*-sco3.2v5* ) add_dir="-L$dir" ;; -+ esac - add="$dir/$linklib" - elif test "$hardcode_minus_L" = no; then - case $host in -*************** -*** 1849,1855 **** - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi -! if test $linkmode = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else ---- 2265,2271 ---- - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi -! if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else -*************** -*** 1866,1872 **** - fi - fi - -! if test $linkmode = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= ---- 2282,2288 ---- - fi - fi - -! if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= -*************** -*** 1884,1898 **** - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. -- if test "X$installed" = Xyes; then - add_dir="-L$libdir" -- else -- add_dir="-L$DESTDIR$libdir" -- fi - add="-l$name" - fi - -! if test $linkmode = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else ---- 2300,2310 ---- - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - add="-l$name" - fi - -! if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else -*************** -*** 1900,1915 **** - test -n "$add" && deplibs="$add $deplibs" - fi - fi -! elif test $linkmode = prog; then -! if test "$alldeplibs" = yes && -! { test "$deplibs_check_method" = pass_all || -! { test "$build_libtool_libs" = yes && -! test -n "$library_names"; }; }; then -! # We only need to search for static libraries -! continue -! fi -! -! # Try to link the static library - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. ---- 2312,2318 ---- - test -n "$add" && deplibs="$add $deplibs" - fi - fi -! elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. -*************** -*** 1930,1942 **** - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo -! echo "*** Warning: This library needs some functionality provided by $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then -! echo "*** Therefore, libtool will create a static module, that should work " -! echo "*** as long as the dlopening application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" ---- 2333,2346 ---- - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo -! echo "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then -! echo "*** But as you try to build a module library, libtool will still create " -! echo "*** a static module, that should work as long as the dlopening application" -! echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" -*************** -*** 1959,1968 **** - fi - fi # link shared/static library? - -! if test $linkmode = lib; then - if test -n "$dependency_libs" && -! { test $hardcode_into_libs != yes || test $build_old_libs = yes || -! test $link_static = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do ---- 2363,2372 ---- - fi - fi # link shared/static library? - -! if test "$linkmode" = lib; then - if test -n "$dependency_libs" && -! { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || -! test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do -*************** -*** 1985,1997 **** - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - -! if test $link_all_deplibs != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in ---- 2389,2403 ---- - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done - -! if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in -*************** -*** 2013,2019 **** - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 ---- 2419,2425 ---- - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 2034,2048 **** - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs -! if test $pass = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi -! if test $pass != dlopen; then -! test $pass != scan && dependency_libs="$newdependency_libs" -! if test $pass != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do ---- 2440,2454 ---- - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs -! dependency_libs="$newdependency_libs" -! if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi -! if test "$pass" != dlopen; then -! if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do -*************** -*** 2064,2072 **** ---- 2470,2498 ---- - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do -+ # FIXME: Pedantically, this is the right thing to do, so -+ # that some nasty dependency loop isn't accidentally -+ # broken: -+ #new_libs="$deplib $new_libs" -+ # Pragmatically, this seems to cause very few problems in -+ # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - *) -+ # And here is the reason: when a library appears more -+ # than once as an explicit dependence of a library, or -+ # is implicitly linked in more than once by the -+ # compiler, it is considered special, and multiple -+ # occurrences thereof are not removed. Compare this -+ # with having the same library being listed as a -+ # dependency of multiple other libraries: in this case, -+ # we know (pedantically, we assume) the library does not -+ # need to be listed more than once, so we keep only the -+ # last copy. This is not always right, but it is rare -+ # enough that we require users that really mean to play -+ # such unportable linking tricks to link the library -+ # using -Wl,-lname, so that libtool does not consider it -+ # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) -*************** -*** 2094,2112 **** - eval $var=\"$tmp_libs\" - done # for var - fi -- if test "$pass" = "conv" && -- { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then -- libs="$deplibs" # reset libs -- deplibs= -- fi - done # for pass -! if test $linkmode = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi ---- 2520,2537 ---- - eval $var=\"$tmp_libs\" - done # for var - fi - done # for pass -! if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) -+ if test -n "$deplibs"; then -+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 -+ fi -+ - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi -*************** -*** 2177,2183 **** - fi - - set dummy $rpath -! if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" ---- 2602,2608 ---- - fi - - set dummy $rpath -! if test "$#" -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" -*************** -*** 2186,2192 **** - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. -! libext=al - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes ---- 2611,2619 ---- - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. -! # Some compilers have problems with a `.al' extension so -! # convenience libraries should have the same extension an -! # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes -*************** -*** 2244,2250 **** - ;; - esac - -! if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 ---- 2671,2677 ---- - ;; - esac - -! if test "$age" -gt "$current"; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 -*************** -*** 2277,2292 **** - versuffix=".$current"; - ;; - -! irix) - major=`expr $current - $age + 1` -! verstring="sgi$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision -! while test $loop != 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` -! verstring="sgi$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. ---- 2704,2724 ---- - versuffix=".$current"; - ;; - -! irix | nonstopux) - major=`expr $current - $age + 1` -! -! case $version_type in -! nonstopux) verstring_prefix=nonstopux ;; -! *) verstring_prefix=sgi ;; -! esac -! verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision -! while test "$loop" -ne 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` -! verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. -*************** -*** 2306,2312 **** - - # Add in all the interfaces that we are compatible with. - loop=$age -! while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" ---- 2738,2744 ---- - - # Add in all the interfaces that we are compatible with. - loop=$age -! while test "$loop" -ne 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" -*************** -*** 2338,2349 **** - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= -- verstring="0.0" - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely -! verstring="" - ;; - *) - verstring="0.0" ---- 2770,2780 ---- - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely -! verstring= - ;; - *) - verstring="0.0" -*************** -*** 2377,2385 **** - fi - - if test "$mode" != relink; then -! # Remove our outputs. -! $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" -! $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - fi - - # Now set the variables for building old libraries. ---- 2808,2831 ---- - fi - - if test "$mode" != relink; then -! # Remove our outputs, but don't remove object files since they -! # may have been created when compiling PIC objects. -! removelist= -! tempremovelist=`echo "$output_objdir/*"` -! for p in $tempremovelist; do -! case $p in -! *.$objext) -! ;; -! $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) -! removelist="$removelist $p" -! ;; -! *) ;; -! esac -! done -! if test -n "$removelist"; then -! $show "${rm}r $removelist" -! $run ${rm}r $removelist -! fi - fi - - # Now set the variables for building old libraries. -*************** -*** 2392,2400 **** - - # Eliminate all temporary directories. - for path in $notinst_path; do -! lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` -! deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` -! dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then ---- 2838,2846 ---- - - # Eliminate all temporary directories. - for path in $notinst_path; do -! lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` -! deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` -! dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then -*************** -*** 2407,2413 **** - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done -! if test $hardcode_into_libs != yes || test $build_old_libs = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi ---- 2853,2859 ---- - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done -! if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi -*************** -*** 2445,2456 **** - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; -! *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - ;; - *) - # Add libc to deplibs on all other systems if necessary. -! if test $build_libtool_need_lc = "yes"; then - deplibs="$deplibs -lc" - fi - ;; ---- 2891,2903 ---- - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc due to us having libc/libc_r. -+ test "X$arg" = "X-lc" && continue - ;; - *) - # Add libc to deplibs on all other systems if necessary. -! if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; -*************** -*** 2490,2502 **** - int main() { return 0; } - EOF - $rm conftest -! $CC -o conftest conftest.c $deplibs -! if test $? -eq 0 ; then - ldd_output=`ldd conftest` - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` - set dummy $deplib_matches ---- 2937,2949 ---- - int main() { return 0; } - EOF - $rm conftest -! $LTCC -o conftest conftest.c $deplibs -! if test "$?" -eq 0 ; then - ldd_output=`ldd conftest` - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" -ne "0"; then - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` - set dummy $deplib_matches -*************** -*** 2506,2531 **** - else - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - newdeplibs="$newdeplibs $i" - fi - done - else -! # Error occured in the first compile. Let's try to salvage the situation: -! # Compile a seperate program for each library. - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - $rm conftest -! $CC -o conftest conftest.c $i - # Did it work? -! if test $? -eq 0 ; then - ldd_output=`ldd conftest` - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` ---- 2953,2980 ---- - else - droppeddeps=yes - echo -! echo "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which I believe you do not have" -! echo "*** because a test_compile did reveal that the linker did not use it for" -! echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - else - newdeplibs="$newdeplibs $i" - fi - done - else -! # Error occured in the first compile. Let's try to salvage -! # the situation: Compile a separate program for each library. - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" != "0"; then - $rm conftest -! $LTCC -o conftest conftest.c $i - # Did it work? -! if test "$?" -eq 0 ; then - ldd_output=`ldd conftest` - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` -*************** -*** 2536,2545 **** - else - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - droppeddeps=yes ---- 2985,2996 ---- - else - droppeddeps=yes - echo -! echo "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because a test_compile did reveal that the linker did not use this one" -! echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - else - droppeddeps=yes -*************** -*** 2561,2567 **** - for a_deplib in $deplibs; do - name="`expr $a_deplib : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` ---- 3012,3018 ---- - for a_deplib in $deplibs; do - name="`expr $a_deplib : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` -*************** -*** 2578,2591 **** - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do -! potliblink=`ls -ld $potlib | sed 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -! | sed 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" ---- 3029,3042 ---- - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do -! potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -! | ${SED} 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" -*************** -*** 2596,2605 **** - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. ---- 3047,3063 ---- - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because I did check the linker path looking for a file starting" -! if test -z "$potlib" ; then -! echo "*** with $libname but no candidates were found. (...for file magic test)" -! else -! echo "*** with $libname and none of the candidates passed a file format test" -! echo "*** using a file magic. Last file checked: $potlib" -! fi - fi - else - # Add a -L argument. -*************** -*** 2618,2625 **** - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - if eval echo \"$potent_lib\" 2>/dev/null \ -! | sed 10q \ - | egrep "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" ---- 3076,3084 ---- - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do -+ potlib="$potent_lib" # see symlink-check above in file_magic test - if eval echo \"$potent_lib\" 2>/dev/null \ -! | ${SED} 10q \ - | egrep "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" -*************** -*** 2630,2639 **** - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. ---- 3089,3105 ---- - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because I did check the linker path looking for a file starting" -! if test -z "$potlib" ; then -! echo "*** with $libname but no candidates were found. (...for regex pattern test)" -! else -! echo "*** with $libname and none of the candidates passed a file format test" -! echo "*** using a regex pattern. Last file checked: $potlib" -! fi - fi - else - # Add a -L argument. -*************** -*** 2696,2702 **** - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - -! if test $allow_undefined = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" ---- 3162,3168 ---- - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - -! if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" -*************** -*** 2723,2729 **** - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then -! if test $hardcode_into_libs = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= ---- 3189,3195 ---- - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then -! if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= -*************** -*** 2789,2795 **** - else - soname="$realname" - fi -! test -z "$dlname" && dlname=$soname - - lib="$output_objdir/$realname" - for link ---- 3255,3263 ---- - else - soname="$realname" - fi -! if test -z "$dlname"; then -! dlname=$soname -! fi - - lib="$output_objdir/$realname" - for link -*************** -*** 2797,2819 **** - linknames="$linknames $link" - done - -- # Ensure that we have .o objects for linkers which dislike .lo -- # (e.g. aix) in case we are running --disable-static -- for obj in $libobjs; do -- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$xdir" = "X$obj"; then -- xdir="." -- else -- xdir="$xdir" -- fi -- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -- if test ! -f $xdir/$oldobj; then -- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" -- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? -- fi -- done -- - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - ---- 3265,3270 ---- -*************** -*** 2827,2834 **** ---- 3278,3293 ---- - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" -+ if len=`expr "X$cmd" : ".*"` && -+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - $show "$cmd" - $run eval "$cmd" || exit $? -+ skipped_export=false -+ else -+ # The command line is too long to execute in one step. -+ $show "using reloadable object file for export list..." -+ skipped_export=: -+ fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then -*************** -*** 2846,2860 **** - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 3305,3320 ---- - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then -+ save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 2870,2885 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi ---- 3330,3345 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - fi - fi -*************** -*** 2898,2905 **** ---- 3358,3488 ---- - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval cmds=\"$archive_expsym_cmds\" - else -+ save_deplibs="$deplibs" -+ for conv in $convenience; do -+ tmp_deplibs= -+ for test_deplib in $deplibs; do -+ if test "$test_deplib" != "$conv"; then -+ tmp_deplibs="$tmp_deplibs $test_deplib" -+ fi -+ done -+ deplibs="$tmp_deplibs" -+ done -+ eval cmds=\"$archive_cmds\" -+ deplibs="$save_deplibs" -+ fi -+ -+ if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && -+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then -+ : -+ else -+ # The command line is too long to link in one step, link piecewise. -+ $echo "creating reloadable object files..." -+ -+ # Save the value of $output and $libobjs because we want to -+ # use them later. If we have whole_archive_flag_spec, we -+ # want to use save_libobjs as it was before -+ # whole_archive_flag_spec was expanded, because we can't -+ # assume the linker understands whole_archive_flag_spec. -+ # This may have to be revisited, in case too many -+ # convenience libraries get linked in and end up exceeding -+ # the spec. -+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then -+ save_libobjs=$libobjs -+ fi -+ save_output=$output -+ -+ # Clear the reloadable object creation command queue and -+ # initialize k to one. -+ test_cmds= -+ concat_cmds= -+ objlist= -+ delfiles= -+ last_robj= -+ k=1 -+ output=$output_objdir/$save_output-${k}.$objext -+ # Loop over the list of objects to be linked. -+ for obj in $save_libobjs -+ do -+ eval test_cmds=\"$reload_cmds $objlist $last_robj\" -+ if test "X$objlist" = X || -+ { len=`expr "X$test_cmds" : ".*"` && -+ test "$len" -le "$max_cmd_len"; }; then -+ objlist="$objlist $obj" -+ else -+ # The command $test_cmds is almost too long, add a -+ # command to the queue. -+ if test "$k" -eq 1 ; then -+ # The first file doesn't have a previous command to add. -+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\" -+ else -+ # All subsequent reloadable object files will link in -+ # the last one created. -+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" -+ fi -+ last_robj=$output_objdir/$save_output-${k}.$objext -+ k=`expr $k + 1` -+ output=$output_objdir/$save_output-${k}.$objext -+ objlist=$obj -+ len=1 -+ fi -+ done -+ # Handle the remaining objects by creating one last -+ # reloadable object file. All subsequent reloadable object -+ # files will link in the last one created. -+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~ -+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" -+ -+ if ${skipped_export-false}; then -+ $show "generating symbol list for \`$libname.la'" -+ export_symbols="$output_objdir/$libname.exp" -+ $run $rm $export_symbols -+ libobjs=$output -+ # Append the command to create the export file. -+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" -+ fi -+ -+ # Set up a command to remove the reloadale object files -+ # after they are used. -+ i=0 -+ while test "$i" -lt "$k" -+ do -+ i=`expr $i + 1` -+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" -+ done -+ -+ $echo "creating a temporary reloadable object file: $output" -+ -+ # Loop through the commands generated above and execute them. -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $concat_cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ -+ libobjs=$output -+ # Restore the value of output. -+ output=$save_output -+ -+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then -+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" -+ fi -+ # Expand the library linking commands again to reset the -+ # value of $libobjs for piecewise linking. -+ -+ # Do each of the archive commands. -+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then -+ eval cmds=\"$archive_expsym_cmds\" -+ else - eval cmds=\"$archive_cmds\" - fi -+ -+ # Append the command to remove the reloadable object files -+ # to the just-reset $cmds. -+ eval cmds=\"\$cmds~$rm $delfiles\" -+ fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" -*************** -*** 2990,2999 **** - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 3573,3582 ---- - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 3009,3024 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi ---- 3592,3607 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - fi - fi -*************** -*** 3054,3061 **** - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. -! $show "echo timestamp > $libobj" -! $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - ---- 3637,3644 ---- - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. -! # $show "echo timestamp > $libobj" -! # $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - -*************** -*** 3071,3090 **** - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" -- else -- # Just create a symlink. -- $show $rm $libobj -- $run $rm $libobj -- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$xdir" = "X$libobj"; then -- xdir="." -- else -- xdir="$xdir" -- fi -- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` -- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -- $show "(cd $xdir && $LN_S $oldobj $baseobj)" -- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then ---- 3654,3659 ---- -*************** -*** 3097,3103 **** - - prog) - case $host in -! *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 ---- 3666,3672 ---- - - prog) - case $host in -! *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 -*************** -*** 3285,3293 **** - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols -! $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else -! $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi ---- 3854,3862 ---- - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols -! $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else -! $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi -*************** -*** 3295,3301 **** - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" -! name=`echo "$arg" | sed -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done ---- 3864,3870 ---- - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" -! name=`echo "$arg" | ${SED} -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done -*************** -*** 3310,3316 **** - fi - - # Try sorting and uniquifying the output. -! if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S ---- 3879,3891 ---- - fi - - # Try sorting and uniquifying the output. -! if grep -v "^: " < "$nlist" | -! if sort -k 3 /dev/null 2>&1; then -! sort -k 3 -! else -! sort +2 -! fi | -! uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S -*************** -*** 3371,3388 **** - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. -! $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -! $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" ---- 3946,3963 ---- - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag";; - esac - esac - - # Now compile the dynamic symbol file. -! $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -! $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" -*************** -*** 3407,3413 **** - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - -! if test $need_relink = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" ---- 3982,3988 ---- - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - -! if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" -*************** -*** 3532,3538 **** - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done -! relink_command="cd `pwd`; $relink_command" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - ---- 4107,4113 ---- - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done -! relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - -*************** -*** 3552,3562 **** - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in -! *.exe) output=`echo $output|sed 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in -! *cygwin*) exeext=.exe ;; - *) exeext= ;; - esac - $rm $output ---- 4127,4139 ---- - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in -! *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in -! *cygwin*) -! exeext=.exe -! outputname=`echo $outputname|${SED} 's,.exe$,,'` ;; - *) exeext= ;; - esac - $rm $output -*************** -*** 3576,3582 **** - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='sed -e 1s/^X//' - sed_quote_subst='$sed_quote_subst' - - # The HP-UX ksh and POSIX shell print the target directory to stdout ---- 4153,4159 ---- - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='${SED} -e 1s/^X//' - sed_quote_subst='$sed_quote_subst' - - # The HP-UX ksh and POSIX shell print the target directory to stdout -*************** -*** 3614,3620 **** - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. -! file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - ---- 4191,4197 ---- - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. -! file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - -*************** -*** 3627,3633 **** - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -! file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. ---- 4204,4210 ---- - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -! file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. -*************** -*** 3641,3647 **** - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ -! { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" ---- 4218,4224 ---- - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ -! { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" -*************** -*** 3763,3769 **** - oldobjs="$libobjs_save" - build_libtool_libs=no - else -! oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` - fi - addlibs="$old_convenience" - fi ---- 4340,4346 ---- - oldobjs="$libobjs_save" - build_libtool_libs=no - else -! oldobjs="$oldobjs$old_deplibs $non_pic_objects" - fi - addlibs="$old_convenience" - fi -*************** -*** 3772,3781 **** - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 4349,4358 ---- - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 3792,3801 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" ---- 4369,4378 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" -*************** -*** 3809,3833 **** - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else -! # Ensure that we have .o objects in place in case we decided -! # not to build a shared library, and have fallen back to building -! # static libs even though --disable-static was passed! -! for oldobj in $oldobjs; do -! if test ! -f $oldobj; then -! xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$oldobj"; then -! xdir="." -! else -! xdir="$xdir" -! fi -! baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` -! obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -! $show "(cd $xdir && ${LN_S} $obj $baseobj)" -! $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? - fi - done -! -! eval cmds=\"$old_archive_cmds\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do ---- 4386,4438 ---- - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else -! eval cmds=\"$old_archive_cmds\" -! -! if len=`expr "X$cmds" : ".*"` && -! test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then -! : -! else -! # the command line is too long to link in one step, link in parts -! $echo "using piecewise archive linking..." -! save_RANLIB=$RANLIB -! RANLIB=: -! objlist= -! concat_cmds= -! save_oldobjs=$oldobjs -! # GNU ar 2.10+ was changed to match POSIX; thus no paths are -! # encoded into archives. This makes 'ar r' malfunction in -! # this piecewise linking case whenever conflicting object -! # names appear in distinct ar calls; check, warn and compensate. -! if (for obj in $save_oldobjs -! do -! $echo "X$obj" | $Xsed -e 's%^.*/%%' -! done | sort | sort -uc >/dev/null 2>&1); then -! : -! else -! $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 -! $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 -! AR_FLAGS=cq -! fi -! for obj in $save_oldobjs -! do -! oldobjs="$objlist $obj" -! objlist="$objlist $obj" -! eval test_cmds=\"$old_archive_cmds\" -! if len=`expr "X$test_cmds" : ".*"` && -! test "$len" -le "$max_cmd_len"; then -! : -! else -! # the above command should be used before it gets too long -! oldobjs=$objlist -! test -z "$concat_cmds" || concat_cmds=$concat_cmds~ -! eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" -! objlist= - fi - done -! RANLIB=$save_RANLIB -! oldobjs=$objlist -! eval cmds=\"\$concat_cmds~$old_archive_cmds\" -! fi - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do -*************** -*** 3862,3868 **** - fi - done - # Quote the link command for shipping. -! relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. ---- 4467,4473 ---- - fi - done - # Quote the link command for shipping. -! relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. -*************** -*** 3879,3885 **** - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4484,4490 ---- - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3893,3899 **** - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4498,4504 ---- - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3904,3910 **** - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4509,4515 ---- - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3952,3958 **** - - # Directory that this library needs to be installed in: - libdir='$install_libdir'" -! if test "$installed" = no && test $need_relink = yes; then - $echo >> $output "\ - relink_command=\"$relink_command\"" - fi ---- 4557,4563 ---- - - # Directory that this library needs to be installed in: - libdir='$install_libdir'" -! if test "$installed" = no && test "$need_relink" = yes; then - $echo >> $output "\ - relink_command=\"$relink_command\"" - fi -*************** -*** 4088,4094 **** - - # Not a directory, so check to see that there is only one file specified. - set dummy $files -! if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 ---- 4693,4699 ---- - - # Not a directory, so check to see that there is only one file specified. - set dummy $files -! if test "$#" -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 -*************** -*** 4128,4134 **** - - *.la) - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 ---- 4733,4739 ---- - - *.la) - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 -*************** -*** 4145,4165 **** - esac - - # Add the libdir to current_libdirs if it is the destination. -- DESTDIR= - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else -- case "$destdir" in -- *"$libdir") -- DESTDIR=`$echo "$destdir" | sed -e 's!'"$libdir"'$!!'` -- if test "X$destdir" != "X$DESTDIR$libdir"; then -- DESTDIR= -- fi -- ;; -- esac - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; ---- 4750,4761 ---- -*************** -*** 4173,4179 **** - - if test -n "$relink_command"; then - $echo "$modename: warning: relinking \`$file'" 1>&2 -- export DESTDIR - $show "$relink_command" - if $run eval "$relink_command"; then : - else ---- 4769,4774 ---- -*************** -*** 4181,4187 **** - continue - fi - fi -- unset DESTDIR - - # See the names of the shared library. - set dummy $library_names ---- 4776,4781 ---- -*************** -*** 4201,4207 **** - $run eval "$striplib $destdir/$realname" || exit $? - fi - -! if test $# -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do ---- 4795,4801 ---- - $run eval "$striplib $destdir/$realname" || exit $? - fi - -! if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do -*************** -*** 4287,4306 **** - destfile="$destdir/$destfile" - fi - - # Do a test to see if this is really a libtool program. -! if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # If there is no directory component, then add one. - case $file in -! */* | *\\*) . $file ;; -! *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then -! $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - ---- 4881,4921 ---- - destfile="$destdir/$destfile" - fi - -+ # If the file is missing, and there is a .exe on the end, strip it -+ # because it is most likely a libtool script we actually want to -+ # install -+ stripped_ext="" -+ case $file in -+ *.exe) -+ if test ! -f "$file"; then -+ file=`echo $file|${SED} 's,.exe$,,'` -+ stripped_ext=".exe" -+ fi -+ ;; -+ esac -+ - # Do a test to see if this is really a libtool program. -! case $host in -! *cygwin*|*mingw*) -! wrapper=`echo $file | ${SED} -e 's,.exe$,,'` -! ;; -! *) -! wrapper=$file -! ;; -! esac -! if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # If there is no directory component, then add one. - case $file in -! */* | *\\*) . $wrapper ;; -! *) . ./$wrapper ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then -! $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 - exit 1 - fi - -*************** -*** 4340,4346 **** - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi -! file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` ---- 4955,4961 ---- - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi -! file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` -*************** -*** 4358,4371 **** - fi - else - # Install the binary that we compiled earlier. -! file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in -! /usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok ---- 4973,4986 ---- - fi - else - # Install the binary that we compiled earlier. -! file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in -! */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok -*************** -*** 4374,4380 **** - destfile=$destfile.exe - ;; - *:*.exe) -! destfile=`echo $destfile | sed -e 's,.exe$,,'` - ;; - esac - ;; ---- 4989,4995 ---- - destfile=$destfile.exe - ;; - *:*.exe) -! destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` - ;; - esac - ;; -*************** -*** 4459,4465 **** - fi - - # Exit here if they wanted silent mode. -! test "$show" = ":" && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" ---- 5074,5080 ---- - fi - - # Exit here if they wanted silent mode. -! test "$show" = : && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" -*************** -*** 4522,4528 **** - case $file in - *.la) - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 ---- 5137,5143 ---- - case $file in - *.la) - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 -*************** -*** 4593,4599 **** - -*) ;; - *) - # Do a test to see if this is really a libtool program. -! if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; ---- 5208,5214 ---- - -*) ;; - *) - # Do a test to see if this is really a libtool program. -! if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; -*************** -*** 4625,4631 **** - fi - - # Now prepare to actually exec the command. -! exec_cmd='"$cmd"$args' - else - # Display what would be done. - if test -n "$shlibpath_var"; then ---- 5240,5246 ---- - fi - - # Now prepare to actually exec the command. -! exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then -*************** -*** 4675,4684 **** - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -! test $mode = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates -! if test $mode = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; ---- 5290,5299 ---- - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -! test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates -! if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; -*************** -*** 4702,4708 **** - case $name in - *.la) - # Possibly a libtool archive, so verify it. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. ---- 5317,5323 ---- - case $name in - *.la) - # Possibly a libtool archive, so verify it. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. -*************** -*** 4710,4718 **** - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" -! test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - -! if test $mode = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" ---- 5325,5333 ---- - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" -! test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - -! if test "$mode" = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" -*************** -*** 4721,4727 **** - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done ---- 5336,5342 ---- - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done -*************** -*** 4736,4742 **** - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done ---- 5351,5357 ---- - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done -*************** -*** 4748,4763 **** - ;; - - *.lo) -! if test "$build_old_libs" = yes; then -! oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` -! rmfiles="$rmfiles $dir/$oldobj" - fi - ;; - - *) - # Do a test to see if this is a libtool program. -! if test $mode = clean && -! (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - ---- 5363,5392 ---- - ;; - - *.lo) -! # Possibly a libtool object, so verify it. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -! -! # Read the .lo file -! . $dir/$name -! -! # Add PIC object to the list of files to remove. -! if test -n "$pic_object" \ -! && test "$pic_object" != none; then -! rmfiles="$rmfiles $dir/$pic_object" -! fi -! -! # Add non-PIC object to the list of files to remove. -! if test -n "$non_pic_object" \ -! && test "$non_pic_object" != none; then -! rmfiles="$rmfiles $dir/$non_pic_object" -! fi - fi - ;; - - *) - # Do a test to see if this is a libtool program. -! if test "$mode" = clean && -! (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - -*************** -*** 4818,4823 **** ---- 5447,5453 ---- - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages -+ --tag=TAG use configuration variables from tag TAG - --version print version information - - MODE must be one of the following: -*************** -*** 4943,4948 **** ---- 5573,5579 ---- - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -+ -objectlist FILE Use a list of object files found in FILE to specify objects - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -*************** -*** 4993,4998 **** ---- 5624,5649 ---- - - exit 0 - -+ # The TAGs below are defined such that we never get into a situation -+ # in which we disable both kinds of libraries. Given conflicting -+ # choices, we go for a static library, that is the most portable, -+ # since we can't tell whether shared libraries were disabled because -+ # the user asked for that or because the platform doesn't support -+ # them. This is particularly important on AIX, because we don't -+ # support having both static and shared libraries enabled at the same -+ # time on that platform, so we default to a shared-only configuration. -+ # If a disable-shared tag is given, we'll fallback to a static-only -+ # configuration. But we'll never go from static-only to shared-only. -+ -+ # ### BEGIN LIBTOOL TAG CONFIG: disable-shared -+ build_libtool_libs=no -+ build_old_libs=yes -+ # ### END LIBTOOL TAG CONFIG: disable-shared -+ -+ # ### BEGIN LIBTOOL TAG CONFIG: disable-static -+ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -+ # ### END LIBTOOL TAG CONFIG: disable-static -+ - # Local Variables: - # mode:shell-script - # sh-indentation:2 From 9cbc3df7c3dc30fbc78c922592352d2044167b91 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 5 Mar 2003 18:52:47 -0500 Subject: [PATCH 066/267] novell41b.patch BitKeeper/deleted/.del-netware.patch~f70a3a965f54d9ee: Delete: netware/netware.patch netware/BUILD/mwenv: Import patch novell41b.patch netware/init_db.sql: Import patch novell41b.patch netware/test_db.sql: Import patch novell41b.patch --- netware/BUILD/mwenv | 12 +- netware/init_db.sql | 15 +- netware/netware.patch | 4162 ----------------------------------------- netware/test_db.sql | 18 +- 4 files changed, 27 insertions(+), 4180 deletions(-) delete mode 100644 netware/netware.patch diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv index d2b64409c88..d37a3ed5472 100755 --- a/netware/BUILD/mwenv +++ b/netware/BUILD/mwenv @@ -1,18 +1,18 @@ #! /bin/sh -# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be changed before compiling +# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be correct before compiling # This values are normally changed by the nwbootstrap script -# the default for WINE_BUILD_DIR is "F:/mydev" +# the default is "F:/mydev" export MYDEV="WINE_BUILD_DIR" -export MWCNWx86Includes="$MYDEV/libc/include" -export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib" -export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib" +export MWCNWx86Includes="$MYDEV/libc/include;$MYDEV/zlib-1.1.4" +export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib;$MYDEV/zlib-1.1.4" +export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib;libz.a" export WINEPATH="$MYDEV/mw/bin" -# the default for BUILD_DIR is "$HOME/mydev" +# the default added path is "$HOME/mydev/mysql-x.x-x/netware/BUILD" export PATH="$PATH:BUILD_DIR/mysql-VERSION/netware/BUILD" export AR='mwldnlm' diff --git a/netware/init_db.sql b/netware/init_db.sql index 1e8354e13a1..4613e5c0274 100644 --- a/netware/init_db.sql +++ b/netware/init_db.sql @@ -4,22 +4,23 @@ CREATE DATABASE test; USE mysql; CREATE TABLE db (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User)) comment='Database privileges'; - + INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); - -CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db)) comment='Host privileges; Merged with database privileges'; + +CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db)) comment='Host privileges; Merged with database privileges'; -CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Password char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, File_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL, Super_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL, ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL, ssl_cipher BLOB NOT NULL, x509_issuer BLOB NOT NULL, x509_subject BLOB NOT NULL, max_questions int(11) unsigned DEFAULT 0 NOT NULL, max_updates int(11) unsigned DEFAULT 0 NOT NULL, max_connections int(11) unsigned DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User)) comment='Users and global privileges'; +CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Password char(45) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, File_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL, Super_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL, ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL, ssl_cipher BLOB NOT NULL, x509_issuer BLOB NOT NULL, x509_subject BLOB NOT NULL, max_questions int(11) unsigned DEFAULT 0 NOT NULL, max_updates int(11) unsigned DEFAULT 0 NOT NULL, max_connections int(11) unsigned DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User)) comment='Users and global privileges'; INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); - +INSERT INTO user VALUES ('','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); + INSERT INTO user (host,user) values ('localhost',''); -INSERT INTO user (host,user) values ('%',''); +INSERT INTO user (host,user) values ('',''); CREATE TABLE func (name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') NOT NULL, PRIMARY KEY (name)) comment='User defined functions'; CREATE TABLE tables_priv (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(60) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp(14), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor)) comment='Table privileges'; CREATE TABLE columns_priv (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp(14), Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name)) comment='Column privileges'; + diff --git a/netware/netware.patch b/netware/netware.patch deleted file mode 100644 index 2dcf36a2d9c..00000000000 --- a/netware/netware.patch +++ /dev/null @@ -1,4162 +0,0 @@ -*** mysql-4.0.7-gamma/ltmain.sh Fri Dec 20 07:25:10 2002 ---- mysql40/ltmain.sh Mon Jan 6 09:26:55 2003 -*************** -*** 49,62 **** - fi - - # The name of this program. -! progname=`$echo "$0" | sed 's%^.*/%%'` - modename="$progname" - - # Constants. - PROGRAM=ltmain.sh - PACKAGE=libtool -! VERSION=1.4.2 -! TIMESTAMP=" (1.922.2.53 2001/09/11 03:18:52)" - - default_mode= - help="Try \`$progname --help' for more information." ---- 49,62 ---- - fi - - # The name of this program. -! progname=`$echo "$0" | ${SED} 's%^.*/%%'` - modename="$progname" - - # Constants. - PROGRAM=ltmain.sh - PACKAGE=libtool -! VERSION=1.4e -! TIMESTAMP=" (1.1125 2002/06/26 07:15:36)" - - default_mode= - help="Try \`$progname --help' for more information." -*************** -*** 67,76 **** - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='sed -e 1s/^X//' - sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -! SP2NL='tr \040 \012' -! NL2SP='tr \015\012 \040\040' - - # NLS nuisances. - # Only set LANG and LC_ALL to C if already set. ---- 67,85 ---- - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed="${SED}"' -e 1s/^X//' - sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -! # test EBCDIC or ASCII -! case `echo A|od -x` in -! *[Cc]1*) # EBCDIC based system -! SP2NL="tr '\100' '\n'" -! NL2SP="tr '\r\n' '\100\100'" -! ;; -! *) # Assume ASCII based system -! SP2NL="tr '\040' '\012'" -! NL2SP="tr '\015\012' '\040\040'" -! ;; -! esac - - # NLS nuisances. - # Only set LANG and LC_ALL to C if already set. -*************** -*** 106,112 **** - o2lo="s/\\.${objext}\$/.lo/" - - # Parse our command line options once, thoroughly. -! while test $# -gt 0 - do - arg="$1" - shift ---- 115,121 ---- - o2lo="s/\\.${objext}\$/.lo/" - - # Parse our command line options once, thoroughly. -! while test "$#" -gt 0 - do - arg="$1" - shift -*************** -*** 122,127 **** ---- 131,163 ---- - execute_dlfiles) - execute_dlfiles="$execute_dlfiles $arg" - ;; -+ tag) -+ tagname="$arg" -+ -+ # Check whether tagname contains only valid characters -+ case $tagname in -+ *[!-_A-Za-z0-9,/]*) -+ echo "$progname: invalid tag name: $tagname" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ case $tagname in -+ CC) -+ # Don't test for the "default" C tag, as we know, it's there, but -+ # not specially marked. -+ ;; -+ *) -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then -+ taglist="$taglist $tagname" -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" -+ else -+ echo "$progname: ignoring unknown tag $tagname" 1>&2 -+ fi -+ ;; -+ esac -+ ;; - *) - eval "$prev=\$arg" - ;; -*************** -*** 140,150 **** - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - exit 0 - ;; - - --config) -! sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 - exit 0 - ;; - ---- 176,195 ---- - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" -+ echo -+ echo "Copyright 1996, 1997, 1998, 1999, 2000, 2001" -+ echo "Free Software Foundation, Inc." -+ echo "This is free software; see the source for copying conditions. There is NO" -+ echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - exit 0 - ;; - - --config) -! ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 -! # Now print the configurations for the tags. -! for tagname in $taglist; do -! ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" -! done - exit 0 - ;; - -*************** -*** 177,186 **** ---- 222,240 ---- - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - -+ --preserve-dup-deps) duplicate_deps="yes" ;; -+ - --quiet | --silent) - show=: - ;; - -+ --tag) prevopt="--tag" prev=tag ;; -+ --tag=*) -+ set tag "$optarg" ${1+"$@"} -+ shift -+ prev=tag -+ ;; -+ - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles -*************** -*** 270,317 **** - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= -! prev= -! lastarg= -! srcfile="$nonopt" - suppress_output= - -- user_target=no - for arg - do -! case $prev in -! "") ;; -! xcompiler) -! # Aesthetically quote the previous argument. -! prev= -! lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -! -! case $arg in -! # Double-quote args containing other shell metacharacters. -! # Many Bourne shells cannot handle close brackets correctly -! # in scan sets, so we specify it separately. -! *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -! arg="\"$arg\"" - ;; -- esac - -! # Add the previous argument to base_compile. -! if test -z "$base_compile"; then -! base_compile="$lastarg" -! else -! base_compile="$base_compile $lastarg" -! fi - continue - ;; -- esac - - # Accept any command-line options. - case $arg in - -o) -! if test "$user_target" != "no"; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi -! user_target=next - ;; - - -static) ---- 324,359 ---- - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= -! srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_output= -+ arg_mode=normal -+ libobj= - - for arg - do -! case "$arg_mode" in -! arg ) -! # do not "continue". Instead, add this to base_compile -! lastarg="$arg" -! arg_mode=normal - ;; - -! target ) -! libobj="$arg" -! arg_mode=normal - continue - ;; - -+ normal ) - # Accept any command-line options. - case $arg in - -o) -! if test -n "$libobj" ; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi -! arg_mode=target -! continue - ;; - - -static) -*************** -*** 330,338 **** - ;; - - -Xcompiler) -! prev=xcompiler -! continue -! ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` ---- 372,380 ---- - ;; - - -Xcompiler) -! arg_mode=arg # the next one goes into the "base_compile" arg list -! continue # The current "srcfile" will either be retained or -! ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` -*************** -*** 355,427 **** - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. -- if test -z "$base_compile"; then -- base_compile="$lastarg" -- else - base_compile="$base_compile $lastarg" -- fi - continue - ;; -- esac -- -- case $user_target in -- next) -- # The next one is the -o target name -- user_target=yes -- continue -- ;; -- yes) -- # We got the output file -- user_target=set -- libobj="$arg" -- continue -- ;; -- esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. -- -- # Backslashify any backslashes, double quotes, and dollar signs. -- # These are the only characters that are still specially -- # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. -- case $lastarg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - -- # Add the previous argument to base_compile. -- if test -z "$base_compile"; then -- base_compile="$lastarg" -- else - base_compile="$base_compile $lastarg" -! fi -! done - -! case $user_target in -! set) -! ;; -! no) -! # Get the name of the library object. -! libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; -! *) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo -! xform='[cCFSfmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; ---- 397,450 ---- - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - base_compile="$base_compile $lastarg" - continue - ;; - -+ * ) - # Accept the current argument as the source file. -+ # The previous "srcfile" becomes the current argument. -+ # - lastarg="$srcfile" - srcfile="$arg" -+ ;; -+ esac # case $arg -+ ;; -+ esac # case $arg_mode - - # Aesthetically quote the previous argument. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - -+ case $lastarg in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - base_compile="$base_compile $lastarg" -! done # for arg - -! case $arg_mode in -! arg) -! $echo "$modename: you must specify an argument for -Xcompile" -! exit 1 - ;; -! target) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; -+ *) -+ # Get the name of the library object. -+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` -+ ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo -! xform='[cCFSifmso]' - case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; -*************** -*** 429,438 **** ---- 452,464 ---- - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; -+ *.ii) xform=ii ;; -+ *.class) xform=class ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; -+ *.java) xform=java ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` -*************** -*** 445,450 **** ---- 471,526 ---- - ;; - esac - -+ # Infer tagged configuration to use if any are available and -+ # if one wasn't chosen via the "--tag" command line option. -+ # Only attempt this if the compiler in the base compile -+ # command doesn't match the default compiler. -+ if test -n "$available_tags" && test -z "$tagname"; then -+ case $base_compile in -+ # Blanks in the command may have been stripped by the calling shell, -+ # but not from the CC environment variable when ltconfig was run. -+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; -+ # Blanks at the start of $base_compile will cause this to fail -+ # if we don't check for them as well. -+ *) -+ for z in $available_tags; do -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" -+ case "$base_compile " in -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) -+ # The compiler in the base compile command matches -+ # the one in the tagged configuration. -+ # Assume this is the tagged configuration we want. -+ tagname=$z -+ break -+ ;; -+ esac -+ fi -+ done -+ # If $tagname still isn't set, then no tagged configuration -+ # was found and let the user know that the "--tag" command -+ # line option must be used. -+ if test -z "$tagname"; then -+ echo "$modename: unable to infer tagged configuration" -+ echo "$modename: specify a tag with \`--tag'" 1>&2 -+ exit 1 -+ # else -+ # echo "$modename: using $tagname tagged configuration" -+ fi -+ ;; -+ esac -+ fi -+ -+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$obj"; then -+ xdir= -+ else -+ xdir=$xdir/ -+ fi -+ lobj=${xdir}$objdir/$objname -+ - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 -*************** -*** 453,461 **** - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then -! removelist="$obj $libobj" - else -! removelist="$libobj" - fi - - $run $rm $removelist ---- 529,537 ---- - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then -! removelist="$obj $lobj $libobj ${libobj}T" - else -! removelist="$lobj $libobj ${libobj}T" - fi - - $run $rm $removelist -*************** -*** 467,473 **** - pic_mode=default - ;; - esac -! if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi ---- 543,549 ---- - pic_mode=default - ;; - esac -! if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi -*************** -*** 480,485 **** ---- 556,562 ---- - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit 1" 1 2 15 - else -+ output_obj= - need_locks=no - lockfile= - fi -*************** -*** 514,562 **** - eval srcfile=\"$fix_srcfile_path\" - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then -! # All platforms use -DPIC, to notify preprocessed assembler code. -! command="$base_compile $srcfile $pic_flag -DPIC" - else - # Don't build PIC code - command="$base_compile $srcfile" - fi -- if test "$build_old_libs" = yes; then -- lo_libobj="$libobj" -- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$dir" = "X$libobj"; then -- dir="$objdir" -- else -- dir="$dir/$objdir" -- fi -- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - -! if test -d "$dir"; then -! $show "$rm $libobj" -! $run $rm $libobj -! else -! $show "$mkdir $dir" -! $run $mkdir $dir - status=$? -! if test $status -ne 0 && test ! -d $dir; then - exit $status - fi - fi -! fi -! if test "$compiler_o_lo" = yes; then -! output_obj="$libobj" -! command="$command -o $output_obj" -! elif test "$compiler_c_o" = yes; then -! output_obj="$obj" -! command="$command -o $output_obj" - fi - -! $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else ---- 591,638 ---- - eval srcfile=\"$fix_srcfile_path\" - fi - -+ $run $rm "$libobj" "${libobj}T" -+ -+ # Create a libtool object file (analogous to a ".la" file), -+ # but don't create it if we're doing a dry run. -+ test -z "$run" && cat > ${libobj}T </dev/null`" != x"$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` ---- 641,647 ---- - fi - - if test "$need_locks" = warn && -! test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` -*************** -*** 585,593 **** - fi - - # Just move the object if needed, then go on to compile the next one -! if test x"$output_obj" != x"$libobj"; then -! $show "$mv $output_obj $libobj" -! if $run $mv $output_obj $libobj; then : - else - error=$? - $run $rm $removelist ---- 661,669 ---- - fi - - # Just move the object if needed, then go on to compile the next one -! if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then -! $show "$mv $output_obj $lobj" -! if $run $mv $output_obj $lobj; then : - else - error=$? - $run $rm $removelist -*************** -*** 595,642 **** - fi - fi - -! # If we have no pic_flag, then copy the object into place and finish. -! if (test -z "$pic_flag" || test "$pic_mode" != default) && -! test "$build_old_libs" = yes; then -! # Rename the .lo from within objdir to obj -! if test -f $obj; then -! $show $rm $obj -! $run $rm $obj -! fi - -! $show "$mv $libobj $obj" -! if $run $mv $libobj $obj; then : -! else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! -! xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$obj"; then -! xdir="." -! else -! xdir="$xdir" -! fi -! baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` -! libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -! # Now arrange that obj and lo_libobj become the same file -! $show "(cd $xdir && $LN_S $baseobj $libobj)" -! if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then -! # Unlock the critical section if it was locked -! if test "$need_locks" != no; then -! $run $rm "$lockfile" -! fi -! exit 0 -! else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! fi - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # Only build a position-dependent object if we build old libraries. ---- 671,691 ---- - fi - fi - -! # Append the name of the PIC object to the libtool object file. -! test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != x"$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` ---- 711,717 ---- - fi - - if test "$need_locks" = warn && -! test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - echo "\ - *** ERROR, $lockfile contains: - `cat $lockfile 2>/dev/null` -*************** -*** 684,690 **** - fi - - # Just move the object if needed -! if test x"$output_obj" != x"$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else ---- 731,737 ---- - fi - - # Just move the object if needed -! if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else -*************** -*** 694,716 **** - fi - fi - -! # Create an invalid libtool object if no PIC, so that we do not -! # accidentally link it into a program. -! if test "$build_libtool_libs" != yes; then -! $show "echo timestamp > $libobj" -! $run eval "echo timestamp > \$libobj" || exit $? -! else -! # Move the .lo from within objdir -! $show "$mv $libobj $lo_libobj" -! if $run $mv $libobj $lo_libobj; then : - else -! error=$? -! $run $rm $removelist -! exit $error -! fi -! fi - fi - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $run $rm "$lockfile" ---- 741,765 ---- - fi - fi - -! # Append the name of the non-PIC object the libtool object file. -! # Only append if the libtool object file exists. -! test -z "$run" && cat >> ${libobj}T <> ${libobj}T <\?\'\ \ ]*|*]*|"") ---- 863,871 ---- - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. -! while test "$#" -gt 0; do - arg="$1" -+ base_compile="$base_compile $arg" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -*************** -*** 892,897 **** ---- 944,1056 ---- - prev= - continue - ;; -+ objectlist) -+ if test -f "$arg"; then -+ save_arg=$arg -+ moreargs= -+ for fil in `cat $save_arg` -+ do -+ # moreargs="$moreargs $fil" -+ arg=$fil -+ # A libtool-controlled object. -+ -+ # Check to see that this really is a libtool object. -+ if (${SED} -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -+ pic_object= -+ non_pic_object= -+ -+ # Read the .lo file -+ # If there is no directory component, then add one. -+ case $arg in -+ */* | *\\*) . $arg ;; -+ *) . ./$arg ;; -+ esac -+ -+ if test -z "$pic_object" || \ -+ test -z "$non_pic_object" || -+ test "$pic_object" = none && \ -+ test "$non_pic_object" = none; then -+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -+ exit 1 -+ fi -+ -+ # Extract subdirectory from the argument. -+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$arg"; then -+ xdir= -+ else -+ xdir="$xdir/" -+ fi -+ -+ if test "$pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ pic_object="$xdir$pic_object" -+ -+ if test "$prev" = dlfiles; then -+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -+ dlfiles="$dlfiles $pic_object" -+ prev= -+ continue -+ else -+ # If libtool objects are unsupported, then we need to preload. -+ prev=dlprefiles -+ fi -+ fi -+ -+ # CHECK ME: I think I busted this. -Ossama -+ if test "$prev" = dlprefiles; then -+ # Preload the old-style object. -+ dlprefiles="$dlprefiles $pic_object" -+ prev= -+ fi -+ -+ # A PIC object. -+ libobjs="$libobjs $pic_object" -+ arg="$pic_object" -+ fi -+ -+ # Non-PIC object. -+ if test "$non_pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ non_pic_object="$xdir$non_pic_object" -+ -+ # A standard non-PIC object -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ if test -z "$pic_object" || test "$pic_object" = none ; then -+ arg="$non_pic_object" -+ fi -+ fi -+ else -+ # Only an error if not doing a dry-run. -+ if test -z "$run"; then -+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -+ exit 1 -+ else -+ # Dry-run case. -+ -+ # Extract subdirectory from the argument. -+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$arg"; then -+ xdir= -+ else -+ xdir="$xdir/" -+ fi -+ -+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -+ libobjs="$libobjs $pic_object" -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ fi -+ fi -+ done -+ else -+ $echo "$modename: link input file \`$save_arg' does not exist" -+ exit 1 -+ fi -+ arg=$save_arg -+ prev= -+ continue -+ ;; - rpath | xrpath) - # We need an absolute path. - case $arg in -*************** -*** 936,945 **** - continue - ;; - esac -! fi # test -n $prev - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then ---- 1095,1122 ---- - continue - ;; - esac -! fi # test -n "$prev" - - prevarg="$arg" - -+ # Pass Metrowerks x86 NLM linker flags to linker. -+ case "$LD" in -+ mwldnlm) -+ case "$arg" in -+ -check | -commandfile | -entry | -exit | -flags | -map) -+ linker_flags="$linker_flags $qarg" -+ prev=xlinker -+ ;; -+ -nocheck | -zerobss | -nozerobss) -+ linker_flags="$linker_flags $qarg" -+ ;; -+ -g) -+ # If -g then include symbols for NetWare internal debugger -+ linker_flags="$linker_flags -sym internal" -+ ;; -+ esac -+ ;; -+ esac - case $arg in - -all-static) - if test -n "$link_static_flag"; then -*************** -*** 992,998 **** - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in -! no/*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; ---- 1169,1175 ---- - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in -! no/*-*-irix* | /*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; -*************** -*** 1043,1056 **** - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; -! *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in -! *-*-openbsd*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; ---- 1220,1237 ---- - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; -+ *-*-rhapsody* | *-*-darwin1.[012]) -+ # Rhapsody C and math libraries are in the System framework -+ deplibs="$deplibs -framework System" -+ continue - esac - elif test "X$arg" = "X-lc_r"; then - case $host in -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; -*************** -*** 1089,1094 **** ---- 1270,1280 ---- - continue - ;; - -+ -objectlist) -+ prev=objectlist -+ continue -+ ;; -+ - -o) prev=output ;; - - -release) -*************** -*** 1201,1212 **** - esac - ;; - -! *.lo | *.$objext) -! # A library or standard object. - if test "$prev" = dlfiles; then -- # This file was specified with -dlopen. - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -! dlfiles="$dlfiles $arg" - prev= - continue - else ---- 1387,1435 ---- - esac - ;; - -! *.$objext) -! # A standard object. -! objs="$objs $arg" -! ;; -! -! *.lo) -! # A libtool-controlled object. -! -! # Check to see that this really is a libtool object. -! if (${SED} -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -! pic_object= -! non_pic_object= -! -! # Read the .lo file -! # If there is no directory component, then add one. -! case $arg in -! */* | *\\*) . $arg ;; -! *) . ./$arg ;; -! esac -! -! if test -z "$pic_object" || \ -! test -z "$non_pic_object" || -! test "$pic_object" = none && \ -! test "$non_pic_object" = none; then -! $echo "$modename: cannot find name of object for \`$arg'" 1>&2 -! exit 1 -! fi -! -! # Extract subdirectory from the argument. -! xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$arg"; then -! xdir= -! else -! xdir="$xdir/" -! fi -! -! if test "$pic_object" != none; then -! # Prepend the subdirectory the object is found in. -! pic_object="$xdir$pic_object" -! - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -! dlfiles="$dlfiles $pic_object" - prev= - continue - else -*************** -*** 1215,1229 **** - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. -! dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` - prev= - else -! case $arg in -! *.lo) libobjs="$libobjs $arg" ;; -! *) objs="$objs $arg" ;; -! esac - fi - ;; - ---- 1438,1487 ---- - fi - fi - -+ # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. -! dlprefiles="$dlprefiles $pic_object" - prev= -+ fi -+ -+ # A PIC object. -+ libobjs="$libobjs $pic_object" -+ arg="$pic_object" -+ fi -+ -+ # Non-PIC object. -+ if test "$non_pic_object" != none; then -+ # Prepend the subdirectory the object is found in. -+ non_pic_object="$xdir$non_pic_object" -+ -+ # A standard non-PIC object -+ non_pic_objects="$non_pic_objects $non_pic_object" -+ if test -z "$pic_object" || test "$pic_object" = none ; then -+ arg="$non_pic_object" -+ fi -+ fi - else -! # Only an error if not doing a dry-run. -! if test -z "$run"; then -! $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 -! exit 1 -! else -! # Dry-run case. -! -! # Extract subdirectory from the argument. -! xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$arg"; then -! xdir= -! else -! xdir="$xdir/" -! fi -! -! pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` -! non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` -! libobjs="$libobjs $pic_object" -! non_pic_objects="$non_pic_objects $non_pic_object" -! fi - fi - ;; - -*************** -*** 1277,1288 **** ---- 1535,1617 ---- - exit 1 - fi - -+ # Special handling for Metrowerks compiler for NetWare -+ case "$LD" in -+ mwldnlm) -+ # If building debug (-g) add internal debug symbols. -+ compile_command=`echo $compile_command | ${SED} -e 's/ -g / -g -sym internal /'` -+ -+ # When using the Metrowerks linker for NetWare, if there is a -+ # .def or .exp file with the same filename as the $output file, -+ # add it as a -commandfile to $compile_command and $linker_flags -+ # (if no -commandfile yet) -+ base=`echo $output | ${SED} 's,\(.*\)\..*$,\1,'` -+ cmd_file= -+ for ext in def exp; do -+ if test -f "$base.$ext"; then -+ cmd_file="$base.$ext" -+ break -+ fi -+ done -+ if test -n "$cmd_file"; then -+ if ! ( expr "$compile_command" : ".*-commandfile.*" > /dev/null ); then -+ compile_command="$compile_command -commandfile $cmd_file" -+ fi -+ if ! ( expr "$linker_flags" : ".*-commandfile.*" > /dev/null ); then -+ linker_flags="$linker_flags -commandfile $cmd_file" -+ fi -+ fi -+ ;; -+ esac -+ -+ # Infer tagged configuration to use if any are available and -+ # if one wasn't chosen via the "--tag" command line option. -+ # Only attempt this if the compiler in the base link -+ # command doesn't match the default compiler. -+ if test -n "$available_tags" && test -z "$tagname"; then -+ case $base_compile in -+ # Blanks in the command may have been stripped by the calling shell, -+ # but not from the CC environment variable when ltconfig was run. -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; -+ # Blanks at the start of $base_compile will cause this to fail -+ # if we don't check for them as well. -+ *) -+ for z in $available_tags; do -+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then -+ # Evaluate the configuration. -+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" -+ case $base_compile in -+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) -+ # The compiler in $compile_command matches -+ # the one in the tagged configuration. -+ # Assume this is the tagged configuration we want. -+ tagname=$z -+ break -+ ;; -+ esac -+ fi -+ done -+ # If $tagname still isn't set, then no tagged configuration -+ # was found and let the user know that the "--tag" command -+ # line option must be used. -+ if test -z "$tagname"; then -+ echo "$modename: unable to infer tagged configuration" -+ echo "$modename: specify a tag with \`--tag'" 1>&2 -+ exit 1 -+ # else -+ # echo "$modename: using $tagname tagged configuration" -+ fi -+ ;; -+ esac -+ fi -+ - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - -+ oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" -*************** -*** 1303,1313 **** - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. -! if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? -! if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi ---- 1632,1642 ---- - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. -! if test ! -d "$output_objdir"; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? -! if test "$status" -ne 0 && test ! -d "$output_objdir"; then - exit $status - fi - fi -*************** -*** 1325,1340 **** ---- 1654,1713 ---- - *) linkmode=prog ;; # Anything else should be a program. - esac - -+ case $host in -+ *cygwin*) -+ # This is a hack, but we run into problems on cygwin. -+ # libgcc.a depends on libcygwin, but gcc puts -lgcc onto -+ # the link line twice: once before the "normal" libs -+ # (-lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32) and -+ # once AFTER those. However, the "eliminate dup deps" -+ # proceedure keeps only the LAST duplicate -- thus -+ # messing up the order, since after dup elimination -+ # -lgcc comes AFTER -lcygwin. In normal C operation, -+ # you don't notice the problem, because -lgcc isn't -+ # really used. However, now that C++ libraries are -+ # libtool-able, you DO see the problem. So, it must -+ # be fixed. We could always force "--preserve-dup-deps" -+ # but that could lead to other problems. So, on cygwin, -+ # always preserve dups of -lgcc...but only -lgcc. That -+ # way, the dependency order won't get corrupted. -+ specialdeplibs="-lgcc" -+ ;; -+ *) - specialdeplibs= -+ ;; -+ esac -+ - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - libs="$libs $deplib" - done -+ -+ if test "$linkmode" = lib; then -+ libs="$predeps $libs $compiler_lib_search_path $postdeps" -+ -+ # Compute libraries that are listed more than once in $predeps -+ # $postdeps and mark them as special (i.e., whose duplicates are -+ # not to be eliminated). -+ pre_post_deps= -+ if test "X$duplicate_deps" = "Xyes" ; then -+ for pre_post_dep in $predeps $postdeps; do -+ case "$pre_post_deps " in -+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; -+ esac -+ pre_post_deps="$pre_post_deps $pre_post_dep" -+ done -+ fi -+ pre_post_deps= -+ fi -+ - deplibs= - newdependency_libs= - newlib_search_path= -*************** -*** 1366,1393 **** - ;; - esac - for pass in $passes; do -! if test $linkmode = prog; then -! # Determine which files to process -! case $pass in -! dlopen) -! libs="$dlfiles" -! save_deplibs="$deplibs" # Collect dlpreopened libraries - deplibs= -! ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) -! if test $linkmode = oldlib && test $linkmode = obj; then -! $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 - continue - fi -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi ---- 1739,1771 ---- - ;; - esac - for pass in $passes; do -! if test "$linkmode,$pass" = "lib,link" || -! test "$linkmode,$pass" = "prog,scan"; then -! libs="$deplibs" - deplibs= -! fi -! if test "$linkmode" = prog; then -! case $pass in -! dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi -+ if test "$pass" = dlopen; then -+ # Collect dlpreopened libraries -+ save_deplibs="$deplibs" -+ deplibs= -+ fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -l*) -! if test "$linkmode" != lib && test "$linkmode" != prog; then -! $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -*************** -*** 1407,1413 **** - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" -! test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi ---- 1785,1791 ---- - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" -! test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi -*************** -*** 1416,1431 **** - case $linkmode in - lib) - deplibs="$deplib $deplibs" -! test $pass = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi -! if test $pass = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else ---- 1794,1809 ---- - case $linkmode in - lib) - deplibs="$deplib $deplibs" -! test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -! if test "$pass" = scan; then - deplibs="$deplib $deplibs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else -*************** -*** 1434,1446 **** - fi - ;; - *) -! $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) -! if test $pass = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in ---- 1812,1824 ---- - fi - ;; - *) -! $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) -! if test "$pass" = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in -*************** -*** 1453,1459 **** - ;; - *.la) lib="$deplib" ;; - *.$libext) -! if test $pass = conv; then - deplibs="$deplib $deplibs" - continue - fi ---- 1831,1837 ---- - ;; - *.la) lib="$deplib" ;; - *.$libext) -! if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi -*************** -*** 1461,1470 **** - lib) - if test "$deplibs_check_method" != pass_all; then - echo -! echo "*** Warning: This library needs some functionality provided by $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - else - echo - echo "*** Warning: Linking the shared library $output against the" ---- 1839,1850 ---- - lib) - if test "$deplibs_check_method" != pass_all; then - echo -! echo "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because the file extensions .$libext of this argument makes me believe" -! echo "*** that it is just a static archive that I should not used here." - else - echo - echo "*** Warning: Linking the shared library $output against the" -*************** -*** 1474,1480 **** - continue - ;; - prog) -! if test $pass != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" ---- 1854,1860 ---- - continue - ;; - prog) -! if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" -*************** -*** 1485,1491 **** - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) -! if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" ---- 1865,1874 ---- - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) -! if test "$pass" = conv; then -! deplibs="$deplib $deplibs" -! elif test "$linkmode" = prog; then -! if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" -*************** -*** 1494,1499 **** ---- 1877,1883 ---- - else - newdlfiles="$newdlfiles $deplib" - fi -+ fi - continue - ;; - %DEPLIBS%) -*************** -*** 1501,1514 **** - continue - ;; - esac # case $deplib -! if test $found = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 1885,1898 ---- - continue - ;; - esac # case $deplib -! if test "$found" = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 1535,1547 **** - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || -! { test $linkmode = oldlib && test $linkmode = obj; }; then -! # Add dl[pre]opened files of deplib - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - -! if test $pass = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then ---- 1919,1930 ---- - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || -! { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - -! if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then -*************** -*** 1555,1566 **** - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done -! elif test $linkmode != prog && test $linkmode != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi ---- 1938,1951 ---- - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done -! elif test "$linkmode" != prog && test "$linkmode" != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi -*************** -*** 1578,1592 **** - fi - - # This library was specified with -dlopen. -! if test $pass = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking -! # statically, we need to preload. -! dlprefiles="$dlprefiles $lib" - else - newdlfiles="$newdlfiles $lib" - fi ---- 1963,1979 ---- - fi - - # This library was specified with -dlopen. -! if test "$pass" = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit 1 - fi - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking -! # statically, we need to preload. We also need to preload any -! # dependent libraries so libltdl's deplib preloader doesn't -! # bomb out in the load deplibs phase. -! dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi -*************** -*** 1627,1633 **** - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. -! if test $pass = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 ---- 2014,2020 ---- - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. -! if test "$pass" = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit 1 -*************** -*** 1646,1663 **** - - if test -z "$libdir"; then - # Link the convenience library -! if test $linkmode = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else -! deplibs="$lib $deplibs" - fi - continue - fi - -! if test $linkmode = prog && test $pass != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - ---- 2033,2050 ---- - - if test -z "$libdir"; then - # Link the convenience library -! if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else -! deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - -! if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - -*************** -*** 1673,1700 **** - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? -! if test $linkalldeplibs = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - -! link_static=no # Whether the deplib will be linked statically - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then -! # Link against this shared library - -- if test "$linkmode,$pass" = "prog,link" || -- { test $linkmode = lib && test $hardcode_into_libs = yes; }; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. ---- 2060,2095 ---- - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? -! if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - -! if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then -! # We need to hardcode the library path -! if test -n "$shlibpath_var"; then -! # Make sure the rpath contains only unique directories. -! case "$temp_rpath " in -! *" $dir "*) ;; -! *" $absdir "*) ;; -! *) temp_rpath="$temp_rpath $dir" ;; -! esac -! fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. -*************** -*** 1716,1732 **** - esac - ;; - esac -- if test $linkmode = prog; then -- # We need to hardcode the library path -- if test -n "$shlibpath_var"; then -- # Make sure the rpath contains only unique directories. -- case "$temp_rpath " in -- *" $dir "*) ;; -- *" $absdir "*) ;; -- *) temp_rpath="$temp_rpath $dir" ;; -- esac -- fi -- fi - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && ---- 2111,2116 ---- -*************** -*** 1736,1746 **** ---- 2120,2159 ---- - # We only need to search for static libraries - continue - fi -+ fi - -+ link_static=no # Whether the deplib will be linked statically -+ if test -n "$library_names" && -+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi -+ # This is a shared library -+ if test "$linkmode" = lib && -+ test "$hardcode_into_libs" = yes; then -+ # Hardcode the library path. -+ # Skip directories that are in the system default run-time -+ # search path. -+ case " $sys_lib_dlsearch_path " in -+ *" $absdir "*) ;; -+ *) -+ case "$compile_rpath " in -+ *" $absdir "*) ;; -+ *) compile_rpath="$compile_rpath $absdir" -+ esac -+ ;; -+ esac -+ case " $sys_lib_dlsearch_path " in -+ *" $libdir "*) ;; -+ *) -+ case "$finalize_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_rpath="$finalize_rpath $libdir" -+ esac -+ ;; -+ esac -+ fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname -*************** -*** 1766,1773 **** - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" -! soname=`echo $soroot | sed -e 's/^.*\///'` -! newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : ---- 2179,2186 ---- - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" -! soname=`echo $soroot | ${SED} -e 's/^.*\///'` -! newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : -*************** -*** 1798,1806 **** - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib -! fi # test -n $old_archive_from_expsyms_cmds - -! if test $linkmode = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= ---- 2211,2219 ---- - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib -! fi # test -n "$old_archive_from_expsyms_cmds" - -! if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= -*************** -*** 1808,1813 **** ---- 2221,2229 ---- - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then -+ case $host in -+ *-*-sco3.2v5* ) add_dir="-L$dir" ;; -+ esac - add="$dir/$linklib" - elif test "$hardcode_minus_L" = no; then - case $host in -*************** -*** 1849,1855 **** - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi -! if test $linkmode = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else ---- 2265,2271 ---- - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi -! if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else -*************** -*** 1866,1872 **** - fi - fi - -! if test $linkmode = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= ---- 2282,2288 ---- - fi - fi - -! if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= -*************** -*** 1884,1898 **** - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. -- if test "X$installed" = Xyes; then - add_dir="-L$libdir" -- else -- add_dir="-L$DESTDIR$libdir" -- fi - add="-l$name" - fi - -! if test $linkmode = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else ---- 2300,2310 ---- - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - add="-l$name" - fi - -! if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else -*************** -*** 1900,1915 **** - test -n "$add" && deplibs="$add $deplibs" - fi - fi -! elif test $linkmode = prog; then -! if test "$alldeplibs" = yes && -! { test "$deplibs_check_method" = pass_all || -! { test "$build_libtool_libs" = yes && -! test -n "$library_names"; }; }; then -! # We only need to search for static libraries -! continue -! fi -! -! # Try to link the static library - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. ---- 2312,2318 ---- - test -n "$add" && deplibs="$add $deplibs" - fi - fi -! elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. -*************** -*** 1930,1942 **** - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo -! echo "*** Warning: This library needs some functionality provided by $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then -! echo "*** Therefore, libtool will create a static module, that should work " -! echo "*** as long as the dlopening application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" ---- 2333,2346 ---- - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo -! echo "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then -! echo "*** But as you try to build a module library, libtool will still create " -! echo "*** a static module, that should work as long as the dlopening application" -! echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" -*************** -*** 1959,1968 **** - fi - fi # link shared/static library? - -! if test $linkmode = lib; then - if test -n "$dependency_libs" && -! { test $hardcode_into_libs != yes || test $build_old_libs = yes || -! test $link_static = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do ---- 2363,2372 ---- - fi - fi # link shared/static library? - -! if test "$linkmode" = lib; then - if test -n "$dependency_libs" && -! { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || -! test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do -*************** -*** 1985,1997 **** - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - -! if test $link_all_deplibs != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in ---- 2389,2403 ---- - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" -+ if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac -+ fi - tmp_libs="$tmp_libs $deplib" - done - -! if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in -*************** -*** 2013,2019 **** - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 ---- 2419,2425 ---- - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 2034,2048 **** - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs -! if test $pass = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi -! if test $pass != dlopen; then -! test $pass != scan && dependency_libs="$newdependency_libs" -! if test $pass != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do ---- 2440,2454 ---- - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs -! dependency_libs="$newdependency_libs" -! if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi -! if test "$pass" != dlopen; then -! if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do -*************** -*** 2064,2072 **** ---- 2470,2498 ---- - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do -+ # FIXME: Pedantically, this is the right thing to do, so -+ # that some nasty dependency loop isn't accidentally -+ # broken: -+ #new_libs="$deplib $new_libs" -+ # Pragmatically, this seems to cause very few problems in -+ # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - *) -+ # And here is the reason: when a library appears more -+ # than once as an explicit dependence of a library, or -+ # is implicitly linked in more than once by the -+ # compiler, it is considered special, and multiple -+ # occurrences thereof are not removed. Compare this -+ # with having the same library being listed as a -+ # dependency of multiple other libraries: in this case, -+ # we know (pedantically, we assume) the library does not -+ # need to be listed more than once, so we keep only the -+ # last copy. This is not always right, but it is rare -+ # enough that we require users that really mean to play -+ # such unportable linking tricks to link the library -+ # using -Wl,-lname, so that libtool does not consider it -+ # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) -*************** -*** 2094,2112 **** - eval $var=\"$tmp_libs\" - done # for var - fi -- if test "$pass" = "conv" && -- { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then -- libs="$deplibs" # reset libs -- deplibs= -- fi - done # for pass -! if test $linkmode = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi ---- 2520,2537 ---- - eval $var=\"$tmp_libs\" - done # for var - fi - done # for pass -! if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) -+ if test -n "$deplibs"; then -+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 -+ fi -+ - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi -*************** -*** 2177,2183 **** - fi - - set dummy $rpath -! if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" ---- 2602,2608 ---- - fi - - set dummy $rpath -! if test "$#" -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" -*************** -*** 2186,2192 **** - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. -! libext=al - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes ---- 2611,2619 ---- - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. -! # Some compilers have problems with a `.al' extension so -! # convenience libraries should have the same extension an -! # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes -*************** -*** 2244,2250 **** - ;; - esac - -! if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 ---- 2671,2677 ---- - ;; - esac - -! if test "$age" -gt "$current"; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 -*************** -*** 2277,2292 **** - versuffix=".$current"; - ;; - -! irix) - major=`expr $current - $age + 1` -! verstring="sgi$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision -! while test $loop != 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` -! verstring="sgi$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. ---- 2704,2724 ---- - versuffix=".$current"; - ;; - -! irix | nonstopux) - major=`expr $current - $age + 1` -! -! case $version_type in -! nonstopux) verstring_prefix=nonstopux ;; -! *) verstring_prefix=sgi ;; -! esac -! verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision -! while test "$loop" -ne 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` -! verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. -*************** -*** 2306,2312 **** - - # Add in all the interfaces that we are compatible with. - loop=$age -! while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" ---- 2738,2744 ---- - - # Add in all the interfaces that we are compatible with. - loop=$age -! while test "$loop" -ne 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" -*************** -*** 2338,2349 **** - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= -- verstring="0.0" - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely -! verstring="" - ;; - *) - verstring="0.0" ---- 2770,2780 ---- - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely -! verstring= - ;; - *) - verstring="0.0" -*************** -*** 2377,2385 **** - fi - - if test "$mode" != relink; then -! # Remove our outputs. -! $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" -! $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - fi - - # Now set the variables for building old libraries. ---- 2808,2831 ---- - fi - - if test "$mode" != relink; then -! # Remove our outputs, but don't remove object files since they -! # may have been created when compiling PIC objects. -! removelist= -! tempremovelist=`echo "$output_objdir/*"` -! for p in $tempremovelist; do -! case $p in -! *.$objext) -! ;; -! $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) -! removelist="$removelist $p" -! ;; -! *) ;; -! esac -! done -! if test -n "$removelist"; then -! $show "${rm}r $removelist" -! $run ${rm}r $removelist -! fi - fi - - # Now set the variables for building old libraries. -*************** -*** 2392,2400 **** - - # Eliminate all temporary directories. - for path in $notinst_path; do -! lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` -! deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` -! dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then ---- 2838,2846 ---- - - # Eliminate all temporary directories. - for path in $notinst_path; do -! lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` -! deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` -! dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` - done - - if test -n "$xrpath"; then -*************** -*** 2407,2413 **** - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done -! if test $hardcode_into_libs != yes || test $build_old_libs = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi ---- 2853,2859 ---- - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done -! if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi -*************** -*** 2445,2456 **** - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; -! *-*-openbsd*) - # Do not include libc due to us having libc/libc_r. - ;; - *) - # Add libc to deplibs on all other systems if necessary. -! if test $build_libtool_need_lc = "yes"; then - deplibs="$deplibs -lc" - fi - ;; ---- 2891,2903 ---- - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; -! *-*-openbsd* | *-*-freebsd*) - # Do not include libc due to us having libc/libc_r. -+ test "X$arg" = "X-lc" && continue - ;; - *) - # Add libc to deplibs on all other systems if necessary. -! if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; -*************** -*** 2490,2502 **** - int main() { return 0; } - EOF - $rm conftest -! $CC -o conftest conftest.c $deplibs -! if test $? -eq 0 ; then - ldd_output=`ldd conftest` - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` - set dummy $deplib_matches ---- 2937,2949 ---- - int main() { return 0; } - EOF - $rm conftest -! $LTCC -o conftest conftest.c $deplibs -! if test "$?" -eq 0 ; then - ldd_output=`ldd conftest` - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" -ne "0"; then - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` - set dummy $deplib_matches -*************** -*** 2506,2531 **** - else - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - newdeplibs="$newdeplibs $i" - fi - done - else -! # Error occured in the first compile. Let's try to salvage the situation: -! # Compile a seperate program for each library. - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - $rm conftest -! $CC -o conftest conftest.c $i - # Did it work? -! if test $? -eq 0 ; then - ldd_output=`ldd conftest` - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` ---- 2953,2980 ---- - else - droppeddeps=yes - echo -! echo "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which I believe you do not have" -! echo "*** because a test_compile did reveal that the linker did not use it for" -! echo "*** its dynamic dependency list that programs get resolved with at runtime." - fi - else - newdeplibs="$newdeplibs $i" - fi - done - else -! # Error occured in the first compile. Let's try to salvage -! # the situation: Compile a separate program for each library. - for i in $deplibs; do - name="`expr $i : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" != "0"; then - $rm conftest -! $LTCC -o conftest conftest.c $i - # Did it work? -! if test "$?" -eq 0 ; then - ldd_output=`ldd conftest` - libname=`eval \\$echo \"$libname_spec\"` - deplib_matches=`eval \\$echo \"$library_names_spec\"` -*************** -*** 2536,2545 **** - else - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - droppeddeps=yes ---- 2985,2996 ---- - else - droppeddeps=yes - echo -! echo "*** Warning: dynamic linker does not accept needed library $i." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because a test_compile did reveal that the linker did not use this one" -! echo "*** as a dynamic dependency that programs can get resolved with at runtime." - fi - else - droppeddeps=yes -*************** -*** 2561,2567 **** - for a_deplib in $deplibs; do - name="`expr $a_deplib : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test -n "$name" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` ---- 3012,3018 ---- - for a_deplib in $deplibs; do - name="`expr $a_deplib : '-l\(.*\)'`" - # If $name is empty we are operating on a -L argument. -! if test "$name" != "" && test "$name" != "0"; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` -*************** -*** 2578,2591 **** - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do -! potliblink=`ls -ld $potlib | sed 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -! | sed 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" ---- 3029,3042 ---- - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do -! potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -! | ${SED} 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" -*************** -*** 2596,2605 **** - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. ---- 3047,3063 ---- - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because I did check the linker path looking for a file starting" -! if test -z "$potlib" ; then -! echo "*** with $libname but no candidates were found. (...for file magic test)" -! else -! echo "*** with $libname and none of the candidates passed a file format test" -! echo "*** using a file magic. Last file checked: $potlib" -! fi - fi - else - # Add a -L argument. -*************** -*** 2618,2625 **** - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - if eval echo \"$potent_lib\" 2>/dev/null \ -! | sed 10q \ - | egrep "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" ---- 3076,3084 ---- - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do -+ potlib="$potent_lib" # see symlink-check above in file_magic test - if eval echo \"$potent_lib\" 2>/dev/null \ -! | ${SED} 10q \ - | egrep "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" -*************** -*** 2630,2639 **** - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: This library needs some functionality provided by $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have." - fi - else - # Add a -L argument. ---- 3089,3105 ---- - if test -n "$a_deplib" ; then - droppeddeps=yes - echo -! echo "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" -! echo "*** shared version of the library, which you do not appear to have" -! echo "*** because I did check the linker path looking for a file starting" -! if test -z "$potlib" ; then -! echo "*** with $libname but no candidates were found. (...for regex pattern test)" -! else -! echo "*** with $libname and none of the candidates passed a file format test" -! echo "*** using a regex pattern. Last file checked: $potlib" -! fi - fi - else - # Add a -L argument. -*************** -*** 2696,2702 **** - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - -! if test $allow_undefined = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" ---- 3162,3168 ---- - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - -! if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" -*************** -*** 2723,2729 **** - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then -! if test $hardcode_into_libs = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= ---- 3189,3195 ---- - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then -! if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= -*************** -*** 2789,2795 **** - else - soname="$realname" - fi -! test -z "$dlname" && dlname=$soname - - lib="$output_objdir/$realname" - for link ---- 3255,3263 ---- - else - soname="$realname" - fi -! if test -z "$dlname"; then -! dlname=$soname -! fi - - lib="$output_objdir/$realname" - for link -*************** -*** 2797,2819 **** - linknames="$linknames $link" - done - -- # Ensure that we have .o objects for linkers which dislike .lo -- # (e.g. aix) in case we are running --disable-static -- for obj in $libobjs; do -- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$xdir" = "X$obj"; then -- xdir="." -- else -- xdir="$xdir" -- fi -- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -- if test ! -f $xdir/$oldobj; then -- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" -- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? -- fi -- done -- - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - ---- 3265,3270 ---- -*************** -*** 2827,2834 **** ---- 3278,3293 ---- - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" -+ if len=`expr "X$cmd" : ".*"` && -+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - $show "$cmd" - $run eval "$cmd" || exit $? -+ skipped_export=false -+ else -+ # The command line is too long to execute in one step. -+ $show "using reloadable object file for export list..." -+ skipped_export=: -+ fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then -*************** -*** 2846,2860 **** - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 3305,3320 ---- - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then -+ save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 2870,2885 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi ---- 3330,3345 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - fi - fi -*************** -*** 2898,2905 **** ---- 3358,3488 ---- - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval cmds=\"$archive_expsym_cmds\" - else -+ save_deplibs="$deplibs" -+ for conv in $convenience; do -+ tmp_deplibs= -+ for test_deplib in $deplibs; do -+ if test "$test_deplib" != "$conv"; then -+ tmp_deplibs="$tmp_deplibs $test_deplib" -+ fi -+ done -+ deplibs="$tmp_deplibs" -+ done -+ eval cmds=\"$archive_cmds\" -+ deplibs="$save_deplibs" -+ fi -+ -+ if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && -+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then -+ : -+ else -+ # The command line is too long to link in one step, link piecewise. -+ $echo "creating reloadable object files..." -+ -+ # Save the value of $output and $libobjs because we want to -+ # use them later. If we have whole_archive_flag_spec, we -+ # want to use save_libobjs as it was before -+ # whole_archive_flag_spec was expanded, because we can't -+ # assume the linker understands whole_archive_flag_spec. -+ # This may have to be revisited, in case too many -+ # convenience libraries get linked in and end up exceeding -+ # the spec. -+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then -+ save_libobjs=$libobjs -+ fi -+ save_output=$output -+ -+ # Clear the reloadable object creation command queue and -+ # initialize k to one. -+ test_cmds= -+ concat_cmds= -+ objlist= -+ delfiles= -+ last_robj= -+ k=1 -+ output=$output_objdir/$save_output-${k}.$objext -+ # Loop over the list of objects to be linked. -+ for obj in $save_libobjs -+ do -+ eval test_cmds=\"$reload_cmds $objlist $last_robj\" -+ if test "X$objlist" = X || -+ { len=`expr "X$test_cmds" : ".*"` && -+ test "$len" -le "$max_cmd_len"; }; then -+ objlist="$objlist $obj" -+ else -+ # The command $test_cmds is almost too long, add a -+ # command to the queue. -+ if test "$k" -eq 1 ; then -+ # The first file doesn't have a previous command to add. -+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\" -+ else -+ # All subsequent reloadable object files will link in -+ # the last one created. -+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" -+ fi -+ last_robj=$output_objdir/$save_output-${k}.$objext -+ k=`expr $k + 1` -+ output=$output_objdir/$save_output-${k}.$objext -+ objlist=$obj -+ len=1 -+ fi -+ done -+ # Handle the remaining objects by creating one last -+ # reloadable object file. All subsequent reloadable object -+ # files will link in the last one created. -+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~ -+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" -+ -+ if ${skipped_export-false}; then -+ $show "generating symbol list for \`$libname.la'" -+ export_symbols="$output_objdir/$libname.exp" -+ $run $rm $export_symbols -+ libobjs=$output -+ # Append the command to create the export file. -+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" -+ fi -+ -+ # Set up a command to remove the reloadale object files -+ # after they are used. -+ i=0 -+ while test "$i" -lt "$k" -+ do -+ i=`expr $i + 1` -+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" -+ done -+ -+ $echo "creating a temporary reloadable object file: $output" -+ -+ # Loop through the commands generated above and execute them. -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $concat_cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ -+ libobjs=$output -+ # Restore the value of output. -+ output=$save_output -+ -+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then -+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" -+ fi -+ # Expand the library linking commands again to reset the -+ # value of $libobjs for piecewise linking. -+ -+ # Do each of the archive commands. -+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then -+ eval cmds=\"$archive_expsym_cmds\" -+ else - eval cmds=\"$archive_cmds\" - fi -+ -+ # Append the command to remove the reloadable object files -+ # to the just-reset $cmds. -+ eval cmds=\"\$cmds~$rm $delfiles\" -+ fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" -*************** -*** 2990,2999 **** - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 3573,3582 ---- - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 3009,3024 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi ---- 3592,3607 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - -! reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - fi - fi -*************** -*** 3054,3061 **** - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. -! $show "echo timestamp > $libobj" -! $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - ---- 3637,3644 ---- - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. -! # $show "echo timestamp > $libobj" -! # $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - -*************** -*** 3071,3090 **** - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" -- else -- # Just create a symlink. -- $show $rm $libobj -- $run $rm $libobj -- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -- if test "X$xdir" = "X$libobj"; then -- xdir="." -- else -- xdir="$xdir" -- fi -- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` -- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -- $show "(cd $xdir && $LN_S $oldobj $baseobj)" -- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then ---- 3654,3659 ---- -*************** -*** 3097,3103 **** - - prog) - case $host in -! *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 ---- 3666,3672 ---- - - prog) - case $host in -! *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 -*************** -*** 3285,3293 **** - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols -! $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else -! $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi ---- 3854,3862 ---- - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols -! $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else -! $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi -*************** -*** 3295,3301 **** - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" -! name=`echo "$arg" | sed -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done ---- 3864,3870 ---- - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" -! name=`echo "$arg" | ${SED} -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done -*************** -*** 3310,3316 **** - fi - - # Try sorting and uniquifying the output. -! if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S ---- 3879,3891 ---- - fi - - # Try sorting and uniquifying the output. -! if grep -v "^: " < "$nlist" | -! if sort -k 3 /dev/null 2>&1; then -! sort -k 3 -! else -! sort +2 -! fi | -! uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S -*************** -*** 3371,3388 **** - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. -! $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -! $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" ---- 3946,3963 ---- - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; -! *) pic_flag_for_symtable=" $pic_flag";; - esac - esac - - # Now compile the dynamic symbol file. -! $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -! $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" -*************** -*** 3407,3413 **** - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - -! if test $need_relink = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" ---- 3982,3988 ---- - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - -! if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" -*************** -*** 3532,3538 **** - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done -! relink_command="cd `pwd`; $relink_command" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - ---- 4107,4113 ---- - relink_command="$var=\"$var_value\"; export $var; $relink_command" - fi - done -! relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - -*************** -*** 3552,3562 **** - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in -! *.exe) output=`echo $output|sed 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in -! *cygwin*) exeext=.exe ;; - *) exeext= ;; - esac - $rm $output ---- 4127,4139 ---- - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in -! *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in -! *cygwin*) -! exeext=.exe -! outputname=`echo $outputname|${SED} 's,.exe$,,'` ;; - *) exeext= ;; - esac - $rm $output -*************** -*** 3576,3582 **** - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='sed -e 1s/^X//' - sed_quote_subst='$sed_quote_subst' - - # The HP-UX ksh and POSIX shell print the target directory to stdout ---- 4153,4159 ---- - - # Sed substitution that helps us do robust quoting. It backslashifies - # metacharacters that are still active within double-quoted strings. -! Xsed='${SED} -e 1s/^X//' - sed_quote_subst='$sed_quote_subst' - - # The HP-UX ksh and POSIX shell print the target directory to stdout -*************** -*** 3614,3620 **** - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. -! file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - ---- 4191,4197 ---- - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. -! file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - -*************** -*** 3627,3633 **** - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -! file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. ---- 4204,4210 ---- - fi - - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -! file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. -*************** -*** 3641,3647 **** - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ -! { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" ---- 4218,4224 ---- - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || \\ -! { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" -*************** -*** 3763,3769 **** - oldobjs="$libobjs_save" - build_libtool_libs=no - else -! oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` - fi - addlibs="$old_convenience" - fi ---- 4340,4346 ---- - oldobjs="$libobjs_save" - build_libtool_libs=no - else -! oldobjs="$oldobjs$old_deplibs $non_pic_objects" - fi - addlibs="$old_convenience" - fi -*************** -*** 3772,3781 **** - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "mkdir $gentop" -! $run mkdir "$gentop" - status=$? -! if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" ---- 4349,4358 ---- - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" -! $show "$mkdir $gentop" -! $run $mkdir "$gentop" - status=$? -! if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" -*************** -*** 3792,3801 **** - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "mkdir $xdir" -! $run mkdir "$xdir" - status=$? -! if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" ---- 4369,4378 ---- - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" -! $show "$mkdir $xdir" -! $run $mkdir "$xdir" - status=$? -! if test "$status" -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" -*************** -*** 3809,3833 **** - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else -! # Ensure that we have .o objects in place in case we decided -! # not to build a shared library, and have fallen back to building -! # static libs even though --disable-static was passed! -! for oldobj in $oldobjs; do -! if test ! -f $oldobj; then -! xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` -! if test "X$xdir" = "X$oldobj"; then -! xdir="." -! else -! xdir="$xdir" -! fi -! baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` -! obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -! $show "(cd $xdir && ${LN_S} $obj $baseobj)" -! $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? - fi - done -! -! eval cmds=\"$old_archive_cmds\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do ---- 4386,4438 ---- - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else -! eval cmds=\"$old_archive_cmds\" -! -! if len=`expr "X$cmds" : ".*"` && -! test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then -! : -! else -! # the command line is too long to link in one step, link in parts -! $echo "using piecewise archive linking..." -! save_RANLIB=$RANLIB -! RANLIB=: -! objlist= -! concat_cmds= -! save_oldobjs=$oldobjs -! # GNU ar 2.10+ was changed to match POSIX; thus no paths are -! # encoded into archives. This makes 'ar r' malfunction in -! # this piecewise linking case whenever conflicting object -! # names appear in distinct ar calls; check, warn and compensate. -! if (for obj in $save_oldobjs -! do -! $echo "X$obj" | $Xsed -e 's%^.*/%%' -! done | sort | sort -uc >/dev/null 2>&1); then -! : -! else -! $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 -! $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 -! AR_FLAGS=cq -! fi -! for obj in $save_oldobjs -! do -! oldobjs="$objlist $obj" -! objlist="$objlist $obj" -! eval test_cmds=\"$old_archive_cmds\" -! if len=`expr "X$test_cmds" : ".*"` && -! test "$len" -le "$max_cmd_len"; then -! : -! else -! # the above command should be used before it gets too long -! oldobjs=$objlist -! test -z "$concat_cmds" || concat_cmds=$concat_cmds~ -! eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" -! objlist= - fi - done -! RANLIB=$save_RANLIB -! oldobjs=$objlist -! eval cmds=\"\$concat_cmds~$old_archive_cmds\" -! fi - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do -*************** -*** 3862,3868 **** - fi - done - # Quote the link command for shipping. -! relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. ---- 4467,4473 ---- - fi - done - # Quote the link command for shipping. -! relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. -*************** -*** 3879,3885 **** - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4484,4490 ---- - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3893,3899 **** - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4498,4504 ---- - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3904,3910 **** - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 ---- 4509,4515 ---- - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -! eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 -*************** -*** 3952,3958 **** - - # Directory that this library needs to be installed in: - libdir='$install_libdir'" -! if test "$installed" = no && test $need_relink = yes; then - $echo >> $output "\ - relink_command=\"$relink_command\"" - fi ---- 4557,4563 ---- - - # Directory that this library needs to be installed in: - libdir='$install_libdir'" -! if test "$installed" = no && test "$need_relink" = yes; then - $echo >> $output "\ - relink_command=\"$relink_command\"" - fi -*************** -*** 4088,4094 **** - - # Not a directory, so check to see that there is only one file specified. - set dummy $files -! if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 ---- 4693,4699 ---- - - # Not a directory, so check to see that there is only one file specified. - set dummy $files -! if test "$#" -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 -*************** -*** 4128,4134 **** - - *.la) - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 ---- 4733,4739 ---- - - *.la) - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 -*************** -*** 4145,4165 **** - esac - - # Add the libdir to current_libdirs if it is the destination. -- DESTDIR= - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else -- case "$destdir" in -- *"$libdir") -- DESTDIR=`$echo "$destdir" | sed -e 's!'"$libdir"'$!!'` -- if test "X$destdir" != "X$DESTDIR$libdir"; then -- DESTDIR= -- fi -- ;; -- esac - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; ---- 4750,4761 ---- -*************** -*** 4173,4179 **** - - if test -n "$relink_command"; then - $echo "$modename: warning: relinking \`$file'" 1>&2 -- export DESTDIR - $show "$relink_command" - if $run eval "$relink_command"; then : - else ---- 4769,4774 ---- -*************** -*** 4181,4187 **** - continue - fi - fi -- unset DESTDIR - - # See the names of the shared library. - set dummy $library_names ---- 4776,4781 ---- -*************** -*** 4201,4207 **** - $run eval "$striplib $destdir/$realname" || exit $? - fi - -! if test $# -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do ---- 4795,4801 ---- - $run eval "$striplib $destdir/$realname" || exit $? - fi - -! if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do -*************** -*** 4287,4306 **** - destfile="$destdir/$destfile" - fi - - # Do a test to see if this is really a libtool program. -! if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # If there is no directory component, then add one. - case $file in -! */* | *\\*) . $file ;; -! *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then -! $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - ---- 4881,4921 ---- - destfile="$destdir/$destfile" - fi - -+ # If the file is missing, and there is a .exe on the end, strip it -+ # because it is most likely a libtool script we actually want to -+ # install -+ stripped_ext="" -+ case $file in -+ *.exe) -+ if test ! -f "$file"; then -+ file=`echo $file|${SED} 's,.exe$,,'` -+ stripped_ext=".exe" -+ fi -+ ;; -+ esac -+ - # Do a test to see if this is really a libtool program. -! case $host in -! *cygwin*|*mingw*) -! wrapper=`echo $file | ${SED} -e 's,.exe$,,'` -! ;; -! *) -! wrapper=$file -! ;; -! esac -! if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # If there is no directory component, then add one. - case $file in -! */* | *\\*) . $wrapper ;; -! *) . ./$wrapper ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then -! $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 - exit 1 - fi - -*************** -*** 4340,4346 **** - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi -! file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` ---- 4955,4961 ---- - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi -! file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` -*************** -*** 4358,4371 **** - fi - else - # Install the binary that we compiled earlier. -! file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in -! /usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok ---- 4973,4986 ---- - fi - else - # Install the binary that we compiled earlier. -! file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyways - case $install_prog,$host in -! */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok -*************** -*** 4374,4380 **** - destfile=$destfile.exe - ;; - *:*.exe) -! destfile=`echo $destfile | sed -e 's,.exe$,,'` - ;; - esac - ;; ---- 4989,4995 ---- - destfile=$destfile.exe - ;; - *:*.exe) -! destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` - ;; - esac - ;; -*************** -*** 4459,4465 **** - fi - - # Exit here if they wanted silent mode. -! test "$show" = ":" && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" ---- 5074,5080 ---- - fi - - # Exit here if they wanted silent mode. -! test "$show" = : && exit 0 - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" -*************** -*** 4522,4528 **** - case $file in - *.la) - # Check to see that this really is a libtool archive. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 ---- 5137,5143 ---- - case $file in - *.la) - # Check to see that this really is a libtool archive. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 -*************** -*** 4593,4599 **** - -*) ;; - *) - # Do a test to see if this is really a libtool program. -! if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; ---- 5208,5214 ---- - -*) ;; - *) - # Do a test to see if this is really a libtool program. -! if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; -*************** -*** 4625,4631 **** - fi - - # Now prepare to actually exec the command. -! exec_cmd='"$cmd"$args' - else - # Display what would be done. - if test -n "$shlibpath_var"; then ---- 5240,5246 ---- - fi - - # Now prepare to actually exec the command. -! exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then -*************** -*** 4675,4684 **** - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -! test $mode = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates -! if test $mode = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; ---- 5290,5299 ---- - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -! test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates -! if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; -*************** -*** 4702,4708 **** - case $name in - *.la) - # Possibly a libtool archive, so verify it. -! if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. ---- 5317,5323 ---- - case $name in - *.la) - # Possibly a libtool archive, so verify it. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. -*************** -*** 4710,4718 **** - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" -! test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - -! if test $mode = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" ---- 5325,5333 ---- - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" -! test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - -! if test "$mode" = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" -*************** -*** 4721,4727 **** - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done ---- 5336,5342 ---- - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done -*************** -*** 4736,4742 **** - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test $? != 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done ---- 5351,5357 ---- - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" -! if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done -*************** -*** 4748,4763 **** - ;; - - *.lo) -! if test "$build_old_libs" = yes; then -! oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` -! rmfiles="$rmfiles $dir/$oldobj" - fi - ;; - - *) - # Do a test to see if this is a libtool program. -! if test $mode = clean && -! (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - ---- 5363,5392 ---- - ;; - - *.lo) -! # Possibly a libtool object, so verify it. -! if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -! -! # Read the .lo file -! . $dir/$name -! -! # Add PIC object to the list of files to remove. -! if test -n "$pic_object" \ -! && test "$pic_object" != none; then -! rmfiles="$rmfiles $dir/$pic_object" -! fi -! -! # Add non-PIC object to the list of files to remove. -! if test -n "$non_pic_object" \ -! && test "$non_pic_object" != none; then -! rmfiles="$rmfiles $dir/$non_pic_object" -! fi - fi - ;; - - *) - # Do a test to see if this is a libtool program. -! if test "$mode" = clean && -! (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - -*************** -*** 4818,4823 **** ---- 5447,5453 ---- - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages -+ --tag=TAG use configuration variables from tag TAG - --version print version information - - MODE must be one of the following: -*************** -*** 4943,4948 **** ---- 5573,5579 ---- - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -+ -objectlist FILE Use a list of object files found in FILE to specify objects - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -*************** -*** 4993,4998 **** ---- 5624,5649 ---- - - exit 0 - -+ # The TAGs below are defined such that we never get into a situation -+ # in which we disable both kinds of libraries. Given conflicting -+ # choices, we go for a static library, that is the most portable, -+ # since we can't tell whether shared libraries were disabled because -+ # the user asked for that or because the platform doesn't support -+ # them. This is particularly important on AIX, because we don't -+ # support having both static and shared libraries enabled at the same -+ # time on that platform, so we default to a shared-only configuration. -+ # If a disable-shared tag is given, we'll fallback to a static-only -+ # configuration. But we'll never go from static-only to shared-only. -+ -+ # ### BEGIN LIBTOOL TAG CONFIG: disable-shared -+ build_libtool_libs=no -+ build_old_libs=yes -+ # ### END LIBTOOL TAG CONFIG: disable-shared -+ -+ # ### BEGIN LIBTOOL TAG CONFIG: disable-static -+ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -+ # ### END LIBTOOL TAG CONFIG: disable-static -+ - # Local Variables: - # mode:shell-script - # sh-indentation:2 diff --git a/netware/test_db.sql b/netware/test_db.sql index d43b632289c..acdc3630f58 100644 --- a/netware/test_db.sql +++ b/netware/test_db.sql @@ -4,17 +4,25 @@ CREATE DATABASE test; USE mysql; CREATE TABLE db (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db,User), KEY User (User)) comment='Database privileges'; - -CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db)) comment='Host privileges; Merged with database privileges'; -CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Password char(16) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, File_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL, Super_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL, ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL, ssl_cipher BLOB NOT NULL, x509_issuer BLOB NOT NULL, x509_subject BLOB NOT NULL, max_questions int(11) unsigned DEFAULT 0 NOT NULL, max_updates int(11) unsigned DEFAULT 0 NOT NULL, max_connections int(11) unsigned DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User)) comment='Users and global privileges'; +CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY Host (Host,Db)) comment='Host privileges; Merged with database privileges'; + +CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Password char(45) binary DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL, Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL, Process_priv enum('N','Y') DEFAULT 'N' NOT NULL, File_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL, Super_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL, Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL, Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL, Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL, ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL, ssl_cipher BLOB NOT NULL, x509_issuer BLOB NOT NULL, x509_subject BLOB NOT NULL, max_questions int(11) unsigned DEFAULT 0 NOT NULL, max_updates int(11) unsigned DEFAULT 0 NOT NULL, max_connections int(11) unsigned DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User)) comment='Users and global privileges'; INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); +INSERT INTO user VALUES ('','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); + +INSERT INTO user (host,user) values ('localhost',''); +INSERT INTO user (host,user) values ('',''); CREATE TABLE func (name char(64) binary DEFAULT '' NOT NULL, ret tinyint(1) DEFAULT '0' NOT NULL, dl char(128) DEFAULT '' NOT NULL, type enum ('function','aggregate') NOT NULL, PRIMARY KEY (name)) comment='User defined functions'; CREATE TABLE tables_priv (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(60) binary DEFAULT '' NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp(14), Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL, Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name), KEY Grantor (Grantor)) comment='Table privileges'; CREATE TABLE columns_priv (Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Table_name char(64) binary DEFAULT '' NOT NULL, Column_name char(64) binary DEFAULT '' NOT NULL, Timestamp timestamp(14), Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL, PRIMARY KEY (Host,Db,User,Table_name,Column_name)) comment='Column privileges'; + +CREATE TABLE help_topic (help_topic_id int unsigned not null auto_increment, name varchar(64) not null, description text not null, example text not null, url varchar(128) not null, primary key (help_topic_id), unique index (name)) comment='help topics'; + +CREATE TABLE help_category (help_category_id smallint unsigned not null auto_increment, name varchar(64) not null, url varchar(128) not null, primary key (help_category_id), unique index (name)) comment='help topics-categories relation'; + +CREATE TABLE help_relation (help_topic_id int unsigned not null references help_topic, help_category_id smallint unsigned not null references help_category, primary key (help_category_id, help_topic_id)) comment='categories of help topics'; From 62ada91165198a4c8c3828514dab0ab989f05ac1 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 10:54:27 +0100 Subject: [PATCH 067/267] disable partial timestamps in --new mode --- mysql-test/r/type_timestamp.result | 4 ++-- sql/field.cc | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 85e5c2c194f..3d5d74709c1 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -101,6 +101,6 @@ t2 t4 t6 t8 t10 t12 t14 set new=1; select * from t1; t2 t4 t6 t8 t10 t12 t14 -00 00-00 00-00-00 0000-00-00 00-00-00 00:00 00-00-00 00:00:00 0000-00-00 00:00:00 -97 97-12 97-12-31 1997-12-31 97-12-31 23:47 97-12-31 23:47:59 1997-12-31 23:47:59 +0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 +1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 drop table t1; diff --git a/sql/field.cc b/sql/field.cc index 5eabccab21b..b8c63db6708 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2616,17 +2616,14 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr __attribute__((unused))) { uint pos; - int extra; int part_time; uint32 temp; time_t time_arg; struct tm *l_time; struct tm tm_tmp; my_bool new_format= (current_thd->variables.new_mode), - full_year=(field_length == 8 || field_length == 14); - static const uint extras[]={0,1,2,2,4,5,5}; - - extra= new_format ? extras[field_length/2-1] : 0; + full_year=(field_length == 8 || field_length == 14 || new_format); + int real_field_length= new_format ? 19 : field_length; #ifdef WORDS_BIGENDIAN if (table->db_low_byte_first) @@ -2638,18 +2635,17 @@ String *Field_timestamp::val_str(String *val_buffer, if (temp == 0L) { /* Zero time is "000000" */ if (new_format) - val_buffer->copy("0000-00-00 00:00:00"+2*(1-full_year), - field_length+extra); + val_buffer->copy("0000-00-00 00:00:00", real_field_length); else - val_buffer->copy("00000000000000", field_length); + val_buffer->copy("00000000000000", real_field_length); return val_buffer; } time_arg=(time_t) temp; localtime_r(&time_arg,&tm_tmp); l_time=&tm_tmp; - val_buffer->alloc(field_length+extra+1); - char *to=(char*) val_buffer->ptr(),*end=to+field_length+extra; + val_buffer->alloc(real_field_length+1); + char *to=(char*) val_buffer->ptr(),*end=to+real_field_length; for (pos=0; to < end ; pos++) { From a8c7a0833c6d6205534b2f605273982a9c01fc98 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 15:44:52 +0400 Subject: [PATCH 068/267] Bug fix: should use float8get() instead of (double *) type cast. Code clean-up according 'Coding Standards and Styles' --- sql/spatial.cc | 163 ++++++++++++++++++++++++++++--------------------- 1 file changed, 92 insertions(+), 71 deletions(-) diff --git a/sql/spatial.cc b/sql/spatial.cc index a2feabeec78..3345c2756e7 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -362,41 +362,47 @@ int GLineString::num_points(uint32 *n_points) const int GLineString::start_point(String *result) const { - const char *data = m_data + 4; - if (no_data(data, 8+8)) + const char *data= m_data + 4; + if (no_data(data, 8 + 8)) return 1; if (result->reserve(1 + 4 + sizeof(double) * 2)) return 1; - result->q_append((char)wkbNDR); - result->q_append((uint32)wkbPoint); - result->q_append((double *)data); - result->q_append((double *)(data + 8)); + result->q_append((char) wkbNDR); + result->q_append((uint32) wkbPoint); + double d; + float8get(d, data); + result->q_append(d); + float8get(d, data + 8); + result->q_append(d); return 0; } int GLineString::end_point(String *result) const { - const char *data = m_data; + const char *data= m_data; uint32 n_points; if (no_data(data, 4)) return 1; - n_points = uint4korr(data); + n_points= uint4korr(data); - data += 4 + (n_points-1)*POINT_DATA_SIZE; + data+= 4 + (n_points - 1) * POINT_DATA_SIZE; - if (no_data(data, 8+8)) + if (no_data(data, 8 + 8)) return 1; if (result->reserve(1 + 4 + sizeof(double) * 2)) return 1; - result->q_append((char)wkbNDR); - result->q_append((uint32)wkbPoint); - result->q_append((double *)data); - result->q_append((double *)(data + 8)); + result->q_append((char) wkbNDR); + result->q_append((uint32) wkbPoint); + double d; + float8get(d, data); + result->q_append(d); + float8get(d, data + 8); + result->q_append(d); return 0; } @@ -404,27 +410,30 @@ int GLineString::end_point(String *result) const int GLineString::point_n(uint32 num, String *result) const { - const char *data = m_data; + const char *data= m_data; uint32 n_points; if (no_data(data, 4)) return 1; - n_points = uint4korr(data); + n_points= uint4korr(data); - if ((uint32)(num-1) >= n_points) // really means (num > n_points || num < 1) + if ((uint32) (num - 1) >= n_points) // means (num > n_points || num < 1) return 1; - data += 4 + (num - 1)*POINT_DATA_SIZE; + data+= 4 + (num - 1) * POINT_DATA_SIZE; - if (no_data(data, 8+8)) + if (no_data(data, 8 + 8)) return 1; if (result->reserve(1 + 4 + sizeof(double) * 2)) return 1; - result->q_append((char)wkbNDR); - result->q_append((uint32)wkbPoint); - result->q_append((double *)data); - result->q_append((double *)(data + 8)); + result->q_append((char) wkbNDR); + result->q_append((uint32) wkbPoint); + double d; + float8get(d, data); + result->q_append(d); + float8get(d, data + 8); + result->q_append(d); return 0; } @@ -496,36 +505,39 @@ int GPolygon::init_from_text(GTextReadStream *trs, String *wkb) int GPolygon::get_data_as_text(String *txt) const { uint32 n_linear_rings; - const char *data = m_data; + const char *data= m_data; if (no_data(data, 4)) return 1; - n_linear_rings = uint4korr(data); - data += 4; + n_linear_rings= uint4korr(data); + data+= 4; - for (; n_linear_rings>0; --n_linear_rings) + for (; n_linear_rings > 0; --n_linear_rings) { if (no_data(data, 4)) return 1; - uint32 n_points = uint4korr(data); - data += 4; - if (no_data(data, (8+8) * n_points)) + uint32 n_points= uint4korr(data); + data+= 4; + if (no_data(data, (8 + 8) * n_points)) return 1; - if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1)*2 + 1) * n_points)) + if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points)) return 1; txt->qs_append('('); for (; n_points>0; --n_points) { - txt->qs_append((double *)data); + double d; + float8get(d, data); + txt->qs_append(d); txt->qs_append(' '); - txt->qs_append((double *)(data + 8)); + float8get(d, data + 8); + txt->qs_append(d); txt->qs_append(','); - data += 8+8; + data+= 8 + 8; } - (*txt)[txt->length()-1] = ')'; + (*txt) [txt->length() - 1]= ')'; txt->qs_append(','); } txt->length(txt->length() - 1); @@ -802,25 +814,28 @@ int GMultiPoint::init_from_text(GTextReadStream *trs, String *wkb) int GMultiPoint::get_data_as_text(String *txt) const { uint32 n_points; - const char *data = m_data; + const char *data= m_data; if (no_data(data, 4)) return 1; - n_points = uint4korr(data); - data += 4; - if (no_data(data, n_points * (8+8+WKB_HEADER_SIZE))) + n_points= uint4korr(data); + data+= 4; + if (no_data(data, n_points * (8 + 8 + WKB_HEADER_SIZE))) return 1; - if (txt->reserve(((MAX_DIGITS_IN_DOUBLE + 1)*2 + 1) * n_points)) + if (txt->reserve(((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points)) return 1; for (; n_points>0; --n_points) { - txt->qs_append((double *)(data + WKB_HEADER_SIZE)); + double d; + float8get(d, data + WKB_HEADER_SIZE); + txt->qs_append(d); txt->qs_append(' '); - txt->qs_append((double *)(data + (8 + WKB_HEADER_SIZE))); + float8get(d, data + WKB_HEADER_SIZE + 8); + txt->qs_append(d); txt->qs_append(','); - data += 8+8+WKB_HEADER_SIZE; + data+= WKB_HEADER_SIZE + 8 + 8; } txt->length(txt->length()-1); return 0; @@ -934,32 +949,35 @@ int GMultiLineString::init_from_text(GTextReadStream *trs, String *wkb) int GMultiLineString::get_data_as_text(String *txt) const { uint32 n_line_strings; - const char *data = m_data; + const char *data= m_data; if (no_data(data, 4)) return 1; - n_line_strings = uint4korr(data); - data += 4; - for (; n_line_strings>0; --n_line_strings) + n_line_strings= uint4korr(data); + data+= 4; + for (; n_line_strings > 0; --n_line_strings) { if (no_data(data, (WKB_HEADER_SIZE + 4))) return 1; - uint32 n_points = uint4korr(data + WKB_HEADER_SIZE); - data += WKB_HEADER_SIZE + 4; - if (no_data(data, n_points * (8+8))) + uint32 n_points= uint4korr(data + WKB_HEADER_SIZE); + data+= WKB_HEADER_SIZE + 4; + if (no_data(data, n_points * (8 + 8))) return 1; - if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1)*2 + 1) * n_points)) + if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points)) return 1; txt->qs_append('('); for (; n_points>0; --n_points) { - txt->qs_append((double *)data); + double d; + float8get(d, data); + txt->qs_append(d); txt->qs_append(' '); - txt->qs_append((double *)(data + 8)); + float8get(d, data + 8); + txt->qs_append(d); txt->qs_append(','); - data += 8+8; + data+= 8 + 8; } - (*txt)[txt->length()-1] = ')'; + (*txt) [txt->length() - 1] = ')'; txt->qs_append(','); } txt->length(txt->length() - 1); @@ -1144,19 +1162,19 @@ int GMultiPolygon::init_from_text(GTextReadStream *trs, String *wkb) int GMultiPolygon::get_data_as_text(String *txt) const { uint32 n_polygons; - const char *data = m_data; + const char *data= m_data; if (no_data(data, 4)) return 1; - n_polygons = uint4korr(data); - data += 4; + n_polygons= uint4korr(data); + data+= 4; for (; n_polygons>0; --n_polygons) { if (no_data(data, 4 + WKB_HEADER_SIZE)) return 1; - data += WKB_HEADER_SIZE; - uint32 n_linear_rings = uint4korr(data); - data += 4; + data+= WKB_HEADER_SIZE; + uint32 n_linear_rings= uint4korr(data); + data+= 4; if (txt->reserve(1, 512)) return 1; @@ -1165,25 +1183,28 @@ int GMultiPolygon::get_data_as_text(String *txt) const { if (no_data(data, 4)) return 1; - uint32 n_points = uint4korr(data); - data += 4; - if (no_data(data, (8+8)*n_points)) return 1; + uint32 n_points= uint4korr(data); + data+= 4; + if (no_data(data, (8 + 8) * n_points)) return 1; - if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1)*2 + 1) * n_points, - 512)) return 1; + if (txt->reserve(2 + ((MAX_DIGITS_IN_DOUBLE + 1) * 2 + 1) * n_points, + 512)) return 1; txt->qs_append('('); for (; n_points>0; --n_points) { - txt->qs_append((double *)data); + double d; + float8get(d, data); + txt->qs_append(d); txt->qs_append(' '); - txt->qs_append((double *)(data + 8)); + float8get(d, data + 8); + txt->qs_append(d); txt->qs_append(','); - data += 8+8; + data+= 8 + 8; } - (*txt)[txt->length()-1] = ')'; + (*txt) [txt->length() - 1] = ')'; txt->qs_append(','); } - (*txt)[txt->length()-1] = ')'; + (*txt) [txt->length() - 1] = ')'; txt->qs_append(','); } txt->length(txt->length() - 1); From 66d003302924862bb89f6f703f8b432d16530747 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 16:25:06 +0400 Subject: [PATCH 069/267] Added IsClosed() tests for MultiLineString objects. Added Centroid(), Area() tests for MultiPolygon objects. --- mysql-test/r/gis.result | 15 +++++++++++++++ mysql-test/t/gis.test | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index d3ec335aac6..25c3d14212b 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -259,6 +259,21 @@ fid AsText(InteriorRingN(g, 1)) 108 NULL 109 LINESTRING(10 10,20 10,20 20,10 20,10 10) 110 NULL +SELECT fid, IsClosed(g) FROM mls; +fid IsClosed(g) +114 0 +115 0 +116 0 +SELECT fid, AsText(Centroid(g)) FROM mp; +fid AsText(Centroid(g)) +117 POINT(55.588527753042 17.426536064114) +118 POINT(55.588527753042 17.426536064114) +119 POINT(2 2) +SELECT fid, Area(g) FROM mp; +fid Area(g) +117 1684.5 +118 1684.5 +119 4.5 SELECT fid, NumGeometries(g) from mpt; fid NumGeometries(g) 111 4 diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 128d369b0b6..35bb682f732 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -89,6 +89,11 @@ SELECT fid, AsText(ExteriorRing(g)) FROM p; SELECT fid, NumInteriorRings(g) FROM p; SELECT fid, AsText(InteriorRingN(g, 1)) FROM p; +SELECT fid, IsClosed(g) FROM mls; + +SELECT fid, AsText(Centroid(g)) FROM mp; +SELECT fid, Area(g) FROM mp; + SELECT fid, NumGeometries(g) from mpt; SELECT fid, NumGeometries(g) from mls; SELECT fid, NumGeometries(g) from mp; From 37211b4a03a57fa8db0ab2208978f223efeb9014 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 13:51:37 +0100 Subject: [PATCH 070/267] - Changed C++-style comments to C-style comments to make IBM compiler happy --- client/mysqldump.c | 2 +- client/mysqlshow.c | 2 +- strings/ctype-bin.c | 16 ++++++++-------- strings/ctype-mb.c | 18 +++++++++--------- strings/t_ctype.h | 8 ++++---- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index 1e0f68eb94e..49bc56890fb 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1480,7 +1480,7 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length, uint find; char buff[255]; - *err_pos= 0; // No error yet + *err_pos= 0; /* No error yet */ while (end > x && my_isspace(system_charset_info, end[-1])) end--; diff --git a/client/mysqlshow.c b/client/mysqlshow.c index e6e21f177ef..9b376872ff8 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -89,7 +89,7 @@ int main(int argc, char **argv) } *to= *pos; } - *to= *pos; // just to copy a '\0' if '\\' was used + *to= *pos; /* just to copy a '\0' if '\\' was used */ } if (first_argument_uses_wildcards) wild= argv[--argc]; diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index e7c3a941109..b39697e6f81 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -200,7 +200,7 @@ static int my_wildcmp_bin(CHARSET_INFO *cs, const char *wildstr,const char *wildend, int escape, int w_one, int w_many) { - int result= -1; // Not found, using wildcards + int result= -1; /* Not found, using wildcards */ while (wildstr != wildend) { @@ -214,15 +214,15 @@ static int my_wildcmp_bin(CHARSET_INFO *cs, } if (wildstr == wildend) { - return(str != str_end); // Match if both are at end + return(str != str_end); /* Match if both are at end */ } - result=1; // Found an anchor char + result=1; /* Found an anchor char */ } if (*wildstr == w_one) { do { - if (str == str_end) // Skip one char if possible + if (str == str_end) /* Skip one char if possible */ return(result); str++; } while (*++wildstr == w_one && wildstr != wildend); @@ -230,7 +230,7 @@ static int my_wildcmp_bin(CHARSET_INFO *cs, break; } if (*wildstr == w_many) - { // Found w_many + { /* Found w_many */ char cmp; wildstr++; @@ -248,11 +248,11 @@ static int my_wildcmp_bin(CHARSET_INFO *cs, str++; continue; } - break; // Not a wild character + break; /* Not a wild character */ } if (wildstr == wildend) { - return(0); // Ok if w_many is last + return(0); /* Ok if w_many is last */ } if (str == str_end) { @@ -261,7 +261,7 @@ static int my_wildcmp_bin(CHARSET_INFO *cs, if ((cmp= *wildstr) == escape && wildstr+1 != wildend) cmp= *++wildstr; - wildstr++; // This is compared trough cmp + wildstr++; /* This is compared trough cmp */ do { while (str != str_end && *str != cmp) diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index aa4ccdb6af7..4c1f791b8e4 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -161,7 +161,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs, const char *wildstr,const char *wildend, int escape, int w_one, int w_many) { - int result= -1; // Not found, using wildcards + int result= -1; /* Not found, using wildcards */ bool use_mb_flag=use_mb(cs); @@ -182,16 +182,16 @@ int my_wildcmp_mb(CHARSET_INFO *cs, } else if (str == str_end || likeconv(cs,*wildstr++) != likeconv(cs,*str++)) - return(1); // No match + return(1); /* No match */ if (wildstr == wildend) - return (str != str_end); // Match if both are at end - result=1; // Found an anchor char + return (str != str_end); /* Match if both are at end */ + result=1; /* Found an anchor char */ } if (*wildstr == w_one) { do { - if (str == str_end) // Skip one char if possible + if (str == str_end) /* Skip one char if possible */ return (result); INC_PTR(cs,str,str_end); } while (++wildstr < wildend && *wildstr == w_one); @@ -199,7 +199,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs, break; } if (*wildstr == w_many) - { // Found w_many + { /* Found w_many */ uchar cmp; const char* mb = wildstr; int mblen=0; @@ -217,10 +217,10 @@ int my_wildcmp_mb(CHARSET_INFO *cs, INC_PTR(cs,str,str_end); continue; } - break; // Not a wild character + break; /* Not a wild character */ } if (wildstr == wildend) - return(0); // Ok if w_many is last + return(0); /* Ok if w_many is last */ if (str == str_end) return -1; @@ -231,7 +231,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs, LINT_INIT(mblen); if (use_mb_flag) mblen = my_ismbchar(cs, wildstr, wildend); - INC_PTR(cs,wildstr,wildend); // This is compared trough cmp + INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */ cmp=likeconv(cs,cmp); do { diff --git a/strings/t_ctype.h b/strings/t_ctype.h index ac1fa408c0e..4f6f78cd188 100644 --- a/strings/t_ctype.h +++ b/strings/t_ctype.h @@ -40,7 +40,7 @@ typedef unsigned char tchar; #define IGNORE 0 -// level 1 symbols & order +/* level 1 symbols & order */ enum l1_symbols { L1_08 = TOT_LEVELS, L1_18, @@ -142,7 +142,7 @@ enum l1_symbols { L1_SARA_AI_MAIMALAI }; -// level 2 symbols & order +/* level 2 symbols & order */ enum l2_symbols { L2_BLANK = TOT_LEVELS, L2_THAII, @@ -156,7 +156,7 @@ enum l2_symbols { L2_TONE4 }; -// level 3 symbols & order +/* level 3 symbols & order */ enum l3_symbols { L3_BLANK = TOT_LEVELS, L3_SPACE, @@ -201,7 +201,7 @@ enum l3_symbols { L3_V_LINE }; -// level 4 symbols & order +/* level 4 symbols & order */ enum l4_symbols { L4_BLANK = TOT_LEVELS, L4_MIN, From a60c0569f3957bd713cc52f13d20a0fe407469bc Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 14:58:37 +0100 Subject: [PATCH 071/267] trim spaces from CHAR() BINARY consistently --- mysql-test/r/binary.result | 1 + strings/ctype-bin.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/binary.result b/mysql-test/r/binary.result index 4d5eb62cc71..3534776c503 100644 --- a/mysql-test/r/binary.result +++ b/mysql-test/r/binary.result @@ -62,6 +62,7 @@ a b hello hello select * from t1 ignore index (b) where b="hello "; a b +hello hello alter table t1 modify b tinytext not null, drop key b, add key (b(100)); select * from t1 where b="hello "; a b diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index e7c3a941109..f34f63247ff 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -75,6 +75,21 @@ static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)), return cmp ? cmp : (int) (slen - tlen); } +static int my_strnncollsp_binary(CHARSET_INFO * cs, + const uchar *s, uint slen, + const uchar *t, uint tlen) +{ + int len, cmp; + + for ( ; slen && my_isspace(cs, s[slen-1]) ; slen--); + for ( ; tlen && my_isspace(cs, t[tlen-1]) ; tlen--); + + len = ( slen > tlen ) ? tlen : slen; + + cmp= memcmp(s,t,len); + return cmp ? cmp : (int) (slen - tlen); +} + static void my_caseup_str_bin(CHARSET_INFO *cs __attribute__((unused)), char *str __attribute__((unused))) { @@ -308,7 +323,7 @@ CHARSET_INFO my_charset_bin = NULL, /* tab_from_uni */ 0, /* strxfrm_multiply */ my_strnncoll_binary, /* strnncoll */ - my_strnncoll_binary, + my_strnncollsp_binary, my_strnxfrm_bin, /* strxnfrm */ my_like_range_simple, /* like_range */ my_wildcmp_bin, /* wildcmp */ From a3883c67fca5059156e26fc033eecac1dbec4733 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 15:29:55 +0100 Subject: [PATCH 072/267] make the test more obvious --- mysql-test/r/binary.result | 46 +++++++++++++++++++------------------- mysql-test/t/binary.test | 16 ++++++------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/mysql-test/r/binary.result b/mysql-test/r/binary.result index 3534776c503..5da627a30b9 100644 --- a/mysql-test/r/binary.result +++ b/mysql-test/r/binary.result @@ -45,30 +45,30 @@ name drop table t1,t2; create table t1 (a char(10) not null, b char(10) binary not null,key (a), key(b)); insert into t1 values ("hello ","hello "),("hello2 ","hello2 "); -select * from t1 where a="hello"; -a b -hello hello -select * from t1 where a="hello "; -a b -hello hello -select * from t1 ignore index (a) where a="hello "; -a b -hello hello -select * from t1 where b="hello"; -a b -hello hello -select * from t1 where b="hello "; -a b -hello hello -select * from t1 ignore index (b) where b="hello "; -a b -hello hello +select concat("-",a,"-",b,"-") from t1 where a="hello"; +concat("-",a,"-",b,"-") +-hello-hello- +select concat("-",a,"-",b,"-") from t1 where a="hello "; +concat("-",a,"-",b,"-") +-hello-hello- +select concat("-",a,"-",b,"-") from t1 ignore index (a) where a="hello "; +concat("-",a,"-",b,"-") +-hello-hello- +select concat("-",a,"-",b,"-") from t1 where b="hello"; +concat("-",a,"-",b,"-") +-hello-hello- +select concat("-",a,"-",b,"-") from t1 where b="hello "; +concat("-",a,"-",b,"-") +-hello-hello- +select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello "; +concat("-",a,"-",b,"-") +-hello-hello- alter table t1 modify b tinytext not null, drop key b, add key (b(100)); -select * from t1 where b="hello "; -a b -select * from t1 ignore index (b) where b="hello "; -a b -hello hello +select concat("-",a,"-",b,"-") from t1 where b="hello "; +concat("-",a,"-",b,"-") +select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello "; +concat("-",a,"-",b,"-") +-hello-hello- drop table t1; create table t1 (b char(8)); insert into t1 values(NULL); diff --git a/mysql-test/t/binary.test b/mysql-test/t/binary.test index 4f9ac7581d2..48912a390ed 100644 --- a/mysql-test/t/binary.test +++ b/mysql-test/t/binary.test @@ -30,16 +30,16 @@ drop table t1,t2; create table t1 (a char(10) not null, b char(10) binary not null,key (a), key(b)); insert into t1 values ("hello ","hello "),("hello2 ","hello2 "); -select * from t1 where a="hello"; -select * from t1 where a="hello "; -select * from t1 ignore index (a) where a="hello "; -select * from t1 where b="hello"; -select * from t1 where b="hello "; -select * from t1 ignore index (b) where b="hello "; +select concat("-",a,"-",b,"-") from t1 where a="hello"; +select concat("-",a,"-",b,"-") from t1 where a="hello "; +select concat("-",a,"-",b,"-") from t1 ignore index (a) where a="hello "; +select concat("-",a,"-",b,"-") from t1 where b="hello"; +select concat("-",a,"-",b,"-") from t1 where b="hello "; +select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello "; # blob test alter table t1 modify b tinytext not null, drop key b, add key (b(100)); -select * from t1 where b="hello "; -select * from t1 ignore index (b) where b="hello "; +select concat("-",a,"-",b,"-") from t1 where b="hello "; +select concat("-",a,"-",b,"-") from t1 ignore index (b) where b="hello "; drop table t1; # From 236015ed7ac81e3a4525e04a7769cf503af38e14 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 17:02:10 +0200 Subject: [PATCH 073/267] three bug fixes and major code cleanup --- mysql-test/r/union.result | 4 +++ mysql-test/t/union.test | 1 + sql/item_subselect.cc | 2 +- sql/mysql_priv.h | 3 +- sql/sql_derived.cc | 2 +- sql/sql_lex.h | 12 ++++++++ sql/sql_parse.cc | 2 +- sql/sql_prepare.cc | 2 +- sql/sql_select.cc | 30 ++++++++---------- sql/sql_select.h | 3 +- sql/sql_union.cc | 64 ++++++++++++++++++++++++--------------- sql/sql_update.cc | 2 +- 12 files changed, 76 insertions(+), 51 deletions(-) diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index cf166f47f35..52d60a642f1 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -230,3 +230,7 @@ id_master id text1 text2 1 3 NULL bar3 1 4 foo4 bar4 drop table if exists t1,t2; +(SELECT 1,3) UNION (SELECT 2,1) ORDER BY (SELECT 2); +1 3 +1 3 +2 1 diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index af2dd154974..af30cdf09e9 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -124,3 +124,4 @@ 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; +(SELECT 1,3) UNION (SELECT 2,1) ORDER BY (SELECT 2); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index fb51b5561e9..524bb74d5a5 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -684,7 +684,7 @@ int subselect_single_select_engine::prepare() (ORDER*) select_lex->group_list.first, select_lex->having, (ORDER*) 0, select_lex, - select_lex->master_unit(), 0, 0)) + select_lex->master_unit(), 0)) return 1; thd->lex.current_select= save_select; return 0; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 5bf7e6e6951..df3e3f867e0 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -405,8 +405,7 @@ int mysql_select(THD *thd, Item ***rref_pointer_array, COND *conds, uint og_num, ORDER *order, ORDER *group, Item *having, ORDER *proc_param, ulong select_type, select_result *result, SELECT_LEX_UNIT *unit, - SELECT_LEX *select_lex, bool fake_select_lex, - bool tables_and_fields_initied); + SELECT_LEX *select_lex, bool tables_and_fields_initied); void free_underlaid_joins(THD *thd, SELECT_LEX *select); void fix_tables_pointers(SELECT_LEX *select_lex); void fix_tables_pointers(SELECT_LEX_UNIT *select_lex); diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index c0a4436a059..f2cddeead2f 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -172,7 +172,7 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, (ORDER *) select_cursor->group_list.first, select_cursor->having, (ORDER*) NULL, select_cursor->options | thd->options | SELECT_NO_UNLOCK, - derived_result, unit, select_cursor, 0, 1); + derived_result, unit, select_cursor, 1); if (!res) { diff --git a/sql/sql_lex.h b/sql/sql_lex.h index aff3485dbe4..c0f24d6940e 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -311,6 +311,11 @@ public: st_select_lex_unit* master_unit(); st_select_lex* outer_select(); st_select_lex* first_select() { return (st_select_lex*) slave; } + st_select_lex* first_select_in_union() + { + return (slave && slave->linkage == GLOBAL_OPTIONS_TYPE) ? + (st_select_lex*) slave->next : (st_select_lex*) slave; + } st_select_lex_unit* next_unit() { return (st_select_lex_unit*) next; } void exclude_level(); @@ -404,6 +409,13 @@ public: } friend void mysql_init_query(THD *thd); + void make_empty_select(st_select_lex *last_select) + { + select_number=INT_MAX; + init_query(); + init_select(); + include_neighbour(last_select); + } }; typedef class st_select_lex SELECT_LEX; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index ce782b0480c..78986c88062 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2433,7 +2433,7 @@ mysql_execute_command(THD *thd) (ORDER *)NULL, select_lex->options | thd->options | SELECT_NO_JOIN_CACHE, - result, unit, select_lex, 0, 0); + result, unit, select_lex, 0); if (thd->net.report_error) res= -1; delete result; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 3cb4c4e8244..eefd1b5d4e1 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -567,7 +567,7 @@ static bool mysql_test_select_fields(PREP_STMT *stmt, TABLE_LIST *tables, if (join->prepare(&select_lex->ref_pointer_array, tables, wild_num, conds, og_num, order, group, having, proc, - select_lex, unit, 0, 0)) + select_lex, unit, 0)) DBUG_RETURN(1); /* diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 47fe271f2b6..23381831ce3 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -182,7 +182,7 @@ int handle_select(THD *thd, LEX *lex, select_result *result) select_lex->having, (ORDER*) lex->proc_list.first, select_lex->options | thd->options, - result, &(lex->unit), &(lex->select_lex), 0, 0); + result, &(lex->unit), &(lex->select_lex), 0); if (res && result) result->abort(); @@ -268,7 +268,7 @@ JOIN::prepare(Item ***rref_pointer_array, Item *having_init, ORDER *proc_param_init, SELECT_LEX *select, SELECT_LEX_UNIT *unit, - bool fake_select_lex, bool tables_and_fields_initied) + bool tables_and_fields_initied) { DBUG_ENTER("JOIN::prepare"); @@ -279,8 +279,7 @@ JOIN::prepare(Item ***rref_pointer_array, proc_param= proc_param_init; tables_list= tables_init; select_lex= select; - if (!fake_select_lex) - select_lex->join= this; + select_lex->join= this; union_part= (unit->first_select()->next_select() != 0); /* Check that all tables, fields, conds and order are ok */ @@ -1261,7 +1260,6 @@ int JOIN::cleanup(THD *thd) { DBUG_ENTER("JOIN::cleanup"); - select_lex->join= 0; if (tmp_join) @@ -1292,15 +1290,14 @@ mysql_select(THD *thd, Item ***rref_pointer_array, COND *conds, uint og_num, ORDER *order, ORDER *group, Item *having, ORDER *proc_param, ulong select_options, select_result *result, SELECT_LEX_UNIT *unit, - SELECT_LEX *select_lex, bool fake_select_lex, - bool tables_and_fields_initied) + SELECT_LEX *select_lex, bool tables_and_fields_initied) { int err; bool free_join= 1; DBUG_ENTER("mysql_select"); JOIN *join; - if (!fake_select_lex && select_lex->join != 0) + if (select_lex->join != 0) { //here is EXPLAIN of subselect or derived table join= select_lex->join; @@ -1320,8 +1317,7 @@ mysql_select(THD *thd, Item ***rref_pointer_array, if (join->prepare(rref_pointer_array, tables, wild_num, conds, og_num, order, group, having, proc_param, - select_lex, unit, fake_select_lex, - tables_and_fields_initied)) + select_lex, unit, tables_and_fields_initied)) { DBUG_RETURN(-1); } @@ -1350,7 +1346,7 @@ err: thd->limit_found_rows= curr_join->send_records; thd->examined_row_count= curr_join->examined_rows; thd->proc_info="end"; - err= (fake_select_lex ? curr_join->error : join->cleanup(thd)); + err= join->cleanup(thd); if (thd->net.report_error) err= -1; delete join; @@ -7086,15 +7082,16 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,ORDER *order, List &fields, List &all_fields) { - if ((*order->item)->type() == Item::INT_ITEM) + Item *itemptr=*order->item; + if (itemptr->type() == Item::INT_ITEM) { /* Order by position */ Item *item=0; - uint count= (uint) ((Item_int*) (*order->item))->value; + uint count= (uint) ((Item_int*)itemptr)->value; if (count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), - MYF(0),(*order->item)->full_name(), + MYF(0),itemptr->full_name(), thd->where); return 1; } @@ -7103,8 +7100,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, return 0; } uint counter; - Item **item= find_item_in_list(*order->item, fields, &counter, - IGNORE_ERRORS); + Item **item= find_item_in_list(itemptr, fields, &counter, IGNORE_ERRORS); if (item) { order->item= ref_pointer_array + counter; @@ -8103,7 +8099,7 @@ int mysql_explain_select(THD *thd, SELECT_LEX *select_lex, char const *type, select_lex->having, (ORDER*) thd->lex.proc_list.first, select_lex->options | thd->options | SELECT_DESCRIBE, - result, unit, select_lex, 0, 0); + result, unit, select_lex, 0); DBUG_RETURN(res); } diff --git a/sql/sql_select.h b/sql/sql_select.h index bb928846186..c5411a8790b 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -256,8 +256,7 @@ class JOIN :public Sql_alloc int prepare(Item ***rref_pointer_array, TABLE_LIST *tables, uint wind_num, COND *conds, uint og_num, ORDER *order, ORDER *group, Item *having, ORDER *proc_param, SELECT_LEX *select, - SELECT_LEX_UNIT *unit, bool fake_select_lex, - bool tables_and_fields_initied); + SELECT_LEX_UNIT *unit, bool tables_and_fields_initied); int optimize(); int reinit(); void exec(); diff --git a/sql/sql_union.cc b/sql/sql_union.cc index feaa8371acb..607f3007d1d 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -122,9 +122,9 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result, this->result= result; t_and_f= tables_and_fields_initied; SELECT_LEX_NODE *lex_select_save= thd->lex.current_select; - SELECT_LEX *sl; + SELECT_LEX *select_cursor; - thd->lex.current_select= sl= first_select(); + thd->lex.current_select= select_cursor= first_select_in_union(); /* Global option */ if (((void*)(global_parameters)) == ((void*)this)) { @@ -136,26 +136,27 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result, if (t_and_f) { // Item list and tables will be initialized by mysql_derived - item_list= sl->item_list; + item_list= select_cursor->item_list; } else { item_list.empty(); - TABLE_LIST *first_table= (TABLE_LIST*) first_select()->table_list.first; + TABLE_LIST *first_table= (TABLE_LIST*) select_cursor->table_list.first; if (setup_tables(first_table) || - setup_wild(thd, first_table, sl->item_list, 0, sl->with_wild)) + setup_wild(thd, first_table, select_cursor->item_list, 0, select_cursor->with_wild)) goto err; - List_iterator it(sl->item_list); + List_iterator it(select_cursor->item_list); Item *item; while((item=it++)) item->maybe_null=1; - item_list= sl->item_list; - sl->with_wild= 0; - if (setup_ref_array(thd, &sl->ref_pointer_array, - (item_list.elements + sl->with_sum_func + - sl->order_list.elements + sl->group_list.elements)) || - setup_fields(thd, sl->ref_pointer_array, first_table, item_list, + item_list= select_cursor->item_list; + select_cursor->with_wild= 0; + if (setup_ref_array(thd, &select_cursor->ref_pointer_array, + (item_list.elements + select_cursor->with_sum_func + + select_cursor->order_list.elements + + select_cursor->group_list.elements)) || + setup_fields(thd, select_cursor->ref_pointer_array, first_table, item_list, 0, 0, 1)) goto err; t_and_f= 1; @@ -165,7 +166,7 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result, tmp_table_param.field_count=item_list.elements; if (!(table= create_tmp_table(thd, &tmp_table_param, item_list, (ORDER*) 0, !union_option, - 1, (first_select()->options | thd->options | + 1, (select_cursor->options | thd->options | TMP_TABLE_ALL_COLUMNS), HA_POS_ERROR))) goto err; @@ -181,9 +182,16 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result, union_result->not_describe=1; union_result->tmp_table_param=&tmp_table_param; + +/* + the following piece of code is placed here solely for the purpose of + getting correct results with EXPLAIN when UNION is withing a sub-select + or derived table ... +*/ + if (thd->lex.describe) { - for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) + for (SELECT_LEX *sl= select_cursor; sl; sl= sl->next_select()) { JOIN *join= new JOIN(thd, sl->item_list, sl->options | thd->options | SELECT_NO_UNLOCK, @@ -206,16 +214,17 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result, (ORDER*) sl->group_list.first, sl->having, (ORDER*) NULL, - sl, this, 0, t_and_f); + sl, this, t_and_f); t_and_f= 0; if (res | thd->is_fatal_error) goto err; } } + item_list.empty(); thd->lex.current_select= lex_select_save; { - List_iterator it(first_select()->item_list); + List_iterator it(select_cursor->item_list); Field **field; for (field= table->field; *field; field++) @@ -236,7 +245,8 @@ int st_select_lex_unit::exec() { DBUG_ENTER("st_select_lex_unit::exec"); SELECT_LEX_NODE *lex_select_save= thd->lex.current_select; - + SELECT_LEX *select_cursor=first_select_in_union(), *last_select; + if (executed && !(dependent || uncacheable)) DBUG_RETURN(0); executed= 1; @@ -249,8 +259,9 @@ int st_select_lex_unit::exec() item->reset(); table->file->delete_all_rows(); } - for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) + for (SELECT_LEX *sl= select_cursor; sl; sl= sl->next_select()) { + last_select=sl; if (optimized) res= sl->join->reinit(); else @@ -276,7 +287,7 @@ int st_select_lex_unit::exec() (ORDER*) sl->group_list.first, sl->having, (ORDER*) NULL, - sl, this, 0, t_and_f); + sl, this, t_and_f); t_and_f=0; if (res | thd->is_fatal_error) { @@ -307,7 +318,7 @@ int st_select_lex_unit::exec() /* Send result to 'result' */ // to correct ORDER BY reference resolving - thd->lex.current_select = first_select(); + thd->lex.current_select = select_cursor; res =-1; { #if 0 @@ -321,9 +332,10 @@ int st_select_lex_unit::exec() if (!thd->is_fatal_error) // Check if EOM { - SELECT_LEX *sl=thd->lex.current_select->master_unit()->first_select(); - offset_limit_cnt= (sl->braces) ? global_parameters->offset_limit : 0; - select_limit_cnt= (sl->braces) ? global_parameters->select_limit+ + SELECT_LEX *fake_select = new SELECT_LEX(); + fake_select->make_empty_select(last_select); + offset_limit_cnt= (select_cursor->braces) ? global_parameters->offset_limit : 0; + select_limit_cnt= (select_cursor->braces) ? global_parameters->select_limit+ global_parameters->offset_limit : HA_POS_ERROR; if (select_limit_cnt < global_parameters->select_limit) select_limit_cnt= HA_POS_ERROR; // no limit @@ -334,9 +346,11 @@ int st_select_lex_unit::exec() global_parameters->order_list.elements, (ORDER*)global_parameters->order_list.first, (ORDER*) NULL, NULL, (ORDER*) NULL, - thd->options, result, this, first_select(), 1, 0); + thd->options, result, this, fake_select, 0); if (found_rows_for_union && !res) thd->limit_found_rows = (ulonglong)table->file->records; + fake_select->exclude(); + delete fake_select; } } thd->lex.select_lex.ftfunc_list= &thd->lex.select_lex.ftfunc_list_alloc; @@ -357,7 +371,7 @@ int st_select_lex_unit::cleanup() free_tmp_table(thd, table); table= 0; // Safety } - for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) + for (SELECT_LEX *sl= first_select_in_union(); sl; sl= sl->next_select()) { JOIN *join; if ((join= sl->join)) diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 88f677938ad..dd3eb326b38 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -428,7 +428,7 @@ int mysql_multi_update(THD *thd, conds, 0, (ORDER *) NULL, (ORDER *)NULL, (Item *) NULL, (ORDER *)NULL, options | SELECT_NO_JOIN_CACHE, - result, unit, select_lex, 0, 0); + result, unit, select_lex, 0); delete result; DBUG_RETURN(res); } From 92e6a9fcf23a192c925d9e78a2551f16c20d85d2 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 16:22:31 +0100 Subject: [PATCH 074/267] Make log_pos be non-zero in the binary log, for BEGIN and COMMIT Query_log_events. Now log_pos is the real position of the event. For events that are between BEGIN and COMMIT, log_pos is still the BEGIN's log_pos. This fixes bug #52 (If only transactions are run on the master then t --- sql/log.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sql/log.cc b/sql/log.cc index 073b7f691e8..27864e19c03 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1211,6 +1211,14 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache) */ { Query_log_event qinfo(thd, "BEGIN", 5, TRUE); + /* + Now this Query_log_event has artificial log_pos 0. It must be adjusted + to reflect the real position in the log. Not doing it would confuse the + slave: it would prevent this one from knowing where he is in the master's + binlog, which would result in wrong positions being shown to the user, + MASTER_POS_WAIT undue waiting etc. + */ + qinfo.set_log_pos(this); if (qinfo.write(&log_file)) goto err; } @@ -1233,6 +1241,7 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache) { Query_log_event qinfo(thd, "COMMIT", 6, TRUE); + qinfo.set_log_pos(this); if (qinfo.write(&log_file) || flush_io_cache(&log_file)) goto err; } From c4f89626eeba1222e3a7c5f5bd9c9548a55b943d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 17:37:12 +0200 Subject: [PATCH 075/267] do not allow to cache queries with INTO clause mysql-test/r/query_cache.result: INTO OUTFILE/DUMPFILE test mysql-test/t/query_cache.test: INTO OUTFILE/DUMPFILE test --- mysql-test/r/query_cache.result | 12 ++++++++++++ mysql-test/t/query_cache.test | 13 +++++++++++++ sql/sql_yacc.yy | 8 ++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 41fccc2743c..0907abcbc86 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -564,3 +564,15 @@ show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 0 drop table t1; +drop table if exists t1; +create table t1 (a int); +insert into t1 values (1),(2),(3); +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +select * from t1 into outfile "query_caceh.out.file"; +select * from t1 limit 1 into dumpfile "query_cache.dump.file"; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +drop table t1; diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index dd092866e44..f19d3bdc93a 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -406,4 +406,17 @@ select * from t1; show status like "Qcache_queries_in_cache"; load data infile '../../std_data/words.dat' into table t1; show status like "Qcache_queries_in_cache"; +drop table t1; + +# +# INTO OUTFILE/DUMPFILE test +# + +drop table if exists t1; +create table t1 (a int); +insert into t1 values (1),(2),(3); +show status like "Qcache_queries_in_cache"; +select * from t1 into outfile "query_caceh.out.file"; +select * from t1 limit 1 into dumpfile "query_cache.dump.file"; +show status like "Qcache_queries_in_cache"; drop table t1; \ No newline at end of file diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 2f339f30eb4..7484eeb5114 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2448,13 +2448,17 @@ procedure_item: opt_into: INTO OUTFILE TEXT_STRING { - if (!(Lex->exchange= new sql_exchange($3.str,0))) + THD *thd= current_thd; + thd->safe_to_cache_query= 0; + if (!(thd->lex.exchange= new sql_exchange($3.str,0))) YYABORT; } opt_field_term opt_line_term | INTO DUMPFILE TEXT_STRING { - if (!(Lex->exchange= new sql_exchange($3.str,1))) + THD *thd= current_thd; + thd->safe_to_cache_query= 0; + if (!(thd->lex.exchange= new sql_exchange($3.str,1))) YYABORT; }; From 65b62bd474012ef77988fc4fb06e41fadc625b7b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 22:46:24 +0100 Subject: [PATCH 076/267] Fix so that INSERT DELAYED cares about SQL_LOG_BIN=0 (bug #104) --- sql/sql_insert.cc | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 32071e5b083..785696d0fb8 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -23,7 +23,7 @@ static int check_null_fields(THD *thd,TABLE *entry); static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list); static int write_delayed(THD *thd,TABLE *table, enum_duplicates dup, - char *query, uint query_length, bool log_on); + char *query, uint query_length, int log_on); static void end_delayed_insert(THD *thd); extern "C" pthread_handler_decl(handle_delayed_insert,arg); static void unlink_blobs(register TABLE *table); @@ -38,6 +38,8 @@ static void unlink_blobs(register TABLE *table); #define my_safe_afree(ptr, size, min_length) if (size > min_length) my_free(ptr,MYF(0)) #endif +#define DELAYED_LOG_UPDATE 1 +#define DELAYED_LOG_BIN 2 /* Check if insert fields are correct @@ -103,8 +105,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List &fields, List &values_list,enum_duplicates duplic) { int error; - bool log_on= ((thd->options & OPTION_UPDATE_LOG) || - !(thd->master_access & SUPER_ACL)); + /* + log_on is about delayed inserts only. + By default, both logs are enabled (this won't cause problems if the server + runs without --log-update or --log-bin). + */ + int log_on= DELAYED_LOG_UPDATE | DELAYED_LOG_BIN ; + bool transactional_table, log_delayed, bulk_insert; uint value_count; ulong counter = 1; @@ -117,6 +124,14 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List &fields, thr_lock_type lock_type = table_list->lock_type; DBUG_ENTER("mysql_insert"); + if (thd->master_access & SUPER_ACL) + { + if (!(thd->options & OPTION_UPDATE_LOG)) + log_on &= ~(int) DELAYED_LOG_UPDATE ; + if (!(thd->options & OPTION_BIN_LOG)) + log_on &= ~(int) DELAYED_LOG_BIN ; + } + /* in safe mode or with skip-new change delayed insert to be regular if we are told to replace duplicates, the insert cannot be concurrent @@ -494,12 +509,13 @@ public: char *record,*query; enum_duplicates dup; time_t start_time; - bool query_start_used,last_insert_id_used,insert_id_used,log_query; + bool query_start_used,last_insert_id_used,insert_id_used; + int log_query; ulonglong last_insert_id; ulong time_stamp; uint query_length; - delayed_row(enum_duplicates dup_arg, bool log_query_arg) + delayed_row(enum_duplicates dup_arg, int log_query_arg) :record(0),query(0),dup(dup_arg),log_query(log_query_arg) {} ~delayed_row() { @@ -802,7 +818,7 @@ TABLE *delayed_insert::get_local_table(THD* client_thd) /* Put a question in queue */ static int write_delayed(THD *thd,TABLE *table,enum_duplicates duplic, - char *query, uint query_length, bool log_on) + char *query, uint query_length, int log_on) { delayed_row *row=0; delayed_insert *di=thd->di; @@ -1189,13 +1205,14 @@ bool delayed_insert::handle_inserts(void) using_ignore=0; table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); } - if (row->query && row->log_query) + if (row->query) { - mysql_update_log.write(&thd,row->query, row->query_length); - if (using_bin_log) + if (row->log_query & DELAYED_LOG_UPDATE) + mysql_update_log.write(&thd,row->query, row->query_length); + if (row->log_query & DELAYED_LOG_BIN && using_bin_log) { - Query_log_event qinfo(&thd, row->query, row->query_length,0); - mysql_bin_log.write(&qinfo); + Query_log_event qinfo(&thd, row->query, row->query_length,0); + mysql_bin_log.write(&qinfo); } } if (table->blob_fields) From 2395cd9805801e22808151619a9dcc0c45dc744a Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Mar 2003 22:53:58 +0100 Subject: [PATCH 077/267] remove spaces according to coding rules --- sql/sql_insert.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 785696d0fb8..7725808075a 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -127,9 +127,9 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List &fields, if (thd->master_access & SUPER_ACL) { if (!(thd->options & OPTION_UPDATE_LOG)) - log_on &= ~(int) DELAYED_LOG_UPDATE ; + log_on&= ~(int) DELAYED_LOG_UPDATE; if (!(thd->options & OPTION_BIN_LOG)) - log_on &= ~(int) DELAYED_LOG_BIN ; + log_on&= ~(int) DELAYED_LOG_BIN; } /* From 7ae420a4a17fab1b45ee56dc5cac2f8d9063baa5 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 01:00:58 +0200 Subject: [PATCH 078/267] Portability fix for IBM compiler on AIX configure.in: Remove duplicated configure line sql-bench/crash-me.sh: Fix for connect test --- configure.in | 1 - mysys/my_tempnam.c | 10 ++++++++-- sql-bench/crash-me.sh | 37 ++++++++++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/configure.in b/configure.in index 2e28b1d7db4..0854bb67725 100644 --- a/configure.in +++ b/configure.in @@ -14,7 +14,6 @@ SHARED_LIB_VERSION=12:0:0 # Set all version vars based on $VERSION. How do we do this more elegant ? # Remember that regexps needs to quote [ and ] since this is run through m4 -MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|-.*$||"` MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"` MYSQL_BASE_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|\.[[^.]]*$||"` F_PART=`echo $MYSQL_BASE_VERSION | sed -e "s|\.||g"| sed -e "s|[a-zA-Z]\+||"|sed -e "s|^\(..\)$|\\10|"` diff --git a/mysys/my_tempnam.c b/mysys/my_tempnam.c index a652fae3574..d079b9f66a5 100644 --- a/mysys/my_tempnam.c +++ b/mysys/my_tempnam.c @@ -115,13 +115,19 @@ my_string my_tempnam(const char *dir, const char *pfx, old_env=(char**)environ; if (dir) { /* Don't use TMPDIR if dir is given */ - ((char**) environ)=(char**) temp_env; + /* + The following strange cast is required because the IBM compiler on AIX + doesn't allow us to cast the value of environ. + The cast of environ is needed as some systems doesn't allow us to + update environ with a char ** pointer. (const mismatch) + */ + (*(char***) &environ)=(char**) temp_env; temp_env[0]=0; } #endif res=tempnam((char*) dir,(my_string) pfx); /* Use stand. dir with prefix */ #if !defined(OS2) && !defined(__NETWARE__) - ((char**) environ)=(char**) old_env; + (*(char***) &environ)=(char**) old_env; #endif if (!res) DBUG_PRINT("error",("Got error: %d from tempnam",errno)); diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh index 1ae2550d69d..aeca7aa311b 100644 --- a/sql-bench/crash-me.sh +++ b/sql-bench/crash-me.sh @@ -39,7 +39,7 @@ # as such, and clarify ones such as "mediumint" with comments such as # "3-byte int" or "same as xxx". -$version="1.60"; +$version="1.61"; use DBI; use Getopt::Long; @@ -74,7 +74,7 @@ usage() if ($opt_help || $opt_Information); version() && exit(0) if ($opt_version); $opt_suffix = '-'.$opt_suffix if (length($opt_suffix) != 0); -$opt_config_file = "$pwd/$opt_dir/$opt_server$opt_suffix.cfg" +$opt_config_file = "$pwd/$opt_dir/$opt_server$opt_suffix.cfg" if (length($opt_config_file) == 0); $log_prefix=' ###'; # prefix for log lines in result file $safe_query_log=''; @@ -540,7 +540,7 @@ else " Please start it and try again\n"; exit 1; } - $dbh=safe_connect(); + $dbh=retry_connect(); } @@ -2880,9 +2880,10 @@ As all used queries are legal according to some SQL standard. any reasonable SQL server should be able to run this test without any problems. -All questions is cached in $opt_dir/'server_name'.cfg that future runs will use -limits found in previous runs. Remove this file if you want to find the -current limits for your version of the database server. +All questions is cached in $opt_dir/'server_name'[-suffix].cfg that +future runs will use limits found in previous runs. Remove this file +if you want to find the current limits for your version of the +database server. This program uses some table names while testing things. If you have any tables with the name of 'crash_me' or 'crash_qxxxx' where 'x' is a number, @@ -3152,7 +3153,29 @@ sub safe_connect } # -# Check if the server is upp and running. If not, ask the user to restart it +# Test connecting a couple of times before giving an error +# This is needed to get the server time to free old connections +# after the connect test +# + +sub retry_connect +{ + my ($dbh, $i); + for (i=0 ; $i < 10 ; $i++) + { + if (($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password, + { PrintError => 0, AutoCommit => 1}))) + { + $dbh->{LongReadLen}= 16000000; # Set max retrieval buffer + return $dbh; + } + sleep(1); + } + return safe_connect(); +} + +# +# Check if the server is up and running. If not, ask the user to restart it # sub check_connect From 8d9d12d18207d880b4fde3bda5e4f1bd84f25b94 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 11:54:26 +0400 Subject: [PATCH 079/267] New syntax to change client collation: SET COLLATION latin1 SET COLLATION 'latin1' SET COLLATION DEFAULT --- mysql-test/r/ctype_collate.result | 39 +++++++++++++++++++++++++++++++ mysql-test/t/ctype_collate.test | 15 ++++++++++++ sql/sql_yacc.yy | 30 +++++++++++++++++++++++- 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index 4e48a94bb57..70f3eb50d00 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -511,16 +511,55 @@ SHOW FIELDS FROM t1; Field Type Collation Null Key Default Extra latin1_f char(32) latin1_bin YES NULL SET NAMES 'latin1'; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1 SET NAMES latin1; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1 +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1 SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' latin1 latin1 2 1 SET NAMES latin1 COLLATE latin1_bin; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1_bin SET NAMES 'latin1' COLLATE 'latin1_bin'; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1_bin SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' latin1 latin1_bin 2 0 +SET NAMES koi8r; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation koi8r +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +koi8r koi8r 2 1 +SET COLLATION koi8r_bin; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation koi8r_bin +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +koi8r koi8r_bin 2 0 +SET COLLATION DEFAULT; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation koi8r +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +charset('a') collation('a') coercibility('a') 'a'='A' +koi8r koi8r 2 1 SET NAMES DEFAULT; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1 SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' latin1 latin1 2 1 diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 3dc6d3a2dfe..7fd3229e1a4 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -128,12 +128,27 @@ SHOW CREATE TABLE t1; SHOW FIELDS FROM t1; SET NAMES 'latin1'; +SHOW VARIABLES LIKE 'client_collation'; SET NAMES latin1; +SHOW VARIABLES LIKE 'client_collation'; +SHOW VARIABLES LIKE 'client_collation'; SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; SET NAMES latin1 COLLATE latin1_bin; +SHOW VARIABLES LIKE 'client_collation'; SET NAMES 'latin1' COLLATE 'latin1_bin'; +SHOW VARIABLES LIKE 'client_collation'; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +SET NAMES koi8r; +SHOW VARIABLES LIKE 'client_collation'; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +SET COLLATION koi8r_bin; +SHOW VARIABLES LIKE 'client_collation'; +SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; +SET COLLATION DEFAULT; +SHOW VARIABLES LIKE 'client_collation'; SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; SET NAMES DEFAULT; +SHOW VARIABLES LIKE 'client_collation'; SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; --error 1251 SET NAMES latin1 COLLATE koi8r; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e093a822303..0ee351ec970 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4224,7 +4224,6 @@ option_value: { THD* thd= YYTHD; LEX *lex= &thd->lex; - system_variables vars= thd->variables; CHARSET_INFO *cs= $2 ? $2 : thd->db_charset; CHARSET_INFO *cl= $3 ? $3 : cs; @@ -4241,6 +4240,35 @@ option_value: find_sys_var("client_collation"), csname)); } + | COLLATION_SYM collation_name_or_default + { + THD* thd= YYTHD; + LEX *lex= &thd->lex; + system_variables *vars= &thd->variables; + CHARSET_INFO *cs= vars->thd_charset; + CHARSET_INFO *cl= $2; + + if (!cl) + { + if (!(cl=get_charset_by_csname(cs->csname,MY_CS_PRIMARY,MYF(0)))) + { + net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,"DEFAULT"); + YYABORT; + } + } + else if ((cl != cs) && strcmp(cs->csname,cl->csname)) + { + net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH, + cl->name,cs->csname); + YYABORT; + } + Item_string *csname= new Item_string(cl->name, + strlen(cl->name), + &my_charset_latin1); + lex->var_list.push_back(new set_var(lex->option_type, + find_sys_var("client_collation"), + csname)); + } | PASSWORD equal text_or_password { THD *thd=YYTHD; From f821f4c2f7f3e4f5fe02f2b38f1e32004040262f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 10:07:06 +0200 Subject: [PATCH 080/267] os0file.c: Print and error message also if a read from file results in the Linux error EEXIST; may happen if the disk is broken innobase/os/os0file.c: Print and error message also if a read from file results in the Linux error EEXIST; may happen if the disk is broken --- innobase/os/os0file.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c index 293ced92c42..6e345bec61a 100644 --- a/innobase/os/os0file.c +++ b/innobase/os/os0file.c @@ -196,7 +196,7 @@ os_file_get_last_error(void) err = (ulint) GetLastError(); - if (err != ERROR_FILE_EXISTS && err != ERROR_DISK_FULL) { + if (err != ERROR_DISK_FULL) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Operating system error number %li in a file operation.\n" @@ -220,6 +220,8 @@ os_file_get_last_error(void) } } + fflush(stderr); + if (err == ERROR_FILE_NOT_FOUND) { return(OS_FILE_NOT_FOUND); } else if (err == ERROR_DISK_FULL) { @@ -232,7 +234,7 @@ os_file_get_last_error(void) #else err = (ulint) errno; - if (err != EEXIST && err != ENOSPC ) { + if (err != ENOSPC ) { ut_print_timestamp(stderr); fprintf(stderr, @@ -256,6 +258,8 @@ os_file_get_last_error(void) } } + fflush(stderr); + if (err == ENOSPC ) { return(OS_FILE_DISK_FULL); #ifdef POSIX_ASYNC_IO @@ -278,7 +282,8 @@ static ibool os_file_handle_error( /*=================*/ - /* out: TRUE if we should retry the operation */ + /* out: TRUE if we should retry the + operation */ os_file_t file, /* in: file pointer */ char* name) /* in: name of a file or NULL */ { @@ -308,12 +313,15 @@ os_file_handle_error( os_has_said_disk_full = TRUE; + fflush(stderr); + return(FALSE); } else if (err == OS_FILE_AIO_RESOURCES_RESERVED) { return(TRUE); } else if (err == OS_FILE_ALREADY_EXISTS) { + return(FALSE); } else { if (name) { @@ -322,6 +330,8 @@ os_file_handle_error( fprintf(stderr, "InnoDB: Cannot continue operation.\n"); + fflush(stderr); + exit(1); } @@ -1063,7 +1073,17 @@ error_handling: if (retry) { goto try_again; } - + + fprintf(stderr, +"InnoDB: Fatal error: cannot read from file. OS error number %lu.\n", +#ifdef __WIN__ + (ulint)GetLastError() +#else + (ulint)errno +#endif + ); + fflush(stderr); + ut_error; return(FALSE); From 8dc4215d449165eaf021439c68511805faaf3d62 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 10:20:44 +0200 Subject: [PATCH 081/267] os0file.c: Fix bug in previous push innobase/os/os0file.c: Fix bug in previous push --- innobase/os/os0file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c index 6e345bec61a..6324fcdbef1 100644 --- a/innobase/os/os0file.c +++ b/innobase/os/os0file.c @@ -196,7 +196,7 @@ os_file_get_last_error(void) err = (ulint) GetLastError(); - if (err != ERROR_DISK_FULL) { + if (err != ERROR_DISK_FULL && err != ERROR_FILE_EXISTS) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Operating system error number %li in a file operation.\n" @@ -234,7 +234,7 @@ os_file_get_last_error(void) #else err = (ulint) errno; - if (err != ENOSPC ) { + if (err != ENOSPC && err != EEXIST) { ut_print_timestamp(stderr); fprintf(stderr, From 11da9dede60e52f2178757e3b57c1c97412eda1c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 12:21:32 +0400 Subject: [PATCH 082/267] sql_acl.cc, item.h: use of new argument sql_analyse.h: macros from mysql_priv.h. Should be deleted soon. mysql_priv.h: _default_charset_info has been removed item_cmpfunc.h: Use cmp_charset hostname.cc, hash_filo.h: Move charset to constructor argument sql/hash_filo.h: Move charset to constructor argument sql/hostname.cc: Move charset to constructor argument sql/item_cmpfunc.h: Use cmp_charset sql/mysql_priv.h: _default_charset_info has been removed sql/sql_analyse.h: macros from mysql_priv.h. Should be deleted soon. sql/item.h: use of new argument sql/sql_acl.cc: use of new argument --- sql/hash_filo.h | 9 ++++++--- sql/hostname.cc | 3 ++- sql/item.h | 9 +++++---- sql/item_cmpfunc.h | 2 +- sql/mysql_priv.h | 1 - sql/sql_acl.cc | 2 +- sql/sql_analyse.h | 2 ++ 7 files changed, 17 insertions(+), 11 deletions(-) diff --git a/sql/hash_filo.h b/sql/hash_filo.h index f7384cc6e32..92cd2658967 100644 --- a/sql/hash_filo.h +++ b/sql/hash_filo.h @@ -42,6 +42,7 @@ class hash_filo const hash_get_key get_key; hash_free_key free_element; bool init; + CHARSET_INFO *hash_charset; hash_filo_element *first_link,*last_link; public: @@ -49,9 +50,11 @@ public: HASH cache; hash_filo(uint size_arg, uint key_offset_arg , uint key_length_arg, - hash_get_key get_key_arg, hash_free_key free_element_arg) + hash_get_key get_key_arg, hash_free_key free_element_arg, + CHARSET_INFO *hash_charset_arg) :size(size_arg), key_offset(key_offset_arg), key_length(key_length_arg), - get_key(get_key_arg), free_element(free_element_arg),init(0) + get_key(get_key_arg), free_element(free_element_arg),init(0), + hash_charset(hash_charset_arg) { bzero((char*) &cache,sizeof(cache)); } @@ -75,7 +78,7 @@ public: if (!locked) (void) pthread_mutex_lock(&lock); (void) hash_free(&cache); - (void) hash_init(&cache,system_charset_info,size,key_offset, + (void) hash_init(&cache,hash_charset,size,key_offset, key_length, get_key, free_element,0); if (!locked) (void) pthread_mutex_unlock(&lock); diff --git a/sql/hostname.cc b/sql/hostname.cc index 2905320cc15..5c4bde99256 100644 --- a/sql/hostname.cc +++ b/sql/hostname.cc @@ -65,7 +65,8 @@ bool hostname_cache_init() if (!(hostname_cache=new hash_filo(HOST_CACHE_SIZE, offset, sizeof(struct in_addr),NULL, - (hash_free_key) free))) + (hash_free_key) free, + &my_charset_latin1))) return 1; hostname_cache->clear(); return 0; diff --git a/sql/item.h b/sql/item.h index e262a9cb4e6..cc4e9a5909b 100644 --- a/sql/item.h +++ b/sql/item.h @@ -393,8 +393,7 @@ public: bool eq(const Item *item, bool binary_cmp) const; Item *new_item() { - return new Item_string(name, str_value.ptr(), max_length, - default_charset_info); + return new Item_string(name, str_value.ptr(), max_length, &my_charset_bin); } String *const_string() { return &str_value; } inline void append(char *str, uint length) { str_value.append(str, length); } @@ -406,7 +405,8 @@ public: class Item_datetime :public Item_string { public: - Item_datetime(const char *item_name): Item_string(item_name,"",0,default_charset_info) + Item_datetime(const char *item_name): Item_string(item_name,"",0, + &my_charset_bin) { max_length=19;} enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } }; @@ -414,7 +414,8 @@ public: class Item_empty_string :public Item_string { public: - Item_empty_string(const char *header,uint length) :Item_string("",0,default_charset_info) + Item_empty_string(const char *header,uint length) :Item_string("",0, + &my_charset_bin) { name=(char*) header; max_length=length;} }; diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index cc0ce455019..b9d8615beb4 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -482,7 +482,7 @@ public: int cmp(Item *arg) { char buff[80]; - String tmp(buff, sizeof(buff), default_charset_info), *res; + String tmp(buff, sizeof(buff), cmp_charset), *res; if (!(res= arg->val_str(&tmp))) return 1; /* Can't be right */ return sortcmp(value_res, res, cmp_charset); diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 5bf7e6e6951..09eddf161fe 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -62,7 +62,6 @@ char* query_table_status(THD *thd,const char *db,const char *table_name); #endif #endif -#define my_thd_charset default_charset_info #define files_charset_info system_charset_info /*************************************************************************** diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 41b825e3322..fe443f6c882 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -97,7 +97,7 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables) if (!acl_cache) acl_cache=new hash_filo(ACL_CACHE_SIZE,0,0, (hash_get_key) acl_entry_get_key, - (hash_free_key) free); + (hash_free_key) free, system_charset_info); if (dont_read_acl_tables) { DBUG_RETURN(0); /* purecov: tested */ diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index d40811a2911..2087e6b2b75 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -21,6 +21,8 @@ #pragma interface /* gcc class implementation */ #endif +#define my_thd_charset default_charset_info + #define DEC_IN_AVG 4 typedef struct st_number_info From fb4ee80cfd5f8705dd3fdb5b592d78d4ab1e14b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 12:55:55 +0400 Subject: [PATCH 083/267] sql_load.cc: LOAD DATA INFILE now uses database character set instead of server character set. This is not excellent but at least allows to load for example cyrillic data into cyrillic database if server charset is latin1. In the future we should add a syntax to specify file charset or evern charset of each field. sql/sql_load.cc: LOAD DATA INFILE now uses database character set instead of server character set. This is not excellent but at least allows to load for example cyrillic data into cyrillic database if server charset is latin1. In the future we should add a syntax to specify file charset or evern charset of each field. --- sql/sql_load.cc | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/sql/sql_load.cc b/sql/sql_load.cc index d387ebe27ae..4f5b19e6f49 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -41,8 +41,9 @@ public: bool error,line_cuted,found_null,enclosed; byte *row_start, /* Found row starts here */ *row_end; /* Found row ends here */ + CHARSET_INFO *read_charset; - READ_INFO(File file,uint tot_length, + READ_INFO(File file,uint tot_length,CHARSET_INFO *cs, String &field_term,String &line_start,String &line_term, String &enclosed,int escape,bool get_it_from_net, bool is_fifo); ~READ_INFO(); @@ -214,8 +215,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, info.handle_duplicates=handle_duplicates; info.escape_char=escaped->length() ? (*escaped)[0] : INT_MAX; - READ_INFO read_info(file,tot_length,*field_term, - *ex->line_start, *ex->line_term, *enclosed, + READ_INFO read_info(file,tot_length,thd->db_charset, + *field_term,*ex->line_start, *ex->line_term, *enclosed, info.escape_char, read_file_from_client, is_fifo); if (read_info.error) { @@ -402,7 +403,7 @@ read_fixed_length(THD *thd,COPY_INFO &info,TABLE *table,List &fields, field->field_length) length=field->field_length; save_chr=pos[length]; pos[length]='\0'; // Safeguard aganst malloc - field->store((char*) pos,length,default_charset_info); + field->store((char*) pos,length,read_info.read_charset); pos[length]=save_chr; if ((pos+=length) > read_info.row_end) pos= read_info.row_end; /* Fills rest with space */ @@ -483,7 +484,7 @@ read_sep_field(THD *thd,COPY_INFO &info,TABLE *table, } field->set_notnull(); read_info.row_end[0]=0; // Safe to change end marker - field->store((char*) read_info.row_start,length,default_charset_info); + field->store((char*) read_info.row_start,length,read_info.read_charset); } if (read_info.error) break; @@ -547,12 +548,13 @@ READ_INFO::unescape(char chr) */ -READ_INFO::READ_INFO(File file_par, uint tot_length, String &field_term, - String &line_start, String &line_term, +READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs, + String &field_term, String &line_start, String &line_term, String &enclosed_par, int escape, bool get_it_from_net, bool is_fifo) :file(file_par),escape_char(escape) { + read_charset= cs; field_term_ptr=(char*) field_term.ptr(); field_term_length= field_term.length(); line_term_ptr=(char*) line_term.ptr(); @@ -699,13 +701,13 @@ int READ_INFO::read_field() { chr = GET; #ifdef USE_MB - if (use_mb(default_charset_info) && - my_ismbhead(default_charset_info, chr) && - to+my_mbcharlen(default_charset_info, chr) <= end_of_buff) + if (use_mb(read_charset) && + my_ismbhead(read_charset, chr) && + to+my_mbcharlen(read_charset, chr) <= end_of_buff) { uchar* p = (uchar*)to; *to++ = chr; - int ml = my_mbcharlen(default_charset_info, chr); + int ml = my_mbcharlen(read_charset, chr); int i; for (i=1; i Date: Fri, 7 Mar 2003 13:39:53 +0400 Subject: [PATCH 084/267] item_func.cc, item_cmpfunc.cc, unireg.cc, table.cc, sql_base.cc: some default_charset_info were removed sql/sql_base.cc: some default_charset_info were removed sql/table.cc: some default_charset_info were removed sql/unireg.cc: some default_charset_info were removed sql/item_cmpfunc.cc: some default_charset_info were removed sql/item_func.cc: some default_charset_info were removed --- sql/item_cmpfunc.cc | 10 +++++----- sql/item_func.cc | 2 +- sql/sql_base.cc | 5 ++--- sql/table.cc | 2 +- sql/unireg.cc | 6 +++--- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 3ca3a556658..ec3c7f22556 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1114,7 +1114,7 @@ int in_vector::find(Item *item) in_string::in_string(uint elements,qsort_cmp cmp_func) :in_vector(elements, sizeof(String), cmp_func), - tmp(buff, sizeof(buff), default_charset_info) + tmp(buff, sizeof(buff), &my_charset_bin) {} in_string::~in_string() @@ -1137,7 +1137,7 @@ void in_string::set(uint pos,Item *item) { CHARSET_INFO *cs; if (!(cs= item->charset())) - cs= default_charset_info; // Should never happen for STR items + cs= &my_charset_bin; // Should never happen for STR items str->set_charset(cs); } } @@ -1840,7 +1840,7 @@ Item_func_regex::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) if (!regex_compiled && args[1]->const_item()) { char buff[MAX_FIELD_WIDTH]; - String tmp(buff,sizeof(buff),default_charset_info); + String tmp(buff,sizeof(buff),&my_charset_bin); String *res=args[1]->val_str(&tmp); if (args[1]->null_value) { // Will always return NULL @@ -1870,7 +1870,7 @@ Item_func_regex::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) longlong Item_func_regex::val_int() { char buff[MAX_FIELD_WIDTH]; - String *res, tmp(buff,sizeof(buff),default_charset_info); + String *res, tmp(buff,sizeof(buff),&my_charset_bin); res=args[0]->val_str(&tmp); if (args[0]->null_value) @@ -1881,7 +1881,7 @@ longlong Item_func_regex::val_int() if (!regex_is_const) { char buff2[MAX_FIELD_WIDTH]; - String *res2, tmp2(buff2,sizeof(buff2),default_charset_info); + String *res2, tmp2(buff2,sizeof(buff2),&my_charset_bin); res2= args[1]->val_str(&tmp2); if (args[1]->null_value) diff --git a/sql/item_func.cc b/sql/item_func.cc index 53d15e838b2..da5e9cbb89c 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1545,7 +1545,7 @@ String *udf_handler::val_str(String *str,String *save_str) str->length(res_length); return str; } - save_str->set(res, res_length, default_charset_info); + save_str->set(res, res_length, str->charset()); return save_str; } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index d3a049a11da..79f0e7eb269 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2292,8 +2292,7 @@ int mysql_create_index(THD *thd, TABLE_LIST *table_list, List &keys) DBUG_ENTER("mysql_create_index"); bzero((char*) &create_info,sizeof(create_info)); create_info.db_type=DB_TYPE_DEFAULT; - /* TODO: Fix to use database character set */ - create_info.table_charset=default_charset_info; + create_info.table_charset= thd->db_charset; DBUG_RETURN(mysql_alter_table(thd,table_list->db,table_list->real_name, &create_info, table_list, fields, keys, drop, alter, 0, (ORDER*)0, FALSE, @@ -2310,7 +2309,7 @@ int mysql_drop_index(THD *thd, TABLE_LIST *table_list, List &drop) DBUG_ENTER("mysql_drop_index"); bzero((char*) &create_info,sizeof(create_info)); create_info.db_type=DB_TYPE_DEFAULT; - create_info.table_charset=default_charset_info; + create_info.table_charset= thd->db_charset; DBUG_RETURN(mysql_alter_table(thd,table_list->db,table_list->real_name, &create_info, table_list, fields, keys, drop, alter, 0, (ORDER*)0, FALSE, diff --git a/sql/table.cc b/sql/table.cc index dd5a957f984..08f6e29489d 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1162,7 +1162,7 @@ rename_file_ext(const char * from,const char * to,const char * ext) char *get_field(MEM_ROOT *mem, Field *field) { char buff[MAX_FIELD_WIDTH]; - String str(buff,sizeof(buff),default_charset_info); + String str(buff,sizeof(buff),&my_charset_bin); field->val_str(&str,&str); uint length=str.length(); if (!length) diff --git a/sql/unireg.cc b/sql/unireg.cc index 1cd38d4d161..fa843fe5d1e 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -486,7 +486,7 @@ static bool pack_fields(File file,List &create_fields) /* Write intervals */ if (int_count) { - String tmp((char*) buff,sizeof(buff), default_charset_info); + String tmp((char*) buff,sizeof(buff), &my_charset_bin); tmp.length(0); it.rewind(); int_count=0; @@ -598,9 +598,9 @@ static bool make_empty_rec(File file,enum db_type table_type, regfield->store((longlong) 1); } else if (type == Field::YES) // Old unireg type - regfield->store(ER(ER_YES),(uint) strlen(ER(ER_YES)),default_charset_info); + regfield->store(ER(ER_YES),(uint) strlen(ER(ER_YES)),system_charset_info); else if (type == Field::NO) // Old unireg type - regfield->store(ER(ER_NO), (uint) strlen(ER(ER_NO)),default_charset_info); + regfield->store(ER(ER_NO), (uint) strlen(ER(ER_NO)),system_charset_info); else regfield->reset(); delete regfield; From efadca644132c76beb4b06b5db4b6f3533a95e29 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 12:36:52 +0200 Subject: [PATCH 085/267] Fixed AUTO_INCREMENT handling in MyISAM (last auto_increment patch broke things) Some after merge fixes mysql-test/r/ctype_latin1_de.result: Changed test to have more relevant results mysql-test/r/delete.result: Updated results after merge mysql-test/r/select.result: Remove explicit database usage mysql-test/r/type_datetime.result: Updated results after merge mysql-test/t/ctype_latin1_de.test: Changed test to have more relevant results mysql-test/t/select.test: Remove explicit database usage sql/ha_myisam.cc: Fixed AUTO_INCREMENT handling in MyISAM (last auto_increment patch broke things) --- mysql-test/r/ctype_latin1_de.result | 210 ++++++++++++++-------------- mysql-test/r/delete.result | 15 ++ mysql-test/r/select.result | 1 - mysql-test/r/type_datetime.result | 15 -- mysql-test/t/ctype_latin1_de.test | 4 +- mysql-test/t/select.test | 2 - sql/ha_myisam.cc | 14 +- 7 files changed, 131 insertions(+), 130 deletions(-) diff --git a/mysql-test/r/ctype_latin1_de.result b/mysql-test/r/ctype_latin1_de.result index e5ae6f249ee..b79bc67138c 100644 --- a/mysql-test/r/ctype_latin1_de.result +++ b/mysql-test/r/ctype_latin1_de.result @@ -1,93 +1,95 @@ drop table if exists t1; -create table t1 (a char (20) not null, b int not null auto_increment, index (a,b),index(b)); +create table t1 (a char (20) not null, b int not null auto_increment, index (a,b)); insert into t1 (a) values ('ä'),('ac'),('ae'),('ad'),('Äc'),('aeb'); insert into t1 (a) values ('üc'),('uc'),('ue'),('ud'),('Ü'),('ueb'),('uf'); insert into t1 (a) values ('ö'),('oc'),('Öa'),('oe'),('od'),('Öc'),('oeb'); insert into t1 (a) values ('s'),('ss'),('ß'),('ßb'),('ssa'),('ssc'),('ßa'); insert into t1 (a) values ('eä'),('uü'),('öo'),('ää'),('ääa'),('aeae'); -insert into t1 (a) values ('q'),('a'),('u'),('o'),('é'),('É'); +insert into t1 (a) values ('q'),('a'),('u'),('o'),('é'),('É'),('a'); select a,b from t1 order by a,b; a b -a 35 -ac 2 -ad 4 +a 1 +a 2 +ac 1 +ad 1 ä 1 -ae 3 -ää 31 -aeae 33 -ääa 32 -aeb 6 -Äc 5 -é 38 -É 39 -eä 28 -o 37 -oc 15 -od 18 -ö 14 -oe 17 -Öa 16 -oeb 20 -Öc 19 -öo 30 -q 34 -s 21 -ss 22 -ß 23 -ssa 25 -ßa 27 -ßb 24 -ssc 26 -u 36 -uc 8 -ud 10 -ue 9 -Ü 11 -ueb 12 -üc 7 -uf 13 -uü 29 +ae 2 +ää 1 +aeae 2 +ääa 1 +aeb 1 +Äc 1 +é 1 +É 2 +eä 1 +o 1 +oc 1 +od 1 +ö 1 +oe 2 +Öa 1 +oeb 1 +Öc 1 +öo 1 +q 1 +s 1 +ss 1 +ß 2 +ssa 1 +ßa 2 +ßb 1 +ssc 1 +u 1 +uc 1 +ud 1 +ue 1 +Ü 2 +ueb 1 +üc 1 +uf 1 +uü 1 select a,b from t1 order by upper(a),b; a b -a 35 -ac 2 -ad 4 +a 1 +a 2 +ac 1 +ad 1 ä 1 -ae 3 -ää 31 -aeae 33 -ääa 32 -aeb 6 -Äc 5 -é 38 -É 39 -eä 28 -o 37 -oc 15 -od 18 -ö 14 -oe 17 -Öa 16 -oeb 20 -Öc 19 -öo 30 -q 34 -s 21 -ss 22 -ß 23 -ssa 25 -ßa 27 -ßb 24 -ssc 26 -u 36 -uc 8 -ud 10 -ue 9 -Ü 11 -ueb 12 -üc 7 -uf 13 -uü 29 +ae 2 +ää 1 +aeae 2 +ääa 1 +aeb 1 +Äc 1 +é 1 +É 2 +eä 1 +o 1 +oc 1 +od 1 +ö 1 +oe 2 +Öa 1 +oeb 1 +Öc 1 +öo 1 +q 1 +s 1 +ss 1 +ß 2 +ssa 1 +ßa 2 +ßb 1 +ssc 1 +u 1 +uc 1 +ud 1 +ue 1 +Ü 2 +ueb 1 +üc 1 +uf 1 +uü 1 select a from t1 order by a desc; a uü @@ -129,44 +131,46 @@ ae ad ac a +a check table t1; Table Op Msg_type Msg_text test.t1 check status OK select * from t1 where a like "ö%"; a b -ö 14 -Öa 16 -Öc 19 -öo 30 +ö 1 +Öa 1 +Öc 1 +öo 1 select * from t1 where a like binary "%É%"; a b -É 39 +É 2 select * from t1 where a like "%Á%"; a b -a 35 -ac 2 -ad 4 -ae 3 -aeae 33 -ääa 32 -aeb 6 -Öa 16 -ssa 25 -ßa 27 +a 1 +a 2 +ac 1 +ad 1 +ae 2 +aeae 2 +ääa 1 +aeb 1 +Öa 1 +ssa 1 +ßa 2 select * from t1 where a like "%U%"; a b -u 36 -uc 8 -ud 10 -ue 9 -ueb 12 -uf 13 -uü 29 +u 1 +uc 1 +ud 1 +ue 1 +ueb 1 +uf 1 +uü 1 select * from t1 where a like "%ss%"; a b -ss 22 -ssa 25 -ssc 26 +ss 1 +ssa 1 +ssc 1 drop table t1; select strcmp('ä','ae'),strcmp('ae','ä'),strcmp('aeq','äq'),strcmp('äq','aeq'); strcmp('ä','ae') strcmp('ae','ä') strcmp('aeq','äq') strcmp('äq','aeq') diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result index c2230722aa6..582ab894233 100644 --- a/mysql-test/r/delete.result +++ b/mysql-test/r/delete.result @@ -24,3 +24,18 @@ create table t1 (a bigint not null, primary key (a,a,a,a,a,a,a,a,a,a)); insert into t1 values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27); delete from t1 where a=27; drop table t1; +CREATE TABLE t1 ( +bool char(0) default NULL, +not_null varchar(20) binary NOT NULL default '', +misc integer not null, +PRIMARY KEY (not_null) +) TYPE=MyISAM; +INSERT INTO t1 VALUES (NULL,'a',4), (NULL,'b',5), (NULL,'c',6), (NULL,'d',7); +select * from t1 where misc > 5 and bool is null; +bool not_null misc +NULL c 6 +NULL d 7 +delete from t1 where misc > 5 and bool is null; +select * from t1 where misc > 5 and bool is null; +bool not_null misc +drop table t1; diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index a921d75f20a..b71c6ada03f 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -1,4 +1,3 @@ -use test; drop table if exists t1,t2,t3,t4; CREATE TABLE t1 ( Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL, diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result index b71884f8563..4785f790069 100644 --- a/mysql-test/r/type_datetime.result +++ b/mysql-test/r/type_datetime.result @@ -78,21 +78,6 @@ EXPLAIN SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; table type possible_keys key key_len ref rows Extra t1 ref expedition expedition 8 const 1 Using where drop table t1; -CREATE TABLE `t1` ( - `date` datetime NOT NULL default '0000-00-00 00:00:00', - `numfacture` int(6) unsigned NOT NULL default '0', - `expedition` datetime NOT NULL default '0000-00-00 00:00:00', - PRIMARY KEY (`numfacture`), - KEY `date` (`date`), - KEY `expedition` (`expedition`) -) TYPE=MyISAM; - -INSERT INTO t1 (expedition) VALUES ('0001-00-00 00:00:00'); -SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; -INSERT INTO t1 (numfacture,expedition) VALUES ('1212','0001-00-00 00:00:00'); -SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; -EXPLAIN SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; -drop table t1; create table t1 (a datetime not null, b datetime not null); insert into t1 values (now(), now()); insert into t1 values (now(), now()); diff --git a/mysql-test/t/ctype_latin1_de.test b/mysql-test/t/ctype_latin1_de.test index e829005a229..4b96f5f5867 100644 --- a/mysql-test/t/ctype_latin1_de.test +++ b/mysql-test/t/ctype_latin1_de.test @@ -2,13 +2,13 @@ # Test latin_de character set # drop table if exists t1; -create table t1 (a char (20) not null, b int not null auto_increment, index (a,b),index(b)); +create table t1 (a char (20) not null, b int not null auto_increment, index (a,b)); insert into t1 (a) values ('ä'),('ac'),('ae'),('ad'),('Äc'),('aeb'); insert into t1 (a) values ('üc'),('uc'),('ue'),('ud'),('Ü'),('ueb'),('uf'); insert into t1 (a) values ('ö'),('oc'),('Öa'),('oe'),('od'),('Öc'),('oeb'); insert into t1 (a) values ('s'),('ss'),('ß'),('ßb'),('ssa'),('ssc'),('ßa'); insert into t1 (a) values ('eä'),('uü'),('öo'),('ää'),('ääa'),('aeae'); -insert into t1 (a) values ('q'),('a'),('u'),('o'),('é'),('É'); +insert into t1 (a) values ('q'),('a'),('u'),('o'),('é'),('É'),('a'); select a,b from t1 order by a,b; select a,b from t1 order by upper(a),b; select a from t1 order by a desc; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index d9b75fca362..89cc2a57b30 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -6,8 +6,6 @@ # Simple select test # -use test; - drop table if exists t1,t2,t3,t4; CREATE TABLE t1 ( diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 6e055f57c83..749a3eba5e4 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -1021,7 +1021,7 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, { int error; uint i,j,recpos,minpos,fieldpos,temp_length,length; - bool found_auto_increment=0, found_real_auto_increment=0; + bool found_real_auto_increment=0; enum ha_base_keytype type; char buff[FN_REFLEN]; KEY *pos; @@ -1091,12 +1091,6 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, keydef[i].seg[j].null_bit=0; keydef[i].seg[j].null_pos=0; } - if (field->flags & AUTO_INCREMENT_FLAG && !found_auto_increment) - { - keydef[i].flag|=HA_AUTO_KEY; - found_auto_increment=1; - found_real_auto_increment=(j==0); - } if (field->type() == FIELD_TYPE_BLOB) { keydef[i].seg[j].flag|=HA_BLOB_PART; @@ -1108,6 +1102,12 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, keyseg+=pos->key_parts; } + if (table_arg->found_next_number_field) + { + keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY; + found_real_auto_increment= table_arg->next_number_key_offset == 0; + } + recpos=0; recinfo_pos=recinfo; while (recpos < (uint) table_arg->reclength) { From 5776261a3e49cef823823341cb8b8bea7b2cba16 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 11:55:07 +0100 Subject: [PATCH 086/267] missing grant check added --- sql/sql_parse.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6aa9640a579..6dac0a82d26 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1957,6 +1957,8 @@ mysql_execute_command(void) case SQLCOM_TRUNCATE: if (check_access(thd,DELETE_ACL,tables->db,&tables->grant.privilege)) goto error; /* purecov: inspected */ + if (grant_option && check_grant(thd,DELETE_ACL,tables)) + goto error; /* Don't allow this within a transaction because we want to use re-generate table From 157b36675eccce990a816532153bb2eb61aa139c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 14:40:37 +0200 Subject: [PATCH 087/267] Fixed an unlikely optimizer bug that casued a core dump in pt_range.cc::sel_cmp() mysql-test/r/join.result: Test of range optimizer bug mysql-test/t/join.test: Test of range optimizer bug sql/sql_rename.cc: Added missing DEBUG_PRINT() --- mysql-test/r/join.result | 4 ++++ mysql-test/t/join.test | 24 ++++++++++++++++++++++++ sql/opt_range.cc | 12 ++++++++---- sql/sql_rename.cc | 4 ++-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result index 39331fc68e4..0c575d7505e 100644 --- a/mysql-test/r/join.result +++ b/mysql-test/r/join.result @@ -37,3 +37,7 @@ COUNT(t1.Title) t1_id t2_id type cost_unit min_value max_value t3_id item_id id name 22 1 Percent Cost 100 -1 6 291 1 s1 23 1 Percent Cost 100 -1 21 291 1 s1 +rate_code base_rate +cust 20 +rate_code base_rate +cust 20 diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test index d31db5c4837..6a022e690f2 100644 --- a/mysql-test/t/join.test +++ b/mysql-test/t/join.test @@ -219,3 +219,27 @@ CREATE TABLE t2 ( INSERT INTO t2 VALUES (1,'s1'),(2,'s2'),(3,'s3'),(4,'s4'),(5,'s5'); select t1.*, t2.* from t1, t2 where t2.id=t1.t2_id limit 2; drop table t1,t2; + +# +# Bug in range optimiser with MAYBE_KEY +# + +CREATE TABLE t1 ( + siteid varchar(25) NOT NULL default '', + emp_id varchar(30) NOT NULL default '', + rate_code varchar(10) default NULL, + UNIQUE KEY site_emp (siteid,emp_id), + KEY siteid (siteid) +) TYPE=MyISAM; +INSERT INTO t1 VALUES ('rivercats','psmith','cust'), ('rivercats','KWalker','cust'); +CREATE TABLE t2 ( + siteid varchar(25) NOT NULL default '', + rate_code varchar(10) NOT NULL default '', + base_rate float NOT NULL default '0', + PRIMARY KEY (siteid,rate_code), + FULLTEXT KEY rate_code (rate_code) +) TYPE=MyISAM; +INSERT INTO t2 VALUES ('rivercats','cust',20); +SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE emp.emp_id = 'psmith' AND lr.siteid = 'rivercats'; +SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE lr.siteid = 'rivercats' AND emp.emp_id = 'psmith'; +drop table t1,t2; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index b2128c3eb4a..931093d548a 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1341,7 +1341,8 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) } if (((clone_flag & CLONE_KEY2_MAYBE) && - !(clone_flag & CLONE_KEY1_MAYBE)) || + !(clone_flag & CLONE_KEY1_MAYBE) && + key2->type != SEL_ARG::MAYBE_KEY) || key1->type == SEL_ARG::MAYBE_KEY) { // Put simple key in key2 swap(SEL_ARG *,key1,key2); @@ -1369,7 +1370,10 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) { key1->maybe_smaller(); if (key2->next_key_part) + { + key1->use_count--; // Incremented in and_all_keys return and_all_keys(key1,key2,clone_flag); + } key2->use_count--; // Key2 doesn't have a tree } return key1; @@ -2068,7 +2072,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) { if (this == root && use_count != 1) { - sql_print_error("Use_count: Wrong count %lu for root",use_count); + sql_print_error("Note: Use_count: Wrong count %lu for root",use_count); return; } if (this->type != SEL_ARG::KEY_RANGE) @@ -2082,7 +2086,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) ulong count=count_key_part_usage(root,pos->next_key_part); if (count > pos->next_key_part->use_count) { - sql_print_error("Use_count: Wrong count for key at %lx, %lu should be %lu", + sql_print_error("Note: Use_count: Wrong count for key at %lx, %lu should be %lu", pos,pos->next_key_part->use_count,count); return; } @@ -2090,7 +2094,7 @@ void SEL_ARG::test_use_count(SEL_ARG *root) } } if (e_count != elements) - sql_print_error("Wrong use count: %u for tree at %lx", e_count, + sql_print_error("Warning: Wrong use count: %u for tree at %lx", e_count, (gptr) this); } diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc index 9eee8ccf7ac..c4af966d145 100644 --- a/sql/sql_rename.cc +++ b/sql/sql_rename.cc @@ -122,7 +122,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) if (!access(name,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR,MYF(0),name); - return ren_table; // This can't be skipped + DBUG_RETURN(ren_table); // This can't be skipped } sprintf(name,"%s/%s/%s%s",mysql_data_home, ren_table->db,ren_table->real_name, @@ -131,7 +131,7 @@ rename_tables(THD *thd, TABLE_LIST *table_list, bool skip_error) { my_error(ER_FILE_NOT_FOUND, MYF(0), name, my_errno); if (!skip_error) - return ren_table; + DBUG_RETURN(ren_table); } else if (mysql_rename_table(table_type, ren_table->db, ren_table->real_name, From 20bb527b80ddf1db92ef409b8857c9038af2d7ac Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 15:22:05 +0100 Subject: [PATCH 088/267] error messages translated by Egor --- sql/share/russian/errmsg.txt | 445 +++++++++++++++++------------------ 1 file changed, 222 insertions(+), 223 deletions(-) diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index ef3fb4e87e5..8858090e8db 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -1,243 +1,242 @@ -/* Copyright Abandoned 1998. +/* Copyright 2003 MySQL AB; + Translation done in 2003 by Egor Egorov; Ensita.NET, http://www.ensita.net/ This file is public domain and comes with NO WARRANTY of any kind */ -/* Primary translation was done by "Timur I. Bakeyev" */ -/* Additional translation by "Alexander I. Barkov" */ /* charset: KOI8-R */ "hashchk", "isamchk", "îåô", "äá", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÆÁÊÌ '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÔÁÂÌÉÃÕ '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÂÁÚÕ '%-.64s'. ïÛÉÂËÁ: %d", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÂÁÚÕ '%-.64s'. âÁÚÁ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", -"îÅ ÍÏÇÕ ÕÄÁÌÉÔØ ÂÁÚÕ '%-.64s'. âÁÚÁ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ", -"ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ ÂÁÚÙ (îÅ ÍÏÇÕ ÕÄÁÌÉÔØ '%-.64s', ÏÛÉÂËÁ %d)", -"ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ ÂÁÚÙ (îÅ ÍÏÇÕ ÕÄÁÌÉÔØ ËÁÔÁÌÏÇ '%-.64s', ÏÛÉÂËÁ %d)", -"ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÐÒÏÞÅÓÔØ ÚÁÐÉÓØ × ÓÉÓÔÅÍÎÏÊ ÔÁÂÌÉÃÅ", -"îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÔÁÔÕÓ '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÂÌÏËÉÒÏ×ÁÔØ ÆÁÊÌ (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ: '%-.64s'. (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÎÁÊÔÉ ÆÁÊÌ: '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÐÒÏÞÅÓÔØ ËÁÔÁÌÏÇ '%-.64s' (ïÛÉÂËÁ: %d)", -"îÅ ÍÏÇÕ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ '%-.64s' (ïÛÉÂËÁ: %d)", -"úÁÐÉÓØ ÂÙÌÁ ÉÚÍÅÎÅÎÁ ÓÏ ×ÒÅÍÅÎÉ ÐÏÓÌÅÄÎÅÇÏ ÞÔÅÎÉÑ ÔÁÂÌÉÃÙ '%-.64s'", -"ðÅÒÅÐÏÌÎÅÎ ÄÉÓË (%-.64s). íÏÖÅÔ, ËÔÏ-ÎÉÂÕÄØ ÕÂÅÒÅÔ ÚÁ ÓÏÂÏÊ ÍÕÓÏÒ....", -"îÅ ÍÏÇÕ ÐÒÏÉÚ×ÅÓÔÉ ÚÁÐÉÓØ, ËÌÀÞ ÄÕÂÌÉÒÕÅÔÓÑ × ÔÁÂÌÉÃÅ '%-.64s'", -"ïÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ '%-.64s' (ïÛÉÂËÁ: %d)", -"ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ '%-.64s' (ïÛÉÂËÁ: %d)", -"ïÛÉÂËÁ ÐÒÉ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÉ '%-.64s' × '%-.64s' (ïÛÉÂËÁ: %d)", -"ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ '%-.64s' (ïÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÆÁÊÌ '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÔÁÂÌÉÃÕ '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÂÁÚÕ ÄÁÎÎÙÈ '%-.64s'. (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÂÁÚÕ ÄÁÎÎÙÈ '%-.64s'. âÁÚÁ ÄÁÎÎÙÈ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", +"îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÂÁÚÕ ÄÁÎÎÙÈ '%-.64s'. ôÁËÏÊ ÂÁÚÙ ÄÁÎÎÙÈ ÎÅÔ", +"ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ ÂÁÚÙ ÄÁÎÎÙÈ (ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ '%-.64s', ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÂÁÚÕ ÄÁÎÎÙÈ (ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ËÁÔÁÌÏÇ '%-.64s', ÏÛÉÂËÁ: %d)", +"ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÚÁÐÉÓØ × ÓÉÓÔÅÍÎÏÊ ÔÁÂÌÉÃÅ", +"îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÓÔÁÔÕÓÎÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÐÏÓÔÁ×ÉÔØ ÂÌÏËÉÒÏ×ËÕ ÎÁ ÆÁÊÌÅ (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ: '%-.64s'. (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÆÁÊÌ: '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ËÁÔÁÌÏÇ '%-.64s' (ÏÛÉÂËÁ: %d)", +"îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ '%-.64s' (ÏÛÉÂËÁ: %d)", +"úÁÐÉÓØ ÉÚÍÅÎÉÌÁÓØ Ó ÍÏÍÅÎÔÁ ÐÏÓÌÅÄÎÅÊ ×ÙÂÏÒËÉ × ÔÁÂÌÉÃÅ '%-.64s'", +"äÉÓË ÚÁÐÏÌÎÅÎ. (%s). ïÖÉÄÁÅÍ, ÐÏËÁ ËÔÏ-ÔÏ ÎÅ ÕÂÅÒÅÔ ÐÏÓÌÅ ÓÅÂÑ ÍÕÓÏÒ....", +"îÅ×ÏÚÍÏÖÎÏ ÐÒÏÉÚ×ÅÓÔÉ ÚÁÐÉÓØ, ÄÕÂÌÉÒÕÀÝÉÊÓÑ ËÌÀÞ × ÔÁÂÌÉÃÅ '%-.64s'", +"ïÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ '%-.64s' (ÏÛÉÂËÁ: %d)", +"ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ '%-.64s' (ÏÛÉÂËÁ: %d)", +"ïÛÉÂËÁ ÐÒÉ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÉ '%-.64s' × '%-.64s' (ÏÛÉÂËÁ: %d)", +"ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ '%-.64s' (ÏÛÉÂËÁ: %d)", "'%-.64s' ÚÁÂÌÏËÉÒÏ×ÁÎ ÄÌÑ ÉÚÍÅÎÅÎÉÊ", "óÏÒÔÉÒÏ×ËÁ ÐÒÅÒ×ÁÎÁ", -"View '%-.64s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÄÌÑ '%-.64s'", -"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d ÏÔ ÄÅÓËÒÉÐÔÏÒÁ ÔÁÂÌÉÃÙ", -"äÅÓËÒÉÐÔÏÒ ÔÁÂÌÉÃÙ '%-.64s' ÎÅ ÉÍÅÅÔ ÔÁËÏÇÏ Ó×ÏÊÓÔ×Á", -"îÅ ÍÏÇÕ ÎÁÊÔÉ ÚÁÐÉÓØ × '%-.64s'", -"îÅ×ÅÒÎÁÑ ÉÎÆÏÒÍÁÃÉÑ × ÆÁÊÌÅ: '%-.64s'", -"îÅ×ÅÒÎÙÊ ÉÎÄÅËÓÎÙÊ ÆÁÊÌ ÄÌÑ ÔÁÂÌÉÃÙ: '%-.64s'. ðÏÐÒÏÂÕÊÔÅ ÅÇÏ ×ÏÓÓÏÚÄÁÔØ", -"óÔÁÒÙÊ ÉÎÄÅËÓÎÙÊ ÆÁÊÌ ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s'; òÅÉÎÄÅËÓÉÒÕÊÔÅ ÅÅ!", -"'%-.64s' ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ", -"îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ. ðÅÒÅÇÒÕÚÉÔÅ ÓÅÒ×ÅÒ É ÐÏÐÒÏÂÕÊÔÅ ÓÎÏ×Á (ÎÕÖÎÏ %d ÂÁÊÔ)", -"îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ ÄÌÑ ÓÏÒÔÉÒÏ×ËÉ. õ×ÅÌÉÞØÔÅ ÒÁÚÍÅÒ ÂÕÆÅÒÁ ÓÏÒÔÉÒÏ×ËÉ Õ ÓÅÒ×ÅÒÁ", -"îÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ '%-.64s' (ïÛÉÂËÁ: %d)", +"ðÒÅÄÓÔÁ×ÌÅÎÉÅ '%-.64s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÄÌÑ '%-.64s'", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d ÏÔ ÏÂÒÁÂÏÔÞÉËÁ ÔÁÂÌÉÃ", +"ïÂÒÁÂÏÔÞÉË ÔÁÂÌÉÃÙ '%-.64s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÜÔÕ ×ÏÚÍÏÖÎÏÓÔØ", +"îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÚÁÐÉÓØ × '%-.64s'", +"îÅËÏÒÒÅËÔÎÁÑ ÉÎÆÏÒÍÁÃÉÑ × ÆÁÊÌÅ '%-.64s'", +"îÅËÏÒÒÅËÔÎÙÊ ÉÎÄÅËÓÎÙÊ ÆÁÊÌ ÄÌÑ ÔÁÂÌÉÃÙ: '%-.64s'. ðÏÐÒÏÂÕÊÔÅ ×ÏÓÓÔÁÎÏ×ÉÔØ ÅÇÏ", +"óÔÁÒÙÊ ÉÎÄÅËÓÎÙÊ ÆÁÊÌ ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s'; ÏÔÒÅÍÏÎÔÉÒÕÊÔÅ ÅÇÏ!", +"ôÁÂÌÉÃÁ '%-.64s' ÐÒÅÄÎÁÚÎÁÞÅÎÁ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ", +"îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ. ðÅÒÅÚÁÐÕÓÔÉÔÅ ÓÅÒ×ÅÒ É ÐÏÐÒÏÂÕÊÔÅ ÅÝÅ ÒÁÚ (ÎÕÖÎÏ %d ÂÁÊÔ)", +"îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÓÏÒÔÉÒÏ×ËÉ. õ×ÅÌÉÞØÔÅ ÒÁÚÍÅÒ ÂÕÆÅÒÁ ÓÏÒÔÉÒÏ×ËÉ ÎÁ ÓÅÒ×ÅÒÅ", +"îÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ '%-.64s' (ÏÛÉÂËÁ: %d)", "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÅÄÉÎÅÎÉÊ", -"îÅÄÏÓÔÁÔÏË ÍÅÓÔÁ/ÐÁÍÑÔÉ ÄÌÑ ÎÉÔÉ", -"îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÉÍÑ ÈÏÓÔÁ ÐÏ ÷ÁÛÅÍÕ ÁÄÒÅÓÕ", -"îÅËÏÒÒÅËÔÎÁÑ ÉÎÉÃÉÁÌÉÚÁÃÉÑ Ó×ÑÚÉ", -"äÏÓÔÕÐ ÚÁËÒÙÔ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ: '%-.32s@%-.64s' Ë ÂÁÚÅ '%-.64s'", -"äÏÓÔÕÐ ÚÁËÒÙÔ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ: '%-.32s@%-.64s' (âÙÌ ÉÓÐÏÌØÚÏ×ÁÎ ÐÁÒÏÌØ: %-.64s)", -"îÅ ×ÙÂÒÁÎÁ ÂÁÚÁ", -"îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ", -"óÔÏÌÂÅà '%-.64s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ÐÕÓÔÙÍ/ÎÕÌÅ×ÙÍ", -"îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ '%-.64s'", -"ôÁÂÌÉÃÁ '%-.64s' ÕÖÅ ÅÓÔØ", +"îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ; ÕÄÏÓÔÏ×ÅÒØÔÅÓØ, ÞÔÏ mysqld ÉÌÉ ËÁËÏÊ-ÌÉÂÏ ÄÒÕÇÏÊ ÐÒÏÃÅÓÓ ÎÅ ÚÁÎÉÍÁÅÔ ×ÓÀ ÄÏÓÔÕÐÎÕÀ ÐÁÍÑÔØ. åÓÌÉ ÎÅÔ, ÔÏ ×Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ulimit, ÞÔÏÂÙ ×ÙÄÅÌÉÔØ ÄÌÑ mysqld ÂÏÌØÛÅ ÐÁÍÑÔÉ, ÉÌÉ Õ×ÅÌÉÞÉÔØ ÏÂßÅÍ ÆÁÊÌÁ ÐÏÄËÁÞËÉ", +"îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÉÍÑ ÈÏÓÔÁ ÄÌÑ ×ÁÛÅÇÏ ÁÄÒÅÓÁ", +"îÅËÏÒÒÅËÔÎÏÅ ÐÒÉ×ÅÔÓÔ×ÉÅ", +"äÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s@%-.64s' ÄÏÓÔÕÐ Ë ÂÁÚÅ ÄÁÎÎÙÈ '%-.64s' ÚÁËÒÙÔ", +"äÏÓÔÕÐ ÚÁËÒÙÔ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s@%-.64s' (ÂÙÌ ÉÓÐÏÌØÚÏ×ÁÎ ÐÁÒÏÌØ: %s)", +"âÁÚÁ ÄÁÎÎÙÈ ÎÅ ×ÙÂÒÁÎÁ", +"îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ ËÏÍÍÕÎÉËÁÃÉÏÎÎÏÇÏ ÐÒÏÔÏËÏÌÁ", +"óÔÏÌÂÅà '%-.64s' ÎÅ ÍÏÖÅÔ ÐÒÉÎÉÍÁÔØ ×ÅÌÉÞÉÎÕ NULL", +"îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ '%-.64s'", +"ôÁÂÌÉÃÁ '%-.64s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", "îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.64s'", -"ðÏÌÅ '%-.64s' × %-.64s ÎÅ ÏÄÎÏÚÎÁÞÎÏ", -"ðÒÏÉÓÈÏÄÉÔ ×ÙËÌÀÞÅÎÉÅ ÓÅÒ×ÅÒÁ", -"îÅÉÚ×ÅÓÔÎÏÅ ÐÏÌÅ '%-.64s' × %-.64s", -" '%-.64s' ÉÓÐÏÌØÚÏ×ÁÎÏ ×ÎÅ ×ÙÒÁÖÅÎÉÑ GROUP BY", -"îÅ ÍÏÇÕ ÐÒÏÉÚ×ÅÓÔÉ ÇÒÕÐÐÉÒÏ×ËÕ ÐÏ '%-.64s'", -"÷ ÏÄÎÏÍ ×ÙÒÁÖÅÎÉÉ ÓÏÄÅÒÖÁÔØÓÑ É ÉÍÅÎÁ ÐÏÌÅÊ, É ÓÕÍÍÉÒÕÀÝÉÅ ÆÕÎËÃÉÉ", -"þÉÓÌÏ ÓÔÏÌÂÃÏ× ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÞÉÓÌÕ ÚÎÁÞÅÎÉÊ", -"óÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ: '%-.64s'", -"äÕÂÌÉÒÏ×ÁÎÎÏÅ ÉÍÑ ÐÏÌÑ '%-.64s'", -"äÕÂÌÉÒÏ×ÁÎÎÏÅ ÉÍÑ ËÌÀÞÁ '%-.64s'", -"ðÏ×ÔÏÒÑÀÝÅÅÓÑ ÚÎÁÞÅÎÉÅ '%-.64s' ÄÌÑ ËÌÀÞÁ %d", -"îÅ×ÅÒÎÙÊ ÓÐÅÃÉÆÉËÁÔÏÒ ÐÏÌÑ: '%-.64s'", -"%-.64s ÏËÏÌÏ '%-.64s', × ÓÔÒÏËÅ %d", -"ðÕÓÔÏÊ ÚÁÐÒÏÓ", -"îÅ ÕÎÉËÁÌØÎÁÑ ÔÁÂÌÉÃÁ/ÐÓÅ×ÄÏÎÉÍ: '%-.64s'", -"îÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ '%-.64s'", -"ðÅÒ×ÉÞÎÙÊ ËÌÀÞ ÏÐÒÅÄÅÌÅÎ ÎÅÓËÏÌØËÏ ÒÁÚ", -"ïÐÒÅÄÅÌÅÎÎÏ ÓÌÉÛËÏÍ ÍÎÏÇÏ ËÌÀÞÅÊ. ÷ÏÚÍÏÖÎÏ ÍÁËÓÉÍÁÌØÎÏ %d ËÌÀÞÅÊ", -"ïÐÒÅÄÅÌÅÎÎÏ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏÓÔÁ×ÌÑÀÝÉÈ ËÌÀÞÁ. ÷ÏÚÍÏÖÎÏ ÍÁËÓÉÍÁÌØÎÏ %d ÓÏÓÔÁ×ÌÑÀÝÉÈ", -"ëÌÀÞ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ. íÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ %d", -"ëÌÀÞÅ×ÏÅ ÐÏÌÅ '%-.64s' ÎÅ ÓÏÄÅÒÖÉÔÓÑ × ÔÁÂÌÉÃÅ", -"ïÂßÅËÔ BLOB '%-.64s' ÎÅ ÍÏÖÅÔ ÐÒÉÓÕÔÓÔ×Ï×ÁÔØ × ÏÐÒÅÄÅÌÅÎÉÉ ËÌÀÞÁ", -"óÌÉÛËÏÍ ×ÅÌÉË ÒÁÚÍÅÒ ÐÏÌÑ '%-.64s' (max = %d). ÷ÏÓÐÏÌØÚÕÊÔÅÓØ ÏÂßÅËÔÏÍ BLOB", -"á×ÔÏÍÁÔÉÞÅÓËÏÅ ÐÏÌÅ ÍÏÖÅÔ ÂÙÔØ ÔÏÌØËÏ ÏÄÎÏ É ÄÏÌÖÎÏ ÂÙÔØ ËÌÀÞÏÍ", -"%-.64s: îÁ Ó×ÑÚÉ!\n", -"%-.64s: îÏÒÍÁÌØÎÏÅ ÚÁ×ÅÒÛÅÎÉÅ\n", -"%-.64s: ðÏÌÕÞÅÎ ÓÉÇÎÁÌ %d. õÍÙ×ÁÀ ÒÕËÉ!\n", -"%-.64s: ïÔËÌÀÞÅÎÉÅ ×ÙÐÏÌÎÅÎÏ\n", -"%-.64s: ðÒÉÎÕÄÉÔÅÌØÎÏÅ ÐÒÅËÒÁÝÅÎÉÅ ÎÉÔÉ %ld ÐÏÌØÚÏ×ÁÔÅÌÑ: '%-.64s'\n", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ IP socket", -"ôÁÂÌÉÃÁ '%-.64s' ÉÍÅÅÔ ÉÎÄÅËÓ, ÎÅ ÓÏ×ÐÁÄÁÀÝÉÊ Ó ÕËÁÚÁÎÎÙÍ × CREATE INDEX. óÏÚÄÁÊÔÅ ÔÁÂÌÉÃÕ ÅÝÅ ÒÁÚ", -"òÁÚÄÅÌÉÔÅÌÉ ÐÏÌÅÊ ÎÅ ÓÏ×ÐÁÄÁÀÔ Ó ÏÖÉÄÁÅÍÙÍÉ. ðÒÏÞÔÉÔÅ ÎÁËÏÎÅà ÉÎÓÔÒÕËÃÉÀ!", -"îÅÌØÚÑ ÓÓÙÌÁÔØÓÑ ÎÁ ÆÉËÓÉÒÏ×ÁÎÎÕÀ ÄÌÉÎÕ ÓÔÒÏËÉ × BLOB. éÓÐÏÌØÚÕÊÔÅ 'fields terminated by'.", -"æÁÊÌ '%-.64s' ÄÏÌÖÅÎ ÂÙÔØ × ËÁÔÁÌÏÇÅ ÂÁÚ ÌÉÂÏ ÄÏÓÔÕÐÅÎ ×ÓÅÍ ÄÌÑ ÞÔÅÎÉÑ", -"æÁÊÌ '%-.64s' ÕÖÅ ÅÓÔØ", +"óÔÏÌÂÅà '%-.64s' × %-.64s ÚÁÄÁÎ ÎÅÏÄÎÏÚÎÁÞÎÏ", +"óÅÒ×ÅÒ ÎÁÈÏÄÉÔÓÑ × ÐÒÏÃÅÓÓÅ ÏÓÔÁÎÏ×ËÉ", +"îÅÉÚ×ÅÓÔÎÙÊ ÓÔÏÌÂÅà '%-.64s' × '%-.64s'", +"'%-.64s' ÎÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ × GROUP BY", +"îÅ×ÏÚÍÏÖÎÏ ÐÒÏÉÚ×ÅÓÔÉ ÇÒÕÐÐÉÒÏ×ËÕ ÐÏ '%-.64s'", +"÷ÙÒÁÖÅÎÉÅ ÓÏÄÅÒÖÉÔ ÇÒÕÐÐÏ×ÙÅ ÆÕÎËÃÉÉ É ÓÔÏÌÂÃÙ, ÎÏ ÎÅ ×ËÌÀÞÁÅÔ GROUP BY. á ËÁË ×Ù ÕÍÕÄÒÉÌÉÓØ ÐÏÌÕÞÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ?", +"ëÏÌÉÞÅÓÔ×Ï ÓÔÏÌÂÃÏ× ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ËÏÌÉÞÅÓÔ×ÏÍ ÚÎÁÞÅÎÉÊ", +"óÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ '%-.100s'", +"äÕÂÌÉÒÕÀÝÅÅÓÑ ÉÍÑ ÓÔÏÌÂÃÁ '%-.64s'", +"äÕÂÌÉÒÕÀÝÅÅÓÑ ÉÍÑ ËÌÀÞÁ '%-.64s'", +"äÕÂÌÉÒÕÀÝÁÑÓÑ ÚÁÐÉÓØ '%-.64s' ÐÏ ËÌÀÞÕ %d", +"îÅËÏÒÒÅËÔÎÙÊ ÏÐÒÅÄÅÌÉÔÅÌØ ÓÔÏÌÂÃÁ ÄÌÑ ÓÔÏÌÂÃÁ '%-.64s'", +"%s ÏËÏÌÏ '%-.80s' ÎÁ ÓÔÒÏËÅ %d", +"úÁÐÒÏÓ ÏËÁÚÁÌÓÑ ÐÕÓÔÙÍ", +"ðÏ×ÔÏÒÑÀÝÁÑÓÑ ÔÁÂÌÉÃÁ/ÐÓÅ×ÄÏÎÉÍ '%-.64s'", +"îÅËÏÒÒÅËÔÎÏÅ ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ '%-.64s'", +"õËÁÚÁÎÏ ÎÅÓËÏÌØËÏ ÐÅÒ×ÉÞÎÙÈ ËÌÀÞÅÊ", +"õËÁÚÁÎÏ ÓÌÉÛËÏÍ ÍÎÏÇÏ ËÌÀÞÅÊ. òÁÚÒÅÛÁÅÔÓÑ ÕËÁÚÙ×ÁÔØ ÎÅ ÂÏÌÅÅ %d ËÌÀÞÅÊ", +"õËÁÚÁÎÏ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÞÁÓÔÅÊ ÓÏÓÔÁ×ÎÏÇÏ ËÌÀÞÁ. òÁÚÒÅÛÁÅÔÓÑ ÕËÁÚÙ×ÁÔØ ÎÅ ÂÏÌÅÅ %d ÞÁÓÔÅÊ", +"õËÁÚÁÎ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ ËÌÀÞ. íÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ËÌÀÞÁ ÓÏÓÔÁ×ÌÑÅÔ %d", +"ëÌÀÞÅ×ÏÊ ÓÔÏÌÂÅà '%-.64s' × ÔÁÂÌÉÃÅ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ", +"óÔÏÌÂÅà ÔÉÐÁ BLOB '%-.64s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎ ËÁË ÚÎÁÞÅÎÉÅ ËÌÀÞÁ × ÔÁÂÌÉÃÅ ÔÁËÏÇÏ ÔÉÐÁ", +"óÌÉÛËÏÍ ÂÏÌØÛÁÑ ÄÌÉÎÁ ÓÔÏÌÂÃÁ '%-.64s' (ÍÁËÓÉÍÕÍ = %d). éÓÐÏÌØÚÕÊÔÅ ÔÉÐ BLOB ×ÍÅÓÔÏ ÔÅËÕÝÅÇÏ", +"îÅËÏÒÒÅËÔÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÔÁÂÌÉÃÙ: ÍÏÖÅÔ ÓÕÝÅÓÔ×Ï×ÁÔØ ÔÏÌØËÏ ÏÄÉÎ Á×ÔÏÉÎËÒÅÍÅÎÔÎÙÊ ÓÔÏÌÂÅÃ, É ÏÎ ÄÏÌÖÅÎ ÂÙÔØ ÏÐÒÅÄÅÌÅÎ ËÁË ËÌÀÞ", +"%s: çÏÔÏ× ÐÒÉÎÉÍÁÔØ ÓÏÅÄÉÎÅÎÉÑ.\n÷ÅÒÓÉÑ: '%s' ÓÏËÅÔ: '%s' ÐÏÒÔ: %d\n", +"%s: ëÏÒÒÅËÔÎÁÑ ÏÓÔÁÎÏ×ËÁ\n", +"%s: ðÏÌÕÞÅÎ ÓÉÇÎÁÌ %d. ðÒÅËÒÁÝÁÅÍ!\n", +"%s: ïÓÔÁÎÏ×ËÁ ÚÁ×ÅÒÛÅÎÁ\n", +"%s: ðÒÉÎÕÄÉÔÅÌØÎÏ ÚÁËÒÙ×ÁÅÍ ÐÏÔÏË %ld ÐÏÌØÚÏ×ÁÔÅÌÑ: '%-.32s'\n", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ IP-ÓÏËÅÔ", +"÷ ÔÁÂÌÉÃÅ '%-.64s' ÎÅÔ ÔÁËÏÇÏ ÉÎÄÅËÓÁ, ËÁË × CREATE INDEX. óÏÚÄÁÊÔÅ ÔÁÂÌÉÃÕ ÚÁÎÏ×Ï", +"áÒÇÕÍÅÎÔ ÒÁÚÄÅÌÉÔÅÌÑ ÐÏÌÅÊ - ÎÅ ÔÏÔ, ËÏÔÏÒÙÊ ÏÖÉÄÁÌÓÑ. ïÂÒÁÝÁÊÔÅÓØ Ë ÄÏËÕÍÅÎÔÁÃÉÉ", +"æÉËÓÉÒÏ×ÁÎÎÙÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ Ó ÐÏÌÑÍÉ ÔÉÐÁ BLOB ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÌØÚÑ. ðÒÉÍÅÎÑÊÔÅ 'fields terminated by'.", +"æÁÊÌ '%-.64s' ÄÏÌÖÅÎ ÎÁÈÏÄÉÔØÓÑ × ÔÏÍ ÖÅ ËÁÔÁÌÏÇÅ, ÞÔÏ É ÂÁÚÁ ÄÁÎÎÙÈ, ÉÌÉ ÂÙÔØ ÏÂÝÅÄÏÓÔÕÐÎÙÍ ÄÌÑ ÞÔÅÎÉÑ", +"æÁÊÌ '%-.80s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", "úÁÐÉÓÅÊ: %ld õÄÁÌÅÎÏ: %ld ðÒÏÐÕÝÅÎÏ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld", -"úÁÐÉÓÅÊ: %ld äÕÂÌÅÊ: %ld", -"îÅ×ÅÒÎÁÑ ÓÏÓÔÁ×ÌÑÀÝÁÑ ËÌÀÞÁ. äÁÎÎÁÑ ÓÏÓÔÁ×ÌÑÀÝÁÑ ÌÉÂÏ ÎÅ ÓÔÒÏËÏ×ÁÑ, ÌÉÂÏ ÂÏÌØÛÅ, ÞÅÍ ÍÏÖÅÔ ÂÙÔØ", -"îÅÌØÚÑ ÕÄÁÌÉÔØ ×ÓÅ ÐÏÌÑ ÞÅÒÅÚ ALTER TABLE. ÷ÏÓÐÏÌØÚÕÊÔÅÓØ DROP TABLE", -"îÅ ÍÏÇÕ ÓÂÒÏÓÉÔØ '%-.64s'. ðÒÏ×ÅÒØÔÅ, ÞÔÏ ÜÔÏ ÐÏÌÅ/ËÌÀÞ ÓÕÝÅÓÔ×ÕÀÔ", -"úÁÐÉÓÅÊ: %ld äÕÂÌÅÊ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld", -"INSERT TABLE '%-.64s' ÎÅ ÒÁÚÒÅÛÅÎÏ × ÓÐÉÓËÅ FROM TABLE", -"îÅÉÚ×ÅÓÔÎÁÑ ÎÉÔØ: %lu", -"÷Ù ÎÅ ×ÌÁÄÅÌÅà ÎÉÔÉ %lu", -"ôÁÂÌÉÃÙ ÎÅ ÉÓÐÏÌØÚÏ×ÁÎÙ", -"ïÞÅÎØ ÍÎÏÇÏ ÓÔÒÏË ÄÌÑ ÐÏÌÑ %-.64s É SET", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÕÎÉËÁÌØÎÙÊ ÌÏÇ-ÆÁÊÌ %-.64s.(1-999)\n", -"ôÁÂÌÉÃÁ '%-.64s' ÚÁÂÌÏËÉÒÏ×ÁÎÁ READ É ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÂÎÏ×ÌÅÎÁ", -"ôÁÂÌÉÃÁ '%-.64s' ÎÅ ÂÙÌÁ ÂÌÏËÉÒÏ×ÁÎÁ LOCK TABLES", -"ïÂßÅËÔ BLOB '%-.64s' ÎÅ ÍÏÖÅÔ ÉÍÅÅÔ ÚÎÁÞÅÎÉÊ ÐÏ ÕÍÏÌÞÁÎÉÀ", -"îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ ÂÁÚÙ '%-.64s'", -"îÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ ÔÁÂÌÉÃÙ '%-.64s'", -"SELECT ÏÂÒÁÂÏÔÁÅÔ ÏÞÅÎØ ÍÎÏÇÏ ÚÁÐÉÓÅÊ É ÜÔÏ îáäïìçï. ðÒÏ×ÅÒØÔÅ ÕÓÌÏ×ÉÅ WHERE É ×ÏÓÐÏÌØÚÕÊÔÅÓØ SQL_OPTION BIG_SELECTS=1 ÅÓÌÉ SELECT ËÏÒÒÅËÔÅÎ", +"úÁÐÉÓÅÊ: %ld äÕÂÌÉËÁÔÏ×: %ld", +"îÅËÏÒÒÅËÔÎÁÑ ÞÁÓÔØ ËÌÀÞÁ. éÓÐÏÌØÚÕÅÍÁÑ ÞÁÓÔØ ËÌÀÞÁ ÎÅ Ñ×ÌÑÅÔÓÑ ÓÔÒÏËÏÊ, ÕËÁÚÁÎÎÁÑ ÄÌÉÎÁ ÂÏÌØÛÅ, ÞÅÍ ÄÌÉÎÁ ÞÁÓÔÉ ËÌÀÞÁ, ÉÌÉ ÏÂÒÁÂÏÔÞÉË ÔÁÂÌÉÃÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÕÎÉËÁÌØÎÙÅ ÞÁÓÔÉ ËÌÀÞÁ", +"îÅÌØÚÑ ÕÄÁÌÉÔØ ×ÓÅ ÓÔÏÌÂÃÙ Ó ÐÏÍÏÝØÀ ALTER TABLE. éÓÐÏÌØÚÕÊÔÅ DROP TABLE", +"îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ (DROP) '%-.64s'. õÂÅÄÉÔÅÓØ ÞÔÏ ÓÔÏÌÂÅÃ/ËÌÀÞ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÓÕÝÅÓÔ×ÕÅÔ", +"úÁÐÉÓÅÊ: %ld äÕÂÌÉËÁÔÏ×: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld", +"îÅ ÄÏÐÕÓËÁÅÔÓÑ ÕËÁÚÁÎÉÅ ÔÁÂÌÉÃÙ '%-.64s' × ÓÐÉÓËÅ ÔÁÂÌÉà FROM ÄÌÑ ×ÎÅÓÅÎÉÑ × ÎÅÅ ÉÚÍÅÎÅÎÉÊ", +"îÅÉÚ×ÅÓÔÎÙÊ ÎÏÍÅÒ ÐÏÔÏËÁ: %lu", +"÷Ù ÎÅ Ñ×ÌÑÅÔÅÓØ ×ÌÁÄÅÌØÃÅÍ ÐÏÔÏËÁ %lu", +"îÉËÁËÉÅ ÔÁÂÌÉÃÙ ÎÅ ÉÓÐÏÌØÚÏ×ÁÎÙ", +"óÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÓÔÏÌÂÃÁ %-.64s × SET", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÕÎÉËÁÌØÎÏÅ ÉÍÑ ÆÁÊÌÁ ÖÕÒÎÁÌÁ %-.64s.(1-999)\n", +"ôÁÂÌÉÃÁ '%-.64s' ÚÁÂÌÏËÉÒÏ×ÁÎÁ ÕÒÏ×ÎÅÍ READ lock É ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÁ", +"ôÁÂÌÉÃÁ '%-.64s' ÎÅ ÂÙÌÁ ÚÁÂÌÏËÉÒÏ×ÁÎÁ Ó ÐÏÍÏÝØÀ LOCK TABLES", +"îÅ×ÏÚÍÏÖÎÏ ÕËÁÚÙ×ÁÔØ ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ ÓÔÏÌÂÃÁ BLOB '%-.64s'", +"îÅËÏÒÒÅËÔÎÏÅ ÉÍÑ ÂÁÚÙ ÄÁÎÎÙÈ '%-.100s'", +"îÅËÏÒÒÅËÔÎÏÅ ÉÍÑ ÔÁÂÌÉÃÙ '%-.100s'", +"äÌÑ ÔÁËÏÊ ×ÙÂÏÒËÉ SELECT ÄÏÌÖÅÎ ÂÕÄÅÔ ÐÒÏÓÍÏÔÒÅÔØ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÁÐÉÓÅÊ É, ×ÉÄÉÍÏ, ÜÔÏ ÚÁÊÍÅÔ ÏÞÅÎØ ÍÎÏÇÏ ×ÒÅÍÅÎÉ. ðÒÏ×ÅÒØÔÅ ×ÁÛÅ ÕËÁÚÁÎÉÅ WHERE, É, ÅÓÌÉ × ÎÅÍ ×ÓÅ × ÐÏÒÑÄËÅ, ÕËÁÖÉÔÅ SET OPTION SQL_BIG_SELECTS=1", "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ", -"îÅÉÚ×ÅÓÔÎÁÑ ÐÒÏÃÅÄÕÒÁ %-.64s", -"îÅ×ÅÒÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÐÁÒÁÍÅÔÒÏ× × ×ÙÚÏ×Å %-.64s", -"îÅ×ÅÒÎÙÅ ÐÁÒÁÍÅÔÒÙ × ÐÒÏÃÅÄÕÒÅ %-.64s", -"îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.64s' × %-.64s", -"ðÏÌÅ '%-.64s' ÏÂßÑ×ÌÅÎÎÏ Ä×ÁÖÄÙ", -"îÅ×ÅÒÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÇÒÕÐÐÏ×ÏÊ ÆÕÎËÃÉÉ", -"ôÁÂÌÉÃÁ '%-.64s' ÉÓÐÏÌØÚÕÅÔ ÒÁÓÛÉÒÅÎÉÅ, ÎÅ ÓÕÝÅÓÔ×ÕÀÝÅÅ × ÄÁÎÎÏÊ ×ÅÒÓÉÉ MySQL", -"÷ ÔÁÂÌÉÃÅ ÄÏÌÖÎÏ ÂÙÔØ ÈÏÔÑ ÂÙ ÏÄÎÏ ÐÏÌÅ", +"îÅÉÚ×ÅÓÔÎÁÑ ÐÒÏÃÅÄÕÒÁ '%-.64s'", +"îÅËÏÒÒÅËÔÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÐÁÒÁÍÅÔÒÏ× ÄÌÑ ÐÒÏÃÅÄÕÒÙ '%-.64s'", +"îÅËÏÒÒÅËÔÎÙÅ ÐÁÒÁÍÅÔÒÙ ÄÌÑ ÐÒÏÃÅÄÕÒÙ '%-.64s'", +"îÅÉÚ×ÅÓÔÎÁÑ ÔÁÂÌÉÃÁ '%-.64s' × %-.32s", +"óÔÏÌÂÅà '%-.64s' ÕËÁÚÁÎ Ä×ÁÖÄÙ", +"îÅÐÒÁ×ÉÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÇÒÕÐÐÏ×ÙÈ ÆÕÎËÃÉÊ", +"÷ ÔÁÂÌÉÃÅ '%-.64s' ÉÓÐÏÌØÚÕÀÔÓÑ ×ÏÚÍÏÖÎÏÓÔÉ, ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ × ÜÔÏÊ ×ÅÒÓÉÉ MySQL", +"÷ ÔÁÂÌÉÃÅ ÄÏÌÖÅÎ ÂÙÔØ ËÁË ÍÉÎÉÍÕÍ ÏÄÉÎ ÓÔÏÌÂÅÃ", "ôÁÂÌÉÃÁ '%-.64s' ÐÅÒÅÐÏÌÎÅÎÁ", -"îÅÉÚ×ÅÓÔÎÙÊ ÎÁÂÏÒ ÓÉÍ×ÏÌÏ×: '%-.64s'", -"óÌÉÛËÏÍ ÍÎÏÇÏ ÔÁÂÌÉÃ. MySQL ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ %d ÔÁÂÌÉÃ × ÏÂßÅÄÉÎÅÎÉÉ", -"óÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÌÅÊ", -"óÌÉÛËÏÍ ÂÏÌØÛÏÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ. íÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ - %d, ÎÅ ÓÞÉÔÁÑ blob. úÁÍÅÎÉÔÅ ÎÅËÏÔÏÒÙÅ ÐÏÌÑ ÎÁ blob", -"ðÅÒÅÐÏÌÎÅÎÉÅ ÎÉÔÅ×ÏÇÏ ÓÔÅËÁ: éÓÐÏÌØÚÏ×ÁÎÏ %ld ÉÚ %ld. åÓÌÉ ÎÅÏÂÈÏÄÉÍÏ, ÉÓÐÏÌØÚÕÊÔÅ 'mysqld -O thread_stack=#' ÞÔÏÂÙ Õ×ÅÌÉÞÉÔØ ÒÁÚÍÅÒ ÓÔÅËÁ", -"ðÅÒÅËÒÅÓÔÎÁÑ ÚÁ×ÉÓÉÍÏÓÔØ × OUTER JOIN. ðÒÏ×ÅÒØÔÅ ÕÓÌÏ×ÉÑ ON", -"ðÏÌÅ '%-.32s' ÉÓÐÏÌØÚÕÅÔÓÑ ËÁË UNIQUE ÉÌÉ INDEX ÎÏ ÎÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË NOT NULL", -"îÅ ÍÏÇÕ ÚÁÇÒÕÚÉÔØ ÆÕÎËÃÉÀ '%-.64s'", -"îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÆÕÎËÃÉÀ '%-.64s'; %-.80s", -"îÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÕÔÉ ÄÌÑ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË", +"îÅÉÚ×ÅÓÔÎÁÑ ËÏÄÉÒÏ×ËÁ '%-.64s'", +"óÌÉÛËÏÍ ÍÎÏÇÏ ÔÁÂÌÉÃ. MySQL ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ %d ÔÁÂÌÉÃ × ÓÏÅÄÉÎÅÎÉÉ", +"óÌÉÛËÏÍ ÍÎÏÇÏ ÓÔÏÌÂÃÏ×", +"óÌÉÛËÏÍ ÂÏÌØÛÏÊ ÒÁÚÍÅÒ ÚÁÐÉÓÉ. íÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÓÔÒÏËÉ, ÉÓËÌÀÞÁÑ ÐÏÌÑ BLOB, - %d. ÷ÏÚÍÏÖÎÏ, ×ÁÍ ÓÌÅÄÕÅÔ ÉÚÍÅÎÉÔØ ÔÉÐ ÎÅËÏÔÏÒÙÈ ÐÏÌÅÊ ÎÁ BLOB", +"óÔÅË ÐÏÔÏËÏ× ÐÅÒÅÐÏÌÎÅÎ: ÉÓÐÏÌØÚÏ×ÁÎÏ: %ld ÉÚ %ld ÓÔÅËÁ. ðÒÉÍÅÎÑÊÔÅ 'mysqld -O thread_stack=#' ÄÌÑ ÕËÁÚÁÎÉÑ ÂÏÌØÛÅÇÏ ÒÁÚÍÅÒÁ ÓÔÅËÁ, ÅÓÌÉ ÎÅÏÂÈÏÄÉÍÏ", +"÷ OUTER JOIN ÏÂÎÁÒÕÖÅÎÁ ÐÅÒÅËÒÅÓÔÎÁÑ ÚÁ×ÉÓÉÍÏÓÔØ. ÷ÎÉÍÁÔÅÌØÎÏ ÐÒÏÁÎÁÌÉÚÉÒÕÊÔÅ Ó×ÏÉ ÕÓÌÏ×ÉÑ ON", +"óÔÏÌÂÅà '%-.64s' ÉÓÐÏÌØÚÕÅÔÓÑ × UNIQUE ÉÌÉ × INDEX, ÎÏ ÎÅ ÏÐÒÅÄÅÌÅÎ ËÁË NOT NULL", +"îÅ×ÏÚÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ÆÕÎËÃÉÀ '%-.64s'", +"îÅ×ÏÚÍÏÖÎÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÆÕÎËÃÉÀ '%-.64s'; %-.80s", +"îÅÄÏÐÕÓÔÉÍÏ ÕËÁÚÙ×ÁÔØ ÐÕÔÉ ÄÌÑ ÄÉÎÁÍÉÞÅÓËÉÈ ÂÉÂÌÉÏÔÅË", "æÕÎËÃÉÑ '%-.64s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ", -"îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÂÉÂÌÉÏÔÅËÕ '%-.64s' (ïÛÉÂËÁ: %d %-.64s)", -"îÅ ÍÏÇÕ ÎÁÊÔÉ ÆÕÎËÃÉÀ '%-.64s' × ÂÉÂÌÉÏÔÅËÅ'", +"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÄÉÎÁÍÉÞÅÓËÕÀ ÂÉÂÌÉÏÔÅËÕ '%-.64s' (ÏÛÉÂËÁ: %d %-.64s)", +"îÅ×ÏÚÍÏÖÎÏ ÏÔÙÓËÁÔØ ÆÕÎËÃÉÀ '%-.64s' × ÂÉÂÌÉÏÔÅËÅ", "æÕÎËÃÉÑ '%-.64s' ÎÅ ÏÐÒÅÄÅÌÅÎÁ", -"èÏÓÔ '%-.64s' ÚÁÂÌÏËÉÒÏ×ÁÎ ÉÚ-ÚÁ ÏÂÉÌÉÑ ÏÛÉÂÏË ÓÏÅÄÉÎÅÎÉÑ. òÁÚÂÌÏËÉÒÏ×ÁÔØ ÍÏÖÎÏ Ó ÐÏÍÏÝØÀ 'mysqladmin flush-hosts'", -"èÏÓÔÕ '%-.64s' ÎÅ ÒÁÚÒÅÛÅÎÏ ÓÏÅÄÉÎÑÔØÓÑ Ó ÄÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ MySQL", -"÷Ù ÐÏÄËÌÀÞÅÎÙ Ë MySQL ËÁË ÁÎÏÎÉÍÎÙÊ ÐÏÌØÚÏ×ÁÔÅÌØ É ÷ÁÍ ÎÅ ÒÁÚÒÅÛÅÎÏ ÉÚÍÅÎÑÔØ ÐÁÒÏÌÉ", -"÷Ù ÄÏÌÖÎÙ ÉÍÅÔØ ÐÒÁ×Á ÎÁ ÏÂÎÏ×ÌÅÎÉÅ ÔÁÂÌÉÃ × ÂÁÚÅ, ÞÔÏÂÙ ÉÚÍÅÎÉÔØ ÐÁÒÏÌØ ÄÒÕÇÉÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ", -"îÅ ÍÏÇÕ ÎÁÊÔÉ ÎÉ ÏÄÎÏÇÏ ÓÏÏÔ×ÅÔÓÔ×ÉÑ × ÔÁÂÌÉÃÅ ÐÏÌØÚÏ×ÁÔÅÌÅÊ", -"óÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÚÁÐÉÓÅÊ: %ld éÚÍÅÎÅÎÏ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÎÏ×ÕÀ ÎÉÔØ (ÏÛÉÂËÁ %d). åÓÌÉ ÜÔÏ ÎÅ ÉÚ-ÚÁ ÎÅÈ×ÁÔËÉ ÐÁÍÑÔÉ, ÐÏÓÍÏÔÒÉÔÅ × ÒÕËÏ×ÏÄÓÔ×Å ×ÏÚÍÏÖÎÙÅ OS-ÚÁ×ÉÓÉÍÙÅ ÇÌÀËÉ", -"þÉÓÌÏ ÓÔÏÌÂÃÏ× ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÞÉÓÌÕ ÚÎÁÞÅÎÉÊ × ÓÔÒÏËÅ %ld", -"îÅ ÍÏÇÕ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ: '%-.64s", -"îÅÐÒÁ×ÉÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÚÎÁÞÅÎÉÑ NULL", -"REGEXP ×ÅÒÎÕÌ ÏÛÉÂËÕ '%-.64s'", -"éÓÐÏÌØÚÏ×ÁÎÉÅ ÁÇÒÅÇÁÔÎÙÈ ÆÕÎËÃÉÊ (MIN(),MAX(),COUNT()...) ÓÏ×ÍÅÓÔÎÏ Ó ÏÂÙÞÎÙÍÉ ÚÎÁÞÅÎÉÑÍÉ ×ÏÚÍÏÖÎÏ ÔÏÌØËÏ ÐÒÉ ÎÁÌÉÞÉÉ ÒÁÚÄÅÌÁ GROUP BY", -"äÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' Ó ÈÏÓÔÁ '%-.64s' ÐÒÉ×ÉÌÅÇÉÉ ÎÅ ÏÐÒÅÄÅÌÅÎÙ", -"%-.16s ËÏÍÁÎÄÁ ÎÅ ÒÁÚÒÅÛÅÎÁ ÐÏÌØÚÏ×ÁÔÅÌÀ: '%-.32s@%-.64s' ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s'", -"%-.16s ËÏÍÁÎÄÁ ÎÅ ÒÁÚÒÅÛÅÎÁ ÐÏÌØÚÏ×ÁÔÅÌÀ: '%-.32s@%-.64s'\n ÄÌÑ ÐÏÌÑ '%-.64s' ÉÚ ÔÁÂÌÉÃÙ '%-.64s'", -"úÁÄÁÎÙ ÎÅ×ÅÒÎÙÅ ÐÒÉ×ÉÌÅÇÉÉ ÄÌÑ ÔÁÂÌÉÃÙ", -"éÍÑ ÈÏÓÔÁ ÉÌÉ ÐÏÌØÚÏ×ÁÔÅÌÑ ÓÌÉÛËÏÍ ×ÅÌÉËÏ ÄÌÑ ÔÁÂÌÉÃÙ ÐÒÉ×ÉÌÅÇÉÊ", +"èÏÓÔ '%-.64s' ÚÁÂÌÏËÉÒÏ×ÁÎ ÉÚ-ÚÁ ÓÌÉÛËÏÍ ÂÏÌØÛÏÇÏ ËÏÌÉÞÅÓÔ×Á ÏÛÉÂÏË ÓÏÅÄÉÎÅÎÉÑ. òÁÚÂÌÏËÉÒÏ×ÁÔØ ÅÇÏ ÍÏÖÎÏ Ó ÐÏÍÏÝØÀ 'mysqladmin flush-hosts'", +"èÏÓÔÕ '%-.64s' ÎÅ ÒÁÚÒÅÛÁÅÔÓÑ ÐÏÄËÌÀÞÁÔØÓÑ Ë ÜÔÏÍÕ ÓÅÒ×ÅÒÕ MySQL", +"÷Ù ÉÓÐÏÌØÚÕÅÔÅ MySQL ÏÔ ÉÍÅÎÉ ÁÎÏÎÉÍÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ, Á ÁÎÏÎÉÍÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ ÎÅ ÒÁÚÒÅÛÁÅÔÓÑ ÍÅÎÑÔØ ÐÁÒÏÌÉ", +"äÌÑ ÔÏÇÏ ÞÔÏÂÙ ÉÚÍÅÎÑÔØ ÐÁÒÏÌÉ ÄÒÕÇÉÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, Õ ×ÁÓ ÄÏÌÖÎÙ ÂÙÔØ ÐÒÉ×ÉÌÅÇÉÉ ÎÁ ÉÚÍÅÎÅÎÉÅ ÔÁÂÌÉÃ × ÂÁÚÅ ÄÁÎÎÙÈ mysql", +"îÅ×ÏÚÍÏÖÎÏ ÏÔÙÓËÁÔØ ÐÏÄÈÏÄÑÝÕÀ ÚÁÐÉÓØ × ÔÁÂÌÉÃÅ ÐÏÌØÚÏ×ÁÔÅÌÅÊ", +"óÏ×ÐÁÌÏ ÚÁÐÉÓÅÊ: %ld éÚÍÅÎÅÎÏ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÐÏÔÏË (ÏÛÉÂËÁ %d). åÓÌÉ ÜÔÏ ÎÅ ÓÉÔÕÁÃÉÑ, Ó×ÑÚÁÎÎÁÑ Ó ÎÅÈ×ÁÔËÏÊ ÐÁÍÑÔÉ, ÔÏ ×ÁÍ ÓÌÅÄÕÅÔ ÉÚÕÞÉÔØ ÄÏËÕÍÅÎÔÁÃÉÀ ÎÁ ÐÒÅÄÍÅÔ ÏÐÉÓÁÎÉÑ ×ÏÚÍÏÖÎÏÊ ÏÛÉÂËÉ ÒÁÂÏÔÙ × ËÏÎËÒÅÔÎÏÊ ïó", +"ëÏÌÉÞÅÓÔ×Ï ÓÔÏÌÂÃÏ× ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ËÏÌÉÞÅÓÔ×ÏÍ ÚÎÁÞÅÎÉÊ × ÚÁÐÉÓÉ %ld", +"îÅ×ÏÚÍÏÖÎÏ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ '%-.64s'", +"îÅÐÒÁ×ÉÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ×ÅÌÉÞÉÎÙ NULL", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ '%-.64s' ÏÔ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ", +"ïÄÎÏ×ÒÅÍÅÎÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÇÒÕÐÐÉÒÏ×ÁÎÎÙÈ (GROUP) ÓÔÏÌÂÃÏ× (MIN(),MAX(),COUNT(),...) Ó ÎÅÓÇÒÕÐÐÉÒÏ×ÁÎÎÙÍÉ ÓÔÏÌÂÃÁÍÉ Ñ×ÌÑÅÔÓÑ ÎÅËÏÒÒÅËÔÎÙÍ, ÅÓÌÉ × ×ÙÒÁÖÅÎÉÉ ÅÓÔØ GROUP BY", +"ôÁËÉÅ ÐÒÁ×Á ÎÅ ÏÐÒÅÄÅÌÅÎÙ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' ÎÁ ÈÏÓÔÅ '%-.64s'", +"ëÏÍÁÎÄÁ %-.16s ÚÁÐÒÅÝÅÎÁ ÐÏÌØÚÏ×ÁÔÅÌÀ '%-.32s@%-.64s' ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s'", +"ëÏÍÁÎÄÁ %-.16s ÚÁÐÒÅÝÅÎÁ ÐÏÌØÚÏ×ÁÔÅÌÀ '%-.32s@%-.64s' ÄÌÑ ÓÔÏÌÂÃÁ '%-.64s' × ÔÁÂÌÉÃÅ '%-.64s'", +"îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ GRANT ÉÌÉ REVOKE. ïÂÒÁÔÉÔÅÓØ Ë ÄÏËÕÍÅÎÔÁÃÉÉ, ÞÔÏÂÙ ×ÙÑÓÎÉÔØ, ËÁËÉÅ ÐÒÉ×ÉÌÅÇÉÉ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ", +"óÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ/ÈÏÓÔÁ ÄÌÑ GRANT", "ôÁÂÌÉÃÁ '%-.64s.%-.64s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ", -"ðÒÉ×ÉÌÅÇÉÉ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' Ó ÈÏÓÔÁ '%-.64s' ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s' ÎÅ ÏÐÒÅÄÅÌÅÎÙ", -"äÁÎÎÁÑ ËÏÍÁÎÄÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÜÔÏÊ ×ÅÒÓÉÅÊ MySQL", -"ëÁËÁÑ-ÔÏ ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ", -"ðÏÔÏË ÄÌÑ delayed insert ÎÅ ÍÏÖÅÔ ÐÏÌÕÞÉÔØ ÂÌÏËÉÒÏ×ËÕ ÄÌÑ ÔÁÂÌÉÃÙ %-.64s", -"éÓÐÏÌØÚÕÅÔÓÑ ÓÌÉÛËÏÍ ÍÎÏÇÏ delayed ÐÏÔÏËÏ×", -"ðÒÅÒ×ÁÎÎÁÑ Ó×ÑÚØ %ld Ó ÂÁÚÏÊ ÄÁÎÎÙÈ: '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌØ: '%-.64s' (%-.64s)", -"ðÁËÅÔ ÂÏÌØÛÅ ÞÅÍ 'max_allowed_packet'", -"ïÛÉÂËÁ ÞÔÅÎÉÑ ÉÚ ÔÒÕÂÙ ËÏÎÎÅËÔÁ", -"fcntl() ×ÅÒÎÕÌ ÏÛÉÂËÕ", -"ðÏÌÕÞÅÎ ÐÁËÅÔ × ÎÅÐÒÁ×ÉÌØÎÏÍ ÐÏÒÑÄËÅ", -"îÅ ÍÏÇÕ ÒÁÓÐÁËÏ×ÁÔØ ÐÁËÅÔ", -"ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÐÁËÅÔÏ×", -"ôÁÊÍÁÕÔ ÐÒÉ ÞÔÅÎÉÉ ÐÁËÅÔÏ×", -"ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÁËÅÔÏ×", -"ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÁËÅÔÏ×", -"òÅÚÕÌØÔÉÒÕÀÝÁÑ ÓÔÒÏËÁ ÂÏÌØÛÅ ÞÅÍ max_allowed_packet", -"éÓÐÏÌØÚÕÅÍÁÑ ÔÁÂÌÉÃÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÐÏÌÑ BLOB/TEXT", -"éÓÐÏÌØÚÕÅÍÁÑ ÔÁÂÌÉÃÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÐÏÌÑ AUTO_INCREMENT", -"INSERT DELAYED ÎÅ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÔÁÂÌÉÃÅÊ '%-.64s', ÏÎÁ ÚÁÎÑÔÁ ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ LOCK TABLES", -"îÅ×ÅÒÎÏÅ ÉÍÑ ÐÏÌÑ '%-.100s'", -"ôÁÂÌÉÃÁ ÉÓÐÏÌØÚÕÅÍÏÇÏ ÔÉÐÁ ÎÅ ÍÏÖÅÔ ÉÎÄÅËÓÉÒÏ×ÁÔØ ÐÏÌÅ '%-.64s'", +"ôÁËÉÅ ÐÒÁ×Á ÎÅ ÏÐÒÅÄÅÌÅÎÙ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' ÎÁ ËÏÍÐØÀÔÅÒÅ '%-.64s' ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s'", +"üÔÁ ËÏÍÁÎÄÁ ÎÅ ÄÏÐÕÓËÁÅÔÓÑ × ÄÁÎÎÏÊ ×ÅÒÓÉÉ MySQL", +"õ ×ÁÓ ÏÛÉÂËÁ × ÚÁÐÒÏÓÅ. éÚÕÞÉÔÅ ÄÏËÕÍÅÎÔÁÃÉÀ ÐÏ ÉÓÐÏÌØÚÕÅÍÏÊ ×ÅÒÓÉÉ MySQL ÎÁ ÐÒÅÄÍÅÔ ËÏÒÒÅËÔÎÏÇÏ ÓÉÎÔÁËÓÉÓÁ", +"ðÏÔÏË, ÏÂÓÌÕÖÉ×ÁÀÝÉÊ ÏÔÌÏÖÅÎÎÕÀ ×ÓÔÁ×ËÕ (delayed insert), ÎÅ ÓÍÏÇ ÐÏÌÕÞÉÔØ ÚÁÐÒÁÛÉ×ÁÅÍÕÀ ÂÌÏËÉÒÏ×ËÕ ÎÁ ÔÁÂÌÉÃÕ %-.64s", +"óÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÔÏËÏ×, ÏÂÓÌÕÖÉ×ÁÀÝÉÈ ÏÔÌÏÖÅÎÎÕÀ ×ÓÔÁ×ËÕ (delayed insert)", +"ðÒÅÒ×ÁÎÏ ÓÏÅÄÉÎÅÎÉÅ %ld Ë ÂÁÚÅ ÄÁÎÎÙÈ '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' (%-.64s)", +"ðÏÌÕÞÅÎÎÙÊ ÐÁËÅÔ ÂÏÌØÛÅ, ÞÅÍ 'max_allowed_packet'", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ ÞÔÅÎÉÑ ÏÔ ÐÏÔÏËÁ ÓÏÅÄÉÎÅÎÉÑ (connection pipe)", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ ÏÔ fcntl()", +"ðÁËÅÔÙ ÐÏÌÕÞÅÎÙ × ÎÅ×ÅÒÎÏÍ ÐÏÒÑÄËÅ", +"îÅ×ÏÚÍÏÖÎÏ ÒÁÓÐÁËÏ×ÁÔØ ÐÁËÅÔ, ÐÏÌÕÞÅÎÎÙÊ ÞÅÒÅÚ ËÏÍÍÕÎÉËÁÃÉÏÎÎÙÊ ÐÒÏÔÏËÏÌ", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ × ÐÒÏÃÅÓÓÅ ÐÏÌÕÞÅÎÉÑ ÐÁËÅÔÁ ÞÅÒÅÚ ËÏÍÍÕÎÉËÁÃÉÏÎÎÙÊ ÐÒÏÔÏËÏÌ ", +"ðÏÌÕÞÅÎ ÔÁÊÍÁÕÔ ÏÖÉÄÁÎÉÑ ÐÁËÅÔÁ ÞÅÒÅÚ ËÏÍÍÕÎÉËÁÃÉÏÎÎÙÊ ÐÒÏÔÏËÏÌ ", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ ÐÒÉ ÐÅÒÅÄÁÞÅ ÐÁËÅÔÁ ÞÅÒÅÚ ËÏÍÍÕÎÉËÁÃÉÏÎÎÙÊ ÐÒÏÔÏËÏÌ ", +"ðÏÌÕÞÅÎ ÔÁÊÍÁÕÔ × ÐÒÏÃÅÓÓÅ ÐÅÒÅÄÁÞÉ ÐÁËÅÔÁ ÞÅÒÅÚ ËÏÍÍÕÎÉËÁÃÉÏÎÎÙÊ ÐÒÏÔÏËÏÌ ", +"òÅÚÕÌØÔÉÒÕÀÝÁÑ ÓÔÒÏËÁ ÂÏÌØÛÅ, ÞÅÍ 'max_allowed_packet'", +"éÓÐÏÌØÚÕÅÍÁÑ ÔÁÂÌÉÃÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÔÉÐÙ BLOB/TEXT", +"éÓÐÏÌØÚÕÅÍÁÑ ÔÁÂÌÉÃÁ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ Á×ÔÏÉÎËÒÅÍÅÎÔÎÙÅ ÓÔÏÌÂÃÙ", +"îÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ INSERT DELAYED ÄÌÑ ÔÁÂÌÉÃÙ '%-.64s', ÐÏÔÏÍÕ ÞÔÏ ÏÎÁ ÚÁÂÌÏËÉÒÏ×ÁÎÁ Ó ÐÏÍÏÝØÀ LOCK TABLES", +"îÅ×ÅÒÎÏÅ ÉÍÑ ÓÔÏÌÂÃÁ '%-.100s'", +"éÓÐÏÌØÚÏ×ÁÎÎÙÊ ÏÂÒÁÂÏÔÞÉË ÔÁÂÌÉÃÙ ÎÅ ÍÏÖÅÔ ÐÒÏÉÎÄÅËÓÉÒÏ×ÁÔØ ÓÔÏÌÂÅà '%-.64s'", "îÅ ×ÓÅ ÔÁÂÌÉÃÙ × MERGE ÏÐÒÅÄÅÌÅÎÙ ÏÄÉÎÁËÏ×Ï", -"îÅ ÍÏÇÕ ÐÉÓÁÔØ × ÔÁÂÌÉÃÕ '%-.64s' ÉÚ-ÚÁ UNIQUE ÕÓÌÏ×ÉÊ", -"ðÏÌÅ ÔÉÐÁ BLOB '%-.64s' × ÏÐÒÅÄÅÌÅÎÉÉ ÉÎÄÅËÓÁ ÂÅÚ ÕËÁÚÁÎÉÑ ÄÌÉÎÙ", -"÷ÓÅ ÞÁÓÔÉ PRIMARY KEY ÄÏÌÖÎÙ ÂÙÔØ NOT NULL; ÅÓÌÉ NULL × ÉÎÄÅËÓÅ ÎÅÏÂÈÏÄÉÍ, ÉÓÐÏÌØÚÕÊÔÅ UNIQUE", -"òÅÚÕÌØÔÁÔ ÓÏÄÅÒÖÉÔ ÂÏÌØÛÅ ÏÄÎÏÊ ÓÔÒÏËÉ", -"ôÁÂÌÉÃÁ ÜÔÏÇÏ ÔÉÐÁ ÏÂÑÚÁÎÁ ÉÍÅÔØ PRIMARY KEY", -"üÔÁ ËÏÐÉÑ MySQL ÓËÏÍÐÉÌÉÒÏ×ÁÎÁ ÂÅÚ ÐÏÄÄÅÒÖËÉ RAID", -"MySQL ÒÁÂÏÔÁÅÔ × ÒÅÖÉÍÅ ÚÁÝÉÔÙ ÏÔ ÄÕÒÁËÏ× (safe_mode) - ÎÅ ÍÏÇÕ UPDATE ÂÅÚ WHERE Ó ËÁËÉÍ-ÎÅÂÕÄØ KEY", -"éÎÄÅËÓ '%-.64s' ÎÅ ÎÁÊÄÅÎ × ÔÁÂÌÉÃÅ '%-.64s'", -"îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ", -"äÁÎÎÙÊ ÔÉÐ ÔÁÂÌÉà ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ËÏÍÁÎÄÕ %s", -"üÔÁ ËÏÍÁÎÄÁ ×ÎÕÔÒÉ ÔÒÁÎÚÁËÃÉÉ ÚÁÐÒÅÝÅÎÁ", -"ïÛÉÂËÁ %d ×Ï ×ÒÅÍÑ COMMIT", -"ïÛÉÂËÁ %d ×Ï ×ÒÅÍÑ ROLLBACK", -"ïÛÉÂËÁ %d ×Ï ×ÒÅÍÑ FLUSH_LOGS", -"ïÛÉÂËÁ %d ×Ï ×ÒÅÍÑ CHECKPOINT", -"ðÒÅÒ×ÁÎÎÏÅ ÓÏÅÄÉÎÅÎÉÅ %ld Ë ÂÁÚÅ ÄÁÎÎÙÈ: '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌØ: '%-.32s' ÈÏÓÔ: `%-.64s' (%-.64s)", -"üÔÏÔ ÔÉÐ ÔÁÂÌÉà ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ binary table dump", -"òÅÐÌÉËÁÃÉÏÎÎÙÊ ÌÏÇ ÚÁËÒÙÔ, ÎÅ ÍÏÇÕ ÓÄÅÌÁÔØ RESET MASTER", -"ïÛÉÂËÁ ÐÒÉ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÉ ÉÎÄÅËÓÁ ÐÅÒÅËÁÞÁÎÎÏÊ ÔÁÂÌÉÃÙ '%-.64s'", -"ïÛÉÂËÁ ÎÁ ÍÁÓÔÅÒÅ: '%-.64s'", -"óÅÔÅ×ÁÑ ÏÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ Ó ÍÁÓÔÅÒÁ", -"óÅÔÅ×ÁÑ ÏÛÉÂËÁ ÐÒÉ ÐÉÓÁÎÉÉ ÍÁÓÔÅÒÕ", -"FULLTEXT ÉÎÄÅËÓ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÚÁÄÁÎÎÏÍÕ ÓÐÉÓËÕ ÓÔÏÌÂÃÏ×, ÎÅ ÎÁÊÄÅÎ", -"îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÍÁÎÄÕ ÉÚ-ÚÁ ÁËÔÉ×ÎÙÈ locked ÔÁÂÌÉà ÉÌÉ ÁËÔÉ×ÎÏÊ ÔÒÁÎÚÁËÃÉÉ", +"îÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ × ÔÁÂÌÉÃÕ '%-.64s' ÉÚ-ÚÁ ÏÇÒÁÎÉÞÅÎÉÊ ÕÎÉËÁÌØÎÏÇÏ ËÌÀÞÁ", +"óÔÏÌÂÅà ÔÉÐÁ BLOB '%-.64s' ÂÙÌ ÕËÁÚÁÎ × ÏÐÒÅÄÅÌÅÎÉÉ ËÌÀÞÁ ÂÅÚ ÕËÁÚÁÎÉÑ ÄÌÉÎÙ ËÌÀÞÁ", +"÷ÓÅ ÞÁÓÔÉ ÐÅÒ×ÉÞÎÏÇÏ ËÌÀÞÁ (PRIMARY KEY) ÄÏÌÖÎÙ ÂÙÔØ ÏÐÒÅÄÅÌÅÎÙ ËÁË NOT NULL; åÓÌÉ ×ÁÍ ÎÕÖÎÁ ÐÏÄÄÅÒÖËÁ ×ÅÌÉÞÉÎ NULL × ËÌÀÞÅ, ×ÏÓÐÏÌØÚÕÊÔÅÓØ ÉÎÄÅËÓÏÍ UNIQUE", +"÷ ÒÅÚÕÌØÔÁÔÅ ×ÏÚ×ÒÁÝÅÎÁ ÂÏÌÅÅ ÞÅÍ ÏÄÎÁ ÓÔÒÏËÁ", +"üÔÏÔ ÔÉÐ ÔÁÂÌÉÃÙ ÔÒÅÂÕÅÔ ÏÐÒÅÄÅÌÅÎÉÑ ÐÅÒ×ÉÞÎÏÇÏ ËÌÀÞÁ", +"üÔÁ ×ÅÒÓÉÑ MySQL ÓËÏÍÐÉÌÉÒÏ×ÁÎÁ ÂÅÚ ÐÏÄÄÅÒÖËÉ RAID", +"÷Ù ÒÁÂÏÔÁÅÔÅ × ÒÅÖÉÍÅ ÂÅÚÏÐÁÓÎÙÈ ÏÂÎÏ×ÌÅÎÉÊ (safe update mode) É ÐÏÐÒÏÂÏ×ÁÌÉ ÉÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ ÂÅÚ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ËÌÀÞÅ×ÏÇÏ ÓÔÏÌÂÃÁ × ÞÁÓÔÉ WHERE", +"ëÌÀÞ '%-.64s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ × ÔÁÂÌÉÃÅ '%-.64s'", +"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ", +"ïÂÒÁÂÏÔÞÉË ÔÁÂÌÉÃÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÜÔÏÇÏ: %s", +"÷ÁÍ ÎÅ ÒÁÚÒÅÛÅÎÏ ×ÙÐÏÌÎÑÔØ ÜÔÕ ËÏÍÁÎÄÕ × ÔÒÁÎÚÁËÃÉÉ", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d × ÐÒÏÃÅÓÓÅ COMMIT", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d × ÐÒÏÃÅÓÓÅ ROLLBACK", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d × ÐÒÏÃÅÓÓÅ FLUSH_LOGS", +"ðÏÌÕÞÅÎÁ ÏÛÉÂËÁ %d × ÐÒÏÃÅÓÓÅ CHECKPOINT", +"ðÒÅÒ×ÁÎÏ ÓÏÅÄÉÎÅÎÉÅ %ld Ë ÂÁÚÅ ÄÁÎÎÙÈ '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' Ó ÈÏÓÔÁ `%-.64s' (%-.64s)", +"ïÂÒÁÂÏÔÞÉË ÜÔÏÊ ÔÁÂÌÉÃÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ Ä×ÏÉÞÎÏÇÏ ÓÏÈÒÁÎÅÎÉÑ ÏÂÒÁÚÁ ÔÁÂÌÉÃÙ (dump)", +"ä×ÏÉÞÎÙÊ ÖÕÒÎÁÌ ÏÂÎÏ×ÌÅÎÉÑ ÚÁËÒÙÔ, ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ RESET MASTER", +"ïÛÉÂËÁ ÐÅÒÅÓÔÒÏÊËÉ ÉÎÄÅËÓÁ ÓÏÈÒÁÎÅÎÎÏÊ ÔÁÂÌÉÃÙ '%-.64s'", +"ïÛÉÂËÁ ÏÔ ÇÏÌÏ×ÎÏÇÏ ÓÅÒ×ÅÒÁ: '%-.64s'", +"÷ÏÚÎÉËÌÁ ÏÛÉÂËÁ ÞÔÅÎÉÑ × ÐÒÏÃÅÓÓÅ ËÏÍÍÕÎÉËÁÃÉÉ Ó ÇÏÌÏ×ÎÙÍ ÓÅÒ×ÅÒÏÍ", +"÷ÏÚÎÉËÌÁ ÏÛÉÂËÁ ÚÁÐÉÓÉ × ÐÒÏÃÅÓÓÅ ËÏÍÍÕÎÉËÁÃÉÉ Ó ÇÏÌÏ×ÎÙÍ ÓÅÒ×ÅÒÏÍ", +"îÅ×ÏÚÍÏÖÎÏ ÏÔÙÓËÁÔØ ÐÏÌÎÏÔÅËÓÔÏ×ÙÊ (FULLTEXT) ÉÎÄÅËÓ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ ÓÐÉÓËÕ ÓÔÏÌÂÃÏ×", +"îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÕËÁÚÁÎÎÕÀ ËÏÍÁÎÄÕ, ÐÏÓËÏÌØËÕ Õ ×ÁÓ ÐÒÉÓÕÔÓÔ×ÕÀÔ ÁËÔÉ×ÎÏ ÚÁÂÌÏËÉÒÏ×ÁÎÎÙÅ ÔÁÂÌÉÃÁ ÉÌÉ ÏÔËÒÙÔÁÑ ÔÒÁÎÚÁËÃÉÑ", "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÐÅÒÅÍÅÎÎÁÑ '%-.64s'", -"ôÁÂÌÉÃÁ '%-.64s' ÐÏÍÅÞÅÎÁ ËÁË ÉÓÐÏÒÞÅÎÎÁÑ É ÄÏÌÖÎÁ ÂÙÔØ ÉÓÐÒÁ×ÌÅÎÁ", -"ôÁÂÌÉÃÁ '%-.64s' ÐÏÍÅÞÅÎÁ ËÁË ÉÓÐÏÒÞÅÎÎÁÑ É ÐÏÓÌÅÄÎÑÑ ÐÏÐÙÔËÁ ÉÓÐÒÁ×ÌÅÎÉÑ (Á×ÔÏÍÁÔÉÞÅÓËÁÑ?) ÎÅ ÕÄÁÌÁÓØ", -"ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅËÏÔÏÒÙÅ ÎÅÔÒÁÎÚÁËÃÉÏÎÎÙÅ ÔÁÂÌÉÃÙ ÎÅ ÐÏÄÞÉÎÑÀÔÓÑ ROLLBACK", -"íÎÏÇÏÚÁÐÒÏÓÎÁÑ ÔÒÁÎÚÁËÃÉÑ ÔÒÅÂÕÅÔ Õ×ÅÌÉÞÅÎÉÑ 'max_binlog_cache_size' - Õ×ÅÌÉÞÔÅ ÜÔÕ ÐÅÒÅÍÅÎÎÕÀ É ÐÏÐÒÏÂÕÊÔÅ ÅÝÅ ÒÁÚ", -"üÔÁ ÏÐÅÒÁÃÉÑ ÎÅ×ÏÚÍÏÖÎÁ Ó ÁËÔÉ×ÎÙÍ slave, ÎÁÄÏ SLAVE STOP", -"üÔÁ ÏÐÅÒÁÃÉÑ ÎÅ×ÏÚÍÏÖÎÁ Ó ÐÁÓÓÉ×ÎÙÍ slave, ÎÁÄÏ SLAVE START", -"üÔÏÔ ÓÅÒ×ÅÒ ÎÅ slave, ÉÓÐÒÁרÔÅ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ ÉÌÉ ËÏÍÍÁÎÄÏÊ CHANGE MASTER TO", -"îÅ ÐÏÌÕÞÉÌÏÓØ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÓÔÒÕËÔÕÒÕ master info, ÐÒÏ×ÅÒÔÅ persmissions ÎÁ ÆÁÊÌÅ master.info", -"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ SLAVE, ÐÒÏ×ÅÒØÔÅ ÓÉÓÔÅÍÎÙÅ ÒÅÓÕÒÓÙ", +"ôÁÂÌÉÃÁ '%-.64s' ÐÏÍÅÞÅÎÁ ËÁË ÉÓÐÏÒÞÅÎÎÁÑ É ÄÏÌÖÎÁ ÐÒÏÊÔÉ ÐÒÏ×ÅÒËÕ É ÒÅÍÏÎÔ", +"ôÁÂÌÉÃÁ '%-.64s' ÐÏÍÅÞÅÎÁ ËÁË ÉÓÐÏÒÞÅÎÎÁÑ É ÐÏÓÌÅÄÎÉÊ (Á×ÔÏÍÁÔÉÞÅÓËÉÊ?) ÒÅÍÏÎÔ ÎÅ ÂÙÌ ÕÓÐÅÛÎÙÍ", +"÷ÎÉÍÁÎÉÅ: ÐÏ ÎÅËÏÔÏÒÙÍ ÉÚÍÅÎÅÎÎÙÍ ÎÅÔÒÁÎÚÁËÃÉÏÎÎÙÍ ÔÁÂÌÉÃÁÍ ÎÅ×ÏÚÍÏÖÎÏ ÂÕÄÅÔ ÐÒÏÉÚ×ÅÓÔÉ ÏÔËÁÔ ÔÒÁÎÚÁËÃÉÉ", +"ôÒÁÎÚÁËÃÉÉ, ×ËÌÀÞÁÀÝÅÊ ÂÏÌØÛÏÅ ËÏÌÉÞÅÓÔ×Ï ËÏÍÁÎÄ, ÐÏÔÒÅÂÏ×ÁÌÏÓØ ÂÏÌÅÅ ÞÅÍ 'max_binlog_cache_size' ÂÁÊÔ. õ×ÅÌÉÞØÔÅ ÜÔÕ ÐÅÒÅÍÅÎÎÕÀ ÓÅÒ×ÅÒÁ mysqld É ÐÏÐÒÏÂÕÊÔÅ ÅÝÅ ÒÁÚ", +"üÔÕ ÏÐÅÒÁÃÉÀ ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÐÒÉ ÒÁÂÏÔÁÀÝÅÍ ÐÏÔÏËÅ ÐÏÄÞÉÎÅÎÎÏÇÏ ÓÅÒ×ÅÒÁ. óÎÁÞÁÌÁ ×ÙÐÏÌÎÉÔÅ STOP SLAVE", +"äÌÑ ÜÔÏÊ ÏÐÅÒÁÃÉÉ ÔÒÅÂÕÅÔÓÑ ÒÁÂÏÔÁÀÝÉÊ ÐÏÄÞÉÎÅÎÎÙÊ ÓÅÒ×ÅÒ. óÎÁÞÁÌÁ ×ÙÐÏÌÎÉÔÅ START SLAVE", +"üÔÏÔ ÓÅÒ×ÅÒ ÎÅ ÎÁÓÔÒÏÅÎ ËÁË ÐÏÄÞÉÎÅÎÎÙÊ. ÷ÎÅÓÉÔÅ ÉÓÐÒÁ×ÌÅÎÉÑ × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ ÉÌÉ Ó ÐÏÍÏÝØÀ CHANGE MASTER TO", +"îÅ×ÏÚÍÏÖÎÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÓÔÒÕËÔÕÒÕ ÄÌÑ ÉÎÆÏÒÍÁÃÉÉ Ï ÇÏÌÏ×ÎÏÍ ÓÅÒ×ÅÒÅ. ðÒÏ×ÅÒØÔÅ ÐÒÁ×Á ÎÁ ÆÁÊÌ master.info", +"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÐÏÔÏË ÐÏÄÞÉÎÅÎÎÏÇÏ ÓÅÒ×ÅÒÁ. ðÒÏ×ÅÒØÔÅ ÓÉÓÔÅÍÎÙÅ ÒÅÓÕÒÓÙ", "õ ÐÏÌØÚÏ×ÁÔÅÌÑ %-.64s ÕÖÅ ÂÏÌØÛÅ ÞÅÍ 'max_user_connections' ÁËÔÉ×ÎÙÈ ÓÏÅÄÉÎÅÎÉÊ", -"íÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ×ÙÒÁÖÅÎÉÅ-ËÏÎÓÔÁÎÔÕ ÓÏ×ÍÅÓÔÎÏ Ó SET", -"ôÁÊÍÁÕÔ ÏÖÉÄÁÎÉÑ ÂÌÏËÉÒÏ×ËÉ", -"ïÂÝÅÅ ËÏÌÉÞÅÓÔ×Ï ÂÌÏËÉÒÏ×ÏË ÐÒÅ×ÙÓÉÌÏ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ ÂÌÏËÉÒÏ×ÏË", -"âÌÏËÉÒÏ×ËÁ ÉÚÍÅÎÅÎÉÑ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÐÏÌÕÞÅÎÁ ×Ï ×ÒÅÍÑ READ UNCOMMITTED ÔÒÁÎÚÁËÃÉÉ", -"DROP DATABASE ÚÁÐÒÅÝÅÎ ×Ï ×ÒÅÍÑ ÇÌÏÂÁÌØÎÏÊ ÂÌÏËÉÒÏ×ËÉ ÞÔÅÎÉÑ", -"CREATE DATABASE ÚÁÐÒÅÝÅÎ ×Ï ×ÒÅÍÑ ÇÌÏÂÁÌØÎÏÊ ÂÌÏËÉÒÏ×ËÉ ÞÔÅÎÉÑ", -"îÅÐÒÁ×ÉÌØÎÙÅ ÁÒÇÕÍÅÔÎÙ Õ %s", -"%-.32s@%-.64s ÎÅ ÉÍÅÅÔ ÐÒÉ×ÉÌÅÇÉÊ ÓÏÚÄÁ×ÁÔØ ÎÏ×ÙÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ", -"îÅ×ÅÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÔÁÂÌÉÃÙ; ÷ÓÅ MERGE-ÔÁÂÌÉÃÙ ÄÏÌÖÎÙ ÂÙÔØ × ÏÄÎÏÊ ÂÁÚÅ ÄÁÎÎÙÈ", -"ïÂÎÁÒÕÖÅÎ deadlock ×Ï ×ÒÅÍÑ ÐÏÌÕÞÅÎÉÑ ÂÌÏËÉÒÏ×ËÉ; ðÏÐÒÏÂÕÊÔÅ ÐÅÒÅÚÁÐÕÓÔÉÔØ ÔÒÁÎÚÁËÃÉÀ", -"ôÁÂÌÉÃÁ ÄÁÎÎÏÇÏ ÔÉÐÁ ÎÅ ÍÏÖÅÔ ÉÍÅÔØ FULLTEXT ÉÎÄÅËÓÁ", -"Cannot add foreign key constraint", -"Cannot add a child row: a foreign key constraint fails", -"Cannot delete a parent row: a foreign key constraint fails", -"ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó master: %-.128s", -"ïÛÉÂËÁ ×Ù×ÏÌÎÅÎÉÑ ÚÁÐÒÏÓÁ ÎÁ master: %-.128s", -"ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ %s: %-.128s", -"îÅÐÒÁ×ÉÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ %s É %s", -"éÓÐÏÌØÚÕÅÍÙÅ SELECT-×ÙÒÁÖÅÎÉÑ ÉÍÅÀÔ ÒÁÚÎÙÅ ËÏÌÉÞÅÓÔ×Á ÓÔÏÌÂÃÏ×", -"îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÚÁÐÒÏÓ ÉÚ-ÚÁ ËÏÎÆÌÉËÔÎÏÊ ÂÌÏËÉÒÏ×ËÉ ÞÔÅÎÉÑ", -"ïÄÎÏ×ÒÅÍÅÎÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ transactional É non-transactional ÔÁÂÌÉà ÏÔËÌÀÞÅÎÏ", -"ïÐÃÉÑ '%s' ÉÓÐÏÌØÚÏ×ÁÎÁ Ä×ÁÖÄÙ", -"User '%-.64s' has exceeded the '%s' resource (current value: %ld)", -"Access denied. You need the %-.128s privilege for this operation", -"Variable '%-.64s' is a LOCAL variable and can't be used with SET GLOBAL", -"Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", -"Variable '%-.64s' doesn't have a default value", -"Variable '%-.64s' can't be set to the value of '%-.64s'", -"Wrong argument type to variable '%-.64s'", -"Variable '%-.64s' can only be set, not read", -"Wrong usage/placement of '%s'", -"This version of MySQL doesn't yet support '%s'", -"Got fatal error %d: '%-.128s' from master when reading data from binary log", +"÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ × SET ÔÏÌØËÏ ËÏÎÓÔÁÎÔÎÙÅ ×ÙÒÁÖÅÎÉÑ", +"ôÁÊÍÁÕÔ ÏÖÉÄÁÎÉÑ ÂÌÏËÉÒÏ×ËÉ ÉÓÔÅË; ÐÏÐÒÏÂÕÊÔÅ ÐÅÒÅÚÁÐÕÓÔÉÔØ ÔÒÁÎÚÁËÃÉÀ", +"ïÂÝÅÅ ËÏÌÉÞÅÓÔ×Ï ÂÌÏËÉÒÏ×ÏË ÐÒÅ×ÙÓÉÌÏ ÒÁÚÍÅÒÙ ÔÁÂÌÉÃÙ ÂÌÏËÉÒÏ×ÏË", +"âÌÏËÉÒÏ×ËÉ ÏÂÎÏ×ÌÅÎÉÊ ÎÅÌØÚÑ ÐÏÌÕÞÉÔØ × ÐÒÏÃÅÓÓÅ ÞÔÅÎÉÑ ÎÅ ÐÒÉÎÑÔÏÊ (× ÒÅÖÉÍÅ READ UNCOMMITTED) ÔÒÁÎÚÁËÃÉÉ", +"îÅ ÄÏÐÕÓËÁÅÔÓÑ DROP DATABASE, ÐÏËÁ ÐÏÔÏË ÄÅÒÖÉÔ ÇÌÏÂÁÌØÎÕÀ ÂÌÏËÉÒÏ×ËÕ ÞÔÅÎÉÑ", +"îÅ ÄÏÐÕÓËÁÅÔÓÑ CREATE DATABASE, ÐÏËÁ ÐÏÔÏË ÄÅÒÖÉÔ ÇÌÏÂÁÌØÎÕÀ ÂÌÏËÉÒÏ×ËÕ ÞÔÅÎÉÑ", +"îÅ×ÅÒÎÙÅ ÐÁÒÁÍÅÔÒÙ ÄÌÑ %s", +"%-.32s@%-.64s ÎÅ ÒÁÚÒÅÛÁÅÔÓÑ ÓÏÚÄÁ×ÁÔØ ÎÏ×ÙÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ", +"îÅ×ÅÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÔÁÂÌÉÃÙ; ÷ÓÅ ÔÁÂÌÉÃÙ × MERGE ÄÏÌÖÎÙ ÐÒÉÎÁÄÌÅÖÁÔØ ÏÄÎÏÊ É ÔÏÊ ÖÅ ÂÁÚÅ ÄÁÎÎÙÈ", +"÷ÏÚÎÉËÌÁ ÔÕÐÉËÏ×ÁÑ ÓÉÔÕÁÃÉÑ × ÐÒÏÃÅÓÓÅ ÐÏÌÕÞÅÎÉÑ ÂÌÏËÉÒÏ×ËÉ; ðÏÐÒÏÂÕÊÔÅ ÐÅÒÅÚÁÐÕÓÔÉÔØ ÔÒÁÎÚÁËÃÉÀ", +"éÓÐÏÌØÚÕÅÍÙÊ ÔÉÐ ÔÁÂÌÉà ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÐÏÌÎÏÔÅËÓÔÏ×ÙÈ ÉÎÄÅËÓÏ×", +"îÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÏÇÒÁÎÉÞÅÎÉÑ ×ÎÅÛÎÅÇÏ ËÌÀÞÁ", +"îÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÉÌÉ ÏÂÎÏ×ÉÔØ ÄÏÞÅÒÎÀÀ ÓÔÒÏËÕ: ÐÒÏ×ÅÒËÁ ÏÇÒÁÎÉÞÅÎÉÊ ×ÎÅÛÎÅÇÏ ËÌÀÞÁ ÎÅ ×ÙÐÏÌÎÑÅÔÓÑ", +"îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÉÌÉ ÏÂÎÏ×ÉÔØ ÒÏÄÉÔÅÌØÓËÕÀ ÓÔÒÏËÕ: ÐÒÏ×ÅÒËÁ ÏÇÒÁÎÉÞÅÎÉÊ ×ÎÅÛÎÅÇÏ ËÌÀÞÁ ÎÅ ×ÙÐÏÌÎÑÅÔÓÑ", +"ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó ÇÏÌÏ×ÎÙÍ ÓÅÒ×ÅÒÏÍ: %-.128s", +"ïÛÉÂËÁ ×ÙÐÏÌÎÅÎÉÑ ÚÁÐÒÏÓÁ ÎÁ ÇÏÌÏ×ÎÏÍ ÓÅÒ×ÅÒÅ: %-.128s", +"ïÛÉÂËÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ %s: %-.128s", +"îÅ×ÅÒÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ %s É %s", +"éÓÐÏÌØÚÏ×ÁÎÎÙÅ ÏÐÅÒÁÔÏÒÙ ×ÙÂÏÒËÉ (SELECT) ÄÁÀÔ ÒÁÚÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÔÏÌÂÃÏ×", +"îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌÎÉÔØ ÚÁÐÒÏÓ, ÐÏÓËÏÌØËÕ Õ ×ÁÓ ÕÓÔÁÎÏ×ÌÅÎÙ ËÏÎÆÌÉËÔÕÀÝÉÅ ÂÌÏËÉÒÏ×ËÉ ÞÔÅÎÉÑ", +"éÓÐÏÌØÚÏ×ÁÎÉÅ ÔÒÁÎÚÁËÃÉÏÎÎÙÈ ÔÁÂÌÉà ÎÁÒÑÄÕ Ó ÎÅÔÒÁÎÚÁËÃÉÏÎÎÙÍÉ ÚÁÐÒÅÝÅÎÏ", +"ïÐÃÉÑ '%s' Ä×ÁÖÄÙ ÉÓÐÏÌØÚÏ×ÁÎÁ × ×ÙÒÁÖÅÎÉÉ", +"ðÏÌØÚÏ×ÁÔÅÌØ '%-.64s' ÐÒÅ×ÙÓÉÌ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÒÅÓÕÒÓÁ '%s' (ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ: %ld)", +"÷ ÄÏÓÔÕÐÅ ÏÔËÁÚÁÎÏ. ÷ÁÍ ÎÕÖÎÙ ÐÒÉ×ÉÌÅÇÉÉ %-.128s ÄÌÑ ÜÔÏÊ ÏÐÅÒÁÃÉÉ", +"ðÅÒÅÍÅÎÎÁÑ '%-.64s' Ñ×ÌÑÅÔÓÑ ÐÏÔÏËÏ×ÏÊ (LOCAL) ÐÅÒÅÍÅÎÎÏÊ É ÎÅ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÁ Ó ÐÏÍÏÝØÀ SET GLOBAL", +"ðÅÒÅÍÅÎÎÁÑ '%-.64s' Ñ×ÌÑÅÔÓÑ ÇÌÏÂÁÌØÎÏÊ (GLOBAL) ÐÅÒÅÍÅÎÎÏÊ, É ÅÅ ÓÌÅÄÕÅÔ ÉÚÍÅÎÑÔØ Ó ÐÏÍÏÝØÀ SET GLOBAL", +"ðÅÒÅÍÅÎÎÁÑ '%-.64s' ÎÅ ÉÍÅÅÔ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ", +"ðÅÒÅÍÅÎÎÁÑ '%-.64s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎÁ × ÚÎÁÞÅÎÉÅ '%-.64s'", +"îÅ×ÅÒÎÙÊ ÔÉÐ ÁÒÇÕÍÅÎÔÁ ÄÌÑ ÐÅÒÅÍÅÎÎÏÊ '%-.64s'", +"ðÅÒÅÍÅÎÎÁÑ '%-.64s' ÍÏÖÅÔ ÂÙÔØ ÔÏÌØËÏ ÕÓÔÁÎÏ×ÌÅÎÁ, ÎÏ ÎÅ ÓÞÉÔÁÎÁ", +"îÅ×ÅÒÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÉÌÉ × ÎÅ×ÅÒÎÏÍ ÍÅÓÔÅ ÕËÁÚÁÎ '%s'", +"üÔÁ ×ÅÒÓÉÑ MySQL ÐÏËÁ ÅÝÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ '%s'", +"ðÏÌÕÞÅÎÁ ÎÅÉÓÐÒÁ×ÉÍÁÑ ÏÛÉÂËÁ %d: '%-.128s' ÏÔ ÇÏÌÏ×ÎÏÇÏ ÓÅÒ×ÅÒÁ × ÐÒÏÃÅÓÓÅ ×ÙÂÏÒËÉ ÄÁÎÎÙÈ ÉÚ Ä×ÏÉÞÎÏÇÏ ÖÕÒÎÁÌÁ", From 1d794e2de706f9f3069492aa031dd3349e5e6ae6 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 10:16:23 -0800 Subject: [PATCH 089/267] Change -IN_RPM -> --rpm and -WINDOWS -> --windows from mysql_install_db support-files/mysql.spec.sh: Change -IN_RPM -> --rpm scripts/make_win_src_distribution.sh: Change -WINDOWS -> --windows (call to mysql_install_db) scripts/mysql_install_db.sh: Change -IN_RPM -> --rpm and -WINDOWS -> --windows --- scripts/make_win_src_distribution.sh | 123 ++++++++++++++------------- scripts/mysql_install_db.sh | 18 ++-- support-files/mysql.spec.sh | 2 +- 3 files changed, 73 insertions(+), 70 deletions(-) diff --git a/scripts/make_win_src_distribution.sh b/scripts/make_win_src_distribution.sh index 17df384522d..9a787080c3e 100755 --- a/scripts/make_win_src_distribution.sh +++ b/scripts/make_win_src_distribution.sh @@ -11,7 +11,6 @@ CP="cp -p" DEBUG=0 SILENT=0 -TMP=/tmp SUFFIX="" OUTTAR=0 @@ -34,33 +33,33 @@ if [ ! -f sql/sql_yacc.cc ]; then exit 1 fi - # -# Assign the tmp directory if it was set from the environment variables +# Debug print of the status # -for i in $TMPDIR $TEMPDIR $TEMP -do - if [ $i ]; then - TMP=$i - break - fi -done +print_debug() +{ + for statement + do + if [ "$DEBUG" = "1" ] ; then + echo $statement + fi + done +} - # # Usage of the script # -show_usage() { - +show_usage() +{ echo "MySQL utility script to create a Windows src package, and it takes" echo "the following arguments:" echo "" echo " --debug Debug, without creating the package" echo " --tmp Specify the temporary location" echo " --silent Do not list verbosely files processed" - echo " --tar Create a tar.gz package instead of .zip" + echo " --tar Create tar.gz package instead of .zip" echo " --help Show this help message" exit 0 @@ -89,6 +88,22 @@ parse_arguments() { parse_arguments "$@" +# +# Assign the tmp directory if it was set from the environment variables +# + +for i in $TMP $TMPDIR $TEMPDIR $TEMP /tmp +do + if [ "$i" ]; then + print_debug "Setting TMP to '$i'" + TMP=$i + break + fi +done + + +# + # # Create a tmp dest directory to copy files # @@ -96,30 +111,23 @@ parse_arguments "$@" BASE=$TMP/my_win_dist$SUFFIX if [ -d $BASE ] ; then - if [ x$DEBUG = x1 ]; then - echo "Destination directory '$BASE' already exists, deleting it" - fi + print_debug "Destination directory '$BASE' already exists, deleting it" rm -r -f $BASE fi $CP -r $SOURCE/VC++Files $BASE - ( find $BASE \( -name "*.dsp" -o -name "*.dsw" \) -and -not -path \*SCCS\* -print )|( -while read v -do - if [ x$DEBUG = x1 ]; then - echo "Replacing LF -> CRLF from '$v'" - fi + while read v + do + print_debug "Replacing LF -> CRLF from '$v'" - # ^M -> type CTRL V + CTRL M - cat $v | sed 's/ //' | sed 's/$/ /' > $v.tmp - rm $v - mv $v.tmp $v - - # awk '!/r\r$/ {print $0"\r"} /r\r$/ {print $0}' $v > $v -done + # ^M -> type CTRL V + CTRL M + cat $v | sed 's/ //' | sed 's/$/ /' > $v.tmp + rm $v + mv $v.tmp $v + done ) # @@ -127,6 +135,9 @@ done # $CP -r $SOURCE/sql/share $BASE/ +rm -r -f "$BASE/share/Makefile" +rm -r -f "$BASE/share/Makefile.in" +rm -r -f "$BASE/share/Makefile.am" # # Clean up if we did this from a bk tree @@ -135,7 +146,7 @@ $CP -r $SOURCE/sql/share $BASE/ if [ -d $BASE/SCCS ] then find $BASE/ -name SCCS -print | xargs rm -r -f - rm -rf "$BASE/InstallShield/Script Files/SCCS" + rm -r -f "$BASE/InstallShield/Script Files/SCCS" fi mkdir $BASE/Docs $BASE/extra $BASE/include @@ -148,9 +159,7 @@ mkdir $BASE/Docs $BASE/extra $BASE/include copy_dir_files() { for arg do - if [ x$DEBUG = x1 ]; then - echo "Copying files from directory '$arg'" - fi + print_debug "Copying files from directory '$arg'" cd $SOURCE/$arg/ for i in *.c *.h *.ih *.i *.ic *.asm \ README INSTALL* LICENSE @@ -183,7 +192,8 @@ copy_dir_dirs() { if [ ! -d $BASE/$arg ]; then mkdir $BASE/$arg - fi + fi + copy_dir_files $arg cd $SOURCE/$arg/ @@ -242,9 +252,7 @@ for i in COPYING ChangeLog README \ Docs/mysqld_error.txt Docs/INSTALL-BINARY do - if [ x$DEBUG = x1 ]; then - echo "Copying file '$i'" - fi + print_debug "Copying file '$i'" if [ -f $i ] then $CP $i $BASE/$i @@ -256,10 +264,8 @@ done # if [ -f scripts/mysql_install_db ]; then - if [ x$DEBUG = x1 ]; then - echo "Initializing the 'data' directory" - fi - scripts/mysql_install_db -WINDOWS --datadir=$BASE/data + print_debug "Initializing the 'data' directory" + scripts/mysql_install_db --windows --datadir=$BASE/data fi @@ -267,8 +273,10 @@ fi # Specify the distribution package name and copy it # -NEW_NAME=mysql@MYSQL_SERVER_SUFFIX@-$version$SUFFIX-win-src -BASE2=$TMP/$NEW_NAME +NEW_DIR_NAME=mysql@MYSQL_SERVER_SUFFIX@-$version$SUFFIX +NEW_NAME=$NEW_DIR_NAME-win-src + +BASE2=$TMP/$NEW_DIR_NAME rm -r -f $BASE2 mv $BASE $BASE2 BASE=$BASE2 @@ -277,7 +285,7 @@ BASE=$BASE2 # If debugging, don't create a zip/tar/gz # -if [ x$DEBUG = x1 ] ; then +if [ "$DEBUG" = "1" ] ; then echo "Please check the distribution files from $BASE" echo "Exiting (without creating the package).." exit @@ -316,13 +324,13 @@ set_tarzip_options() { for arg do - if [ x$arg = x"tar" ]; then + if [ "$arg" = "tar" ]; then ZIPFILE1=gnutar ZIPFILE2=gtar OPT=cvf EXT=".tar" NEED_COMPRESS=1 - if [ x$SILENT = x1 ] ; then + if [ "$SILENT" = "1" ] ; then OPT=cf fi else @@ -331,14 +339,14 @@ set_tarzip_options() OPT="-vr" EXT=".zip" NEED_COMPRESS=0 - if [ x$SILENT = x1 ] ; then + if [ "$SILENT" = "1" ] ; then OPT="-r" fi fi done } -if [ x$OUTTAR = x1 ]; then +if [ "$OUTTAR" = "1" ]; then set_tarzip_options 'tar' else set_tarzip_options 'zip' @@ -347,6 +355,7 @@ fi tar=`which_1 $ZIPFILE1 $ZIPFILE2` if test "$?" = "1" -o "$tar" = "" then + print_debug "Search failed for '$ZIPFILE1', '$ZIPFILE2', using default 'tar'" tar=tar set_tarzip_options 'tar' fi @@ -355,27 +364,21 @@ fi # Create the archive # -if [ xDEBUG = x1 ]; then - echo "Using $tar to create archive" -fi +print_debug "Using $tar to create archive" cd $TMP -$tar $OPT $SOURCE/$NEW_NAME$EXT $NEW_NAME +$tar $OPT $SOURCE/$NEW_NAME$EXT $NEW_DIR_NAME cd $SOURCE -if [ x$NEED_COMPRESS = x1 ] +if [ "$NEED_COMPRESS" = "1" ] then - if [ xDEBUG = x1 ]; then - echo "Compressing archive" - fi + print_debug "Compressing archive" gzip -9 $NEW_NAME$EXT EXT="$EXT.gz" fi -if [ xDEBUG = x1 ]; then - echo "Removing temporary directory" -fi +print_debug "Removing temporary directory" rm -r -f $BASE echo "$NEW_NAME$EXT created successfully !!" diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index f108eb8b7dc..7249a095195 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -7,15 +7,15 @@ # # All unrecognized arguments to this script are passed to mysqld. -IN_RPM=0 +in_rpm=0 case "$1" in - -IN-RPM) - IN_RPM="1"; shift + --rpm) + in_rpm="1"; shift ;; esac windows=0 case "$1" in - -WINDOWS) + --windows) windows="1"; shift ;; esac @@ -102,7 +102,7 @@ mdata=$ldata/mysql if test "$windows" -eq 0 -a ! -x $execdir/mysqld then - if test "$IN_RPM" -eq 1 + if test "$in_rpm" -eq 1 then echo "FATAL ERROR $execdir/mysqld not found!" exit 1 @@ -116,7 +116,7 @@ fi hostname=`@HOSTNAME@` # Install this too in the user table # Check if hostname is valid -if test "$windows" -eq 0 -a "$IN_RPM" -eq 0 -a $force -eq 0 +if test "$windows" -eq 0 -a "$in_rpm" -eq 0 -a $force -eq 0 then resolved=`$bindir/resolveip $hostname 2>&1` if [ $? -ne 0 ] @@ -140,7 +140,7 @@ then fi # Create database directories mysql & test -if test "$IN_RPM" -eq 0 || "$windows" -eq 0 +if test "$in_rpm" -eq 0 || "$windows" -eq 0 then if test ! -d $ldata; then mkdir $ldata; chmod 700 $ldata ; fi if test ! -d $ldata/mysql; then mkdir $ldata/mysql; chmod 700 $ldata/mysql ; fi @@ -342,7 +342,7 @@ END_OF_DATA --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args" then echo "" - if test "$IN_RPM" -eq 0 || "$windows" -eq 0 + if test "$in_rpm" -eq 0 || "$windows" -eq 0 then echo "To start mysqld at boot time you have to copy support-files/mysql.server" echo "to the right place for your system" @@ -363,7 +363,7 @@ then echo "able to use the new GRANT command!" fi echo - if test "$IN_RPM" -eq 0 -a "$windows" -eq 0 + if test "$in_rpm" -eq 0 -a "$windows" -eq 0 then echo "You can start the MySQL daemon with:" echo "cd @prefix@ ; $bindir/mysqld_safe &" diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 34f4a919395..de1ccfe1df7 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -368,7 +368,7 @@ useradd -M -r -d $mysql_datadir -s /bin/bash -c "MySQL server" mysql 2> /dev/nul chown -R mysql $mysql_datadir # Initiate databases -mysql_install_db -IN-RPM +mysql_install_db --rpm # Change permissions again to fix any new files. chown -R mysql $mysql_datadir From c3122e9a6c418783565eba76b4a4363a79809637 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 7 Mar 2003 21:47:04 +0200 Subject: [PATCH 090/267] An interim code cleanup. Major re-write of code yet has to be done, to circumvent assigning of UNIT to current select and to deal better with offset, limit. mysql-test/r/union.result: A fix of merge fix --- mysql-test/r/union.result | 1 - sql/sql_parse.cc | 1 - sql/sql_yacc.yy | 8 ++++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 5dd987a31c4..3a17ab803ad 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -267,4 +267,3 @@ 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/sql/sql_parse.cc b/sql/sql_parse.cc index 1e4b2d41275..f0c04688a6b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3275,7 +3275,6 @@ mysql_new_select(LEX *lex, bool move_down) select_lex->include_neighbour(lex->current_select); select_lex->master_unit()->global_parameters= select_lex; - DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); select_lex->include_global((st_select_lex_node**)&lex->all_selects_list); lex->current_select= select_lex; return 0; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e093a822303..8a45f7a3406 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4744,10 +4744,10 @@ optional_order_or_limit: LEX *lex= &thd->lex; DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); SELECT_LEX *sel= lex->current_select->select_lex(); - sel->master_unit()->global_parameters= - sel->master_unit(); - lex->current_select= sel->master_unit(); - lex->current_select->no_table_names_allowed= 1; + SELECT_LEX_UNIT *unit= sel->master_unit(); + unit->global_parameters= unit; + unit->no_table_names_allowed= 1; + lex->current_select= unit; thd->where= "global ORDER clause"; } order_or_limit From f5144a8a56d92faa19507c5bb3dac22100879425 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Mar 2003 19:35:44 +0200 Subject: [PATCH 091/267] A correct fix for the timeout problem --- libmysql/libmysql.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index af964bb9bfa..996d395776d 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -121,7 +121,7 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, #if defined(__WIN__) || defined(OS2) return connect(s, (struct sockaddr*) name, namelen); #else - int flags, res, s_err; + int flags, res, s_err, result=0; SOCKOPT_OPTLEN_TYPE s_err_size = sizeof(uint); fd_set sfds; struct timeval tv; @@ -175,19 +175,16 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, * implementations of select that don't adjust tv upon * failure to reflect the time remaining */ -#ifdef HAVE_POLL - return(0); -#endif start_time = time(NULL); for (;;) { tv.tv_sec = (long) timeout; tv.tv_usec = 0; #if defined(HPUX) && defined(THREAD) - if ((res = select(s+1, NULL, (int*) &sfds, NULL, &tv)) >= 0) + if ((result = select(s+1, NULL, (int*) &sfds, NULL, &tv)) >= 0) break; #else - if ((res = select(s+1, NULL, &sfds, NULL, &tv)) >= 0) + if ((result = select(s+1, NULL, &sfds, NULL, &tv)) >= 0) break; #endif now_time=time(NULL); @@ -210,7 +207,7 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, errno = s_err; return(-1); /* but return an error... */ } - return(0); /* It's all good! */ + return((res) ? res : result); /* It's all good! */ #endif } From 44c9a3893dc25de21dccd6aab7e1b1d75ec13642 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Mar 2003 18:53:32 +0100 Subject: [PATCH 092/267] Clearer error message when one forgot to grant REPLICATION SLAVE : now we'll have something like this : 030308 18:46:58 Slave I/O thread: connected to master 'gb@localhost:3306', replication started in log 'FIRST' at position 4 030308 18:46:58 While trying to obtain the list of slaves from the master 'localhost:3306', user 'gb' got the following error: 'Access denied. You need the REPLICATION SLAVE privilege for this operation' 030308 18:46:58 Slave I/O thread exiting, read up to log 'FIRST', position 4 instead of "Error updating slave list: Query error". This fixes bug #80. sql/repl_failsafe.cc: Clearer error message when one forgot to grant REPLICATION SLAVE sql/repl_failsafe.h: Clearer error message when one forgot to grant REPLICATION SLAVE sql/slave.cc: Updated for new syntax of update_slave_list --- sql/repl_failsafe.cc | 38 +++++++++++++++++++++++++++++++++----- sql/repl_failsafe.h | 2 +- sql/slave.cc | 2 +- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index e263ca7adeb..8ed002ca649 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -446,8 +446,33 @@ int show_new_master(THD* thd) } } +/* + Asks the master for the list of its other connected slaves. + This is for failsafe replication : + in order for failsafe replication to work, the servers involved in replication + must know of each other. We accomplish this by having each slave report to the + master how to reach it, and on connection, each slave receives information + about where the other slaves are. -int update_slave_list(MYSQL* mysql) + SYNOPSIS + update_slave_list() + mysql pre-existing connection to the master + mi master info + + NOTES + mi is used only to give detailed error messages which include the + hostname/port of the master, the username used by the slave to connect to + the master. + If the user used by the slave to connect to the master does not have the + REPLICATION SLAVE privilege, it will pop in this function because SHOW SLAVE + HOSTS will fail on the master. + + RETURN VALUES + 1 error + 0 success + */ + +int update_slave_list(MYSQL* mysql, MASTER_INFO* mi) { MYSQL_RES* res=0; MYSQL_ROW row; @@ -459,7 +484,7 @@ int update_slave_list(MYSQL* mysql) if (mc_mysql_query(mysql,"SHOW SLAVE HOSTS",0) || !(res = mc_mysql_store_result(mysql))) { - error = "Query error"; + error= mc_mysql_error(mysql); goto err; } @@ -473,7 +498,8 @@ int update_slave_list(MYSQL* mysql) port_ind=4; break; default: - error = "Invalid number of fields in SHOW SLAVE HOSTS"; + error= "the master returned an invalid number of fields for SHOW SLAVE \ +HOSTS"; goto err; } @@ -491,7 +517,7 @@ int update_slave_list(MYSQL* mysql) { if (!(si = (SLAVE_INFO*)my_malloc(sizeof(SLAVE_INFO), MYF(MY_WME)))) { - error = "Out of memory"; + error= "the slave is out of memory"; pthread_mutex_unlock(&LOCK_slave_list); goto err; } @@ -515,7 +541,9 @@ err: mc_mysql_free_result(res); if (error) { - sql_print_error("Error updating slave list: %s",error); + sql_print_error("While trying to obtain the list of slaves from the master \ +'%s:%d', user '%s' got the following error: '%s'", + mi->host, mi->port, mi->user, error); DBUG_RETURN(1); } DBUG_RETURN(0); diff --git a/sql/repl_failsafe.h b/sql/repl_failsafe.h index ef1dc1f8778..ae8bb2bc4d5 100644 --- a/sql/repl_failsafe.h +++ b/sql/repl_failsafe.h @@ -19,7 +19,7 @@ extern const char* rpl_role_type[], *rpl_status_type[]; pthread_handler_decl(handle_failsafe_rpl,arg); void change_rpl_status(RPL_STATUS from_status, RPL_STATUS to_status); int find_recovery_captain(THD* thd, MYSQL* mysql); -int update_slave_list(MYSQL* mysql); +int update_slave_list(MYSQL* mysql, MASTER_INFO* mi); extern HASH slave_list; diff --git a/sql/slave.cc b/sql/slave.cc index 4d08fcbbd5a..dcec15f173e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2173,7 +2173,7 @@ connected: on with life. */ thd->proc_info = "Registering slave on master"; - if (register_slave_on_master(mysql) || update_slave_list(mysql)) + if (register_slave_on_master(mysql) || update_slave_list(mysql, mi)) goto err; } From 249788280aa26cb1566652330744bb678caff854 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Mar 2003 22:19:41 +0200 Subject: [PATCH 093/267] Fix for a crashing bug --- sql/sql_select.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8f6cf8fba61..bf3f9a94936 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7088,7 +7088,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, Item *item=0; uint count= (uint) ((Item_int*)itemptr)->value; - if (count > fields.elements) + if (!count || count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), MYF(0),itemptr->full_name(), From ec6bd7a49a35e50f462dbbb85bada9bfbbb13682 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Mar 2003 22:37:22 +0200 Subject: [PATCH 094/267] Additional bug fix libmysql/libmysql.c: Additional fix for connection being established during select() --- libmysql/libmysql.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 996d395776d..8a85df3c60f 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -207,6 +207,9 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, errno = s_err; return(-1); /* but return an error... */ } + if (res && result > 0) + result=res=0; // We did it in select() !!! + return((res) ? res : result); /* It's all good! */ #endif } From fd5182cb743edcb20122ca004a26ee6079958ff8 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 9 Mar 2003 17:13:37 +0200 Subject: [PATCH 095/267] Changed --debug to append to test instead of creating new trace files. (This patch is already in 4.0) mysql-test/mysql-test-run.sh: Changed --debug to append to test instead of creating new trace files --- mysql-test/mysql-test-run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 8b1c8ff1b44..faa49969a23 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -220,9 +220,9 @@ while test $# -gt 0; do ;; --debug) EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \ - --debug=d:t:i:O,$MYSQL_TEST_DIR/var/log/master.trace" + --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/master.trace" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \ - --debug=d:t:i:O,$MYSQL_TEST_DIR/var/log/slave.trace" + --debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/slave.trace" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug" ;; -- ) shift; break ;; From 64cf72900c4780e5bb32bd48dab7358dd0b08f62 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 9 Mar 2003 19:03:55 +0200 Subject: [PATCH 096/267] Made it possible to use --max-delayed-threads=0 in order to disable INSERT DELAYED. --- sql/mysqld.cc | 4 ++-- sql/sql_insert.cc | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a03c4f5db8b..a042b7f314b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3770,9 +3770,9 @@ struct my_option my_long_options[] = (gptr*) &max_connect_errors, (gptr*) &max_connect_errors, 0, GET_ULONG, REQUIRED_ARG, MAX_CONNECT_ERRORS, 1, ~0L, 0, 1, 0}, {"max_delayed_threads", OPT_MAX_DELAYED_THREADS, - "Don't start more than this number of threads to handle INSERT DELAYED statements.", + "Don't start more than this number of threads to handle INSERT DELAYED statements. This option does not yet have effect (on TODO), unless it is set to zero, which means INSERT DELAYED is not used.", (gptr*) &max_insert_delayed_threads, (gptr*) &max_insert_delayed_threads, - 0, GET_ULONG, REQUIRED_ARG, 20, 1, 16384, 0, 1, 0}, + 0, GET_ULONG, REQUIRED_ARG, 20, 0, 16384, 0, 1, 0}, {"max_heap_table_size", OPT_MAX_HEP_TABLE_SIZE, "Don't allow creation of heap tables bigger than this.", (gptr*) &global_system_variables.max_heap_table_size, diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 7725808075a..5bf852afc32 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -140,7 +140,8 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List &fields, if ((lock_type == TL_WRITE_DELAYED && ((specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) || thd->slave_thread)) || - (lock_type == TL_WRITE_CONCURRENT_INSERT && duplic == DUP_REPLACE)) + (lock_type == TL_WRITE_CONCURRENT_INSERT && duplic == DUP_REPLACE) || + !max_insert_delayed_threads) lock_type=TL_WRITE; if (lock_type == TL_WRITE_DELAYED) From 6c366f8d90f99197aea2908ec2a208854197279c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 00:21:04 +0100 Subject: [PATCH 097/267] .del-stamp-h.in~4a5d6676232516c5: Delete: innobase/stamp-h.in BitKeeper/deleted/.del-stamp-h.in~4a5d6676232516c5: Delete: innobase/stamp-h.in --- innobase/stamp-h.in | 1 - 1 file changed, 1 deletion(-) delete mode 100644 innobase/stamp-h.in diff --git a/innobase/stamp-h.in b/innobase/stamp-h.in deleted file mode 100644 index 9788f70238c..00000000000 --- a/innobase/stamp-h.in +++ /dev/null @@ -1 +0,0 @@ -timestamp From 68ae365395c78eba74b4db66fb0989e76d221d0d Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 11:22:37 +0200 Subject: [PATCH 098/267] Don't allow BACKUP TABLE to overwrite files Fixed memory leak when replication restarts in debug mode include/my_sys.h: Added option to not overwrite files to my_copy() mysql-test/mysql-test-run.sh: Fixed --ddd option Fixed that mysqld is restarted if there is a testname-master.sh file mysql-test/r/backup.result: Update for security fix in BACKUP TABLE mysql-test/t/backup.test: Update for security fix in BACKUP TABLE mysys/my_copy.c: Added option to not overwrite files to my_copy() sql/ha_myisam.cc: Don't allow BACKUP TABLE to overwrite files sql/slave.cc: Fixed problem with --debug output from 'handle_slave' Fixed memory leak when replication restarts in debug mode --- include/my_sys.h | 1 + mysql-test/mysql-test-run.sh | 4 ++-- mysql-test/r/backup.result | 14 +++++++----- mysql-test/t/backup-master.sh | 5 +++++ mysql-test/t/backup.test | 39 +++++++++++++++++--------------- mysys/my_copy.c | 30 ++++++++++++++++++------- sql/ha_myisam.cc | 42 +++++++++++++++++------------------ sql/slave.cc | 34 +++++++++++++++------------- 8 files changed, 98 insertions(+), 71 deletions(-) create mode 100755 mysql-test/t/backup-master.sh diff --git a/include/my_sys.h b/include/my_sys.h index cd6ec62719a..924a6094416 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -73,6 +73,7 @@ extern int NEAR my_errno; /* Last error in mysys */ #define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ #define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ #define MY_THREADSAFE 128 /* pread/pwrite: Don't allow interrupts */ +#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy; Don't overwrite file */ #define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ #define MY_GIVE_INFO 2 /* Give time info about process*/ diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 8b1c8ff1b44..e6a52ba8756 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -604,7 +604,7 @@ start_slave() $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" if [ x$DO_DDD = x1 ] then - $ECHO "set args $master_args" > $GDB_SLAVE_INIT + $ECHO "set args $slave_args" > $GDB_SLAVE_INIT ddd --debugger "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD & prompt_user "Hit enter to continue after you've started the slave" elif [ x$DO_GDB = x1 ] @@ -746,7 +746,7 @@ run_testcase () stop_master start_master else - if [ ! -z "$EXTRA_MASTER_OPT" ] || [ x$MASTER_RUNNING != x1 ] ; + if [ ! -z "$EXTRA_MASTER_OPT" ] || [ x$MASTER_RUNNING != x1 ] || [ -f $master_init_script ] then EXTRA_MASTER_OPT="" stop_master diff --git a/mysql-test/r/backup.result b/mysql-test/r/backup.result index 2bbe15954dc..0d34cd7eae8 100644 --- a/mysql-test/r/backup.result +++ b/mysql-test/r/backup.result @@ -1,10 +1,13 @@ Table Op Msg_type Msg_text -test.t1 backup error Failed copying .frm file: errno = X -test.t1 backup status Operation failed +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed Table Op Msg_type Msg_text -test.t1 backup status OK +test.t4 backup status OK Table Op Msg_type Msg_text -test.t1 restore status OK +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed +Table Op Msg_type Msg_text +test.t4 restore status OK count(*) 0 Table Op Msg_type Msg_text @@ -18,7 +21,6 @@ n 45 67 Table Op Msg_type Msg_text -test.t1 backup status OK test.t2 backup status OK test.t3 backup status OK Table Op Msg_type Msg_text @@ -40,4 +42,4 @@ k Table Op Msg_type Msg_text test.t1 restore status OK Table Op Msg_type Msg_text -test.t1 backup status OK +test.t5 backup status OK diff --git a/mysql-test/t/backup-master.sh b/mysql-test/t/backup-master.sh new file mode 100755 index 00000000000..99da5857afe --- /dev/null +++ b/mysql-test/t/backup-master.sh @@ -0,0 +1,5 @@ +#!/bin/sh +if [ "$MYSQL_TEST_DIR" ] +then + rm -f $MYSQL_TEST_DIR/var/tmp/*.frm $MYSQL_TEST_DIR/var/tmp/*.MY? +fi diff --git a/mysql-test/t/backup.test b/mysql-test/t/backup.test index 71343783d69..e4d5be00445 100644 --- a/mysql-test/t/backup.test +++ b/mysql-test/t/backup.test @@ -1,15 +1,23 @@ +# +# This test is a bit tricky as we can't use backup table to overwrite an old +# table +# connect (con1,localhost,root,,); connect (con2,localhost,root,,); connection con1; set SQL_LOG_BIN=0; -drop table if exists t1; +drop table if exists t1,t2,t3,t4; +create table t4(n int); +--replace_result "errno: 2" "errno: X" "errno: 22" "errno: X" "errno: 23" "errno: X" +backup table t4 to '../bogus'; +backup table t4 to '../tmp'; +--replace_result "errno: 17" "errno: X" +backup table t4 to '../tmp'; +drop table t4; +restore table t4 from '../tmp'; +select count(*) from t4; + create table t1(n int); ---replace_result "errno = 2" "errno = X" "errno = 22" "errno = X" "errno = 23" "errno = X" -backup table t1 to '../bogus'; -backup table t1 to '../tmp'; -drop table t1; -restore table t1 from '../tmp'; -select count(*) from t1; insert into t1 values (23),(45),(67); backup table t1 to '../tmp'; drop table t1; @@ -20,29 +28,24 @@ create table t2(m int not null primary key); create table t3(k int not null primary key); insert into t2 values (123),(145),(167); insert into t3 values (223),(245),(267); -backup table t1,t2,t3 to '../tmp'; +backup table t2,t3 to '../tmp'; drop table t1,t2,t3; restore table t1,t2,t3 from '../tmp'; select n from t1; select m from t2; select k from t3; -drop table t1,t2,t3; +drop table t1,t2,t3,t4; restore table t1 from '../tmp'; connection con2; +rename table t1 to t5; --send -lock tables t1 write; +lock tables t5 write; connection con1; --send -backup table t1 to '../tmp'; +backup table t5 to '../tmp'; connection con2; reap; unlock tables; connection con1; reap; -drop table t1; - - - - - - +drop table t5; diff --git a/mysys/my_copy.c b/mysys/my_copy.c index 9b02d84d063..5bc4d1d51fa 100644 --- a/mysys/my_copy.c +++ b/mysys/my_copy.c @@ -32,17 +32,29 @@ struct utimbuf { #endif - /* - Ordinary ownership and accesstimes are copied from 'from-file' - if MyFlags & MY_HOLD_ORIGINAL_MODES is set and to-file exists then - the modes of to-file isn't changed - Dont set MY_FNABP or MY_NABP bits on when calling this function ! - */ +/* + int my_copy(const char *from, const char *to, myf MyFlags) + + NOTES + Ordinary ownership and accesstimes are copied from 'from-file' + If MyFlags & MY_HOLD_ORIGINAL_MODES is set and to-file exists then + the modes of to-file isn't changed + If MyFlags & MY_DONT_OVERWRITE_FILE is set, we will give an error + if the file existed. + + WARNING + Don't set MY_FNABP or MY_NABP bits on when calling this function ! + + RETURN + 0 ok + # Error + +*/ int my_copy(const char *from, const char *to, myf MyFlags) { uint Count; - int new_file_stat; + int new_file_stat, create_flag; File from_file,to_file; char buff[IO_SIZE]; struct stat stat_buff,new_stat_buff; @@ -63,8 +75,10 @@ int my_copy(const char *from, const char *to, myf MyFlags) } if (MyFlags & MY_HOLD_ORIGINAL_MODES && !new_file_stat) stat_buff=new_stat_buff; + create_flag= (MyFlags & MY_DONT_OVERWRITE_FILE) ? O_EXCL : O_TRUNC; + if ((to_file= my_create(to,(int) stat_buff.st_mode, - O_WRONLY | O_TRUNC | O_BINARY | O_SHARE, + O_WRONLY | create_flag | O_BINARY | O_SHARE, MyFlags)) < 0) goto err; diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 31a8d3c7109..1349e28b546 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -419,38 +419,38 @@ int ha_myisam::backup(THD* thd, HA_CHECK_OPT *check_opt) const char* errmsg = ""; if (!fn_format(dst_path, table_name, backup_dir, reg_ext, 4 + 64)) - { - errmsg = "Failed in fn_format() for .frm file: errno = %d"; - error = HA_ADMIN_INVALID; - goto err; - } + { + errmsg = "Failed in fn_format() for .frm file (errno: %d)"; + error = HA_ADMIN_INVALID; + goto err; + } if (my_copy(fn_format(src_path, table->path,"", reg_ext, 4), - dst_path, - MYF(MY_WME | MY_HOLD_ORIGINAL_MODES ))) + dst_path, + MYF(MY_WME | MY_HOLD_ORIGINAL_MODES | MY_DONT_OVERWRITE_FILE))) { error = HA_ADMIN_FAILED; - errmsg = "Failed copying .frm file: errno = %d"; + errmsg = "Failed copying .frm file (errno: %d)"; goto err; } if (!fn_format(dst_path, table_name, backup_dir, MI_NAME_DEXT, 4 + 64)) - { - errmsg = "Failed in fn_format() for .MYD file: errno = %d"; - error = HA_ADMIN_INVALID; - goto err; - } + { + errmsg = "Failed in fn_format() for .MYD file (errno: %d)"; + error = HA_ADMIN_INVALID; + goto err; + } if (my_copy(fn_format(src_path, table->path,"", MI_NAME_DEXT, 4), dst_path, - MYF(MY_WME | MY_HOLD_ORIGINAL_MODES )) ) - { - errmsg = "Failed copying .MYD file: errno = %d"; - error= HA_ADMIN_FAILED; - goto err; - } + MYF(MY_WME | MY_HOLD_ORIGINAL_MODES | MY_DONT_OVERWRITE_FILE))) + { + errmsg = "Failed copying .MYD file (errno: %d)"; + error= HA_ADMIN_FAILED; + goto err; + } return HA_ADMIN_OK; - err: +err: { MI_CHECK param; myisamchk_init(¶m); @@ -459,7 +459,7 @@ int ha_myisam::backup(THD* thd, HA_CHECK_OPT *check_opt) param.db_name = table->table_cache_key; param.table_name = table->table_name; param.testflag = 0; - mi_check_print_error(¶m,errmsg, errno ); + mi_check_print_error(¶m, errmsg, my_errno); return error; } } diff --git a/sql/slave.cc b/sql/slave.cc index a1972dc5a5d..358a908e0cc 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1270,6 +1270,17 @@ This may also be a network problem, or just a bug in the master or slave code.\ pthread_handler_decl(handle_slave,arg __attribute__((unused))) { + // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff + my_thread_init(); + if (!server_id) + { + pthread_cond_broadcast(&COND_slave_start); + sql_print_error("Server id not set, will not start slave"); + my_thread_end(); + pthread_exit((void*)1); + } + DBUG_ENTER("handle_slave"); + #ifndef DBUG_OFF slave_begin: #endif @@ -1278,20 +1289,14 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) char llbuff[22]; pthread_mutex_lock(&LOCK_slave); - if (!server_id) + + if (slave_running) { pthread_cond_broadcast(&COND_slave_start); pthread_mutex_unlock(&LOCK_slave); - sql_print_error("Server id not set, will not start slave"); - pthread_exit((void*)1); + my_thread_end(); + pthread_exit((void*)1); // safety just in case } - - if(slave_running) - { - pthread_cond_broadcast(&COND_slave_start); - pthread_mutex_unlock(&LOCK_slave); - pthread_exit((void*)1); // safety just in case - } slave_running = 1; abort_slave = 0; #ifndef DBUG_OFF @@ -1304,11 +1309,8 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) bool retried_once = 0; ulonglong last_failed_pos = 0; - // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff - my_thread_init(); slave_thd = thd = new THD; // note that contructor of THD uses DBUG_ ! thd->set_time(); - DBUG_ENTER("handle_slave"); pthread_detach_this_thread(); if (init_slave_thread(thd) || init_master_info(&glob_mi)) @@ -1518,18 +1520,18 @@ position %s", abort_slave = 0; save_temporary_tables = thd->temporary_tables; thd->temporary_tables = 0; // remove tempation from destructor to close them - pthread_cond_broadcast(&COND_slave_stopped); // tell the world we are done - pthread_mutex_unlock(&LOCK_slave); net_end(&thd->net); // destructor will not free it, because we are weird slave_thd = 0; (void) pthread_mutex_lock(&LOCK_thread_count); delete thd; (void) pthread_mutex_unlock(&LOCK_thread_count); - my_thread_end(); + pthread_mutex_unlock(&LOCK_slave); + pthread_cond_broadcast(&COND_slave_stopped); // tell the world we are done #ifndef DBUG_OFF if(abort_slave_event_count && !events_till_abort) goto slave_begin; #endif + my_thread_end(); pthread_exit(0); DBUG_RETURN(0); // Can't return anything here } From 281ad254dcc0b719df12d2c0374cc9e32c12c0c2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 11:50:46 +0200 Subject: [PATCH 099/267] Better fix for connect timeout problem. --- libmysql/libmysql.c | 71 +++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 8a85df3c60f..c50193c5e2c 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -121,15 +121,16 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, #if defined(__WIN__) || defined(OS2) return connect(s, (struct sockaddr*) name, namelen); #else - int flags, res, s_err, result=0; + int flags, res, s_err; SOCKOPT_OPTLEN_TYPE s_err_size = sizeof(uint); fd_set sfds; struct timeval tv; time_t start_time, now_time; - /* If they passed us a timeout of zero, we should behave - * exactly like the normal connect() call does. - */ + /* + If they passed us a timeout of zero, we should behave + exactly like the normal connect() call does. + */ if (timeout == 0) return connect(s, (struct sockaddr*) name, namelen); @@ -150,30 +151,31 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, if (res == 0) /* Connected quickly! */ return(0); - /* Otherwise, our connection is "in progress." We can use - * the select() call to wait up to a specified period of time - * for the connection to suceed. If select() returns 0 - * (after waiting howevermany seconds), our socket never became - * writable (host is probably unreachable.) Otherwise, if - * select() returns 1, then one of two conditions exist: - * - * 1. An error occured. We use getsockopt() to check for this. - * 2. The connection was set up sucessfully: getsockopt() will - * return 0 as an error. - * - * Thanks goes to Andrew Gierth - * who posted this method of timing out a connect() in - * comp.unix.programmer on August 15th, 1997. - */ + /* + Otherwise, our connection is "in progress." We can use + the select() call to wait up to a specified period of time + for the connection to suceed. If select() returns 0 + (after waiting howevermany seconds), our socket never became + writable (host is probably unreachable.) Otherwise, if + select() returns 1, then one of two conditions exist: + + 1. An error occured. We use getsockopt() to check for this. + 2. The connection was set up sucessfully: getsockopt() will + return 0 as an error. + + Thanks goes to Andrew Gierth + who posted this method of timing out a connect() in + comp.unix.programmer on August 15th, 1997. + */ FD_ZERO(&sfds); FD_SET(s, &sfds); /* - * select could be interrupted by a signal, and if it is, - * the timeout should be adjusted and the select restarted - * to work around OSes that don't restart select and - * implementations of select that don't adjust tv upon - * failure to reflect the time remaining + select could be interrupted by a signal, and if it is, + the timeout should be adjusted and the select restarted + to work around OSes that don't restart select and + implementations of select that don't adjust tv upon + failure to reflect the time remaining */ start_time = time(NULL); for (;;) @@ -181,22 +183,25 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, tv.tv_sec = (long) timeout; tv.tv_usec = 0; #if defined(HPUX) && defined(THREAD) - if ((result = select(s+1, NULL, (int*) &sfds, NULL, &tv)) >= 0) + if ((res = select(s+1, NULL, (int*) &sfds, NULL, &tv)) > 0) break; #else - if ((result = select(s+1, NULL, &sfds, NULL, &tv)) >= 0) + if ((res = select(s+1, NULL, &sfds, NULL, &tv)) > 0) break; #endif + if (res == 0) /* timeout */ + return -1; now_time=time(NULL); timeout-= (uint) (now_time - start_time); if (errno != EINTR || (int) timeout <= 0) return -1; } - /* select() returned something more interesting than zero, let's - * see if we have any errors. If the next two statements pass, - * we've got an open socket! - */ + /* + select() returned something more interesting than zero, let's + see if we have any errors. If the next two statements pass, + we've got an open socket! + */ s_err=0; if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char*) &s_err, &s_err_size) != 0) @@ -207,10 +212,8 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, errno = s_err; return(-1); /* but return an error... */ } - if (res && result > 0) - result=res=0; // We did it in select() !!! - - return((res) ? res : result); /* It's all good! */ + return (0); /* ok */ + #endif } From 66e8db8241bfcad048d08fa1a24532fae8ee5f0a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 12:00:19 +0200 Subject: [PATCH 100/267] Fix that round(0.1,1) == round(0.1,1) sql/slave.cc: Fixed problem with --debug output in handle_slave --- sql/item_func.cc | 18 +++++++++++++----- sql/slave.cc | 7 ++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sql/item_func.cc b/sql/item_func.cc index ef629098d2a..d5b7869cbcb 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -679,20 +679,28 @@ double Item_func_round::val() double value=args[0]->val(); int dec=(int) args[1]->val_int(); uint abs_dec=abs(dec); + double tmp; + /* + tmp2 is here to avoid return the value with 80 bit precision + This will fix that the test round(0.1,1) = round(0.1,1) is true + */ + volatile double tmp2; if ((null_value=args[0]->null_value || args[1]->null_value)) return 0.0; - double tmp=(abs_dec < array_elements(log_10) ? - log_10[abs_dec] : pow(10.0,(double) abs_dec)); + tmp=(abs_dec < array_elements(log_10) ? + log_10[abs_dec] : pow(10.0,(double) abs_dec)); if (truncate) { if (value >= 0) - return dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; + tmp2= dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; else - return dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp; + tmp2= dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp; } - return dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp; + else + tmp2=dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp; + return tmp2; } diff --git a/sql/slave.cc b/sql/slave.cc index 4d08fcbbd5a..0699029d69e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1815,7 +1815,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) if (init_thr_lock() || thd->store_globals()) { - end_thread(thd,0); + thd->cleanup(); + delete thd; DBUG_RETURN(-1); } @@ -2096,6 +2097,7 @@ extern "C" pthread_handler_decl(handle_slave_io,arg) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); + DBUG_ENTER("handle_slave_io"); #ifndef DBUG_OFF slave_begin: @@ -2113,7 +2115,6 @@ slave_begin: #endif thd= new THD; // note that contructor of THD uses DBUG_ ! - DBUG_ENTER("handle_slave_io"); THD_CHECK_SENTRY(thd); pthread_detach_this_thread(); @@ -2370,6 +2371,7 @@ extern "C" pthread_handler_decl(handle_slave_sql,arg) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); + DBUG_ENTER("handle_slave_sql"); #ifndef DBUG_OFF slave_begin: @@ -2382,7 +2384,6 @@ slave_begin: #ifndef DBUG_OFF rli->events_till_abort = abort_slave_event_count; #endif - DBUG_ENTER("handle_slave_sql"); thd = new THD; // note that contructor of THD uses DBUG_ ! THD_CHECK_SENTRY(thd); From 3223245de3177fb42ce415b35f9edd050a5733b1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 14:06:21 +0400 Subject: [PATCH 101/267] Handling of log-error added in embedded server libmysqld/lib_sql.cc: handling of log-error added to embedded server BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + libmysqld/lib_sql.cc | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index fcc23ea7073..ae739832bad 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -22,6 +22,7 @@ heikki@donna.mysql.fi heikki@hundin.mysql.fi heikki@rescue. heikki@work.mysql.com +hf@deer.mysql.r18.ru hf@genie.(none) igor@hundin.mysql.fi jani@dsl-jkl1657.dial.inet.fi diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index fad596d30b9..641fd2bb2c1 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -403,6 +403,21 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups) DBUG_PRINT("info",("%s Ver %s for %s on %s\n",my_progname, server_version, SYSTEM_TYPE,MACHINE_TYPE)); + if (opt_error_log) + { + if (!log_error_file_ptr[0]) + fn_format(log_error_file, glob_hostname, mysql_data_home, ".err", 0); + else + fn_format(log_error_file, log_error_file_ptr, mysql_data_home, ".err", + MY_UNPACK_FILENAME | MY_SAFE_PATH); + if (!log_error_file[0]) + opt_error_log= 1; // Too long file name + else + { + freopen(log_error_file, "a+", stderr); + } + } + /* These must be set early */ (void) pthread_mutex_init(&LOCK_mysql_create_db,MY_MUTEX_INIT_SLOW); From 73c2d4ad498890c2ba2cfa9a2c20fae4d37b1859 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 12:24:22 +0200 Subject: [PATCH 102/267] Don't allow multiple --user options to mysqld (First one is used) scripts/safe_mysqld.sh: Don't allow multiple --user options sql/mysqld.cc: Don't allow multiple --user options --- scripts/safe_mysqld.sh | 8 ++++++-- sql/mysqld.cc | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/scripts/safe_mysqld.sh b/scripts/safe_mysqld.sh index c1b231eb001..a8ca3537cb3 100644 --- a/scripts/safe_mysqld.sh +++ b/scripts/safe_mysqld.sh @@ -33,8 +33,12 @@ parse_arguments() { --basedir=*) MY_BASEDIR_VERSION=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --datadir=*) DATADIR=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --pid-file=*) pid_file=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; - --user=*) user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 ;; - + --user=*) + if [ $SET_USER == 0 ] + then + user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 + fi + ;; # these two might have been set in a [safe_mysqld] section of my.cnf # they get passed via environment variables to safe_mysqld --socket=*) MYSQL_UNIX_PORT=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 0ca8659e7f6..83933e6e8ad 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3639,7 +3639,10 @@ static void get_options(int argc,char **argv) use_temp_pool=1; break; case 'u': - mysqld_user=optarg; + if (!mysqld_user) + mysqld_user=optarg; + else + fprintf(stderr, "Warning: Ignoring user change to '%s' becasue the user is set to '%s' earlier on the command line\n", optarg, mysqld_user); break; case 'v': case 'V': From dc3bd0731f56bf032c161b937c0ba1d704d3ed60 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 12:31:49 +0100 Subject: [PATCH 103/267] ignore world-writeable my.cnf's --- mysys/default.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mysys/default.c b/mysys/default.c index 062711b185d..c9b0704216a 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -39,6 +39,7 @@ #include "mysys_priv.h" #include "m_string.h" #include "m_ctype.h" +#include char *defaults_extra_file=0; @@ -60,13 +61,13 @@ DATADIR, NullS, }; -#define default_ext ".cnf" /* extension for config file */ +#define default_ext ".cnf" /* extension for config file */ #ifdef __WIN__ #include #define windows_ext ".ini" #endif -static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, +static my_bool search_default_file(DYNAMIC_ARRAY *args,MEM_ROOT *alloc, const char *dir, const char *config_file, const char *ext, TYPELIB *group); @@ -241,6 +242,16 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, { strmov(name,config_file); } + fn_format(name,name,"","",4); +#if !defined(__WIN__) && !defined(OS2) + { + MY_STAT stat_info; + if (!my_stat(name,&stat_info,MYF(MY_WME))) + return 0; + if (stat_info.st_mode & S_IWOTH) /* ignore world-writeable files */ + return 0; + } +#endif if (!(fp = my_fopen(fn_format(name,name,"","",4),O_RDONLY,MYF(0)))) return 0; /* Ignore wrong files */ From 5c100a6975cb50a6e20e6a0380bfb616e54eab70 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 13:54:20 +0200 Subject: [PATCH 104/267] after merge fixes --- mysql-test/r/backup.result | 40 +++++++++++++++++-------------- mysql-test/r/delete.result | 15 ++++++++++++ mysql-test/r/join.result | 19 +++++++++++++++ mysql-test/r/type_datetime.result | 6 +++++ mysys/my_getopt.c | 4 ++-- sql/mysqld.cc | 8 +++---- 6 files changed, 68 insertions(+), 24 deletions(-) diff --git a/mysql-test/r/backup.result b/mysql-test/r/backup.result index 43d57d2d4f7..0e0a87172f2 100644 --- a/mysql-test/r/backup.result +++ b/mysql-test/r/backup.result @@ -1,20 +1,24 @@ set SQL_LOG_BIN=0; -drop table if exists t1; -create table t1(n int); -backup table t1 to '../bogus'; +create table t4(n int); +backup table t4 to '../bogus'; Table Op Msg_type Msg_text -test.t1 backup error Failed copying .frm file: errno = X -test.t1 backup status Operation failed -backup table t1 to '../tmp'; +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed +backup table t4 to '../tmp'; Table Op Msg_type Msg_text -test.t1 backup status OK -drop table t1; -restore table t1 from '../tmp'; +test.t4 backup status OK +backup table t4 to '../tmp'; Table Op Msg_type Msg_text -test.t1 restore status OK -select count(*) from t1; +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed +drop table t4; +restore table t4 from '../tmp'; +Table Op Msg_type Msg_text +test.t4 restore status OK +select count(*) from t4; count(*) 0 +create table t1(n int); insert into t1 values (23),(45),(67); backup table t1 to '../tmp'; Table Op Msg_type Msg_text @@ -35,9 +39,8 @@ create table t2(m int not null primary key); create table t3(k int not null primary key); insert into t2 values (123),(145),(167); insert into t3 values (223),(245),(267); -backup table t1,t2,t3 to '../tmp'; +backup table t2,t3 to '../tmp'; Table Op Msg_type Msg_text -test.t1 backup status OK test.t2 backup status OK test.t3 backup status OK drop table t1,t2,t3; @@ -61,13 +64,14 @@ k 223 245 267 -drop table t1,t2,t3; +drop table t1,t2,t3,t4; restore table t1 from '../tmp'; Table Op Msg_type Msg_text test.t1 restore status OK -lock tables t1 write; -backup table t1 to '../tmp'; +rename table t1 to t5; +lock tables t5 write; +backup table t5 to '../tmp'; unlock tables; Table Op Msg_type Msg_text -test.t1 backup status OK -drop table t1; +test.t5 backup status OK +drop table t5; diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result index c2230722aa6..582ab894233 100644 --- a/mysql-test/r/delete.result +++ b/mysql-test/r/delete.result @@ -24,3 +24,18 @@ create table t1 (a bigint not null, primary key (a,a,a,a,a,a,a,a,a,a)); insert into t1 values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27); delete from t1 where a=27; drop table t1; +CREATE TABLE t1 ( +bool char(0) default NULL, +not_null varchar(20) binary NOT NULL default '', +misc integer not null, +PRIMARY KEY (not_null) +) TYPE=MyISAM; +INSERT INTO t1 VALUES (NULL,'a',4), (NULL,'b',5), (NULL,'c',6), (NULL,'d',7); +select * from t1 where misc > 5 and bool is null; +bool not_null misc +NULL c 6 +NULL d 7 +delete from t1 where misc > 5 and bool is null; +select * from t1 where misc > 5 and bool is null; +bool not_null misc +drop table t1; diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result index d8c45ca09ce..9f6a8762325 100644 --- a/mysql-test/r/join.result +++ b/mysql-test/r/join.result @@ -251,7 +251,26 @@ t1_id t2_id type cost_unit min_value max_value t3_id item_id id name 22 1 Percent Cost 100 -1 6 291 1 s1 23 1 Percent Cost 100 -1 21 291 1 s1 drop table t1,t2; +CREATE TABLE t1 ( +siteid varchar(25) NOT NULL default '', +emp_id varchar(30) NOT NULL default '', +rate_code varchar(10) default NULL, +UNIQUE KEY site_emp (siteid,emp_id), +KEY siteid (siteid) +) TYPE=MyISAM; +INSERT INTO t1 VALUES ('rivercats','psmith','cust'), ('rivercats','KWalker','cust'); +CREATE TABLE t2 ( +siteid varchar(25) NOT NULL default '', +rate_code varchar(10) NOT NULL default '', +base_rate float NOT NULL default '0', +PRIMARY KEY (siteid,rate_code), +FULLTEXT KEY rate_code (rate_code) +) TYPE=MyISAM; +INSERT INTO t2 VALUES ('rivercats','cust',20); +SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE emp.emp_id = 'psmith' AND lr.siteid = 'rivercats'; rate_code base_rate cust 20 +SELECT emp.rate_code, lr.base_rate FROM t1 AS emp LEFT JOIN t2 AS lr USING (siteid, rate_code) WHERE lr.siteid = 'rivercats' AND emp.emp_id = 'psmith'; rate_code base_rate cust 20 +drop table t1,t2; diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result index 38b264b96b9..4785f790069 100644 --- a/mysql-test/r/type_datetime.result +++ b/mysql-test/r/type_datetime.result @@ -78,3 +78,9 @@ EXPLAIN SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00'; table type possible_keys key key_len ref rows Extra t1 ref expedition expedition 8 const 1 Using where drop table t1; +create table t1 (a datetime not null, b datetime not null); +insert into t1 values (now(), now()); +insert into t1 values (now(), now()); +select * from t1 where a is null or b is null; +a b +drop table t1; diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index c6fe606eaaf..759c96462f6 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -431,8 +431,8 @@ int handle_options(int *argc, char ***argv, Will set the option value to given value */ -static int setval (const struct my_option *opts, char *argument, - my_bool set_maximum_value) +static int setval(const struct my_option *opts, char *argument, + my_bool set_maximum_value) { int err= 0; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7eab432ff49..67806e69f12 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3595,8 +3595,8 @@ struct my_option my_long_options[] = (gptr*) &my_use_symdir, (gptr*) &my_use_symdir, 0, GET_BOOL, NO_ARG, IF_PURIFY(0,1), 0, 0, 0, 0, 0}, #endif - {"user", 'u', "Run mysqld daemon as user", (gptr*) &mysqld_user, - (gptr*) &mysqld_user, 0, 0, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"user", 'u', "Run mysqld daemon as user", 0, 0, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, {"version", 'V', "Output version information and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"version", 'v', "Synonym for option -v", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, @@ -4221,9 +4221,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), break; case 'u': if (!mysqld_user) - mysqld_user=optarg; + mysqld_user= argument; else - fprintf(stderr, "Warning: Ignoring user change to '%s' becasue the user is set to '%s' earlier on the command line\n", optarg, mysqld_user); + fprintf(stderr, "Warning: Ignoring user change to '%s' becasue the user is set to '%s' earlier on the command line\n", argument, mysqld_user); break; case 'L': strmake(language, argument, sizeof(language)-1); From 605bfe93ef0ede548ef38a04e6d7f4f56444a132 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 13:16:59 +0100 Subject: [PATCH 105/267] warning added --- mysys/default.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mysys/default.c b/mysys/default.c index c9b0704216a..0f8712d3298 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -246,10 +246,14 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, #if !defined(__WIN__) && !defined(OS2) { MY_STAT stat_info; - if (!my_stat(name,&stat_info,MYF(MY_WME))) + if (!my_stat(name,&stat_info,MYF(0))) return 0; if (stat_info.st_mode & S_IWOTH) /* ignore world-writeable files */ + { + fprintf(stderr, "warning: World-writeable config file %s is ignored\n", + name); return 0; + } } #endif if (!(fp = my_fopen(fn_format(name,name,"","",4),O_RDONLY,MYF(0)))) From 9bfbea688248333b88e37e96a20cb436d3893f37 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 13:41:37 +0100 Subject: [PATCH 106/267] - typo fix for newly added error message --- sql/mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 83933e6e8ad..9a227ef5034 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3642,7 +3642,7 @@ static void get_options(int argc,char **argv) if (!mysqld_user) mysqld_user=optarg; else - fprintf(stderr, "Warning: Ignoring user change to '%s' becasue the user is set to '%s' earlier on the command line\n", optarg, mysqld_user); + fprintf(stderr, "Warning: Ignoring user change to '%s' because the user was set to '%s' earlier on the command line\n", optarg, mysqld_user); break; case 'v': case 'V': From c2ce5116f35d42bb669e8b0c06317a0b691c9a64 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 16:38:06 +0200 Subject: [PATCH 107/267] fixed crash on non-well-constructed reference mysql-test/r/subselect.result: test of IN with error mysql-test/t/subselect.test: test of IN with error --- mysql-test/r/subselect.result | 2 ++ mysql-test/t/subselect.test | 6 ++++++ sql/item.h | 2 +- sql/item_subselect.cc | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 47f24a340cd..9170301ea4c 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1012,3 +1012,5 @@ id select_type table type possible_keys key key_len ref rows Extra 2 UNCACHEABLE SUBSELECT t1 ALL NULL NULL NULL NULL 3 3 UNCACHEABLE SUBSELECT t1 ALL NULL NULL NULL NULL 3 drop table t1; +select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent); +Table 'test.t1' doesn't exist diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 1841e9f109a..c4827c69793 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -595,3 +595,9 @@ insert into t1 values (1), (2), (3); explain select a,(select (select rand() from t1 limit 1) from t1 limit 1) from t1; drop table t1; + +# +# error in IN +# +-- error 1146 +select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent); diff --git a/sql/item.h b/sql/item.h index e262a9cb4e6..a94e1008021 100644 --- a/sql/item.h +++ b/sql/item.h @@ -486,7 +486,7 @@ public: enum Type type() const { return REF_ITEM; } bool eq(const Item *item, bool binary_cmp) const { return ref && (*ref)->eq(item, binary_cmp); } - ~Item_ref() { if (ref && (*ref) != this) delete *ref; } + ~Item_ref() { if (ref && (*ref) && (*ref) != this) delete *ref; } double val() { double tmp=(*ref)->val_result(); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index a29cf57b4e1..913734e0993 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -487,6 +487,8 @@ void Item_in_subselect::single_value_transformer(THD *thd, setup_ref_array(thd, &sl->ref_pointer_array, 1 + sl->with_sum_func + sl->order_list.elements + sl->group_list.elements); + // To prevent crash on Item_ref_null_helper destruction in case of error + sl->ref_pointer_array[0]= 0; item= (*func)(expr, new Item_ref_null_helper(this, sl->ref_pointer_array, (char *)"", From 530659e8a004812679ad9792f6e7b31ffabb7dc9 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 16:58:07 +0200 Subject: [PATCH 108/267] A fix for privilege checking bug. sql/sql_parse.cc: Fix for a privilege bug in multi-table updates. Seems like better fix then chec_table_access. --- sql/sql_parse.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6dac0a82d26..b01800ee61a 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1840,8 +1840,14 @@ mysql_execute_command(void) break; } case SQLCOM_UPDATE: - if (check_access(thd,UPDATE_ACL,tables->db,&tables->grant.privilege)) + TABLE_LIST *table; + if (check_db_used(thd,tables)) goto error; + for (table=tables ; table ; table=table->next) + { + if (check_access(thd,UPDATE_ACL,table->db,&table->grant.privilege)) + goto error; + } if (grant_option && check_grant(thd,UPDATE_ACL,tables)) goto error; if (select_lex->item_list.elements != lex->value_list.elements) From 462a72b80246c09304f140675f6dd80cb3a20826 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 17:07:39 +0200 Subject: [PATCH 109/267] Adding tests for the fixed ORDER BY 0 bug --- mysql-test/r/derived.result | 2 ++ mysql-test/r/union.result | 2 ++ mysql-test/t/derived.test | 2 ++ mysql-test/t/union.test | 2 ++ 4 files changed, 8 insertions(+) diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index e1e823350d3..e335e316170 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -146,3 +146,5 @@ SELECT 1 as a FROM (SELECT a UNION SELECT 1) b; Unknown column 'a' in 'field list' SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b; Unknown column 'a' in 'field list' +select 1 from (select 2) a order by 0; +Unknown column '0' in 'order clause' diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 3a17ab803ad..bf79af2831a 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -267,3 +267,5 @@ 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; +(select 1) union (select 2) order by 0; +Unknown column '0' in 'order clause' diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test index 1dbdd6e0ae8..8b8d9e4d1a2 100644 --- a/mysql-test/t/derived.test +++ b/mysql-test/t/derived.test @@ -62,3 +62,5 @@ SELECT * FROM (SELECT 1 UNION SELECT a) b; SELECT 1 as a FROM (SELECT a UNION SELECT 1) b; --error 1054 SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b; +--error 1054 +select 1 from (select 2) a order by 0; diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 74d04f7e2ce..d41860c1b72 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -142,3 +142,5 @@ explain (select * from t1 where a=1) union (select * from t2 where a=1); 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; +--error 1054 +(select 1) union (select 2) order by 0; From 39dbf6cb9b36959c190f037eac1f0c2c4cd8ca77 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 17:14:01 +0200 Subject: [PATCH 110/267] A fix for an obvious bug in hash generating proram. --- sql/gen_lex_hash.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index f94d8dddb59..2be57a49a99 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -274,7 +274,7 @@ void print_arrays() function_plus,function_mod); int *prva= (int*) my_alloca(sizeof(int)*function_mod); - for (i=0 ; i <= function_mod; i++) + for (i=0 ; i < function_mod; i++) prva[i]= max_symbol; for (i=0;i Date: Mon, 10 Mar 2003 16:48:13 +0100 Subject: [PATCH 111/267] more propection in mi_open against badly corrupted MYI headers --- myisam/mi_open.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/myisam/mi_open.c b/myisam/mi_open.c index 65e4fe86657..04d035c3ae4 100644 --- a/myisam/mi_open.c +++ b/myisam/mi_open.c @@ -68,7 +68,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) int lock_error,kfile,open_mode,save_errno; uint i,j,len,errpos,head_length,base_pos,offset,info_length,extra,keys, key_parts,unique_key_parts,tmp_length,uniques; - char name_buff[FN_REFLEN],*disk_cache,*disk_pos; + char name_buff[FN_REFLEN],*disk_cache,*disk_pos, *end_pos; MI_INFO info,*m_info,*old_info; MYISAM_SHARE share_buff,*share; ulong rec_per_key_part[MI_MAX_POSSIBLE_KEY*MI_MAX_KEY_SEG]; @@ -129,11 +129,12 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) } info_length=mi_uint2korr(share->state.header.header_length); base_pos=mi_uint2korr(share->state.header.base_pos); - if (!(disk_cache=(char*) my_alloca(info_length))) + if (!(disk_cache=(char*) my_alloca(info_length+128))) { my_errno=ENOMEM; goto err; } + end_pos=disk_cache+info_length; errpos=2; VOID(my_seek(kfile,0L,MY_SEEK_SET,MYF(0))); @@ -269,17 +270,28 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) share->state.header.max_block_size)); strmov(share->filename,name_buff); +#define disk_pos_assert do \ + { \ + if (disk_pos > end_pos) \ + { \ + my_errno=HA_ERR_CRASHED; \ + goto err; \ + } \ + } while(0) + share->blocksize=min(IO_SIZE,myisam_block_size); { MI_KEYSEG *pos=share->keyparts; for (i=0 ; i < keys ; i++) { disk_pos=mi_keydef_read(disk_pos, &share->keyinfo[i]); + disk_pos_assert; set_if_smaller(share->blocksize,share->keyinfo[i].block_length); share->keyinfo[i].seg=pos; for (j=0 ; j < share->keyinfo[i].keysegs; j++,pos++) { disk_pos=mi_keyseg_read(disk_pos, pos); + disk_pos_assert; if (pos->type == HA_KEYTYPE_TEXT || pos->type == HA_KEYTYPE_VARTEXT) { if (!pos->language) @@ -306,10 +318,12 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) for (i=0 ; i < uniques ; i++) { disk_pos=mi_uniquedef_read(disk_pos, &share->uniqueinfo[i]); + disk_pos_assert; share->uniqueinfo[i].seg=pos; for (j=0 ; j < share->uniqueinfo[i].keysegs; j++,pos++) { disk_pos=mi_keyseg_read(disk_pos, pos); + disk_pos_assert; if (pos->type == HA_KEYTYPE_TEXT || pos->type == HA_KEYTYPE_VARTEXT) { if (!pos->language) @@ -334,6 +348,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) for (i=j=offset=0 ; i < share->base.fields ; i++) { disk_pos=mi_recinfo_read(disk_pos,&share->rec[i]); + disk_pos_assert; share->rec[i].pack_type=0; share->rec[i].huff_tree=0; share->rec[i].offset=offset; From bbc8f836c0400f361458bffd42d71ea2177a9e18 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 20:54:18 +0200 Subject: [PATCH 112/267] Fix for a bug with ROW(..) <=> ROW(...) --- mysql-test/r/row.result | 6 ++++++ mysql-test/t/row.test | 2 ++ sql/item_cmpfunc.cc | 5 ++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/row.result b/mysql-test/r/row.result index 40beeb4d3a5..79eb6cc7e59 100644 --- a/mysql-test/r/row.result +++ b/mysql-test/r/row.result @@ -159,3 +159,9 @@ a MAX(b) (1, MAX(b)) = (1, 4) 1 4 1 10 43 0 drop table t1; +SELECT ROW(2,10) <=> ROW(3,4); +ROW(2,10) <=> ROW(3,4) +0 +SELECT ROW(NULL,10) <=> ROW(3,NULL); +ROW(NULL,10) <=> ROW(3,NULL) +0 diff --git a/mysql-test/t/row.test b/mysql-test/t/row.test index 9d69e56f9ee..fb5fff86b11 100644 --- a/mysql-test/t/row.test +++ b/mysql-test/t/row.test @@ -79,3 +79,5 @@ insert into t1 values (10, 43); insert into t1 values (1, 4); select a, MAX(b), (1, MAX(b)) = (1, 4) from t1 group by a; drop table t1; +SELECT ROW(2,10) <=> ROW(3,4); +SELECT ROW(NULL,10) <=> ROW(3,NULL); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index ec3c7f22556..40640ccee9c 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -266,8 +266,8 @@ int Arg_comparator::compare_e_row() uint n= (*a)->cols(); for (uint i= 0; i Date: Mon, 10 Mar 2003 20:21:11 +0100 Subject: [PATCH 113/267] - added missing file mysql_secure_installation to server RPM subpackage (bug #141) (please merge with 4.1 and onwards) support-files/mysql.spec.sh: - added missing file mysql_secure_installation to server RPM subpackage (bug #141) --- support-files/mysql.spec.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 34f4a919395..500b308e686 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -446,6 +446,7 @@ fi %attr(755, root, root) /usr/bin/mysql_explain_log %attr(755, root, root) /usr/bin/mysql_fix_privilege_tables %attr(755, root, root) /usr/bin/mysql_install_db +%attr(755, root, root) /usr/bin/mysql_secure_installation %attr(755, root, root) /usr/bin/mysql_setpermission %attr(755, root, root) /usr/bin/mysql_zap %attr(755, root, root) /usr/bin/mysqlbug @@ -535,6 +536,11 @@ fi %changelog +* Mon Mar 10 2003 Lenz Grimmer + +- added missing file mysql_secure_installation to server subpackage + (bug #141) + * Tue Feb 11 2003 Lenz Grimmer - re-added missing pre- and post(un)install scripts to server subpackage From fc5832de0838d3d1c0e596c11e30077f372ffc6c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 22:25:52 +0200 Subject: [PATCH 114/267] fixed cleanup bug mysql-test/r/subselect.result: test of cleanup bug mysql-test/t/subselect.test: test of cleanup bug sql/sql_select.cc: fixed cleanup --- mysql-test/r/subselect.result | 35 ++++++++++++++++++++++++++++ mysql-test/t/subselect.test | 43 +++++++++++++++++++++++++++++++++++ sql/sql_select.cc | 15 +++++++++++- 3 files changed, 92 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 9170301ea4c..261588333a2 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1014,3 +1014,38 @@ id select_type table type possible_keys key key_len ref rows Extra drop table t1; select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent); Table 'test.t1' doesn't exist +CREATE TABLE t1 ( +ID int(11) NOT NULL auto_increment, +name char(35) NOT NULL default '', +t2 char(3) NOT NULL default '', +District char(20) NOT NULL default '', +Population int(11) NOT NULL default '0', +PRIMARY KEY (ID) +) TYPE=MyISAM; +INSERT INTO t1 VALUES (130,'Sydney','AUS','New South Wales',3276207); +INSERT INTO t1 VALUES (131,'Melbourne','AUS','Victoria',2865329); +INSERT INTO t1 VALUES (132,'Brisbane','AUS','Queensland',1291117); +CREATE TABLE t2 ( +Code char(3) NOT NULL default '', +Name char(52) NOT NULL default '', +Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL default 'Asia', +Region char(26) NOT NULL default '', +SurfaceArea float(10,2) NOT NULL default '0.00', +IndepYear smallint(6) default NULL, +Population int(11) NOT NULL default '0', +LifeExpectancy float(3,1) default NULL, +GNP float(10,2) default NULL, +GNPOld float(10,2) default NULL, +LocalName char(45) NOT NULL default '', +GovernmentForm char(45) NOT NULL default '', +HeadOfState char(60) default NULL, +Capital int(11) default NULL, +Code2 char(2) NOT NULL default '', +PRIMARY KEY (Code) +) TYPE=MyISAM; +INSERT INTO t2 VALUES ('AUS','Australia','Oceania','Australia and New Zealand',7741220.00,1901,18886000,79.8,351182.00,392911.00,'Australia','Constitutional Monarchy, Federation','Elisabeth II',135,'AU'); +INSERT INTO t2 VALUES ('AZE','Azerbaijan','Asia','Middle East',86600.00,1991,7734000,62.9,4127.00,4100.00,'Azärbaycan','Federal Republic','Heydär Äliyev',144,'AZ'); +select t2.Continent, t1.Name, t1.Population from t2 LEFT JOIN t1 ON t2.Code = t1.t2 where t1.Population IN (select max(t1.Population) AS Population from t1, t2 where t1.t2 = t2.Code group by Continent); +Continent Name Population +Oceania Sydney 3276207 +drop table t1, t2; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index c4827c69793..b9ee9547e1a 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -601,3 +601,46 @@ drop table t1; # -- error 1146 select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent); + +# +# complex subquery +# + +CREATE TABLE t1 ( + ID int(11) NOT NULL auto_increment, + name char(35) NOT NULL default '', + t2 char(3) NOT NULL default '', + District char(20) NOT NULL default '', + Population int(11) NOT NULL default '0', + PRIMARY KEY (ID) +) TYPE=MyISAM; + +INSERT INTO t1 VALUES (130,'Sydney','AUS','New South Wales',3276207); +INSERT INTO t1 VALUES (131,'Melbourne','AUS','Victoria',2865329); +INSERT INTO t1 VALUES (132,'Brisbane','AUS','Queensland',1291117); + +CREATE TABLE t2 ( + Code char(3) NOT NULL default '', + Name char(52) NOT NULL default '', + Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL default 'Asia', + Region char(26) NOT NULL default '', + SurfaceArea float(10,2) NOT NULL default '0.00', + IndepYear smallint(6) default NULL, + Population int(11) NOT NULL default '0', + LifeExpectancy float(3,1) default NULL, + GNP float(10,2) default NULL, + GNPOld float(10,2) default NULL, + LocalName char(45) NOT NULL default '', + GovernmentForm char(45) NOT NULL default '', + HeadOfState char(60) default NULL, + Capital int(11) default NULL, + Code2 char(2) NOT NULL default '', + PRIMARY KEY (Code) +) TYPE=MyISAM; + +INSERT INTO t2 VALUES ('AUS','Australia','Oceania','Australia and New Zealand',7741220.00,1901,18886000,79.8,351182.00,392911.00,'Australia','Constitutional Monarchy, Federation','Elisabeth II',135,'AU'); +INSERT INTO t2 VALUES ('AZE','Azerbaijan','Asia','Middle East',86600.00,1991,7734000,62.9,4127.00,4100.00,'Azärbaycan','Federal Republic','Heydär Äliyev',144,'AZ'); + +select t2.Continent, t1.Name, t1.Population from t2 LEFT JOIN t1 ON t2.Code = t1.t2 where t1.Population IN (select max(t1.Population) AS Population from t1, t2 where t1.t2 = t2.Code group by Continent); + +drop table t1, t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index bf3f9a94936..4c022014b86 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1263,7 +1263,20 @@ JOIN::cleanup(THD *thd) select_lex->join= 0; if (tmp_join) - memcpy(this, tmp_join, sizeof(tmp_join)); + { + if (join_tab != tmp_join->join_tab) + { + JOIN_TAB *tab, *end; + for (tab= join_tab, end= tab+tables ; tab != end ; tab++) + { + delete tab->select; + delete tab->quick; + x_free(tab->cache.buff); + } + } + tmp_join->tmp_join= 0; + return tmp_join->cleanup(thd); + } lock=0; // It's faster to unlock later From f88ce7545d4a5531592214821ad0411388d6dee9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 02:32:24 +0500 Subject: [PATCH 115/267] crash-me.sh: misprint correction sql-bench/crash-me.sh: misprint correction --- sql-bench/crash-me.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh index aeca7aa311b..82c8a3a90e4 100644 --- a/sql-bench/crash-me.sh +++ b/sql-bench/crash-me.sh @@ -3161,7 +3161,7 @@ sub safe_connect sub retry_connect { my ($dbh, $i); - for (i=0 ; $i < 10 ; $i++) + for ($i=0 ; $i < 10 ; $i++) { if (($dbh=DBI->connect($server->{'data_source'},$opt_user,$opt_password, { PrintError => 0, AutoCommit => 1}))) From 80f6466c85df3e5b01462c280db96c600f9147be Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 00:30:35 +0200 Subject: [PATCH 116/267] Portability fixes cmd-line-utils/libedit/el.c: Portability fix configure.in: Portability fix (Don't call AC_PROG_CC twice) sql/mysqld.cc: Move stack checking to right position --- cmd-line-utils/libedit/el.c | 10 +++++++++- configure.in | 23 ++++------------------- sql/mysqld.cc | 27 ++++++++++++++------------- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/cmd-line-utils/libedit/el.c b/cmd-line-utils/libedit/el.c index d436d113419..76b17aba0cf 100644 --- a/cmd-line-utils/libedit/el.c +++ b/cmd-line-utils/libedit/el.c @@ -369,6 +369,14 @@ el_line(EditLine *el) static const char elpath[] = "/.editrc"; +#if defined(MAXPATHLEN) +#define LIBEDIT_MAXPATHLEN MAXPATHLEN +#elif defined(PATH_MAX) +#define LIBEDIT_MAXPATHLEN PATH_MAX +#else +#define LIBEDIT_MAXPATHLEN 1024 +#endif + /* el_source(): * Source a file */ @@ -377,7 +385,7 @@ el_source(EditLine *el, const char *fname) { FILE *fp; size_t len; - char *ptr, path[MAXPATHLEN]; + char *ptr, path[LIBEDIT_MAXPATHLEN]; fp = NULL; if (fname == NULL) { diff --git a/configure.in b/configure.in index 7a694db2b69..0fdd962956d 100644 --- a/configure.in +++ b/configure.in @@ -701,11 +701,8 @@ AC_SUBST(MYSQLD_USER) # If we should allow LOAD DATA LOCAL AC_MSG_CHECKING(If we should should enable LOAD DATA LOCAL by default) AC_ARG_ENABLE(local-infile, - Enable LOAD DATA LOCAL INFILE (default: disabled)], - [ - ENABLED_LOCAL_INFILE=$enableval - AC_DEFINE(ENABLED_LOCAL_INFILE) - ], + [ --enable-local-infile Enable LOAD DATA LOCAL INFILE (default: disabled)], + [ ENABLED_LOCAL_INFILE=$enableval ], [ ENABLED_LOCAL_INFILE=no ] ) if test "$ENABLED_LOCAL_INFILE" = "yes" @@ -1734,26 +1731,14 @@ MYSQL_PTHREAD_YIELD # For readline/libedit (We simply move the mimimum amount of stuff from # the readline/libedit configure.in here) -dnl Checks for programs. -AC_PROG_CC -AC_PROG_AWK -AC_PROG_INSTALL - dnl Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(limits.h malloc.h sys/ioctl.h unistd.h sys/cdefs.h sys/types.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T +AC_CHECK_HEADERS(malloc.h sys/cdefs.h) dnl Checks for library functions. AC_FUNC_ALLOCA AC_PROG_GCC_TRADITIONAL AC_TYPE_SIGNAL -AC_CHECK_FUNCS(re_comp regcomp strdup strerror strstr strtol) +AC_CHECK_FUNCS(re_comp regcomp strdup) AC_CHECK_HEADERS(vis.h) AC_CHECK_FUNCS(strlcat strlcpy) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 85cde682c58..2afe04f90b4 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2039,6 +2039,20 @@ static int init_common_variables(const char *conf_file_name, int argc, DBUG_PRINT("info",("%s Ver %s for %s on %s\n",my_progname, server_version, SYSTEM_TYPE,MACHINE_TYPE)); +#ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE + { + /* Retrieve used stack size; Needed for checking stack overflows */ + size_t stack_size; + pthread_attr_getstacksize(&connection_attrib, &stack_size); + if (global_system_variables.log_warnings && stack_size != thread_stack) + { + sql_print_error("Warning: Asked for %ld thread stack, but got %ld", + thread_stack, stack_size); + thread_stack= stack_size; + } + } +#endif + #if defined( SET_RLIMIT_NOFILE) || defined( OS2) /* connections and databases needs lots of files */ { @@ -2349,19 +2363,6 @@ int main(int argc, char **argv) if (!(opt_specialflag & SPECIAL_NO_PRIOR)) my_pthread_setprio(pthread_self(),CONNECT_PRIOR); pthread_attr_setstacksize(&connection_attrib,thread_stack); -#ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE - { - /* Retrieve used stack size; Needed for checking stack overflows */ - size_t stack_size; - pthread_attr_getstacksize(&connection_attrib, &stack_size); - if (global_system_variables.log_warnings && stack_size != thread_stack) - { - sql_print_error("Warning: Asked for %ld thread stack, but got %ld", - thread_stack, stack_size); - thread_stack= stack_size; - } - } -#endif (void) thr_setconcurrency(concurrency); // 10 by default select_thread=pthread_self(); From 0f88392dae045cbc355808469de12301e66afef5 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 10 Mar 2003 18:32:38 -0500 Subject: [PATCH 117/267] novell40c.patch netware/mysqld_safe.c: Import patch novell40c.patch --- netware/mysqld_safe.c | 54 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/netware/mysqld_safe.c b/netware/mysqld_safe.c index 59c40eb61e6..1ab90775e02 100644 --- a/netware/mysqld_safe.c +++ b/netware/mysqld_safe.c @@ -36,6 +36,7 @@ ******************************************************************************/ char autoclose; char basedir[PATH_MAX]; +char checktables; char datadir[PATH_MAX]; char pid_file[PATH_MAX]; char address[PATH_MAX]; @@ -54,6 +55,7 @@ FILE *log_fd = NULL; ******************************************************************************/ +void usage(void); void vlog(char *, va_list); void log(char *, ...); void start_defaults(int, char*[]); @@ -74,6 +76,42 @@ void mysql_start(int, char*[]); /****************************************************************************** + usage() + + Show usage. + +******************************************************************************/ +void usage(void) +{ + // keep the screen up + setscreenmode(SCR_NO_MODE); + + puts("\ +\n\ +usage: mysqld_safe [options]\n\ +\n\ +Program to start the MySQL daemon and restart it if it dies unexpectedly.\n\ +All options, besides those listed below, are passed on to the MySQL daemon.\n\ +\n\ +options:\n\ +\n\ +--autoclose Automatically close the mysqld_safe screen.\n\ +\n\ +--check-tables Check the tables before starting the MySQL daemon.\n\ +\n\ +--err-log= Send the MySQL daemon error output to .\n\ +\n\ +--help Show this help information.\n\ +\n\ +--mysqld= Use the MySQL daemon.\n\ +\n\ + "); + + exit(-1); +} + +/****************************************************************************** + vlog() Log the message. @@ -136,6 +174,9 @@ void start_defaults(int argc, char *argv[]) // basedir get_basedir(argv[0], basedir); + // check-tables + checktables = FALSE; + // hostname if (gethostname(hostname,PATH_MAX) < 0) { @@ -279,13 +320,15 @@ void parse_args(int argc, char *argv[]) OPT_PORT, OPT_ERR_LOG, OPT_SAFE_LOG, - OPT_MYSQLD + OPT_MYSQLD, + OPT_HELP }; static struct option options[] = { {"autoclose", no_argument, &autoclose, TRUE}, {"basedir", required_argument, 0, OPT_BASEDIR}, + {"check-tables", no_argument, &checktables, TRUE}, {"datadir", required_argument, 0, OPT_DATADIR}, {"pid-file", required_argument, 0, OPT_PID_FILE}, {"bind-address", required_argument, 0, OPT_BIND_ADDRESS}, @@ -293,6 +336,7 @@ void parse_args(int argc, char *argv[]) {"err-log", required_argument, 0, OPT_ERR_LOG}, {"safe-log", required_argument, 0, OPT_SAFE_LOG}, {"mysqld", required_argument, 0, OPT_MYSQLD}, + {"help", no_argument, 0, OPT_HELP}, {0, 0, 0, 0} }; @@ -341,6 +385,10 @@ void parse_args(int argc, char *argv[]) strcpy(mysqld, optarg); break; + case OPT_HELP: + usage(); + break; + default: // ignore break; @@ -563,6 +611,8 @@ void mysql_start(int argc, char *argv[]) static char *private_options[] = { "--autoclose", + "--check-tables", + "--help", "--err-log=", "--mysqld=", NULL @@ -594,7 +644,7 @@ void mysql_start(int argc, char *argv[]) do { // check the database tables - check_tables(); + if (checktables) check_tables(); // status time(&cal); From 3ab655681c4dc87226f3048a60d4ad3abf310f72 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 13:41:53 +0400 Subject: [PATCH 118/267] Openssl test client/mysqltest.c: For openssl test BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + client/mysqltest.c | 18 ++++++++++- mysql-test/include/have_openssl_1.inc | 2 +- mysql-test/mysql-test-run.sh | 8 +++-- mysql-test/r/have_openssl_1.require | 2 +- mysql-test/r/openssl_1.result | 34 ++++++++++++++++++-- mysql-test/t/openssl_1.test | 45 ++++++++++++++++++++++++--- 7 files changed, 99 insertions(+), 11 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 70aaa8d2a52..c827423d27d 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -15,6 +15,7 @@ bell@sanja.is.com.ua bk@admin.bk davida@isil.mysql.com gluh@gluh.(none) +gluh@gluh.mysql.r18.ru greg@mysql.com gweir@work.mysql.com heikki@donna.mysql.fi diff --git a/client/mysqltest.c b/client/mysqltest.c index cad13fe1349..531041721bd 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -91,7 +91,9 @@ enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD, - OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC}; + OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC, + OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH, + OPT_SSL_CIPHER}; static int record = 0, opt_sleep=0; static char *db = 0, *pass=0; @@ -123,6 +125,8 @@ static int block_stack[BLOCK_STACK_DEPTH]; static int block_ok_stack[BLOCK_STACK_DEPTH]; static uint global_expected_errno[MAX_EXPECTED_ERRORS], global_expected_errors; +#include "sslopt-vars.h" + DYNAMIC_ARRAY q_lines; typedef struct @@ -1442,6 +1446,11 @@ int do_connect(struct st_query* q) mysql_options(&next_con->mysql,MYSQL_OPT_COMPRESS,NullS); mysql_options(&next_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0); +#ifdef HAVE_OPENSSL + if (opt_use_ssl) + mysql_ssl_set(&next_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca, + opt_ssl_capath, opt_ssl_cipher); +#endif if (con_sock && !free_con_sock && *con_sock && *con_sock != FN_LIBCHAR) con_sock=fn_format(buff, con_sock, TMPDIR, "",0); if (!con_db[0]) @@ -1840,6 +1849,7 @@ static struct my_option my_long_options[] = {"socket", 'S', "Socket file to use for connection.", (gptr*) &unix_sock, (gptr*) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, +#include "sslopt-longopts.h" {"test-file", 'x', "Read test from/in this file (default stdin).", 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"tmpdir", 't', "Temporary directory where sockets are put", @@ -1914,6 +1924,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), else tty_password= 1; break; +#include case 't': strnmov(TMPDIR, argument, sizeof(TMPDIR)); break; @@ -2361,6 +2372,11 @@ int main(int argc, char** argv) if (opt_compress) mysql_options(&cur_con->mysql,MYSQL_OPT_COMPRESS,NullS); mysql_options(&cur_con->mysql, MYSQL_OPT_LOCAL_INFILE, 0); +#ifdef HAVE_OPENSSL + if (opt_use_ssl) + mysql_ssl_set(&cur_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca, + opt_ssl_capath, opt_ssl_cipher); +#endif cur_con->name = my_strdup("default", MYF(MY_WME)); if (!cur_con->name) diff --git a/mysql-test/include/have_openssl_1.inc b/mysql-test/include/have_openssl_1.inc index 4d3646abdc2..887309c7e23 100644 --- a/mysql-test/include/have_openssl_1.inc +++ b/mysql-test/include/have_openssl_1.inc @@ -1,4 +1,4 @@ -- require r/have_openssl_1.require disable_query_log; -show variables like "have_openssl"; +SHOW STATUS LIKE 'Ssl_cipher'; enable_query_log; diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index 48bb94ea0e4..689614c1740 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -207,6 +207,7 @@ CHARACTER_SET=latin1 DBUSER="" START_WAIT_TIMEOUT=10 STOP_WAIT_TIMEOUT=10 +MYSQL_TEST_SSL_OPTS="" while test $# -gt 0; do case "$1" in @@ -237,7 +238,10 @@ while test $# -gt 0; do EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \ --ssl-ca=$BASEDIR/SSL/cacert.pem \ --ssl-cert=$BASEDIR/SSL/server-cert.pem \ - --ssl-key=$BASEDIR/SSL/server-key.pem" ;; + --ssl-key=$BASEDIR/SSL/server-key.pem" + MYSQL_TEST_SSL_OPTS="--ssl-ca=$BASEDIR/SSL/cacert.pem \ + --ssl-cert=$BASEDIR/SSL/client-cert.pem \ + --ssl-key=$BASEDIR/SSL/client-key.pem" ;; --no-manager | --skip-manager) USE_MANAGER=0 ;; --manager) USE_MANAGER=1 @@ -489,7 +493,7 @@ fi MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ - --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT" + --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT $MYSQL_TEST_SSL_OPTS" MYSQL_TEST_BIN=$MYSQL_TEST MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS" GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client diff --git a/mysql-test/r/have_openssl_1.require b/mysql-test/r/have_openssl_1.require index dae48a472b5..032b60d544a 100644 --- a/mysql-test/r/have_openssl_1.require +++ b/mysql-test/r/have_openssl_1.require @@ -1,2 +1,2 @@ Variable_name Value -have_openssl YES +Ssl_cipher EDH-RSA-DES-CBC3-SHA diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index b5c67dfbcb0..65b882c0a9b 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -1,2 +1,32 @@ -SHOW STATUS LIKE 'SSL%'; -Variable_name Value +drop table if exists t1; +create table t1(f1 int); +insert into t1 values (5); +grant select on test.* to ssl_user1@localhost require SSL; +grant select on test.* to ssl_user2@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; +grant select on test.* to ssl_user3@localhost require cipher "EDH-RSA-DES-CBC3-SHA" AND SUBJECT "/C=RU/L=orenburg/O=MySQL AB/OU=client/CN=walrus/Email=walrus@mysql.com"; +grant select on test.* to ssl_user4@localhost require cipher "EDH-RSA-DES-CBC3-SHA" AND SUBJECT "/C=RU/L=orenburg/O=MySQL AB/OU=client/CN=walrus/Email=walrus@mysql.com" ISSUER "/C=RU/ST=Some-State/L=Orenburg/O=MySQL AB/CN=Walrus/Email=walrus@mysql.com"; +flush privileges; +select * from t1; +f1 +5 +delete from t1; +Access denied for user: 'ssl_user1@localhost' to database 'test' +select * from t1; +f1 +5 +delete from t1; +Access denied for user: 'ssl_user2@localhost' to database 'test' +select * from t1; +f1 +5 +delete from t1; +Access denied for user: 'ssl_user3@localhost' to database 'test' +select * from t1; +f1 +5 +delete from t1; +Access denied for user: 'ssl_user4@localhost' to database 'test' +delete from mysql.user where user='ssl_user%'; +delete from mysql.db where user='ssl_user%'; +flush privileges; +drop table t1; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 8dfd0d8c2f9..3af7406cef3 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -1,6 +1,43 @@ -# We test openssl. Result set is optimized to be compiled with --with-openssl but -# SSL is swithced off in some reason --- source include/have_openssl_2.inc +# We test openssl. Result set is optimized to be compiled with --with-openssl. +# Use mysql-test-run with --with-openssl option. +-- source include/have_openssl_1.inc -SHOW STATUS LIKE 'SSL%'; +drop table if exists t1; +create table t1(f1 int); +insert into t1 values (5); +grant select on test.* to ssl_user1@localhost require SSL; +grant select on test.* to ssl_user2@localhost require cipher "EDH-RSA-DES-CBC3-SHA"; +grant select on test.* to ssl_user3@localhost require cipher "EDH-RSA-DES-CBC3-SHA" AND SUBJECT "/C=RU/L=orenburg/O=MySQL AB/OU=client/CN=walrus/Email=walrus@mysql.com"; +grant select on test.* to ssl_user4@localhost require cipher "EDH-RSA-DES-CBC3-SHA" AND SUBJECT "/C=RU/L=orenburg/O=MySQL AB/OU=client/CN=walrus/Email=walrus@mysql.com" ISSUER "/C=RU/ST=Some-State/L=Orenburg/O=MySQL AB/CN=Walrus/Email=walrus@mysql.com"; +flush privileges; +connect (con1,localhost,ssl_user1,,); +connect (con2,localhost,ssl_user2,,); +connect (con3,localhost,ssl_user3,,); +connect (con4,localhost,ssl_user4,,); + +connection con1; +select * from t1; +--error 1044; +delete from t1; + +connection con2; +select * from t1; +--error 1044; +delete from t1; + +connection con3; +select * from t1; +--error 1044; +delete from t1; + +connection con4; +select * from t1; +--error 1044; +delete from t1; + +connection default; +delete from mysql.user where user='ssl_user%'; +delete from mysql.db where user='ssl_user%'; +flush privileges; +drop table t1; From 92457d6e45dff4561c53bdd7feec1595585a65af Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 13:49:06 +0400 Subject: [PATCH 119/267] Added 'PURGE LOGS BEFORE' command Added expire-logs-days option mysql-test/r/rpl_rotate_logs.result: Added test for 'PURGE LOGS BEFORE' mysql-test/t/rpl_rotate_logs.test: Added test for 'PURGE LOGS BEFORE' sql/log.cc: For 'Purge logs before' command sql/mysqld.cc: Added 'expire-logs-days' option sql/set_var.cc: Added 'expire-logs-days' option sql/sql_class.h: For 'Purge logs before' command sql/sql_parse.cc: Added 'expire-logs-days' option sql/sql_yacc.yy: For 'Purge logs before' command --- mysql-test/r/rpl_rotate_logs.result | 7 ++++- mysql-test/t/rpl_rotate_logs.test | 4 ++- sql/log.cc | 42 +++++++++++++---------------- sql/mysqld.cc | 6 ++--- sql/set_var.cc | 4 +++ sql/sql_class.h | 1 + sql/sql_parse.cc | 2 +- sql/sql_yacc.yy | 11 ++++---- 8 files changed, 42 insertions(+), 35 deletions(-) diff --git a/mysql-test/r/rpl_rotate_logs.result b/mysql-test/r/rpl_rotate_logs.result index 5275ef26b5c..c4023832921 100644 --- a/mysql-test/r/rpl_rotate_logs.result +++ b/mysql-test/r/rpl_rotate_logs.result @@ -40,7 +40,12 @@ set insert_id=1234; insert into t2 values(NULL); set global sql_slave_skip_counter=1; start slave; -purge master logs to 'master-bin.000003'; +purge master logs to 'master-bin.000002'; +show binary logs; +Log_name +master-bin.000002 +master-bin.000003 +purge logs before now(); show binary logs; Log_name master-bin.000003 diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test index 025e07382ba..8dd941d447e 100644 --- a/mysql-test/t/rpl_rotate_logs.test +++ b/mysql-test/t/rpl_rotate_logs.test @@ -89,7 +89,9 @@ connection master; #let slave catch up sync_slave_with_master; connection master; -purge master logs to 'master-bin.000003'; +purge master logs to 'master-bin.000002'; +show binary logs; +purge logs before now(); show binary logs; insert into t2 values (65); sync_slave_with_master; diff --git a/sql/log.cc b/sql/log.cc index b179788ea14..2a755144d44 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -679,6 +679,19 @@ err: DBUG_RETURN(error); } +/* + Update log index_file +*/ + +int MYSQL_LOG::update_log_index(LOG_INFO* log_info) +{ + if (copy_up_file_and_fill(&index_file, log_info->index_file_start_offset)) + return LOG_INFO_IO; + + // now update offsets in index file for running threads + adjust_linfo_offsets(log_info->index_file_start_offset); + return 0; +} /* Remove all logs before the given log from disk and from the index file. @@ -731,15 +744,7 @@ int MYSQL_LOG::purge_logs(THD* thd, const char* to_log) If we get killed -9 here, the sysadmin would have to edit the log index file after restart - otherwise, this should be safe */ - - if (copy_up_file_and_fill(&index_file, log_info.index_file_start_offset)) - { - error= LOG_INFO_IO; - goto err; - } - - // now update offsets in index file for running threads - adjust_linfo_offsets(log_info.index_file_start_offset); + error= update_log_index(&log_info); err: pthread_mutex_unlock(&LOCK_index); @@ -789,11 +794,10 @@ int MYSQL_LOG::purge_logs_before_date(THD* thd, time_t purge_time) !log_in_use(log_info.log_file_name)) { /* It's not fatal even if we can't delete a log file */ - if (my_stat(log_info.log_file_name, &stat_area, MYF(0)) && - stat_area.st_mtime < purge_time) - my_delete(log_info.log_file_name, MYF(0)); - else + if (!my_stat(log_info.log_file_name, &stat_area, MYF(0)) || + stat_area.st_mtime >= purge_time) break; + my_delete(log_info.log_file_name, MYF(0)); if (find_next_log(&log_info, 0)) break; } @@ -802,15 +806,7 @@ int MYSQL_LOG::purge_logs_before_date(THD* thd, time_t purge_time) If we get killed -9 here, the sysadmin would have to edit the log index file after restart - otherwise, this should be safe */ - - if (copy_up_file_and_fill(&index_file, log_info.index_file_start_offset)) - { - error= LOG_INFO_IO; - goto err; - } - - // now update offsets in index file for running threads - adjust_linfo_offsets(log_info.index_file_start_offset); + error= update_log_index(&log_info); err: pthread_mutex_unlock(&LOCK_index); @@ -1235,7 +1231,7 @@ err: } pthread_mutex_unlock(&LOCK_log); - if (should_rotate && ~expire_logs_days) + if (should_rotate && expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; if (purge_time >= 0) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index def1bf91f23..1c579197437 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -392,7 +392,7 @@ ulong max_connections,max_insert_delayed_threads,max_used_connections, max_connect_errors, max_user_connections = 0; ulong thread_id=1L,current_pid; ulong slow_launch_threads = 0; -ulong expire_logs_days = ~0L; +ulong expire_logs_days = 0; char mysql_real_data_home[FN_REFLEN], language[LIBLEN],reg_ext[FN_EXTLEN], @@ -2159,7 +2159,7 @@ The server will not act as a slave."); open_log(&mysql_bin_log, glob_hostname, opt_bin_logname, "-bin", opt_binlog_index_name,LOG_BIN); using_update_log=1; - if (~expire_logs_days) + if (expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; if (purge_time >= 0) @@ -4031,7 +4031,7 @@ struct my_option my_long_options[] = "Logs will be rotated after expire-log-days days. ", (gptr*) &expire_logs_days, (gptr*) &expire_logs_days, 0, GET_ULONG, - REQUIRED_ARG, ~0L, 0, 99, 0, 1, 0}, + REQUIRED_ARG, 0, 0, 99, 0, 1, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; diff --git a/sql/set_var.cc b/sql/set_var.cc index 79e9f67e905..58ebc304a4e 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -118,6 +118,8 @@ sys_var_long_ptr sys_delayed_insert_timeout("delayed_insert_timeout", &delayed_insert_timeout); sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size", &delayed_queue_size); +sys_var_long_ptr sys_expire_logs_days("expire_logs_days", + &expire_logs_days); sys_var_bool_ptr sys_flush("flush", &myisam_flush); sys_var_long_ptr sys_flush_time("flush_time", &flush_time); sys_var_thd_ulong sys_interactive_timeout("interactive_timeout", @@ -332,6 +334,7 @@ sys_var *sys_variables[]= &sys_delayed_insert_timeout, &sys_delayed_queue_size, &sys_error_count, + &sys_expire_logs_days, &sys_flush, &sys_flush_time, &sys_foreign_key_checks, @@ -435,6 +438,7 @@ struct show_var_st init_vars[]= { {sys_delayed_insert_limit.name, (char*) &sys_delayed_insert_limit,SHOW_SYS}, {sys_delayed_insert_timeout.name, (char*) &sys_delayed_insert_timeout, SHOW_SYS}, {sys_delayed_queue_size.name,(char*) &sys_delayed_queue_size, SHOW_SYS}, + {sys_expire_logs_days.name, (char*) &sys_expire_logs_days, SHOW_SYS}, {sys_flush.name, (char*) &sys_flush, SHOW_SYS}, {sys_flush_time.name, (char*) &sys_flush_time, SHOW_SYS}, {"ft_min_word_len", (char*) &ft_min_word_len, SHOW_LONG}, diff --git a/sql/sql_class.h b/sql/sql_class.h index 7f7933cec0b..5e688a525e0 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -133,6 +133,7 @@ public: int generate_new_name(char *new_name,const char *old_name); void make_log_name(char* buf, const char* log_ident); bool is_active(const char* log_file_name); + int update_log_index(LOG_INFO* linfo); int purge_logs(THD* thd, const char* to_log); int purge_logs_before_date(THD* thd, time_t purge_time); int purge_first_log(struct st_relay_log_info* rli); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7ba5cae5147..d2748c4e106 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3813,7 +3813,7 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables) mysql_log.new_file(1); mysql_update_log.new_file(1); mysql_bin_log.new_file(1); - if (~expire_logs_days) + if (expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; if (purge_time >= 0) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 19b75d814a2..cfd514b65a4 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3565,10 +3565,9 @@ purge: ; purge_options: - LOGS_SYM - purge_option - | MASTER_SYM LOGS_SYM - purge_option; + LOGS_SYM purge_option + | MASTER_SYM LOGS_SYM purge_option + ; purge_option: TO_SYM TEXT_STRING @@ -3586,7 +3585,8 @@ purge_option: Item *tmp= new Item_func_unix_timestamp($2); Lex->sql_command = SQLCOM_PURGE_BEFORE; Lex->purge_time= tmp->val_int(); - }; + } + ; /* kill threads */ @@ -3596,7 +3596,6 @@ kill: LEX *lex=Lex; if ($2->check_cols(1) || $2->fix_fields(lex->thd, 0, &$2)) { - send_error(lex->thd, ER_SET_CONSTANTS_ONLY); YYABORT; } From 79a6e9dcda812157a56dc6abddee918ffb4a9755 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 12:43:30 +0200 Subject: [PATCH 120/267] fixed cached constsnt determination (bug #142 related) mysql-test/r/subselect.result: test of constant redecing mysql-test/t/subselect.test: test of constant redecing sql/item_cmpfunc.cc: fixed cached constsnt determination --- mysql-test/r/subselect.result | 23 +++++++++++++++++++++++ mysql-test/t/subselect.test | 17 +++++++++++++++++ sql/item_cmpfunc.cc | 14 ++++++++++++-- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 261588333a2..90527ebf356 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1049,3 +1049,26 @@ select t2.Continent, t1.Name, t1.Population from t2 LEFT JOIN t1 ON t2.Code = t1 Continent Name Population Oceania Sydney 3276207 drop table t1, t2; +CREATE TABLE `t1` ( +`id` mediumint(8) unsigned NOT NULL auto_increment, +`pseudo` varchar(35) character set latin1 NOT NULL default '', +PRIMARY KEY (`id`), +UNIQUE KEY `pseudo` (`pseudo`), +) TYPE=MyISAM PACK_KEYS=1 ROW_FORMAT=DYNAMIC; +INSERT INTO t1 (pseudo) VALUES ('test'); +SELECT 0 IN (SELECT 1 FROM t1 a); +0 IN (SELECT 1 FROM t1 a) +0 +EXPLAIN SELECT 0 IN (SELECT 1 FROM t1 a); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used +2 DEPENDENT SUBSELECT NULL NULL NULL NULL NULL NULL NULL Impossible WHERE +INSERT INTO t1 (pseudo) VALUES ('test1'); +SELECT 0 IN (SELECT 1 FROM t1 a); +0 IN (SELECT 1 FROM t1 a) +0 +EXPLAIN SELECT 0 IN (SELECT 1 FROM t1 a); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used +2 DEPENDENT SUBSELECT NULL NULL NULL NULL NULL NULL NULL Impossible WHERE +drop table t1; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index b9ee9547e1a..48f16c430b4 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -644,3 +644,20 @@ INSERT INTO t2 VALUES ('AZE','Azerbaijan','Asia','Middle East',86600.00,1991,773 select t2.Continent, t1.Name, t1.Population from t2 LEFT JOIN t1 ON t2.Code = t1.t2 where t1.Population IN (select max(t1.Population) AS Population from t1, t2 where t1.t2 = t2.Code group by Continent); drop table t1, t2; + +# +# constants in IN +# +CREATE TABLE `t1` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `pseudo` varchar(35) character set latin1 NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `pseudo` (`pseudo`), +) TYPE=MyISAM PACK_KEYS=1 ROW_FORMAT=DYNAMIC; +INSERT INTO t1 (pseudo) VALUES ('test'); +SELECT 0 IN (SELECT 1 FROM t1 a); +EXPLAIN SELECT 0 IN (SELECT 1 FROM t1 a); +INSERT INTO t1 (pseudo) VALUES ('test1'); +SELECT 0 IN (SELECT 1 FROM t1 a); +EXPLAIN SELECT 0 IN (SELECT 1 FROM t1 a); +drop table t1; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index ec3c7f22556..c4197beffbf 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -298,12 +298,22 @@ bool Item_in_optimizer::fix_fields(THD *thd, struct st_table_list *tables, return 1; cache->setup(args[0]); if (cache->cols() == 1) - cache->set_used_tables(RAND_TABLE_BIT); + { + if (args[0]->used_tables()) + cache->set_used_tables(RAND_TABLE_BIT); + else + cache->set_used_tables(0); + } else { uint n= cache->cols(); for (uint i= 0; i < n; i++) - ((Item_cache *)cache->el(i))->set_used_tables(RAND_TABLE_BIT); + { + if (args[0]->el(i)->used_tables()) + ((Item_cache *)cache->el(i))->set_used_tables(RAND_TABLE_BIT); + else + ((Item_cache *)cache->el(i))->set_used_tables(0); + } } if (args[1]->fix_fields(thd, tables, args)) return 1; From 11e0756966ba7fe22bddb175682fdaaea6a5d38a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 15:37:31 +0100 Subject: [PATCH 121/267] - fixed C++-style comments in .c files to make IBM compiler happy (it barfs on these with a syntax error) sql/net_serv.cc: - fixed C++-style comment (this file is copied as libmysql_r/net.c) strings/ctype-tis620.c: - fixed many C++-style comments --- sql/net_serv.cc | 2 +- strings/ctype-tis620.c | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sql/net_serv.cc b/sql/net_serv.cc index c6a0b8c5b3e..c8c774d365f 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -181,7 +181,7 @@ static my_bool net_realloc(NET *net, ulong length) void net_clear(NET *net) { #ifndef EXTRA_DEBUG - int count; // One may get 'unused' warning + int count; /* One may get 'unused' warning */ bool is_blocking=vio_is_blocking(net->vio); if (is_blocking) vio_blocking(net->vio, FALSE); diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index 1c0acc38e24..c39930179cf 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -444,8 +444,8 @@ static uchar* thai2sortable(const uchar * tstr,uint len) const uchar* p = tstr; uchar *outBuf; -// uchar *pRight1, *pRight2, *pRight3, *pRight4; -// uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; +/* uchar *pRight1, *pRight2, *pRight3, *pRight4; */ +/* uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; */ uchar *pRight1, *pRight2, *pRight3; uchar *pLeft1, *pLeft2, *pLeft3; uint bufSize; @@ -480,11 +480,11 @@ static uchar* thai2sortable(const uchar * tstr,uint len) *pRight1++ = t_ctype[p[1]][0]; *pRight2++ = t_ctype[p[1]][1]; *pRight3++ = t_ctype[p[1]][2]; -// *pRight4++ = t_ctype[p[1]][3]; +/* *pRight4++ = t_ctype[p[1]][3]; */ *pRight1++ = t_ctype[*p][0]; *pRight2++ = t_ctype[*p][1]; *pRight3++ = t_ctype[*p][2]; -// *pRight4++ = t_ctype[*p][3]; +/* *pRight4++ = t_ctype[*p][3]; */ len--; p += 2; } else { @@ -501,17 +501,17 @@ static uchar* thai2sortable(const uchar * tstr,uint len) } *pRight1++ = L2_BLANK; *pRight2++ = L3_BLANK; -// *pRight3++ = L4_BLANK; +/* *pRight3++ = L4_BLANK; */ *pRight3++ = '\0'; -// *pRight4++ = '\0'; +/* *pRight4++ = '\0'; */ memcpy(pRight1, pLeft2, pRight2 - pLeft2); pRight1 += pRight2 - pLeft2; memcpy(pRight1, pLeft3, pRight3 - pLeft3); -// pRight1 += pRight3 - pLeft3; -// memcpy(pRight1, pLeft4, pRight4 - pLeft4); +/* pRight1 += pRight3 - pLeft3; */ +/* memcpy(pRight1, pLeft4, pRight4 - pLeft4); */ free(pLeft2); free(pLeft3); -// free(pLeft4); +/* free(pLeft4); */ return(outBuf); } @@ -603,22 +603,22 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape, { if (*ptr == escape && ptr+1 != end) { - ptr++; // Skipp escape + ptr++; /* Skipp escape */ *min_str++= *max_str++ = *ptr; continue; } - if (*ptr == wild_one) // '_' in SQL + if (*ptr == wild_one) /* '_' in SQL */ { - *min_str++='\0'; // This should be min char + *min_str++='\0'; /* This should be min char */ *max_str++=max_sort_chr; continue; } - if (*ptr == wild_many) // '%' in SQL + if (*ptr == wild_many) /* '%' in SQL */ { *min_length= (uint) (min_str - min_org); *max_length=res_length; do { - *min_str++ = ' '; // Because if key compression + *min_str++ = ' '; /* Because if key compression */ *max_str++ = max_sort_chr; } while (min_str != min_end); return 0; @@ -628,7 +628,7 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape, *min_length= *max_length = (uint) (min_str - min_org); while (min_str != min_end) - *min_str++ = *max_str++ = ' '; // Because if key compression + *min_str++ = *max_str++ = ' '; /* Because if key compression */ return 0; } From 8162aec6b9155d0e97d58a0b9c43716ce7adb320 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 18:34:00 +0200 Subject: [PATCH 122/267] fixed bug of unchecked random part of WHERE clause (bug #142) mysql-test/r/select.result: test of random WHERE clause mysql-test/t/select.test: test of random WHERE clause sql/sql_select.cc: fixed bug of unchecked random part of WHERE clause --- mysql-test/r/select.result | 1 + mysql-test/t/select.test | 17 ++++++++++++++++- sql/sql_select.cc | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 5ac5de05f97..dcb796b8e00 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -1793,3 +1793,4 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par t2 0 PRIMARY 1 auto A 1199 NULL NULL t2 0 fld1 1 fld1 A 1199 NULL NULL t2 1 fld3 1 fld3 A NULL NULL NULL +1 diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index cdb6ee57e0f..2caadd99dbb 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1712,8 +1712,23 @@ show full columns from t2 from test like 'f%'; show full columns from t2 from test like 's%'; show keys from t2; +# +# random in WHERE clause +# + +drop table t1; +CREATE TABLE t1 ( + id mediumint(8) unsigned NOT NULL auto_increment, + pseudo varchar(35) NOT NULL default '', + PRIMARY KEY (id), + UNIQUE KEY pseudo (pseudo) +); +INSERT INTO t1 (pseudo) VALUES ('test'); +INSERT INTO t1 (pseudo) VALUES ('test1'); +SELECT 1 from t1 where rand() > 2; + # # Drop the test tables # -drop table t4, t3,t2, t1; +drop table t4, t3, t2, t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8444a451965..bae64969fcd 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2257,6 +2257,8 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) { JOIN_TAB *tab=join->join_tab+i; table_map current_map= tab->table->map; + if (i == join->tables-1) + current_map|= RAND_TABLE_BIT; bool use_quick_range=0; used_tables|=current_map; From fd59fb1031bfcf0d0154f192fe8d8895a2f69b5a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 19:40:49 +0200 Subject: [PATCH 123/267] A bug fix for multi-table updates with InnoDB storage engine --- mysql-test/r/innodb.result | 17 +++++++++++++++++ mysql-test/t/innodb.test | 11 +++++++++++ sql/sql_class.h | 2 +- sql/sql_update.cc | 13 ++++++++----- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index d65e90a6cc0..e577ddb9ecd 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1074,3 +1074,20 @@ id select * from t2; id t1_id drop table t1,t2; +DROP TABLE IF EXISTS t1,t2; +CREATE TABLE t1(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB; +CREATE TABLE t2(id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id) ) TYPE=INNODB; +INSERT INTO t1 VALUES(1); +INSERT INTO t2 VALUES(1, 1); +SELECT * from t1; +id +1 +UPDATE t1,t2 SET t1.id=t1.id+1, t2.t1_id=t1.id+1; +SELECT * from t1; +id +2 +UPDATE t1,t2 SET t1.id=t1.id+1; +SELECT * from t1; +id +3 +DROP TABLE IF EXISTS t1,t2; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 7d13258ede1..bd44038b446 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -715,3 +715,14 @@ delete t1,t2 from t1,t2 where t1.id=t2.t1_id; select * from t1; select * from t2; drop table t1,t2; +DROP TABLE IF EXISTS t1,t2; +CREATE TABLE t1(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB; +CREATE TABLE t2(id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id) ) TYPE=INNODB; +INSERT INTO t1 VALUES(1); +INSERT INTO t2 VALUES(1, 1); +SELECT * from t1; +UPDATE t1,t2 SET t1.id=t1.id+1, t2.t1_id=t1.id+1; +SELECT * from t1; +UPDATE t1,t2 SET t1.id=t1.id+1; +SELECT * from t1; +DROP TABLE IF EXISTS t1,t2; diff --git a/sql/sql_class.h b/sql/sql_class.h index f7d9d93a606..f372db079ff 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -831,7 +831,7 @@ class multi_update : public select_result uint table_count; Copy_field *copy_field; enum enum_duplicates handle_duplicates; - bool do_update, trans_safe, transactional_tables, log_delayed; + bool do_update, trans_safe, transactional_tables, log_delayed, on_the_fly; public: multi_update(THD *thd_arg, TABLE_LIST *ut, List *fields, diff --git a/sql/sql_update.cc b/sql/sql_update.cc index d1a2d4d5524..8258d6df6a5 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -413,7 +413,7 @@ multi_update::multi_update(THD *thd_arg, TABLE_LIST *table_list, :all_tables(table_list), update_tables(0), thd(thd_arg), tmp_tables(0), updated(0), found(0), fields(field_list), values(value_list), table_count(0), copy_field(0), handle_duplicates(handle_duplicates_arg), - do_update(1), trans_safe(0) + do_update(1), trans_safe(0), on_the_fly(1) {} @@ -538,12 +538,15 @@ multi_update::initialize_tables(JOIN *join) main_table=join->join_tab->table; trans_safe= transactional_tables= main_table->file->has_transactions(); log_delayed= trans_safe || main_table->tmp_table != NO_TMP_TABLE; - +#ifdef HAVE_INNOBASE_DB + if (main_table->db_type == DB_TYPE_INNODB) + on_the_fly=0; +#endif /* Create a temporary table for all tables after except main table */ for (table_ref= update_tables; table_ref; table_ref=table_ref->next) { TABLE *table=table_ref->table; - if (table != main_table) + if (!on_the_fly || table != main_table) { uint cnt= table_ref->shared; ORDER group; @@ -623,7 +626,7 @@ bool multi_update::send_data(List ¬_used_values) uint offset= cur_table->shared; table->file->position(table->record[0]); - if (table == main_table) + if (on_the_fly && table == main_table) { table->status|= STATUS_UPDATED; store_record(table,1); @@ -716,7 +719,7 @@ int multi_update::do_updates(bool from_send_error) for (cur_table= update_tables; cur_table ; cur_table= cur_table->next) { table = cur_table->table; - if (table == main_table) + if (on_the_fly && table == main_table) continue; // Already updated org_updated= updated; From 7f7e7220c26bad1ffda1e52453a7ab89f70fac52 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 18:54:57 +0100 Subject: [PATCH 124/267] - made test for multiple --user options more sh-compatible --- scripts/safe_mysqld.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/safe_mysqld.sh b/scripts/safe_mysqld.sh index a8ca3537cb3..6b7e16c57b0 100644 --- a/scripts/safe_mysqld.sh +++ b/scripts/safe_mysqld.sh @@ -34,8 +34,8 @@ parse_arguments() { --datadir=*) DATADIR=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --pid-file=*) pid_file=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --user=*) - if [ $SET_USER == 0 ] - then + if test $SET_USER -eq 0 + then user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 fi ;; From d69a5630ff30564d497bf1dc48e5f50b7d226cfc Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 21:25:17 +0200 Subject: [PATCH 125/267] Cleaned up disk_pos_assert() to be more general. --- myisam/mi_open.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/myisam/mi_open.c b/myisam/mi_open.c index 04d035c3ae4..1832d525157 100644 --- a/myisam/mi_open.c +++ b/myisam/mi_open.c @@ -35,6 +35,14 @@ static void setup_key_functions(MI_KEYDEF *keyinfo); pos+=size;} +#define disk_pos_assert(pos, end_pos) \ +if (pos > end_pos) \ +{ \ + my_errno=HA_ERR_CRASHED; \ + goto err; \ +} + + /****************************************************************************** ** Return the shared struct if the table is already open. ** In MySQL the server will handle version issues. @@ -270,28 +278,19 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) share->state.header.max_block_size)); strmov(share->filename,name_buff); -#define disk_pos_assert do \ - { \ - if (disk_pos > end_pos) \ - { \ - my_errno=HA_ERR_CRASHED; \ - goto err; \ - } \ - } while(0) - share->blocksize=min(IO_SIZE,myisam_block_size); { MI_KEYSEG *pos=share->keyparts; for (i=0 ; i < keys ; i++) { disk_pos=mi_keydef_read(disk_pos, &share->keyinfo[i]); - disk_pos_assert; + disk_pos_assert(disk_pos + share->keyinfo[i].keysegs * MI_KEYSEG_SIZE, + end_pos); set_if_smaller(share->blocksize,share->keyinfo[i].block_length); share->keyinfo[i].seg=pos; for (j=0 ; j < share->keyinfo[i].keysegs; j++,pos++) { disk_pos=mi_keyseg_read(disk_pos, pos); - disk_pos_assert; if (pos->type == HA_KEYTYPE_TEXT || pos->type == HA_KEYTYPE_VARTEXT) { if (!pos->language) @@ -318,12 +317,12 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) for (i=0 ; i < uniques ; i++) { disk_pos=mi_uniquedef_read(disk_pos, &share->uniqueinfo[i]); - disk_pos_assert; + disk_pos_assert(disk_pos + share->uniqueinfo[i].keysegs * + MI_KEYSEG_SIZE, end_pos); share->uniqueinfo[i].seg=pos; for (j=0 ; j < share->uniqueinfo[i].keysegs; j++,pos++) { disk_pos=mi_keyseg_read(disk_pos, pos); - disk_pos_assert; if (pos->type == HA_KEYTYPE_TEXT || pos->type == HA_KEYTYPE_VARTEXT) { if (!pos->language) @@ -345,10 +344,10 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) for (i=0 ; i < keys ; i++) setup_key_functions(share->keyinfo+i); + disk_pos_assert(disk_pos + share->base.fields *MI_COLUMNDEF_SIZE, end_pos); for (i=j=offset=0 ; i < share->base.fields ; i++) { disk_pos=mi_recinfo_read(disk_pos,&share->rec[i]); - disk_pos_assert; share->rec[i].pack_type=0; share->rec[i].huff_tree=0; share->rec[i].offset=offset; From dccac5839636906822aa4e07fb7da79fb2668ab6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 21:20:53 +0100 Subject: [PATCH 126/267] fixed an obscure bug in group by + having + Item_ref::get_date --- mysql-test/r/group_by.result | 1 + mysql-test/t/group_by.test | 8 ++++++++ sql/item.cc | 11 +++++++++++ sql/item.h | 11 +++++++---- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 113f8325685..0073827056d 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -128,3 +128,4 @@ a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') 1 4 c 10 43 a,b,d,f +a c count(distinct rand()) diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index 6e256d7896f..20e11713d31 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -346,3 +346,11 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a; select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a; select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a; drop table t1; + +# not purely group_by bug, but group_by is involved... + +create table t1 (a date default null, b date default null); +insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01'); +select a,min(b) c,count(distinct rand()) from t1 group by a having cis_null()) || + result_field->get_date(ltime,fuzzydate)) + { + bzero((char*) ltime,sizeof(*ltime)); + return 1; + } + return 0; +} + bool Item_field::get_time(TIME *ltime) { if ((null_value=field->is_null()) || field->get_time(ltime)) diff --git a/sql/item.h b/sql/item.h index 408010d211a..3cf5a17805c 100644 --- a/sql/item.h +++ b/sql/item.h @@ -82,6 +82,8 @@ public: virtual void split_sum_func(List &fields) {} virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_time(TIME *ltime); + virtual bool get_date_result(TIME *ltime,bool fuzzydate) + { return get_date(ltime,fuzzydate); } }; @@ -129,8 +131,9 @@ public: return field->result_type(); } Field *tmp_table_field() { return result_field; } - bool get_date(TIME *ltime,bool fuzzydate); - bool get_time(TIME *ltime); + bool get_date(TIME *ltime,bool fuzzydate); + bool get_date_result(TIME *ltime,bool fuzzydate); + bool get_time(TIME *ltime); }; @@ -332,8 +335,8 @@ public: return tmp; } bool get_date(TIME *ltime,bool fuzzydate) - { - return (null_value=(*ref)->get_date(ltime,fuzzydate)); + { + return (null_value=(*ref)->get_date_result(ltime,fuzzydate)); } bool send(String *tmp) { return (*ref)->send(tmp); } void make_field(Send_field *field) { (*ref)->make_field(field); } From ddd2f4fc3e7824e53d8609c2e705c98f73dcfb59 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 11 Mar 2003 22:47:29 +0100 Subject: [PATCH 127/267] - Fixed man page for apropos/whatis (thanks to Christian Hammers from Debian for the patch) (bug #135) --- man/perror.1 | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/man/perror.1 b/man/perror.1 index bd5a4211f4b..eb6c9f39d56 100755 --- a/man/perror.1 +++ b/man/perror.1 @@ -1,17 +1,12 @@ .TH perror 1 "19 December 2000" "MySQL 3.23" "MySQL database" .SH NAME -.BR perror -can be used to display a description for a system error code, or an MyISAM/ISAM table handler error code. The error messages are mostly system dependent. -.SH USAGE -perror [OPTIONS] [ERRORCODE [ERRORCODE...]] +perror \- describes a system or MySQL error code. .SH SYNOPSIS -.B perror -.RB [ \-? | \-\-help ] -.RB [ \-I | \-\-info ] -.RB [ \-s | \-\-silent ] -.RB [ \-v | \-\-verbose ] -.RB [ \-V | \-\-version ] +perror [OPTIONS] [ERRORCODE [ERRORCODE...]] .SH DESCRIPTION +Can be used to display a description for a system error code, or an MyISAM/ISAM table handler error code. +The error messages are mostly system dependent. +.SH OPTIONS .TP .BR \-? | \-\-help Displays this help and exits. From fa4f6e89984fd26199f18d4bf5c418b054536ad0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 01:40:06 +0200 Subject: [PATCH 128/267] Simple fixes (nothing notable) dbug/dbug.c: Remove duplicate va_end() call mysql-test/mysql-test-run.sh: Longer stack trace from valgrind mysys/my_lib.c: Fixed wrong dbug printf sql/slave.cc: Simple optimization sql/sql_class.cc: Added DBUG info --- dbug/dbug.c | 1 - mysql-test/mysql-test-run.sh | 2 +- mysys/my_lib.c | 2 +- sql/slave.cc | 16 +++++----------- sql/sql_class.cc | 2 ++ 5 files changed, 9 insertions(+), 14 deletions(-) diff --git a/dbug/dbug.c b/dbug/dbug.c index 3f6c9b2f980..a4f9d5ecd4b 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -919,7 +919,6 @@ void _db_doprnt_ (const char *format,...) } (void) fprintf (_db_fp_, "%s: ", state->u_keyword); (void) vfprintf (_db_fp_, format, args); - va_end(args); (void) fputc('\n',_db_fp_); dbug_flush(state); errno=save_errno; diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index e0e9af2432a..978fcdfd2b3 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -326,7 +326,7 @@ while test $# -gt 0; do USE_RUNNING_SERVER="" ;; --valgrind) - VALGRIND="valgrind --alignment=8 --leak-check=yes" + VALGRIND="valgrind --alignment=8 --leak-check=yes --num-callers=16" EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-safemalloc" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-safemalloc" SLEEP_TIME_AFTER_RESTART=10 diff --git a/mysys/my_lib.c b/mysys/my_lib.c index a06120894c5..035bafd07b9 100644 --- a/mysys/my_lib.c +++ b/mysys/my_lib.c @@ -103,7 +103,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags) char dirent_tmp[sizeof(struct dirent)+_POSIX_PATH_MAX+1]; #endif DBUG_ENTER("my_dir"); - DBUG_PRINT("my",("path: '%s' stat: %d MyFlags: %d",path,MyFlags)); + DBUG_PRINT("my",("path: '%s' MyFlags: %d",path,MyFlags)); #if defined(THREAD) && !defined(HAVE_READDIR_R) pthread_mutex_lock(&THR_LOCK_open); diff --git a/sql/slave.cc b/sql/slave.cc index daca8fe1cf6..5ddea7501e4 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -401,9 +401,9 @@ int terminate_slave_threads(MASTER_INFO* mi,int thread_mask,bool skip_lock) DBUG_PRINT("info",("Terminating IO thread")); mi->abort_slave=1; if ((error=terminate_slave_thread(mi->io_thd,io_lock, - io_cond_lock, - &mi->stop_cond, - &mi->slave_running)) && + io_cond_lock, + &mi->stop_cond, + &mi->slave_running)) && !force_all) DBUG_RETURN(error); } @@ -443,12 +443,10 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock, be referening freed memory trying to kick it */ THD_CHECK_SENTRY(thd); - if (*slave_running) + + while (*slave_running) // Should always be true { KICK_SLAVE(thd); - } - while (*slave_running) - { /* There is a small chance that slave thread might miss the first alarm. To protect againts it, resend the signal until it reacts @@ -456,10 +454,6 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock, struct timespec abstime; set_timespec(abstime,2); pthread_cond_timedwait(term_cond, cond_lock, &abstime); - if (*slave_running) - { - KICK_SLAVE(thd); - } } if (term_lock) pthread_mutex_unlock(term_lock); diff --git a/sql/sql_class.cc b/sql/sql_class.cc index a99d17b0ec4..a481b365182 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -419,12 +419,14 @@ CHANGED_TABLE_LIST* THD::changed_table_dup(const char *key, long key_length) #ifdef SIGNAL_WITH_VIO_CLOSE void THD::close_active_vio() { + DBUG_ENTER("close_active_vio"); safe_mutex_assert_owner(&LOCK_delete); if (active_vio) { vio_close(active_vio); active_vio = 0; } + DBUG_RETURN; } #endif From 5dd8180a8ef7de8310c9c1e4888f90eedb5df691 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 01:05:04 +0100 Subject: [PATCH 129/267] Fix for bug #136. We must write the INSERT into u SELECT * from t to the binlog BEFORE unlocking t (which was read-locked at least in MyISAM), and not the contrary. --- sql/sql_select.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index d3934fbd620..ec6b7961267 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4469,9 +4469,16 @@ do_select(JOIN *join,List *fields,TABLE *table,Procedure *procedure) error=0; if (!table) // If sending data to client { - join_free(join); // Unlock all cursors + //note that the call below may trigger binlog writing for some commands... if (join->result->send_eof()) error= 1; // Don't send error + /* + ...which must be done before unlocking the read tables (otherwise + another thread may, quickly between unlock and binlog-write, + update the read table and write to the binlog, which will + result in badly ordered binlog events (and replication breaks). + */ + join_free(join); // Unlock all cursors } DBUG_PRINT("info",("%ld records output",join->send_records)); } From 0e812fc4b12f935184e78be4ee982799e99e6dc4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 07:51:08 +0200 Subject: [PATCH 130/267] Fix for replication of INSERT | REPLACE | CREATE ... SELECT sql/sql_select.cc: Fix for repllication of INSERT | REPLACE | CREATE ... SELECT --- sql/sql_parse.cc | 3 +++ sql/sql_select.cc | 13 +++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6dac0a82d26..8f3a3a9bce2 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1595,6 +1595,7 @@ mysql_execute_command(void) for (table = tables->next ; table ; table=table->next) table->lock_type= lex->lock_option; } + select_lex->options|= SELECT_NO_UNLOCK; thd->offset_limit=select_lex->offset_limit; thd->select_limit=select_lex->select_limit+select_lex->offset_limit; if (thd->select_limit < select_lex->select_limit) @@ -1922,6 +1923,8 @@ mysql_execute_command(void) if ((res=check_table_access(thd, SELECT_ACL, save_next))) goto error; } + /* Don't unlock tables until command is written to binary log */ + select_lex->options|= SELECT_NO_UNLOCK; select_result *result; thd->offset_limit=select_lex->offset_limit; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ec6b7961267..ffe20095963 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4469,16 +4469,13 @@ do_select(JOIN *join,List *fields,TABLE *table,Procedure *procedure) error=0; if (!table) // If sending data to client { - //note that the call below may trigger binlog writing for some commands... + /* + The following will unlock all cursors if the command wasn't an + update command + */ + join_free(join); if (join->result->send_eof()) error= 1; // Don't send error - /* - ...which must be done before unlocking the read tables (otherwise - another thread may, quickly between unlock and binlog-write, - update the read table and write to the binlog, which will - result in badly ordered binlog events (and replication breaks). - */ - join_free(join); // Unlock all cursors } DBUG_PRINT("info",("%ld records output",join->send_records)); } From ab3c0ac156946ff9a6ef94b3cc987f02f940465a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 08:08:07 +0200 Subject: [PATCH 131/267] Proper fix for INSERT DELAYED and --max-delayed-threads --- sql/sql_insert.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 5bf852afc32..9f1a0e93cb9 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -139,9 +139,8 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List &fields, */ if ((lock_type == TL_WRITE_DELAYED && ((specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) || - thd->slave_thread)) || - (lock_type == TL_WRITE_CONCURRENT_INSERT && duplic == DUP_REPLACE) || - !max_insert_delayed_threads) + thd->slave_thread || !max_insert_delayed_threads)) || + (lock_type == TL_WRITE_CONCURRENT_INSERT && duplic == DUP_REPLACE)) lock_type=TL_WRITE; if (lock_type == TL_WRITE_DELAYED) From 92c9dc34b4aab21ed6b3505b48496b20dc4659e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 15:37:39 +0400 Subject: [PATCH 132/267] ALTER TABLE ADD SPATIAL KEY bug fix myisam/mi_check.c: Additional condition added - we only can create spatial key row-by-row now --- myisam/mi_check.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myisam/mi_check.c b/myisam/mi_check.c index c938dd41a58..d0e9d17a43b 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -3824,8 +3824,8 @@ void mi_disable_non_unique_index(MI_INFO *info, ha_rows rows) MI_KEYDEF *key=share->keyinfo; for (i=0 ; i < share->base.keys ; i++,key++) { - if (!(key->flag & HA_NOSAME) && ! mi_too_big_key_for_sort(key,rows) && - info->s->base.auto_key != i+1) + if (!(key->flag & (HA_NOSAME | HA_SPATIAL)) && + ! mi_too_big_key_for_sort(key,rows) && info->s->base.auto_key != i+1) { share->state.key_map&= ~ ((ulonglong) 1 << i); info->update|= HA_STATE_CHANGED; From cbbe5e8e2b45d20fbf06c3110e86d3faa5ba5542 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 14:34:07 +0200 Subject: [PATCH 133/267] A little bit improved test case --- mysql-test/r/innodb.result | 2 +- mysql-test/t/innodb.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index e577ddb9ecd..66e748579de 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1086,7 +1086,7 @@ UPDATE t1,t2 SET t1.id=t1.id+1, t2.t1_id=t1.id+1; SELECT * from t1; id 2 -UPDATE t1,t2 SET t1.id=t1.id+1; +UPDATE t1,t2 SET t1.id=t1.id+1 where t1.id!=t2.id; SELECT * from t1; id 3 diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index bd44038b446..6a6bb850902 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -723,6 +723,6 @@ INSERT INTO t2 VALUES(1, 1); SELECT * from t1; UPDATE t1,t2 SET t1.id=t1.id+1, t2.t1_id=t1.id+1; SELECT * from t1; -UPDATE t1,t2 SET t1.id=t1.id+1; +UPDATE t1,t2 SET t1.id=t1.id+1 where t1.id!=t2.id; SELECT * from t1; DROP TABLE IF EXISTS t1,t2; From 4976cd5529fb0fe19891a7ef3bc7ff68146bf6a3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 14:34:54 +0200 Subject: [PATCH 134/267] Fix for --new option (Timestamp in YYYY-MM-DD HH:MM:SS format) sql/field.cc: Fix for --new option sql/field.h: Fix for --new option --- sql/field.cc | 25 +++++++++++++++++++++++++ sql/field.h | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/sql/field.cc b/sql/field.cc index b8c63db6708..ce5e240aba8 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2421,6 +2421,14 @@ void Field_double::sql_type(String &res) const ** by handler.cc. The form->timestamp points at the automatic timestamp. ****************************************************************************/ +enum Item_result Field_timestamp::result_type() const +{ + return (!current_thd->variables.new_mode && + (field_length == 8 || field_length == 14) ? INT_RESULT : + STRING_RESULT); +} + + Field_timestamp::Field_timestamp(char *ptr_arg, uint32 len_arg, enum utype unireg_check_arg, const char *field_name_arg, @@ -2783,6 +2791,23 @@ void Field_timestamp::set_time() longstore(ptr,tmp); } +/* + This is an exact copy of Field_num except that 'length' is depending + on --new mode +*/ + +void Field_timestamp::make_field(Send_field *field) +{ + field->table_name=table_name; + field->col_name=field_name; + /* If --new, then we are using "YYYY-MM-DD HH:MM:SS" format */ + field->length= current_thd->variables.new_mode ? 19 : field_length; + field->type=type(); + field->flags=table->maybe_null ? (flags & ~NOT_NULL_FLAG) : flags; + field->decimals=dec; +} + + /**************************************************************************** ** time type ** In string context: HH:MM:SS diff --git a/sql/field.h b/sql/field.h index 29c185505c7..842bbb89988 100644 --- a/sql/field.h +++ b/sql/field.h @@ -541,7 +541,7 @@ public: Field_timestamp(char *ptr_arg, uint32 len_arg, enum utype unireg_check_arg, const char *field_name_arg, struct st_table *table_arg); - enum Item_result result_type () const { return field_length == 8 || field_length == 14 ? INT_RESULT : STRING_RESULT; } + enum Item_result result_type () const; enum_field_types type() const { return FIELD_TYPE_TIMESTAMP;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; } void store(const char *to,uint length); @@ -575,6 +575,7 @@ public: void fill_and_store(char *from,uint len); bool get_date(TIME *ltime,bool fuzzydate); bool get_time(TIME *ltime); + void make_field(Send_field *field); }; From be079a5d789c84ce6a3aaede3a04d4126692c0aa Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 16:52:02 +0400 Subject: [PATCH 135/267] Test case for rtree indexes. --- mysql-test/r/gis-rtree.result | 814 ++++++++++++++++++++++++++++++++++ mysql-test/t/gis-rtree.test | 72 +++ 2 files changed, 886 insertions(+) create mode 100644 mysql-test/r/gis-rtree.result create mode 100644 mysql-test/t/gis-rtree.test diff --git a/mysql-test/r/gis-rtree.result b/mysql-test/r/gis-rtree.result new file mode 100644 index 00000000000..a1d3455d9a7 --- /dev/null +++ b/mysql-test/r/gis-rtree.result @@ -0,0 +1,814 @@ +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 ( +fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +g GEOMETRY NOT NULL, +SPATIAL KEY(g) +) TYPE=MyISAM; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `fid` int(11) NOT NULL auto_increment, + `g` geometry NOT NULL default '', + PRIMARY KEY (`fid`), + SPATIAL KEY `g` (`g`(32)) +) TYPE=MyISAM CHARSET=latin1 +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(150 150, 150 150)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(149 149, 151 151)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(148 148, 152 152)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(147 147, 153 153)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(146 146, 154 154)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(145 145, 155 155)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(144 144, 156 156)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(143 143, 157 157)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(142 142, 158 158)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(141 141, 159 159)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(140 140, 160 160)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(139 139, 161 161)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(138 138, 162 162)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(137 137, 163 163)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(136 136, 164 164)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(135 135, 165 165)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(134 134, 166 166)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(133 133, 167 167)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(132 132, 168 168)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(131 131, 169 169)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(130 130, 170 170)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(129 129, 171 171)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(128 128, 172 172)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(127 127, 173 173)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(126 126, 174 174)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(125 125, 175 175)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(124 124, 176 176)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(123 123, 177 177)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(122 122, 178 178)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(121 121, 179 179)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(120 120, 180 180)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(119 119, 181 181)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(118 118, 182 182)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(117 117, 183 183)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(116 116, 184 184)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(115 115, 185 185)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(114 114, 186 186)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(113 113, 187 187)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(112 112, 188 188)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(111 111, 189 189)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(110 110, 190 190)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(109 109, 191 191)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(108 108, 192 192)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(107 107, 193 193)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(106 106, 194 194)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(105 105, 195 195)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(104 104, 196 196)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(103 103, 197 197)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(102 102, 198 198)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(101 101, 199 199)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(100 100, 200 200)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(99 99, 201 201)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(98 98, 202 202)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(97 97, 203 203)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(96 96, 204 204)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(95 95, 205 205)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(94 94, 206 206)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(93 93, 207 207)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(92 92, 208 208)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(91 91, 209 209)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(90 90, 210 210)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(89 89, 211 211)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(88 88, 212 212)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(87 87, 213 213)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(86 86, 214 214)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(85 85, 215 215)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(84 84, 216 216)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(83 83, 217 217)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(82 82, 218 218)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(81 81, 219 219)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(80 80, 220 220)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(79 79, 221 221)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(78 78, 222 222)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(77 77, 223 223)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(76 76, 224 224)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(75 75, 225 225)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(74 74, 226 226)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(73 73, 227 227)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(72 72, 228 228)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(71 71, 229 229)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(70 70, 230 230)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(69 69, 231 231)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(68 68, 232 232)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(67 67, 233 233)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(66 66, 234 234)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(65 65, 235 235)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(64 64, 236 236)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(63 63, 237 237)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(62 62, 238 238)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(61 61, 239 239)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(60 60, 240 240)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(59 59, 241 241)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(58 58, 242 242)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(57 57, 243 243)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(56 56, 244 244)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(55 55, 245 245)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(54 54, 246 246)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(53 53, 247 247)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(52 52, 248 248)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(51 51, 249 249)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(50 50, 250 250)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(49 49, 251 251)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(48 48, 252 252)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(47 47, 253 253)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(46 46, 254 254)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(45 45, 255 255)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(44 44, 256 256)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(43 43, 257 257)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(42 42, 258 258)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(41 41, 259 259)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(40 40, 260 260)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(39 39, 261 261)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(38 38, 262 262)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(37 37, 263 263)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(36 36, 264 264)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(35 35, 265 265)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(34 34, 266 266)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(33 33, 267 267)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(32 32, 268 268)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(31 31, 269 269)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(30 30, 270 270)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(29 29, 271 271)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(28 28, 272 272)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(27 27, 273 273)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(26 26, 274 274)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(25 25, 275 275)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(24 24, 276 276)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(23 23, 277 277)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(22 22, 278 278)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(21 21, 279 279)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(20 20, 280 280)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(19 19, 281 281)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(18 18, 282 282)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(17 17, 283 283)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(16 16, 284 284)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(15 15, 285 285)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(14 14, 286 286)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(13 13, 287 287)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(12 12, 288 288)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(11 11, 289 289)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(10 10, 290 290)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(9 9, 291 291)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(8 8, 292 292)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(7 7, 293 293)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(6 6, 294 294)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(5 5, 295 295)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(4 4, 296 296)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(3 3, 297 297)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(2 2, 298 298)')); +INSERT INTO t1 (g) VALUES (GeomFromText('LineString(1 1, 299 299)')); +SELECT count(*) FROM t1; +count(*) +150 +EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, +GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range g g 32 NULL 4 Using where +SELECT fid, AsText(g) FROM t1 WHERE Within(g, +GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +fid AsText(g) +1 LINESTRING(150 150,150 150) +11 LINESTRING(140 140,160 160) +2 LINESTRING(149 149,151 151) +3 LINESTRING(148 148,152 152) +4 LINESTRING(147 147,153 153) +5 LINESTRING(146 146,154 154) +6 LINESTRING(145 145,155 155) +7 LINESTRING(144 144,156 156) +8 LINESTRING(143 143,157 157) +9 LINESTRING(142 142,158 158) +10 LINESTRING(141 141,159 159) +DROP TABLE t1; +CREATE TABLE t2 ( +fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +g GEOMETRY NOT NULL +) TYPE=MyISAM; +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 10 * 10 - 9), +Point(10 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 9 * 10 - 9), +Point(10 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 8 * 10 - 9), +Point(10 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 7 * 10 - 9), +Point(10 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 6 * 10 - 9), +Point(10 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 5 * 10 - 9), +Point(10 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 4 * 10 - 9), +Point(10 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 3 * 10 - 9), +Point(10 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 2 * 10 - 9), +Point(10 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 1 * 10 - 9), +Point(10 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 10 * 10 - 9), +Point(9 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 9 * 10 - 9), +Point(9 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 8 * 10 - 9), +Point(9 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 7 * 10 - 9), +Point(9 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 6 * 10 - 9), +Point(9 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 5 * 10 - 9), +Point(9 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 4 * 10 - 9), +Point(9 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 3 * 10 - 9), +Point(9 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 2 * 10 - 9), +Point(9 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 1 * 10 - 9), +Point(9 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 10 * 10 - 9), +Point(8 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 9 * 10 - 9), +Point(8 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 8 * 10 - 9), +Point(8 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 7 * 10 - 9), +Point(8 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 6 * 10 - 9), +Point(8 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 5 * 10 - 9), +Point(8 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 4 * 10 - 9), +Point(8 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 3 * 10 - 9), +Point(8 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 2 * 10 - 9), +Point(8 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 1 * 10 - 9), +Point(8 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 10 * 10 - 9), +Point(7 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 9 * 10 - 9), +Point(7 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 8 * 10 - 9), +Point(7 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 7 * 10 - 9), +Point(7 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 6 * 10 - 9), +Point(7 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 5 * 10 - 9), +Point(7 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 4 * 10 - 9), +Point(7 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 3 * 10 - 9), +Point(7 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 2 * 10 - 9), +Point(7 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 1 * 10 - 9), +Point(7 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 10 * 10 - 9), +Point(6 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 9 * 10 - 9), +Point(6 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 8 * 10 - 9), +Point(6 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 7 * 10 - 9), +Point(6 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 6 * 10 - 9), +Point(6 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 5 * 10 - 9), +Point(6 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 4 * 10 - 9), +Point(6 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 3 * 10 - 9), +Point(6 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 2 * 10 - 9), +Point(6 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 1 * 10 - 9), +Point(6 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 10 * 10 - 9), +Point(5 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 9 * 10 - 9), +Point(5 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 8 * 10 - 9), +Point(5 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 7 * 10 - 9), +Point(5 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 6 * 10 - 9), +Point(5 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 5 * 10 - 9), +Point(5 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 4 * 10 - 9), +Point(5 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 3 * 10 - 9), +Point(5 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 2 * 10 - 9), +Point(5 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 1 * 10 - 9), +Point(5 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 10 * 10 - 9), +Point(4 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 9 * 10 - 9), +Point(4 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 8 * 10 - 9), +Point(4 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 7 * 10 - 9), +Point(4 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 6 * 10 - 9), +Point(4 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 5 * 10 - 9), +Point(4 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 4 * 10 - 9), +Point(4 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 3 * 10 - 9), +Point(4 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 2 * 10 - 9), +Point(4 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 1 * 10 - 9), +Point(4 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 10 * 10 - 9), +Point(3 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 9 * 10 - 9), +Point(3 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 8 * 10 - 9), +Point(3 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 7 * 10 - 9), +Point(3 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 6 * 10 - 9), +Point(3 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 5 * 10 - 9), +Point(3 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 4 * 10 - 9), +Point(3 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 3 * 10 - 9), +Point(3 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 2 * 10 - 9), +Point(3 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 1 * 10 - 9), +Point(3 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 10 * 10 - 9), +Point(2 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 9 * 10 - 9), +Point(2 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 8 * 10 - 9), +Point(2 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 7 * 10 - 9), +Point(2 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 6 * 10 - 9), +Point(2 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 5 * 10 - 9), +Point(2 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 4 * 10 - 9), +Point(2 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 3 * 10 - 9), +Point(2 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 2 * 10 - 9), +Point(2 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 1 * 10 - 9), +Point(2 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 10 * 10 - 9), +Point(1 * 10, 10 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 9 * 10 - 9), +Point(1 * 10, 9 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 8 * 10 - 9), +Point(1 * 10, 8 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 7 * 10 - 9), +Point(1 * 10, 7 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 6 * 10 - 9), +Point(1 * 10, 6 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 5 * 10 - 9), +Point(1 * 10, 5 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 4 * 10 - 9), +Point(1 * 10, 4 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 3 * 10 - 9), +Point(1 * 10, 3 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 2 * 10 - 9), +Point(1 * 10, 2 * 10))); +INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 1 * 10 - 9), +Point(1 * 10, 1 * 10))); +ALTER TABLE t2 ADD SPATIAL KEY(g); +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `fid` int(11) NOT NULL auto_increment, + `g` geometry NOT NULL default '', + PRIMARY KEY (`fid`), + SPATIAL KEY `g` (`g`(32)) +) TYPE=MyISAM CHARSET=latin1 +SELECT count(*) FROM t2; +count(*) +100 +EXPLAIN SELECT fid, AsText(g) FROM t2 WHERE Within(g, +GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))')); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 range g g 32 NULL 4 Using where +SELECT fid, AsText(g) FROM t2 WHERE Within(g, +GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))')); +fid AsText(g) +45 LINESTRING(51 51,60 60) +55 LINESTRING(41 51,50 60) +56 LINESTRING(41 41,50 50) +46 LINESTRING(51 41,60 50) +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 10 * 10 - 9), Point(10 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +99 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 9 * 10 - 9), Point(10 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +98 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 8 * 10 - 9), Point(10 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +97 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 7 * 10 - 9), Point(10 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +96 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 6 * 10 - 9), Point(10 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +95 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 5 * 10 - 9), Point(10 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +94 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 4 * 10 - 9), Point(10 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +93 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 3 * 10 - 9), Point(10 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +92 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 2 * 10 - 9), Point(10 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +91 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 1 * 10 - 9), Point(10 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +90 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 10 * 10 - 9), Point(9 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +89 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 9 * 10 - 9), Point(9 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +88 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 8 * 10 - 9), Point(9 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +87 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 7 * 10 - 9), Point(9 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +86 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 6 * 10 - 9), Point(9 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +85 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 5 * 10 - 9), Point(9 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +84 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 4 * 10 - 9), Point(9 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +83 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 3 * 10 - 9), Point(9 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +82 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 2 * 10 - 9), Point(9 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +81 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 1 * 10 - 9), Point(9 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +80 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 10 * 10 - 9), Point(8 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +79 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 9 * 10 - 9), Point(8 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +78 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 8 * 10 - 9), Point(8 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +77 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 7 * 10 - 9), Point(8 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +76 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 6 * 10 - 9), Point(8 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +75 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 5 * 10 - 9), Point(8 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +74 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 4 * 10 - 9), Point(8 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +73 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 3 * 10 - 9), Point(8 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +72 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 2 * 10 - 9), Point(8 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +71 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 1 * 10 - 9), Point(8 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +70 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 10 * 10 - 9), Point(7 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +69 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 9 * 10 - 9), Point(7 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +68 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 8 * 10 - 9), Point(7 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +67 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 7 * 10 - 9), Point(7 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +66 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 6 * 10 - 9), Point(7 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +65 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 5 * 10 - 9), Point(7 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +64 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 4 * 10 - 9), Point(7 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +63 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 3 * 10 - 9), Point(7 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +62 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 2 * 10 - 9), Point(7 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +61 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 1 * 10 - 9), Point(7 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +60 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 10 * 10 - 9), Point(6 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +59 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 9 * 10 - 9), Point(6 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +58 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 8 * 10 - 9), Point(6 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +57 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 7 * 10 - 9), Point(6 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +56 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 6 * 10 - 9), Point(6 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +55 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 5 * 10 - 9), Point(6 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +54 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 4 * 10 - 9), Point(6 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +53 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 3 * 10 - 9), Point(6 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +52 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 2 * 10 - 9), Point(6 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +51 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 1 * 10 - 9), Point(6 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +50 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 10 * 10 - 9), Point(5 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +49 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 9 * 10 - 9), Point(5 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +48 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 8 * 10 - 9), Point(5 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +47 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 7 * 10 - 9), Point(5 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +46 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 6 * 10 - 9), Point(5 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +45 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 5 * 10 - 9), Point(5 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +44 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 4 * 10 - 9), Point(5 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +43 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 3 * 10 - 9), Point(5 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +42 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 2 * 10 - 9), Point(5 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +41 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 1 * 10 - 9), Point(5 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +40 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 10 * 10 - 9), Point(4 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +39 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 9 * 10 - 9), Point(4 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +38 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 8 * 10 - 9), Point(4 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +37 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 7 * 10 - 9), Point(4 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +36 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 6 * 10 - 9), Point(4 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +35 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 5 * 10 - 9), Point(4 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +34 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 4 * 10 - 9), Point(4 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +33 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 3 * 10 - 9), Point(4 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +32 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 2 * 10 - 9), Point(4 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +31 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 1 * 10 - 9), Point(4 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +30 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 10 * 10 - 9), Point(3 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +29 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 9 * 10 - 9), Point(3 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +28 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 8 * 10 - 9), Point(3 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +27 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 7 * 10 - 9), Point(3 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +26 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 6 * 10 - 9), Point(3 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +25 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 5 * 10 - 9), Point(3 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +24 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 4 * 10 - 9), Point(3 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +23 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 3 * 10 - 9), Point(3 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +22 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 2 * 10 - 9), Point(3 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +21 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 1 * 10 - 9), Point(3 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +20 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 10 * 10 - 9), Point(2 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +19 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 9 * 10 - 9), Point(2 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +18 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 8 * 10 - 9), Point(2 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +17 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 7 * 10 - 9), Point(2 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +16 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 6 * 10 - 9), Point(2 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +15 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 5 * 10 - 9), Point(2 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +14 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 4 * 10 - 9), Point(2 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +13 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 3 * 10 - 9), Point(2 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +12 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 2 * 10 - 9), Point(2 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +11 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 1 * 10 - 9), Point(2 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +10 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 10 * 10 - 9), Point(1 * 10, 10 * 10)))); +SELECT count(*) FROM t2; +count(*) +9 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 9 * 10 - 9), Point(1 * 10, 9 * 10)))); +SELECT count(*) FROM t2; +count(*) +8 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 8 * 10 - 9), Point(1 * 10, 8 * 10)))); +SELECT count(*) FROM t2; +count(*) +7 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 7 * 10 - 9), Point(1 * 10, 7 * 10)))); +SELECT count(*) FROM t2; +count(*) +6 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 6 * 10 - 9), Point(1 * 10, 6 * 10)))); +SELECT count(*) FROM t2; +count(*) +5 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 5 * 10 - 9), Point(1 * 10, 5 * 10)))); +SELECT count(*) FROM t2; +count(*) +4 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 4 * 10 - 9), Point(1 * 10, 4 * 10)))); +SELECT count(*) FROM t2; +count(*) +3 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 3 * 10 - 9), Point(1 * 10, 3 * 10)))); +SELECT count(*) FROM t2; +count(*) +2 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 2 * 10 - 9), Point(1 * 10, 2 * 10)))); +SELECT count(*) FROM t2; +count(*) +1 +DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 1 * 10 - 9), Point(1 * 10, 1 * 10)))); +SELECT count(*) FROM t2; +count(*) +0 +DROP TABLE t2; diff --git a/mysql-test/t/gis-rtree.test b/mysql-test/t/gis-rtree.test new file mode 100644 index 00000000000..86fd5723e5a --- /dev/null +++ b/mysql-test/t/gis-rtree.test @@ -0,0 +1,72 @@ +# +# test of rtree (using with spatial data) +# +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1 ( + fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + g GEOMETRY NOT NULL, + SPATIAL KEY(g) +) TYPE=MyISAM; + +SHOW CREATE TABLE t1; + +let $1=150; +let $2=150; +while ($1) +{ + eval INSERT INTO t1 (g) VALUES (GeomFromText('LineString($1 $1, $2 $2)')); + dec $1; + inc $2; +} + +SELECT count(*) FROM t1; +EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, + GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +SELECT fid, AsText(g) FROM t1 WHERE Within(g, + GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); + +DROP TABLE t1; + +CREATE TABLE t2 ( + fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + g GEOMETRY NOT NULL +) TYPE=MyISAM; + +let $1=10; +while ($1) +{ + let $2=10; + while ($2) + { + eval INSERT INTO t2 (g) VALUES (LineString(Point($1 * 10 - 9, $2 * 10 - 9), + Point($1 * 10, $2 * 10))); + dec $2; + } + dec $1; +} + +ALTER TABLE t2 ADD SPATIAL KEY(g); +SHOW CREATE TABLE t2; +SELECT count(*) FROM t2; +EXPLAIN SELECT fid, AsText(g) FROM t2 WHERE Within(g, + GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))')); +SELECT fid, AsText(g) FROM t2 WHERE Within(g, + GeomFromText('Polygon((40 40,60 40,60 60,40 60,40 40))')); + +let $1=10; +while ($1) +{ + let $2=10; + while ($2) + { + eval DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point($1 * 10 - 9, $2 * 10 - 9), Point($1 * 10, $2 * 10)))); + SELECT count(*) FROM t2; + dec $2; + } + dec $1; +} + +DROP TABLE t2; From 72f44dafe6ed6580a1b5775a1d0c11ff84722445 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 16:43:01 +0200 Subject: [PATCH 136/267] NEWDATE -> DATE in anylyse() output Changed that analyse(#) also affects strings mysql-test/r/analyse.result: Better analyse test mysql-test/t/analyse.test: Better analyse test sql/sql_analyse.cc: NEWDATE -> DATE in anylyse() output Changed that analyse(#) also affects strings Fixed that number of elements in ENUM is limited by # not by #+1 --- mysql-test/r/analyse.result | 12 ++++++ mysql-test/t/analyse.test | 5 ++- sql/sql_analyse.cc | 80 ++++++++++++++++++++++--------------- 3 files changed, 63 insertions(+), 34 deletions(-) diff --git a/mysql-test/r/analyse.result b/mysql-test/r/analyse.result index f6b8cc2fcbf..e69a7e99992 100644 --- a/mysql-test/r/analyse.result +++ b/mysql-test/r/analyse.result @@ -1,6 +1,18 @@ Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL ENUM('') NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-04 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL +Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype +t1.i 1 7 1 1 0 0 4.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.j 2 8 1 1 0 0 5.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-04 10 10 0 0 10.0000 NULL DATE NOT NULL Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL ENUM('') NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-04 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL diff --git a/mysql-test/t/analyse.test b/mysql-test/t/analyse.test index 1b5022f6e4c..a937318aa6c 100644 --- a/mysql-test/t/analyse.test +++ b/mysql-test/t/analyse.test @@ -2,9 +2,10 @@ # Test of procedure analyse # -create table t1 (i int, j int); -insert into t1 values (1,2), (3,4), (5,6), (7,8); +create table t1 (i int, j int, empty_string char(10), bool char(1), d date); +insert into t1 values (1,2,"","Y","2002-03-03"), (3,4,"","N","2002-03-04"), (5,6,"","Y","2002-03-04"), (7,8,"","N","2002-03-05"); select * from t1 procedure analyse(); +select * from t1 procedure analyse(2); create table t2 select * from t1 procedure analyse(); select * from t2; drop table t1,t2; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 6227b1251db..80a35120f45 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -122,12 +122,15 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result, *f_info++ = new field_str(item, pc); } return pc; -} // proc_analyse_init +} -// return 1 if number, else return 0 -// store info about found number in info -// NOTE:It is expected, that elements of 'info' are all zero! +/* + Return 1 if number, else return 0 + store info about found number in info + NOTE:It is expected, that elements of 'info' are all zero! +*/ + bool test_if_number(NUM_INFO *info, const char *str, uint str_len) { const char *begin, *end = str + str_len; @@ -205,14 +208,16 @@ bool test_if_number(NUM_INFO *info, const char *str, uint str_len) } else return 0; -} //test_if_number +} -// Stores the biggest and the smallest value from current 'info' -// to ev_num_info -// If info contains an ulonglong number, which is bigger than -// biggest positive number able to be stored in a longlong variable -// and is marked as negative, function will return 0, else 1. +/* + Stores the biggest and the smallest value from current 'info' + to ev_num_info + If info contains an ulonglong number, which is bigger than + biggest positive number able to be stored in a longlong variable + and is marked as negative, function will return 0, else 1. +*/ bool get_ev_num_info(EV_NUM_INFO *ev_info, NUM_INFO *info, const char *num) { @@ -240,11 +245,13 @@ void free_string(String *s) s->free(); } + void field_str::add() { char buff[MAX_FIELD_WIDTH], *ptr; String s(buff, sizeof(buff)), *res; ulong length; + TREE_ELEMENT *element; if (!(res = item->val_str(&s))) { @@ -285,7 +292,7 @@ void field_str::add() if (!tree_search(&tree, (void*) &s)) // If not in tree { s.copy(); // slow, when SAFE_MALLOC is in use - if (!tree_insert(&tree, (void*) &s, 0)) + if (!(element=tree_insert(&tree, (void*) &s, 0))) { room_in_tree = 0; // Remove tree, out of RAM ? delete_tree(&tree); @@ -293,7 +300,9 @@ void field_str::add() else { bzero((char*) &s, sizeof(s)); // Let tree handle free of this - if ((treemem += length) > pc->max_treemem) + if ((treemem += length) > pc->max_treemem || + (element->count == 1 && + (tree_elements++) >= pc->max_tree_elements)) { room_in_tree = 0; // Remove tree, too big tree delete_tree(&tree); @@ -389,9 +398,11 @@ void field_real::add() room_in_tree = 0; // Remove tree, out of RAM ? delete_tree(&tree); } - // if element->count == 1, this element can be found only once from tree - // if element->count == 2, or more, this element is already in tree - else if (element->count == 1 && (tree_elements++) > pc->max_tree_elements) + /* + if element->count == 1, this element can be found only once from tree + if element->count == 2, or more, this element is already in tree + */ + else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements) { room_in_tree = 0; // Remove tree, too many elements delete_tree(&tree); @@ -420,6 +431,7 @@ void field_real::add() } } // field_real::add + void field_longlong::add() { char buff[MAX_FIELD_WIDTH]; @@ -442,9 +454,11 @@ void field_longlong::add() room_in_tree = 0; // Remove tree, out of RAM ? delete_tree(&tree); } - // if element->count == 1, this element can be found only once from tree - // if element->count == 2, or more, this element is already in tree - else if (element->count == 1 && (tree_elements++) > pc->max_tree_elements) + /* + if element->count == 1, this element can be found only once from tree + if element->count == 2, or more, this element is already in tree + */ + else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements) { room_in_tree = 0; // Remove tree, too many elements delete_tree(&tree); @@ -496,9 +510,11 @@ void field_ulonglong::add() room_in_tree = 0; // Remove tree, out of RAM ? delete_tree(&tree); } - // if element->count == 1, this element can be found only once from tree - // if element->count == 2, or more, this element is already in tree - else if (element->count == 1 && (tree_elements++) > pc->max_tree_elements) + /* + if element->count == 1, this element can be found only once from tree + if element->count == 2, or more, this element is already in tree + */ + else if (element->count == 1 && (tree_elements++) >= pc->max_tree_elements) { room_in_tree = 0; // Remove tree, too many elements delete_tree(&tree); @@ -578,14 +594,16 @@ bool analyse::end_of_records() func_items[8]->null_value = 1; else func_items[8]->set(res->ptr(), res->length()); - // count the dots, quotas, etc. in (ENUM("a","b","c"...)) - // if tree has been removed, don't suggest ENUM. - // treemem is used to measure the size of tree for strings, - // tree_elements is used to count the elements in tree in case of numbers. - // max_treemem tells how long the string starting from ENUM("... and - // ending to ..") shall at maximum be. If case is about numbers, - // max_tree_elements will tell the length of the above, now - // every number is considered as length 1 + /* + count the dots, quotas, etc. in (ENUM("a","b","c"...)) + If tree has been removed, don't suggest ENUM. + treemem is used to measure the size of tree for strings, + tree_elements is used to count the elements + max_treemem tells how long the string starting from ENUM("... and + ending to ..") shall at maximum be. If case is about numbers, + max_tree_elements will tell the length of the above, now + every number is considered as length 1 + */ if (((*f)->treemem || (*f)->tree_elements) && (*f)->tree.elements_in_tree && (((*f)->treemem ? max_treemem : max_tree_elements) > @@ -628,6 +646,7 @@ bool analyse::end_of_records() ans.append("DATETIME", 8); break; case FIELD_TYPE_DATE: + case FIELD_TYPE_NEWDATE: ans.append("DATE", 4); break; case FIELD_TYPE_SET: @@ -639,9 +658,6 @@ bool analyse::end_of_records() case FIELD_TYPE_TIME: ans.append("TIME", 4); break; - case FIELD_TYPE_NEWDATE: - ans.append("NEWDATE", 7); - break; case FIELD_TYPE_DECIMAL: ans.append("DECIMAL", 7); // if item is FIELD_ITEM, it _must_be_ Field_num in this case From ce194f04c50f4d2b9de3d855ca35f2174b9b7f98 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 17:08:48 +0200 Subject: [PATCH 137/267] Fix for a bug with column privileges ... --- sql/sql_base.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index bab4c151ef3..1ed0673f4cf 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1616,7 +1616,7 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length, else thd->dupp_field=field; } - if (check_grants && !thd->master_access && check_grant_column(thd,table,name,length)) + if (check_grants && check_grant_column(thd,table,name,length)) return WRONG_GRANT; return field; } @@ -1643,7 +1643,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) { found_table=1; Field *find=find_field_in_table(thd,tables->table,name,length, - grant_option && !thd->master_access,1); + grant_option && + tables->grant.want_privilege ,1); if (find) { if (find == WRONG_GRANT) @@ -1682,7 +1683,7 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) for (; tables ; tables=tables->next) { Field *field=find_field_in_table(thd,tables->table,name,length, - grant_option && !thd->master_access, allow_rowid); + grant_option && tables->grant.want_privilege ,allow_rowid); if (field) { if (field == WRONG_GRANT) From 8a2bd0d4ba108806a51b3c4c6ea387fed5b5d3c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 17:11:48 +0200 Subject: [PATCH 138/267] Better fix for "Halloween" effect ... --- sql/ha_innodb.h | 3 ++- sql/handler.h | 1 + sql/sql_class.h | 4 ++-- sql/sql_update.cc | 14 ++++++-------- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h index 8031fa0aa29..94154d9f05f 100644 --- a/sql/ha_innodb.h +++ b/sql/ha_innodb.h @@ -82,7 +82,8 @@ class ha_innobase: public handler HA_PRIMARY_KEY_IN_READ_INDEX | HA_DROP_BEFORE_CREATE | HA_NO_PREFIX_CHAR_KEYS | - HA_TABLE_SCAN_ON_INDEX), + HA_TABLE_SCAN_ON_INDEX | + HA_NOT_MULTI_UPDATE), last_dup_key((uint) -1), start_of_scan(0) { diff --git a/sql/handler.h b/sql/handler.h index 8f1d00f64b5..81724bd3abe 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -67,6 +67,7 @@ #define HA_CAN_FULLTEXT (HA_NO_PREFIX_CHAR_KEYS*2) #define HA_CAN_SQL_HANDLER (HA_CAN_FULLTEXT*2) #define HA_NO_AUTO_INCREMENT (HA_CAN_SQL_HANDLER*2) +#define HA_NOT_MULTI_UPDATE (HA_NO_AUTO_INCREMENT*2) /* Next record gives next record according last record read (even diff --git a/sql/sql_class.h b/sql/sql_class.h index f372db079ff..ad0540de18c 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -823,7 +823,7 @@ class multi_update : public select_result { TABLE_LIST *all_tables, *update_tables, *table_being_updated; THD *thd; - TABLE **tmp_tables, *main_table; + TABLE **tmp_tables, *main_table, *table_to_update; TMP_TABLE_PARAM *tmp_table_param; ha_rows updated, found; List *fields, *values; @@ -831,7 +831,7 @@ class multi_update : public select_result uint table_count; Copy_field *copy_field; enum enum_duplicates handle_duplicates; - bool do_update, trans_safe, transactional_tables, log_delayed, on_the_fly; + bool do_update, trans_safe, transactional_tables, log_delayed; public: multi_update(THD *thd_arg, TABLE_LIST *ut, List *fields, diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 8258d6df6a5..adb60adb7d6 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -413,7 +413,7 @@ multi_update::multi_update(THD *thd_arg, TABLE_LIST *table_list, :all_tables(table_list), update_tables(0), thd(thd_arg), tmp_tables(0), updated(0), found(0), fields(field_list), values(value_list), table_count(0), copy_field(0), handle_duplicates(handle_duplicates_arg), - do_update(1), trans_safe(0), on_the_fly(1) + do_update(1), trans_safe(0) {} @@ -538,15 +538,13 @@ multi_update::initialize_tables(JOIN *join) main_table=join->join_tab->table; trans_safe= transactional_tables= main_table->file->has_transactions(); log_delayed= trans_safe || main_table->tmp_table != NO_TMP_TABLE; -#ifdef HAVE_INNOBASE_DB - if (main_table->db_type == DB_TYPE_INNODB) - on_the_fly=0; -#endif + table_to_update= (main_table->file->table_flags() & HA_NOT_MULTI_UPDATE) ? + (TABLE *) 0 : main_table; /* Create a temporary table for all tables after except main table */ for (table_ref= update_tables; table_ref; table_ref=table_ref->next) { TABLE *table=table_ref->table; - if (!on_the_fly || table != main_table) + if (table != table_to_update) { uint cnt= table_ref->shared; ORDER group; @@ -626,7 +624,7 @@ bool multi_update::send_data(List ¬_used_values) uint offset= cur_table->shared; table->file->position(table->record[0]); - if (on_the_fly && table == main_table) + if (table == table_to_update) { table->status|= STATUS_UPDATED; store_record(table,1); @@ -719,7 +717,7 @@ int multi_update::do_updates(bool from_send_error) for (cur_table= update_tables; cur_table ; cur_table= cur_table->next) { table = cur_table->table; - if (on_the_fly && table == main_table) + if (table == table_to_update) continue; // Already updated org_updated= updated; From 8209eb579e03428009db74168a1862362b67e99a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 18:32:27 +0100 Subject: [PATCH 139/267] ha_myisam.cc: typo fixed sql/ha_myisam.cc: typo fixed --- sql/ha_myisam.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 1349e28b546..895558320fd 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -621,7 +621,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize) the following 'if', thought conceptually wrong, is a useful optimization nevertheless. */ - if (file->state != &file->s->state.state); + if (file->state != &file->s->state.state) file->s->state.state = *file->state; if (file->s->base.auto_key) update_auto_increment_key(¶m, file, 1); From da9d94997cd63c746cb1201e8ccf44a437cb1dde Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 20:33:41 +0200 Subject: [PATCH 140/267] making sure that test works. --- mysql-test/r/innodb.result | 2 +- mysql-test/t/innodb.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 66e748579de..caf3e10be80 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1090,4 +1090,4 @@ UPDATE t1,t2 SET t1.id=t1.id+1 where t1.id!=t2.id; SELECT * from t1; id 3 -DROP TABLE IF EXISTS t1,t2; +DROP TABLE t1,t2; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 6a6bb850902..556822ab51d 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -725,4 +725,4 @@ UPDATE t1,t2 SET t1.id=t1.id+1, t2.t1_id=t1.id+1; SELECT * from t1; UPDATE t1,t2 SET t1.id=t1.id+1 where t1.id!=t2.id; SELECT * from t1; -DROP TABLE IF EXISTS t1,t2; +DROP TABLE t1,t2; From 85243c108656d58e3bca85a6526ea97fb40d8674 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 21:43:40 +0200 Subject: [PATCH 141/267] A fix for mysql client program when `use` or `connect` were used without arguments ... client/mysql.cc: A fix for bug #90 --- client/mysql.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index e87fbaf8a41..f784f529c46 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2452,9 +2452,11 @@ char *get_arg(char *line, my_bool get_next_arg) ptr++; if (*ptr == '\\') // short command was used ptr+= 2; - while (!my_isspace(system_charset_info, *ptr)) // skip command + while (*ptr &&!my_isspace(system_charset_info, *ptr)) // skip command ptr++; } + if (!*ptr) + return NullS; while (my_isspace(system_charset_info, *ptr)) ptr++; if (*ptr == '\'' || *ptr == '\"' || *ptr == '`') From b12b64a0c309083d7e03730bfa9e2f4b5a8812ae Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 22:50:22 +0200 Subject: [PATCH 142/267] added comment --- sql/sql_select.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index bae64969fcd..cafafee243e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2257,6 +2257,10 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) { JOIN_TAB *tab=join->join_tab+i; table_map current_map= tab->table->map; + /* + Following force including random expression in last table condition. + It solve problem with select like SELECT * FROM t1 WHERE rand() > 0.5 + */ if (i == join->tables-1) current_map|= RAND_TABLE_BIT; bool use_quick_range=0; From 8fa237edd334cecfd8b69acb6c6485456955116f Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 01:23:43 +0100 Subject: [PATCH 143/267] better help message --- sql/mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a042b7f314b..0e385eff682 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3423,7 +3423,7 @@ struct my_option my_long_options[] = {"safemalloc-mem-limit", OPT_SAFEMALLOC_MEM_LIMIT, "Simulate memory shortage when compiled with the --with-debug=full option", 0, 0, 0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"new", 'n', "Use very new possible 'unsafe' functions", + {"new", 'n', "Use some 4.1 features and syntax (4.1 compatibility mode)", (gptr*) &global_system_variables.new_mode, (gptr*) &max_system_variables.new_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, From 606a23f551ed1e50abd8fe1ca385deb0daa65c68 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 23:16:36 -0400 Subject: [PATCH 144/267] VC++ InstallShield Setup Programs for 4.0.XX tree --- .../4.0.XX-classic/4.0.XX-classic.ipr | 51 ++ .../Component Definitions/Default.cdf | 192 ++++++ .../Component Definitions/Default.fgl | 42 ++ .../File Groups/Clients and Tools.fgl | 31 + .../4.0.XX-classic/File Groups/Default.fdf | 82 +++ .../File Groups/Development.fgl | 239 +++++++ .../File Groups/Documentation.fgl | 99 +++ .../File Groups/Grant Tables.fgl | 36 + .../4.0.XX-classic/File Groups/Servers.fgl | 226 +++++++ .../Registry Entries/Default.rge | 4 + .../4.0.XX-classic/Script Files/Setup.dbg | Bin 0 -> 28458 bytes .../4.0.XX-classic/Script Files/Setup.ino | Bin 0 -> 58611 bytes .../4.0.XX-classic/Script Files/Setup.ins | Bin 0 -> 57122 bytes .../4.0.XX-classic/Script Files/Setup.obs | Bin 0 -> 65611 bytes .../4.0.XX-classic/Script Files/Setup.rul | 640 ++++++++++++++++++ .../OS Independent/infolist.txt | 25 + .../OS Independent/setup.bmp | Bin 0 -> 15694 bytes .../4.0.XX-classic/Shell Objects/Default.shl | 12 + .../String Tables/0009-English/value.shl | 23 + .../4.0.XX-classic/String Tables/Default.shl | 74 ++ .../Text Substitutions/Build.tsb | 56 ++ .../Text Substitutions/Setup.tsb | 76 +++ .../InstallShield/4.0.XX-gpl/4.0.XX-gpl.ipr | 51 ++ .../Component Definitions/Default.cdf | 192 ++++++ .../Component Definitions/Default.fgl | 42 ++ .../File Groups/Clients and Tools.fgl | 31 + .../4.0.XX-gpl/File Groups/Default.fdf | 82 +++ .../4.0.XX-gpl/File Groups/Development.fgl | 241 +++++++ .../4.0.XX-gpl/File Groups/Documentation.fgl | 101 +++ .../4.0.XX-gpl/File Groups/Grant Tables.fgl | 36 + .../4.0.XX-gpl/File Groups/Servers.fgl | 229 +++++++ .../4.0.XX-gpl/Registry Entries/Default.rge | 4 + .../4.0.XX-gpl/Script Files/Setup.dbg | Bin 0 -> 28458 bytes .../4.0.XX-gpl/Script Files/Setup.ino | Bin 0 -> 58611 bytes .../4.0.XX-gpl/Script Files/Setup.ins | Bin 0 -> 57122 bytes .../4.0.XX-gpl/Script Files/Setup.obs | Bin 0 -> 65611 bytes .../4.0.XX-gpl/Script Files/Setup.rul | 640 ++++++++++++++++++ .../OS Independent/infolist.txt | 25 + .../OS Independent/setup.bmp | Bin 0 -> 15694 bytes .../4.0.XX-gpl/Shell Objects/Default.shl | 12 + .../String Tables/0009-English/value.shl | 23 + .../4.0.XX-gpl/String Tables/Default.shl | 74 ++ .../4.0.XX-gpl/Text Substitutions/Build.tsb | 56 ++ .../4.0.XX-gpl/Text Substitutions/Setup.tsb | 76 +++ .../InstallShield/4.0.XX-pro/4.0.XX-pro.ipr | 52 ++ .../Component Definitions/Default.cdf | 192 ++++++ .../Component Definitions/Default.fgl | 42 ++ .../File Groups/Clients and Tools.fgl | 31 + .../4.0.XX-pro/File Groups/Default.fdf | 82 +++ .../4.0.XX-pro/File Groups/Development.fgl | 239 +++++++ .../4.0.XX-pro/File Groups/Documentation.fgl | 99 +++ .../4.0.XX-pro/File Groups/Grant Tables.fgl | 36 + .../4.0.XX-pro/File Groups/Servers.fgl | 226 +++++++ .../4.0.XX-pro/Registry Entries/Default.rge | 4 + .../4.0.XX-pro/Script Files/Setup.dbg | Bin 0 -> 28458 bytes .../4.0.XX-pro/Script Files/Setup.ino | Bin 0 -> 58611 bytes .../4.0.XX-pro/Script Files/Setup.ins | Bin 0 -> 57122 bytes .../4.0.XX-pro/Script Files/Setup.obs | Bin 0 -> 65611 bytes .../4.0.XX-pro/Script Files/Setup.rul | 640 ++++++++++++++++++ .../OS Independent/infolist.txt | 25 + .../OS Independent/setup.bmp | Bin 0 -> 15694 bytes .../4.0.XX-pro/Shell Objects/Default.shl | 12 + .../String Tables/0009-English/value.shl | 23 + .../4.0.XX-pro/String Tables/Default.shl | 74 ++ .../4.0.XX-pro/Text Substitutions/Build.tsb | 56 ++ .../4.0.XX-pro/Text Substitutions/Setup.tsb | 76 +++ 66 files changed, 5732 insertions(+) create mode 100755 VC++Files/InstallShield/4.0.XX-classic/4.0.XX-classic.ipr create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.cdf create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Clients and Tools.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Default.fdf create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Development.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Documentation.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Grant Tables.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/File Groups/Servers.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Registry Entries/Default.rge create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.dbg create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ino create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ins create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.obs create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.rul create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Shell Objects/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/String Tables/0009-English/value.shl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/String Tables/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Build.tsb create mode 100755 VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Setup.tsb create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/4.0.XX-gpl.ipr create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.cdf create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Clients and Tools.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Default.fdf create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Development.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Documentation.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Grant Tables.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/File Groups/Servers.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Registry Entries/Default.rge create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.dbg create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ino create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ins create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.obs create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.rul create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Shell Objects/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/String Tables/0009-English/value.shl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/String Tables/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Build.tsb create mode 100755 VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Setup.tsb create mode 100755 VC++Files/InstallShield/4.0.XX-pro/4.0.XX-pro.ipr create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.cdf create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Clients and Tools.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Default.fdf create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Development.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Documentation.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Grant Tables.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/File Groups/Servers.fgl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Registry Entries/Default.rge create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.dbg create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ino create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ins create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.obs create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.rul create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Shell Objects/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/String Tables/0009-English/value.shl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/String Tables/Default.shl create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Build.tsb create mode 100755 VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Setup.tsb diff --git a/VC++Files/InstallShield/4.0.XX-classic/4.0.XX-classic.ipr b/VC++Files/InstallShield/4.0.XX-classic/4.0.XX-classic.ipr new file mode 100755 index 00000000000..ef8404545fb --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/4.0.XX-classic.ipr @@ -0,0 +1,51 @@ +[Language] +LanguageSupport0=0009 + +[OperatingSystem] +OSSupport=0000000000010010 + +[Data] +CurrentMedia= +CurrentComponentDef=Default.cdf +ProductName=MySQL Servers and Clients +set_mifserial= +DevEnvironment=Microsoft Visual C++ 6 +AppExe= +set_dlldebug=No +EmailAddresss= +Instructions=Instructions.txt +set_testmode=No +set_mif=No +SummaryText= +Department= +HomeURL= +Author= +Type=Database Application +InstallRoot=D:\MySQL-Install\4.0.xcom-clas +Version=1.00.000 +InstallationGUID=40744a4d-efed-4cff-84a9-9e6389550f5c +set_level=Level 3 +CurrentFileGroupDef=Default.fdf +Notes=Notes.txt +set_maxerr=50 +set_args= +set_miffile=Status.mif +set_dllcmdline= +Copyright= +set_warnaserr=No +CurrentPlatform= +Category= +set_preproc= +CurrentLanguage=English +CompanyName=MySQL +Description=Description.txt +set_maxwarn=50 +set_crc=Yes +set_compileb4build=No + +[MediaInfo] + +[General] +Type=INSTALLMAIN +Version=1.10.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.cdf b/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.cdf new file mode 100755 index 00000000000..48d37800cd1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.cdf @@ -0,0 +1,192 @@ +[Development] +required0=Servers +SELECTED=Yes +FILENEED=STANDARD +required1=Grant Tables +HTTPLOCATION= +STATUS=Examples, Libraries, Includes and Script files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=Examples, Libraries, Includes and Script files +DISPLAYTEXT=Examples, Libraries, Includes and Script files +IMAGE= +DEFSELECTION=Yes +filegroup0=Development +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Grant Tables] +required0=Servers +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The Grant Tables and Core Files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The Grant Tables and Core Files +DISPLAYTEXT=The Grant Tables and Core Files +IMAGE= +DEFSELECTION=Yes +filegroup0=Grant Tables +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Clients and Tools +INSTALLATION=NEVEROVERWRITE +requiredby2=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Components] +component0=Development +component1=Grant Tables +component2=Servers +component3=Clients and Tools +component4=Documentation + +[TopComponents] +component0=Servers +component1=Clients and Tools +component2=Documentation +component3=Development +component4=Grant Tables + +[SetupType] +setuptype0=Compact +setuptype1=Typical +setuptype2=Custom + +[Clients and Tools] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL clients and Maintenance Tools +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL clients and Maintenance Tools +DISPLAYTEXT=The MySQL clients and Maintenance Tools +IMAGE= +DEFSELECTION=Yes +filegroup0=Clients and Tools +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=NEWERDATE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Servers] +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The MySQL Servers +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Servers +DISPLAYTEXT=The MySQL Servers +IMAGE= +DEFSELECTION=Yes +filegroup0=Servers +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Grant Tables +INSTALLATION=ALWAYSOVERWRITE +requiredby2=Clients and Tools +requiredby3=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[SetupTypeItem-Compact] +Comment= +item0=Grant Tables +item1=Servers +item2=Clients and Tools +item3=Documentation +Descrip= +DisplayText= + +[SetupTypeItem-Custom] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Info] +Type=CompDef +Version=1.00.000 +Name= + +[SetupTypeItem-Typical] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Documentation] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL Documentation with different formats +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Documentation with different formats +DISPLAYTEXT=The MySQL Documentation with different formats +IMAGE= +DEFSELECTION=Yes +filegroup0=Documentation +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.fgl b/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.fgl new file mode 100755 index 00000000000..4e20dcea4ab --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Component Definitions/Default.fgl @@ -0,0 +1,42 @@ +[\] +DISPLAYTEXT=Common Files Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[\] +DISPLAYTEXT=Windows System Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[USERDEFINED] +DISPLAYTEXT=Script-defined Folders +TYPE=USERSTART +fulldirectory= + +[] +DISPLAYTEXT=Program Files Folder +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=General Application Destination +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=Windows Operating System +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[TopDir] +SubDir0= +SubDir1= +SubDir2= +SubDir3=USERDEFINED + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Clients and Tools.fgl b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Clients and Tools.fgl new file mode 100755 index 00000000000..7bba3d7474a --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Clients and Tools.fgl @@ -0,0 +1,31 @@ +[bin] +file15=C:\mysql\bin\replace.exe +file16=C:\mysql\bin\winmysqladmin.cnt +file0=C:\mysql\bin\isamchk.exe +file17=C:\mysql\bin\WINMYSQLADMIN.HLP +file1=C:\mysql\bin\myisamchk.exe +file18=C:\mysql\bin\comp-err.exe +file2=C:\mysql\bin\myisamlog.exe +file19=C:\mysql\bin\my_print_defaults.exe +file3=C:\mysql\bin\myisampack.exe +file4=C:\mysql\bin\mysql.exe +file5=C:\mysql\bin\mysqladmin.exe +file6=C:\mysql\bin\mysqlbinlog.exe +file7=C:\mysql\bin\mysqlc.exe +file8=C:\mysql\bin\mysqlcheck.exe +file9=C:\mysql\bin\mysqldump.exe +file20=C:\mysql\bin\winmysqladmin.exe +file10=C:\mysql\bin\mysqlimport.exe +fulldirectory= +file11=C:\mysql\bin\mysqlshow.exe +file12=C:\mysql\bin\mysqlwatch.exe +file13=C:\mysql\bin\pack_isam.exe +file14=C:\mysql\bin\perror.exe + +[TopDir] +SubDir0=bin + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Default.fdf b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Default.fdf new file mode 100755 index 00000000000..8096a4b74bf --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Default.fdf @@ -0,0 +1,82 @@ +[FileGroups] +group0=Development +group1=Grant Tables +group2=Servers +group3=Clients and Tools +group4=Documentation + +[Development] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Grant Tables] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Clients and Tools] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM=0000000000000000 +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Servers] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Info] +Type=FileGrp +Version=1.00.000 +Name= + +[Documentation] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Development.fgl b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Development.fgl new file mode 100755 index 00000000000..6f9df51965b --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Development.fgl @@ -0,0 +1,239 @@ +[bench\Data\Wisconsin] +file0=C:\mysql\bench\Data\Wisconsin\onek.data +file1=C:\mysql\bench\Data\Wisconsin\tenk.data +fulldirectory= + +[lib\debug] +file0=C:\mysql\lib\debug\libmySQL.dll +file1=C:\mysql\lib\debug\libmySQL.lib +file2=C:\mysql\lib\debug\mysqlclient.lib +file3=C:\mysql\lib\debug\zlib.lib +file4=C:\mysql\lib\debug\mysys.lib +file5=C:\mysql\lib\debug\regex.lib +file6=C:\mysql\lib\debug\strings.lib +fulldirectory= + +[bench\output] +fulldirectory= + +[examples\libmysqltest] +file0=C:\mysql\examples\libmysqltest\myTest.c +file1=C:\mysql\examples\libmysqltest\myTest.dsp +file2=C:\mysql\examples\libmysqltest\myTest.dsw +file3=C:\mysql\examples\libmysqltest\myTest.exe +file4=C:\mysql\examples\libmysqltest\myTest.mak +file5=C:\mysql\examples\libmysqltest\myTest.ncb +file6=C:\mysql\examples\libmysqltest\myTest.opt +file7=C:\mysql\examples\libmysqltest\readme +fulldirectory= + +[include] +file15=C:\mysql\include\libmysqld.def +file16=C:\mysql\include\my_alloc.h +file0=C:\mysql\include\raid.h +file17=C:\mysql\include\my_getopt.h +file1=C:\mysql\include\errmsg.h +file2=C:\mysql\include\Libmysql.def +file3=C:\mysql\include\m_ctype.h +file4=C:\mysql\include\m_string.h +file5=C:\mysql\include\my_list.h +file6=C:\mysql\include\my_pthread.h +file7=C:\mysql\include\my_sys.h +file8=C:\mysql\include\mysql.h +file9=C:\mysql\include\mysql_com.h +file10=C:\mysql\include\mysql_version.h +fulldirectory= +file11=C:\mysql\include\mysqld_error.h +file12=C:\mysql\include\dbug.h +file13=C:\mysql\include\config-win.h +file14=C:\mysql\include\my_global.h + +[examples] +SubDir0=examples\libmysqltest +SubDir1=examples\tests +fulldirectory= + +[lib\opt] +file0=C:\mysql\lib\opt\libmySQL.dll +file1=C:\mysql\lib\opt\libmySQL.lib +file2=C:\mysql\lib\opt\mysqlclient.lib +file3=C:\mysql\lib\opt\zlib.lib +file4=C:\mysql\lib\opt\mysys.lib +file5=C:\mysql\lib\opt\regex.lib +file6=C:\mysql\lib\opt\strings.lib +fulldirectory= + +[bench\Data] +SubDir0=bench\Data\ATIS +SubDir1=bench\Data\Wisconsin +fulldirectory= + +[bench\limits] +file15=C:\mysql\bench\limits\pg.comment +file16=C:\mysql\bench\limits\solid.cfg +file0=C:\mysql\bench\limits\access.cfg +file17=C:\mysql\bench\limits\solid-nt4.cfg +file1=C:\mysql\bench\limits\access.comment +file18=C:\mysql\bench\limits\sybase.cfg +file2=C:\mysql\bench\limits\Adabas.cfg +file3=C:\mysql\bench\limits\Adabas.comment +file4=C:\mysql\bench\limits\Db2.cfg +file5=C:\mysql\bench\limits\empress.cfg +file6=C:\mysql\bench\limits\empress.comment +file7=C:\mysql\bench\limits\Informix.cfg +file8=C:\mysql\bench\limits\Informix.comment +file9=C:\mysql\bench\limits\msql.cfg +file10=C:\mysql\bench\limits\ms-sql.cfg +fulldirectory= +file11=C:\mysql\bench\limits\Ms-sql65.cfg +file12=C:\mysql\bench\limits\mysql.cfg +file13=C:\mysql\bench\limits\oracle.cfg +file14=C:\mysql\bench\limits\pg.cfg + +[TopDir] +SubDir0=bench +SubDir1=examples +SubDir2=include +SubDir3=lib +SubDir4=scripts + +[bench] +file15=C:\mysql\bench\test-create +file16=C:\mysql\bench\test-insert +file0=C:\mysql\bench\uname.bat +file17=C:\mysql\bench\test-select +file1=C:\mysql\bench\compare-results +file18=C:\mysql\bench\test-wisconsin +file2=C:\mysql\bench\copy-db +file19=C:\mysql\bench\bench-init.pl +file3=C:\mysql\bench\crash-me +file4=C:\mysql\bench\example.bat +file5=C:\mysql\bench\print-limit-table +file6=C:\mysql\bench\pwd.bat +file7=C:\mysql\bench\Readme +SubDir0=bench\Data +file8=C:\mysql\bench\run.bat +SubDir1=bench\limits +file9=C:\mysql\bench\run-all-tests +SubDir2=bench\output +file10=C:\mysql\bench\server-cfg +fulldirectory= +file11=C:\mysql\bench\test-alter-table +file12=C:\mysql\bench\test-ATIS +file13=C:\mysql\bench\test-big-tables +file14=C:\mysql\bench\test-connect + +[examples\tests] +file15=C:\mysql\examples\tests\lock_test.res +file16=C:\mysql\examples\tests\mail_to_db.pl +file0=C:\mysql\examples\tests\unique_users.tst +file17=C:\mysql\examples\tests\table_types.pl +file1=C:\mysql\examples\tests\auto_increment.tst +file18=C:\mysql\examples\tests\test_delayed_insert.pl +file2=C:\mysql\examples\tests\big_record.pl +file19=C:\mysql\examples\tests\udf_test +file3=C:\mysql\examples\tests\big_record.res +file4=C:\mysql\examples\tests\czech-sorting +file5=C:\mysql\examples\tests\deadlock-script.pl +file6=C:\mysql\examples\tests\export.pl +file7=C:\mysql\examples\tests\fork_test.pl +file8=C:\mysql\examples\tests\fork2_test.pl +file9=C:\mysql\examples\tests\fork3_test.pl +file20=C:\mysql\examples\tests\udf_test.res +file21=C:\mysql\examples\tests\auto_increment.res +file10=C:\mysql\examples\tests\function.res +fulldirectory= +file11=C:\mysql\examples\tests\function.tst +file12=C:\mysql\examples\tests\grant.pl +file13=C:\mysql\examples\tests\grant.res +file14=C:\mysql\examples\tests\lock_test.pl + +[bench\Data\ATIS] +file26=C:\mysql\bench\Data\ATIS\stop1.txt +file15=C:\mysql\bench\Data\ATIS\flight_class.txt +file27=C:\mysql\bench\Data\ATIS\time_interval.txt +file16=C:\mysql\bench\Data\ATIS\flight_day.txt +file0=C:\mysql\bench\Data\ATIS\transport.txt +file28=C:\mysql\bench\Data\ATIS\time_zone.txt +file17=C:\mysql\bench\Data\ATIS\flight_fare.txt +file1=C:\mysql\bench\Data\ATIS\airline.txt +file29=C:\mysql\bench\Data\ATIS\aircraft.txt +file18=C:\mysql\bench\Data\ATIS\food_service.txt +file2=C:\mysql\bench\Data\ATIS\airport.txt +file19=C:\mysql\bench\Data\ATIS\ground_service.txt +file3=C:\mysql\bench\Data\ATIS\airport_service.txt +file4=C:\mysql\bench\Data\ATIS\city.txt +file5=C:\mysql\bench\Data\ATIS\class_of_service.txt +file6=C:\mysql\bench\Data\ATIS\code_description.txt +file7=C:\mysql\bench\Data\ATIS\compound_class.txt +file8=C:\mysql\bench\Data\ATIS\connect_leg.txt +file9=C:\mysql\bench\Data\ATIS\date_day.txt +file20=C:\mysql\bench\Data\ATIS\month_name.txt +file21=C:\mysql\bench\Data\ATIS\restrict_carrier.txt +file10=C:\mysql\bench\Data\ATIS\day_name.txt +fulldirectory= +file22=C:\mysql\bench\Data\ATIS\restrict_class.txt +file11=C:\mysql\bench\Data\ATIS\dual_carrier.txt +file23=C:\mysql\bench\Data\ATIS\restriction.txt +file12=C:\mysql\bench\Data\ATIS\fare.txt +file24=C:\mysql\bench\Data\ATIS\state.txt +file13=C:\mysql\bench\Data\ATIS\fconnection.txt +file25=C:\mysql\bench\Data\ATIS\stop.txt +file14=C:\mysql\bench\Data\ATIS\flight.txt + +[General] +Type=FILELIST +Version=1.00.000 + +[scripts] +file37=C:\mysql\scripts\mysqld_safe-watch.sh +file26=C:\mysql\scripts\mysql_zap +file15=C:\mysql\scripts\mysql_fix_privilege_tables +file38=C:\mysql\scripts\mysqldumpslow +file27=C:\mysql\scripts\mysql_zap.sh +file16=C:\mysql\scripts\mysql_fix_privilege_tables.sh +file0=C:\mysql\scripts\Readme +file39=C:\mysql\scripts\mysqldumpslow.sh +file28=C:\mysql\scripts\mysqlaccess +file17=C:\mysql\scripts\mysql_install_db +file1=C:\mysql\scripts\make_binary_distribution.sh +file29=C:\mysql\scripts\mysqlaccess.conf +file18=C:\mysql\scripts\mysql_install_db.sh +file2=C:\mysql\scripts\msql2mysql +file19=C:\mysql\scripts\mysql_secure_installation +file3=C:\mysql\scripts\msql2mysql.sh +file4=C:\mysql\scripts\mysql_config +file5=C:\mysql\scripts\mysql_config.sh +file6=C:\mysql\scripts\mysql_convert_table_format +file7=C:\mysql\scripts\mysql_convert_table_format.sh +file40=C:\mysql\scripts\mysqlhotcopy +file8=C:\mysql\scripts\mysql_explain_log +file41=C:\mysql\scripts\mysqlhotcopy.pl +file30=C:\mysql\scripts\mysqlaccess.sh +file9=C:\mysql\scripts\mysql_explain_log.sh +file42=C:\mysql\scripts\mysqlhotcopy.sh +file31=C:\mysql\scripts\mysqlbug +file20=C:\mysql\scripts\mysql_secure_installation.sh +file43=C:\mysql\scripts\make_binary_distribution +file32=C:\mysql\scripts\mysqlbug.sh +file21=C:\mysql\scripts\mysql_setpermission +file10=C:\mysql\scripts\mysql_find_rows +fulldirectory= +file33=C:\mysql\scripts\mysqld_multi +file22=C:\mysql\scripts\mysql_setpermission.pl +file11=C:\mysql\scripts\mysql_find_rows.pl +file34=C:\mysql\scripts\mysqld_multi.sh +file23=C:\mysql\scripts\mysql_setpermission.sh +file12=C:\mysql\scripts\mysql_find_rows.sh +file35=C:\mysql\scripts\mysqld_safe +file24=C:\mysql\scripts\mysql_tableinfo +file13=C:\mysql\scripts\mysql_fix_extensions +file36=C:\mysql\scripts\mysqld_safe.sh +file25=C:\mysql\scripts\mysql_tableinfo.sh +file14=C:\mysql\scripts\mysql_fix_extensions.sh + +[lib] +SubDir0=lib\debug +SubDir1=lib\opt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Documentation.fgl b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Documentation.fgl new file mode 100755 index 00000000000..80fe777cf0f --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Documentation.fgl @@ -0,0 +1,99 @@ +[Docs\Flags] +file59=C:\mysql\Docs\Flags\romania.gif +file48=C:\mysql\Docs\Flags\kroatia.eps +file37=C:\mysql\Docs\Flags\iceland.gif +file26=C:\mysql\Docs\Flags\france.eps +file15=C:\mysql\Docs\Flags\china.gif +file49=C:\mysql\Docs\Flags\kroatia.gif +file38=C:\mysql\Docs\Flags\ireland.eps +file27=C:\mysql\Docs\Flags\france.gif +file16=C:\mysql\Docs\Flags\croatia.eps +file0=C:\mysql\Docs\Flags\usa.gif +file39=C:\mysql\Docs\Flags\ireland.gif +file28=C:\mysql\Docs\Flags\germany.eps +file17=C:\mysql\Docs\Flags\croatia.gif +file1=C:\mysql\Docs\Flags\argentina.gif +file29=C:\mysql\Docs\Flags\germany.gif +file18=C:\mysql\Docs\Flags\czech-republic.eps +file2=C:\mysql\Docs\Flags\australia.eps +file19=C:\mysql\Docs\Flags\czech-republic.gif +file3=C:\mysql\Docs\Flags\australia.gif +file80=C:\mysql\Docs\Flags\usa.eps +file4=C:\mysql\Docs\Flags\austria.eps +file81=C:\mysql\Docs\Flags\argentina.eps +file70=C:\mysql\Docs\Flags\spain.eps +file5=C:\mysql\Docs\Flags\austria.gif +file71=C:\mysql\Docs\Flags\spain.gif +file60=C:\mysql\Docs\Flags\russia.eps +file6=C:\mysql\Docs\Flags\brazil.eps +file72=C:\mysql\Docs\Flags\sweden.eps +file61=C:\mysql\Docs\Flags\russia.gif +file50=C:\mysql\Docs\Flags\latvia.eps +file7=C:\mysql\Docs\Flags\brazil.gif +file73=C:\mysql\Docs\Flags\sweden.gif +file62=C:\mysql\Docs\Flags\singapore.eps +file51=C:\mysql\Docs\Flags\latvia.gif +file40=C:\mysql\Docs\Flags\island.eps +file8=C:\mysql\Docs\Flags\bulgaria.eps +file74=C:\mysql\Docs\Flags\switzerland.eps +file63=C:\mysql\Docs\Flags\singapore.gif +file52=C:\mysql\Docs\Flags\netherlands.eps +file41=C:\mysql\Docs\Flags\island.gif +file30=C:\mysql\Docs\Flags\great-britain.eps +file9=C:\mysql\Docs\Flags\bulgaria.gif +file75=C:\mysql\Docs\Flags\switzerland.gif +file64=C:\mysql\Docs\Flags\south-africa.eps +file53=C:\mysql\Docs\Flags\netherlands.gif +file42=C:\mysql\Docs\Flags\israel.eps +file31=C:\mysql\Docs\Flags\great-britain.gif +file20=C:\mysql\Docs\Flags\denmark.eps +file76=C:\mysql\Docs\Flags\taiwan.eps +file65=C:\mysql\Docs\Flags\south-africa.gif +file54=C:\mysql\Docs\Flags\poland.eps +file43=C:\mysql\Docs\Flags\israel.gif +file32=C:\mysql\Docs\Flags\greece.eps +file21=C:\mysql\Docs\Flags\denmark.gif +file10=C:\mysql\Docs\Flags\canada.eps +fulldirectory= +file77=C:\mysql\Docs\Flags\taiwan.gif +file66=C:\mysql\Docs\Flags\south-africa1.eps +file55=C:\mysql\Docs\Flags\poland.gif +file44=C:\mysql\Docs\Flags\italy.eps +file33=C:\mysql\Docs\Flags\greece.gif +file22=C:\mysql\Docs\Flags\estonia.eps +file11=C:\mysql\Docs\Flags\canada.gif +file78=C:\mysql\Docs\Flags\ukraine.eps +file67=C:\mysql\Docs\Flags\south-africa1.gif +file56=C:\mysql\Docs\Flags\portugal.eps +file45=C:\mysql\Docs\Flags\italy.gif +file34=C:\mysql\Docs\Flags\hungary.eps +file23=C:\mysql\Docs\Flags\estonia.gif +file12=C:\mysql\Docs\Flags\chile.eps +file79=C:\mysql\Docs\Flags\ukraine.gif +file68=C:\mysql\Docs\Flags\south-korea.eps +file57=C:\mysql\Docs\Flags\portugal.gif +file46=C:\mysql\Docs\Flags\japan.eps +file35=C:\mysql\Docs\Flags\hungary.gif +file24=C:\mysql\Docs\Flags\finland.eps +file13=C:\mysql\Docs\Flags\chile.gif +file69=C:\mysql\Docs\Flags\south-korea.gif +file58=C:\mysql\Docs\Flags\romania.eps +file47=C:\mysql\Docs\Flags\japan.gif +file36=C:\mysql\Docs\Flags\iceland.eps +file25=C:\mysql\Docs\Flags\finland.gif +file14=C:\mysql\Docs\Flags\china.eps + +[Docs] +file0=C:\mysql\Docs\manual_toc.html +file1=C:\mysql\Docs\manual.html +file2=C:\mysql\Docs\manual.txt +SubDir0=Docs\Flags +fulldirectory= + +[TopDir] +SubDir0=Docs + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Grant Tables.fgl b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Grant Tables.fgl new file mode 100755 index 00000000000..178065a7003 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Grant Tables.fgl @@ -0,0 +1,36 @@ +[data\test] +fulldirectory= + +[data\mysql] +file15=C:\mysql\data\mysql\func.frm +file16=C:\mysql\data\mysql\func.MYD +file0=C:\mysql\data\mysql\columns_priv.frm +file17=C:\mysql\data\mysql\func.MYI +file1=C:\mysql\data\mysql\columns_priv.MYD +file2=C:\mysql\data\mysql\columns_priv.MYI +file3=C:\mysql\data\mysql\db.frm +file4=C:\mysql\data\mysql\db.MYD +file5=C:\mysql\data\mysql\db.MYI +file6=C:\mysql\data\mysql\host.frm +file7=C:\mysql\data\mysql\host.MYD +file8=C:\mysql\data\mysql\host.MYI +file9=C:\mysql\data\mysql\tables_priv.frm +file10=C:\mysql\data\mysql\tables_priv.MYD +fulldirectory= +file11=C:\mysql\data\mysql\tables_priv.MYI +file12=C:\mysql\data\mysql\user.frm +file13=C:\mysql\data\mysql\user.MYD +file14=C:\mysql\data\mysql\user.MYI + +[TopDir] +SubDir0=data + +[data] +SubDir0=data\mysql +SubDir1=data\test +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/File Groups/Servers.fgl b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Servers.fgl new file mode 100755 index 00000000000..3f875b574f6 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/File Groups/Servers.fgl @@ -0,0 +1,226 @@ +[Embedded\Static\release] +file0=C:\mysql\embedded\Static\release\test_stc.dsp +file1=C:\mysql\embedded\Static\release\ReadMe.txt +file2=C:\mysql\embedded\Static\release\StdAfx.cpp +file3=C:\mysql\embedded\Static\release\StdAfx.h +file4=C:\mysql\embedded\Static\release\test_stc.cpp +file5=C:\mysql\embedded\Static\release\mysqlserver.lib +fulldirectory= + +[share\polish] +file0=C:\mysql\share\polish\errmsg.sys +file1=C:\mysql\share\polish\errmsg.txt +fulldirectory= + +[share\dutch] +file0=C:\mysql\share\dutch\errmsg.sys +file1=C:\mysql\share\dutch\errmsg.txt +fulldirectory= + +[share\spanish] +file0=C:\mysql\share\spanish\errmsg.sys +file1=C:\mysql\share\spanish\errmsg.txt +fulldirectory= + +[share\english] +file0=C:\mysql\share\english\errmsg.sys +file1=C:\mysql\share\english\errmsg.txt +fulldirectory= + +[bin] +file0=C:\mysql\bin\mysqld-opt.exe +file1=C:\mysql\bin\mysqld-nt.exe +file2=C:\mysql\bin\mysqld.exe +file3=C:\mysql\bin\cygwinb19.dll +file4=C:\mysql\bin\libmySQL.dll +fulldirectory= + +[share\korean] +file0=C:\mysql\share\korean\errmsg.sys +file1=C:\mysql\share\korean\errmsg.txt +fulldirectory= + +[share\charsets] +file15=C:\mysql\share\charsets\latin1.conf +file16=C:\mysql\share\charsets\latin2.conf +file0=C:\mysql\share\charsets\win1251ukr.conf +file17=C:\mysql\share\charsets\latin5.conf +file1=C:\mysql\share\charsets\cp1257.conf +file18=C:\mysql\share\charsets\Readme +file2=C:\mysql\share\charsets\croat.conf +file19=C:\mysql\share\charsets\swe7.conf +file3=C:\mysql\share\charsets\danish.conf +file4=C:\mysql\share\charsets\dec8.conf +file5=C:\mysql\share\charsets\dos.conf +file6=C:\mysql\share\charsets\estonia.conf +file7=C:\mysql\share\charsets\german1.conf +file8=C:\mysql\share\charsets\greek.conf +file9=C:\mysql\share\charsets\hebrew.conf +file20=C:\mysql\share\charsets\usa7.conf +file21=C:\mysql\share\charsets\win1250.conf +file10=C:\mysql\share\charsets\hp8.conf +fulldirectory= +file22=C:\mysql\share\charsets\win1251.conf +file11=C:\mysql\share\charsets\hungarian.conf +file23=C:\mysql\share\charsets\cp1251.conf +file12=C:\mysql\share\charsets\Index +file13=C:\mysql\share\charsets\koi8_ru.conf +file14=C:\mysql\share\charsets\koi8_ukr.conf + +[Embedded\DLL\debug] +file0=C:\mysql\embedded\DLL\debug\libmysqld.dll +file1=C:\mysql\embedded\DLL\debug\libmysqld.exp +file2=C:\mysql\embedded\DLL\debug\libmysqld.lib +fulldirectory= + +[Embedded] +file0=C:\mysql\embedded\embedded.dsw +SubDir0=Embedded\DLL +SubDir1=Embedded\Static +fulldirectory= + +[share\ukrainian] +file0=C:\mysql\share\ukrainian\errmsg.sys +file1=C:\mysql\share\ukrainian\errmsg.txt +fulldirectory= + +[share\hungarian] +file0=C:\mysql\share\hungarian\errmsg.sys +file1=C:\mysql\share\hungarian\errmsg.txt +fulldirectory= + +[share\german] +file0=C:\mysql\share\german\errmsg.sys +file1=C:\mysql\share\german\errmsg.txt +fulldirectory= + +[share\portuguese] +file0=C:\mysql\share\portuguese\errmsg.sys +file1=C:\mysql\share\portuguese\errmsg.txt +fulldirectory= + +[share\estonian] +file0=C:\mysql\share\estonian\errmsg.sys +file1=C:\mysql\share\estonian\errmsg.txt +fulldirectory= + +[share\romanian] +file0=C:\mysql\share\romanian\errmsg.sys +file1=C:\mysql\share\romanian\errmsg.txt +fulldirectory= + +[share\french] +file0=C:\mysql\share\french\errmsg.sys +file1=C:\mysql\share\french\errmsg.txt +fulldirectory= + +[share\swedish] +file0=C:\mysql\share\swedish\errmsg.sys +file1=C:\mysql\share\swedish\errmsg.txt +fulldirectory= + +[share\slovak] +file0=C:\mysql\share\slovak\errmsg.sys +file1=C:\mysql\share\slovak\errmsg.txt +fulldirectory= + +[share\greek] +file0=C:\mysql\share\greek\errmsg.sys +file1=C:\mysql\share\greek\errmsg.txt +fulldirectory= + +[TopDir] +file0=C:\mysql\my-huge.cnf +file1=C:\mysql\my-large.cnf +file2=C:\mysql\my-medium.cnf +file3=C:\mysql\my-small.cnf +file4=C:\mysql\MySQLEULA.txt +SubDir0=bin +SubDir1=share +SubDir2=Embedded + +[share] +SubDir8=share\hungarian +SubDir9=share\charsets +SubDir20=share\spanish +SubDir21=share\swedish +SubDir10=share\italian +SubDir22=share\ukrainian +SubDir11=share\japanese +SubDir12=share\korean +SubDir13=share\norwegian +SubDir14=share\norwegian-ny +SubDir15=share\polish +SubDir16=share\portuguese +SubDir0=share\czech +SubDir17=share\romanian +SubDir1=share\danish +SubDir18=share\russian +SubDir2=share\dutch +SubDir19=share\slovak +SubDir3=share\english +fulldirectory= +SubDir4=share\estonian +SubDir5=share\french +SubDir6=share\german +SubDir7=share\greek + +[share\norwegian-ny] +file0=C:\mysql\share\norwegian-ny\errmsg.sys +file1=C:\mysql\share\norwegian-ny\errmsg.txt +fulldirectory= + +[Embedded\DLL] +file0=C:\mysql\embedded\DLL\test_dll.dsp +file1=C:\mysql\embedded\DLL\StdAfx.h +file2=C:\mysql\embedded\DLL\test_dll.cpp +file3=C:\mysql\embedded\DLL\StdAfx.cpp +SubDir0=Embedded\DLL\debug +SubDir1=Embedded\DLL\release +fulldirectory= + +[Embedded\Static] +SubDir0=Embedded\Static\release +fulldirectory= + +[Embedded\DLL\release] +file0=C:\mysql\embedded\DLL\release\libmysqld.dll +file1=C:\mysql\embedded\DLL\release\libmysqld.exp +file2=C:\mysql\embedded\DLL\release\libmysqld.lib +file3=C:\mysql\embedded\DLL\release\mysql-server.exe +fulldirectory= + +[share\danish] +file0=C:\mysql\share\danish\errmsg.sys +file1=C:\mysql\share\danish\errmsg.txt +fulldirectory= + +[share\czech] +file0=C:\mysql\share\czech\errmsg.sys +file1=C:\mysql\share\czech\errmsg.txt +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + +[share\russian] +file0=C:\mysql\share\russian\errmsg.sys +file1=C:\mysql\share\russian\errmsg.txt +fulldirectory= + +[share\norwegian] +file0=C:\mysql\share\norwegian\errmsg.sys +file1=C:\mysql\share\norwegian\errmsg.txt +fulldirectory= + +[share\japanese] +file0=C:\mysql\share\japanese\errmsg.sys +file1=C:\mysql\share\japanese\errmsg.txt +fulldirectory= + +[share\italian] +file0=C:\mysql\share\italian\errmsg.sys +file1=C:\mysql\share\italian\errmsg.txt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Registry Entries/Default.rge b/VC++Files/InstallShield/4.0.XX-classic/Registry Entries/Default.rge new file mode 100755 index 00000000000..537dfd82e48 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Registry Entries/Default.rge @@ -0,0 +1,4 @@ +[General] +Type=REGISTRYDATA +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.dbg b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.dbg new file mode 100755 index 0000000000000000000000000000000000000000..0c6d4e6b70812d069322e88155868913fc543e33 GIT binary patch literal 28458 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ino b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ino new file mode 100755 index 0000000000000000000000000000000000000000..204d8ea0f364524a444de8aa4c839fbdfb40413c GIT binary patch literal 58611 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 z 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ins b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.ins new file mode 100755 index 0000000000000000000000000000000000000000..759009b5c8462f5f1b617fb9f202c2e638ce4bc4 GIT binary patch literal 57122 zcmc(o2b^6;b^q_%UA2{L*_Lf=W5e3UxZx(6G0jiX+7_zpN;U?Acq^^t1zG#hu5kep zrxP%iC0U)&0;GpDO6WQD>YY>5tsOf?Z&*FNcGb}6Ozs>Sx@hagLsvcF30GdmKaW4H|Gc8;JJ$a?oevd7qm%qOvnY!B#puY&RjWrD z#e(o@bWL9|SZr#JTtB>N)#}kT{l%j4+sFX@Z(6;c{`2UspGMcrrw1QLZyu$60mSjk z=$eJa3B~Zp$cB;YR<9ji-&{Ams9@yluiFs657K>f^Tv%EMi4f#7^W-Nty;T!{qPc) zt{%N{cw}_-hV>_inm05@hF6`)r_JjTwrOcGj}9ZlqbJd{dUW&X@W{!8&4@tiY=oIY16vl^_!P@FKyer@l=%BII`jTk>)zlYxJ~Yaj|m4x^)}Y z>(|qfv~GCS>gGd=rIDL;A3dX3hGxTS*KXOc;%UPxH*E>>AB9c@T-G*6H*G=3&1*L` ziiI+^8=Gr45BFh~8)Oh$e3)14n%I7uw#_fbCa0$-Z#S~h)z5^7^yw?M z-eo`UejeZApZIAW4FmSSw1xlU)p$jI=2ud>&`b1*bp0jQv^D3JUJ<%*wVT7dTD~DH zAS)>Yhd#ASj8ZrbWB zEbQVQtx)Y*$1B$~)iR8*Zgjn`1o}Ff{EGXA=-S=CIu{KcV|Tx3*LcPGiiKmV&!q4b znsjy+)Y>luoX=1rqshO8u|=KJ5rr8*0Dq!35|crT*wU{p^6z~9kFCO0KFj}t#C|1= zvYw0dl`D~pk2j7x9lPWK?;9n?@wmjmGe`_NIe%$QuZYI+Y8Y#`KB2#Jjs1h<^lE-Z z#!wxh&$(QQ{by@Ut>8A2)+i%#65sO?McV{4NV)XB5_FNiY5$zBNDKc*xxq{8G!jYD zORk0gB2D0s+JPc~Iqom6U$uHkF*?3ueCzavvFGt`pH96@e?y&%4yP2?k56wJziWE< zuIcfe(;Fuzc1{myH{mF=BL7MEfkHCyl45vgYi!5(O%pq}P2L$8_Gu5vHlYU`SMF#{ zO|5U;KHjgqgop4Fy+W^fB6row;EdipsLeaJubv*iJuuJ77RvSOCb!-(C4&@miO3VA zHE6VUa_9Dxu%^pMX^Aj2Ne&e*H%;!^mU4-sUs$Z3TD^60=fu{iczPvhP`$Dgns6mp zZd>dS4K`S;n|z@ebiSHP#$5fsK}*ncQ8B`twx-5ctqeMb35}Lr$dm^YML})@t^`$N z#sjfTv-74_yKVB$&?j8aCwH(|JK5ScI=yRR=XMX}=qe&`ez9hFWc~2kr7|b$Cb!+O zWBi8J&TTu!1D;nVZRL&$yskPUairqCrtrqesRcc46MQ62#o~g_)9c2krdr#_gD=Y< zR?yiv1@8_S3|G6pPyQc-aUmAZfxzsi>JqTO|9N}>tx_2;-W{#C=Ag_fbu7{ ziz3eb&r`^ScQ9#W>F`+7A`mE#UIS!FD%e(?)SA=4%vhVId=bBypHI zw-xP+MAXqvn1>^s6-PTw$yPdp@EU~Ikxrb4MUim4XkR=t;o^G2TZ{H3GZQY!2nVCY z?M3_2nF&wG2p2=RNPMd@rt^!jbBoseV&xrEtZKM^SjOHI57SXzs1y(#?u4%DpuIa` zqZ2d1;`-{Vw-xQj&aCm$F2ereipE=mB5#Awi8^WX3SV%C$UddfDvH(;Sz&H$uD^MU zEQ?2ubYe3r%T=3MNNV$8YhEhrQ*E{t@yH>&0-V{EHN!WL9PC`z7(3D#JKPyN)EPV2 zSyqf3?X(7q%{wR9W4L@`>W(0W7F|Sd5uziV;l|k6(i2j(W0zMoqJ^>8$v*JF?BuY- z-x64k4sY7L5uTS6!mW?t%Uq(!P%+kDgc-V|SaFd!`zg-q`bJZPj13imX+EwaoeLW9 z$DW#&}^fbL?m)7@s}kU-goaP{0$@L=}@CGOD#piGh zpFz_{_{_)x$7L)rB2Fqct=_bDc+1M>#!c)Ut!R!g(t*a%K!H1Sv@4K#w8N|ev=};0 zmCUwG*FfnUe98T0etAjgjz}cOSV`tP?{&CGuUrf>dp0v`&|l81crLy*QM4Z~lYb6f z`h$;dXf#E=F4qpi8ya_V84m^{MNQ)kn}@^ZlE4PfJG*GHHFeD`x8FVWf*rWhkWy7I z$Q}}H{RL1F{6#m-9IK9YQ1q;#{l|S{M>|NB@F~Y3c3rH-%QQPjMKvY21)l6Y>g26! zu3iry4HWQdp26iNFlv2jCOGz_Bf~-j@&(HW!vw!g=XH_F7etcqlNiM)7X~x%>7wxI zv64~21G3AZ&I-eY=BJr&40k?;I}|W7=)25(^v3JiogCe;cC)w~0qE!_S$u&=!r*)? zT1E2{{2+BPz98hVrEM_-LLT8l0vXM2NwFh54)ow5r~;2iW;__AiQZU}!J6@Dg5)QI z(#nC$LVkghmnw?E6xs6Y!E(Z0d=2-xkPrQWU9gQKlMD^nh0Zo5>tlMvK^A5cBrI__ z@|WWz9yY&de@DCm=z)h8KS}5XV3#-#vn=Kyb&wASCFf31rSF&^6HebX{pxb&DHs4x zsU1k1xyVK_gv~9iqDrInamBAI=4A`%q zyuIDpI$f*66;%$GcXLQev{d+&PKsTq`pUs#E*p%DBcHCKxZ38aRTL7uHhQ(Mm~KEE z6I;bfSro!Cmv>9Eabd8>z@$niwuJ7{-E=l3MyG+0$P*Jn_n0bOtZ5^hqo71Y?ou-U zUGt{S>m_iwo*1>RI7WlVp@G?_1Zji#YQ&vhv|l8cPQ-!zEqB<&QA6D2#jZ>z);`#g zl$Fly)yO_r&W-!1AuCf_TNKewy`pQ=hZXJriz>xhmuUrZVlX9xS|kz1SjBu*cj3Dh zUIh6$Mf+366U%@EP5PI?nT$0g?vTd>6tU(tjL2$770fL2XI=^RM+NNBVo`{AtO7Vj zA2is1B0S6jp=V^mH+ajpKP&DXEyk9H@qk%Kev;24S4Y(8H(o~7`%pwFhXut4isny% zL-;64K=ov(Y=BTbt>6n+H6Pej(}b%}m#a-#J&JQ~X=n~;SuO~`-LEjEJ@_ZIouX|4 ziKW(+#UNI`q-d{|x){dS$v9Nz+hrE`vQL1RD{BfY!S}uL9fek)?%psTTwN(wSM1|E zZ1Hy{aG)69HX#_K6q&OnwBb5)pw1}9f%ml;@72P)`R!n>{UV+~Zql<)^t!(5s^q+V zg6AvtYfXVV>bs>XW%wa#rHjH67Z>dtm6FIhvuM7P!8GNLtjG!`Tu_=-To;yMIjo6T zw5KINi(GC>y^}0}kvELIG{%J{0*s7FlWs^c@(l$vy(rcNQEDh@huaO#ZBtl*VVX5u ztM(UHq5tZ+_LtjL^nY5`UvxG8eWCcN)&ArxLCU@X(=;p&rU8QwDLz&k)$7Veu^c@$ zILbyDHH`<%B?C_x8jV0&^i%cQJ@TE|;OCyakXpx}Xo4)Q;7%+)TQna{8;%1z^)p(Q zmn{zpLt3sbTQoFikz^F8VsLCggat>aNf#Ho1|Quta`oeu1Ema!fYQ1}6~)%;T`jI| zl&koyOl9b-(HA?502@Q-%+^BMIpe%B>%2lZTWHj9etNYt^Ah4HbavyS^GLNb^Yvh& z^8qns)OobpnR(oobUv7N-c;?({7PrrG!Vy=WE^lmt{I-Q zNPsW+j826*66ud7^+KJ0br9S0VqW)$WCiXr?q{K$%`e}c$v4ju0)qV6t9l%iW&c%* zhkeBb8)2+&bcM9=MLoIT2*bsVfKCr~6v~wYoNsnH^oFyH@XBI@*|t=HxmoS=T^-=e zhVX}pM9NtW;m_X(JCLv%*U6y)f|#IZQH^MS2Aui?3uKfwwqRrBDE37vvqSYD+TkTt zb8?+=1}7ow*OtmIcM9ijn=DF$^N2Nd$b+6`qE!S7;3H**?6$Q7FX0X5uPlhW0to zB18I*HV`OBc$PKT0BOnEvS@zqa&P;bwyu)DV%<$kXe;m@2bOL>Ds)R zLDS4i>tJVp*@FM!6@w?0`6BtFO4`mU#txOsJ&>I9m%X@g$PwPN^#i9=a>s z(S2x5VDv6wbVN2V&Mn$c72de6>OpG8i?*ZI;>z$uH_W-!hxcHqAwlvpQ_93Itcb_p zB7WS(6JL}P3f(&Ra`w|2WSjTL+4cpS;i{;s#A5;Yf-{H=K3Os~MRZ>>nP$u&irngq ztHgAOM$}p%A-+2J$o83uZD--R@EIsxAy&R${t1|yuaQNYy4_RpaARs@@7TFj&)Hpg!PJG<47Sc>!@R|9?4jw&p{={dThrr1+a_8&CbwTcSUS%|#k$t> z$A_lw;H2L4ZR0~*^f21xtJba^nwT1z*g3R?196wHY_7O`pfO~7kF9yd@UC5xyKpt8 z$_qW;FqGOZqMFv+*izF3y5ElO2K`=uO+ql=No4p5$xbJsm4VxJLR99K85R0IA?dp4 z>VIN28Wy&BP| zUu=aZa+BwRsmm_du?ik4 zF7kzOmMtivhP1|2DXM`#41X6^G|0V2426Dl2put-g540k>H0$N8m>n$04Hd$^Jasbl9Fhpx_HIO* zVFJB<5zTbL%p?S(hb`QJGKY%qbuX%u?a4!8CeSpRLAujI0*K2n8f4j`NgV@Vi5H=c z&CW@>(6~3O(l04)iDzSPSvRqD*W?r@Wp4?m5vFe8M*S`h3*5-PcuveRyqCaufe1^) zi~G+e{>44SUpABYq4k^UHPF}`Em)z-ArdAk1`JDeCbbWZ@Y*I`AVC}&`=t@blE!2^ zVbBJXS`KslyzBc?EA<$$j#G`A6?sYLkp`)=wUpx`+u0Ev-!;B%!<{?FcM)j#H(stW z(u>c}xlnP%z>8Z?&TH59*3OB0^!T!{JTfcGL^W|drk>&78~iS;gk$L~0r&C-L5r71 zi-vi|qG`4A3$CTw5jy@XC?05F`}^dd=0j;vAYc|k%UNa1>5i*^%amx8VGwNoi!inz z2}EZIk#uVD0fUqn{x><{FI5TUzFku~RS7?o6aI3Q@N^-RPF2G9b0JanSE__(3!!u} z!eq-r{U)nae-&zr#V}CWp=k1ddRrAc%Hn5<7T955487pr)VmbwP|S}ad6*x$j2V9& z?)W)hq_f_eh&yF;Ru|@HgjneY(Mz4EWU5;t@=ty}2_C&Q@iKZ;cPj*upn92eO{glj zjl*`VXDmq(V{$uKLb$;f{RiW#_Ee&}@X~yQsuao$MY`d-h`bMx=0v?khEoI!O2m~q zM(TAbl!3(qoz_Xk=(ZSlo2SNi4c~Ps*kVEhNv_B0WKJ1oBrC=lw1z za-F(I&i$zsMs&kATv$|0-J?71JMRwHxO;u56Rs`f+UWQ$3b1hLpj?vFC00YapheJ) zZPGOSA8_#u6pKFr4Ry7I+0_5lNSF(Sqp`4z@(?pavd4MoBn9j1YKb|ApR&}|5=>}H z75GgjzR#8=>KRg?&NrR0o|4#V>7bJ&fvNgsf%%~KV{8`|?ad;f`2i+jOiZ%Kc1Gi{ z@Xb;)80#s6Fn#HjeERlhGM-qp?~$T!HeTPRz}$9B|D*TK2El9|#3C z%q}b1uh+#SvP|KTgB>b@*YRB|0t7{~+l`#V&hS;Ho33kv^jN)|{3G>=L*AL47aK3O z5T86&`E~>9sI#11{t@pSs~<#^=V4XNL7mb1%$rFRbUg$X8}i+o)@Cia&(VnSc# zEEPUA()nb#YLizb77T*;)m38K(9Maf0cQdJ8YgD%9#OO>^sGS-T*YmKu1hn`D#@^H zUHjUM`2|ILhd3r!%D_s8MC`+h_A1+=g^AuM87kV>S(EM$=b`yJXY9Jz>R>NcSuD%s z1F}p$AR&5w(SC}!W*68$$G|>;WdgSehaz060yB}ET&+Mek)2%3Qbp4bw|OTGW>Vc#JsUly2>Wk9tfcqE`Yk z%00u#cq1oNMWwt)ng&cHV^fD@&q|*`21+ z3y}9NCnme=UZ|FOX?Dj%N@CglPn-nbi4LavW%=z*-jA_`?2h!GX?FjkOvW6t`y$Ei zXyMtNFP7co&aOrgDwo@+gyprk$7~7xk6jsJfrQR2hBBcOChykOvP1`Y79XMMoqUPe zJet|E`JXvAvYF0ITu&qzZQ1-!y))U&#^>35?!qmVzs32@F8s~jIS9{Fd2it{6~>W^ zY4FLnIzP_~d}3JA!^~DCwmkZ_DzW9!IT8Q)oQPu*j%r&He!COnJV_F+K{!Y)1?PIj z6dYMw3Vuh%I;3Dd8jDRzFG6TY!McH%r(nNDo2TG+I%7AmrQkon)`Q7THT=6$aD?5T zG6i>K*`vMBqzM!eUg4hEG3MC!Fx>7OJJ=(~{*;LoPkyh#0G-UjU(=ioXG-Sk>2CH?%BAF@un<}x8z-DG*sq!HH+bS{5-NX@AquK_m zA9Z4;C4tr6K>!Cs*Id1bu2F)a>&G$)=>kV{v{+?y}l zpLND=B(w4-;i^b;Shi9$lXcZ`F|=bHm+YGpS}QW7nQ=i+LOcOGHK(4xYJ6&XV{7_0 z^Z{$WKyb3vPpUd>OYzEv{(t!hQq0jM)bho(n8UjMcsBIE;F7|+eja=CfMQczn>ACq zbe{o{zUXW!h@?dUX4644{2UHbMEa8RICez(wiAO$dSs?Vq`0Pxna--7uQ~~cKyv&@ zAJ0VV9#C%>`HB-U&`<t+w}Xf%bT(0_@VbJ z!Geh^H~kbWdX+*=IRQ1>F58b>LN{FW5xX%G;~t8I^G}=(%W_fL-A4)II%2CRI#uGX zFc#tnBvG=3apC69!#H02uH5AYH4I#%MhkQ*IGg-lMp_JJ)u5l?B=l$ z{sA_dTP<-~uRyKY+No}I$Z7L%TuQdi@IfIW_KP86If7X!BIcpG9l7p~ z*wcGOY+2n{#KO076MlZiw>Dx$C$xiB?^g4(a%6dd^QcBF8~TixKYnC6?(s`2@=kT) z7_nup*BuVz#q?;o{zNBghhfUq2M43CML-C-SOMq|vYq@vXO#x^2V(`G>yUV( zyPJHmlZS}aL*;UR@7ofHBYGEIYX|Z?y>hhS1m}(Q zIrMn6<7cuJ)ZQq~!~~aBhAevG!SIxCDM`=aAgH$_4q@wN&1*${*=?8Jzg3X~pe#Y( zzTz9Y_L5zFl%sVSpA@4QL!2|3WSW;|qv4{oqd49mpL!4*Mx9h8HjK)N6{8Z#hEXRw zagI?n5$Lr>&RT&gVQoNlO2#?>m7c|6ST>>rsB{AXCe{1L`lL`k_sg8I+sJ@wA@-UZ zP@Ucjs7hFn?Uk_TsekZ7p4e&>O*wN1YEk{G&Ge;Y*G=x&Hg4N3U+RTg5AkuNs1-_~ zht#4L_uu1V8Keb`4VmrW!?A_%toZQhF3FE21s&DF;_63Uk*DLyOBtr60*q%kLsU0l zWMdj8M7S`brGT>z{Ej|c&6v!PR@fKrWOF4sctNm zh&v^AgM+YmgtOpoA1q|RuwXFZM8W~t7}vvTfu4nMI#okXe@)SZr`^rL0K$ps)-=WF zHptO+lsR9UuTrLs;);@M3Doh@HC$4hXqJ~a=)e&8yH}nnL#sw{$((vUbxys`n^UhR z&8gQ@=G5!O-Mz56q2y1v!V^17iz|k%8MjKSP_ai` zSnj;QEdv=0EO#zF$uYs;M%W~@W*)Z;8* zqA8W+PA&2kGteWPz0#(d+j|l6&VMwk#8N7{mCf?EJB^9=U|8mHzU}|MO@F+%!<1mBS!LgwA8MT@9I5!n9 zbxA+Xrs8GJ1~U_l<$0hopUPmFvff(*mphN@Lc`*^Or$WODMja}I&n;-Y4tY<`@3jKaTaJA;nLI)8?kKu6Wfz2;`Z;3tqI zeBEWbM&%WJAE z<%m;M)84Wplkw~NAjN)p0TbCs7oEA`79Q7); z2#@|t!^nf;Evir88Rx@zuFH5nnU`MZ+Y8u!)0NhPih>kgu#&6^nv>cwjP4l9>mIZo zzmdzD7n2FF3Ez+j=p9LD$nuPQ}s#dM8SrHILoU&;xR3zD(eKENiI63_Q)ofSG$gefX4 zr9MKXQSY27!jRxx4O!7QCo0W?_eQfEgNsyCrpkn8@^Hxmq6R6BOZI*q^60p+@GY{slpIbk8QE=8|cO*h-*DRoKe^0I7y zNK>YRVc0EDlA-RlgY5d6T(0QsNwQXC2VdeG3S-RiEYv3e<(ncJYcu9r^FfvYp6UHI z>-!20cfuxpc$eRRJb+Ibj3S~rnIKbuOb}l9En^5Tgow{O%VuPlbZjhNSYU6>3rJYZfP4F-w*0hljo3*w(F$yPX zqs}21xh0OAw*Xc`fS{8WA{O34sF~Rsv@S zy4RH0A#hHu4IDODLTL>|^(-21&-iu)PKz2xbV56Hs%9W_hMmr%8annWvNCjF5-V;@ zA$a+7P8>r=AvP@JYv@(-2-b;}DFrG6Z=5 zScgDfbCs$?xPu{NH@(#hGyJ>DRSo#3Z(6gkehKuk2#H=~_;-)fVInRX{^6fue(+C- zW7!;u&E;R@#Eh$gf7Q5#*6=Uq9Si5k+wkwj8Sj99+*l_M?v+h6(JH||^+>e}iUj=A zrkYCaCC-=;n=WRkNx04p|4!|Ne^q82O2=n&Zt&e%YlYz^K0uhdCFKK%U-* zS4at(MldlRzv4V{PfM(rFxPYDXcD;?WWLn7fO#rXt3X(WYJ+bSfY+i@UT^5&vUvMd zXT@3*BE?fZaPez6k-qvC6yt)JLacU<-FURVm`sZ!qLs(kJ%3N@lg?K`pr+A(=&OmG zzSqi4N)kD*+~3n#{y>L!im9W&Ld?(g8${-cS9IQ~Cj-jgeA&`pb-8@Eyza7kDgMUG z<@d`~Uhc)l(EXhiyF2maU^;qibWzc6i+D%~4O!AG|*y4bHR@Pa+O zS|@+Kww?51_d?zP!>RENZFz^?l%MtbY6wC!uaq7yXTmK(VT!V55BGM?sx3YAtp&I< z%$W4bsfpMkcF50}yv!wqdpnEth4GU+c~zG#Aekk6M@A|x4{rklMmZ-Ft)Ytbsl#BQehohhU7H_T|Bep1oCR}H2+fVv*VY;hL|W-Ar?AEjK6ezuV&C{j z4zX(eXfHC6`tiDn9pn5~NLxC8J>)M^cqM=RCL^WTg*-c(5cUZlTARQ2Ntz*KV8((m z&0nPQ*kbvMKK$Jy8w{^=Ng;m?7CXc5OeNJerT++=!`_-EFv(?F&BCFQz+UgXusqDm z9j)?ij*OVOgI42P70K$)H#mMnzvtpPBw+)Hha~<`MFzDa-L1$)?ccA`iJ+P2 zwg?Zb(^vGXXe9VTeW3FX_Gt`-^hmWp33DwZd3x-g?>D*pkRCa-CXelC zsq_wX(WmGVf07Ahyno_!oJcS`;k>a;$%UPw9hE$%}x;n$($yFG@~V^gP#a`Yeq(#N;?b)a`}X7 zi`}clmJZ)mCAM^!6IVe%pc=`4?!e5RqiDXcg4Bwuy4#`lVnqk?9 zl4PhWOPHw3COgBrS&|&xMCW%nW7oxu{6_4gM>Fg_;&pj2=8}->x=?>ii-sPFFxxf` ziLm;Zj+A9=og}Gm)sF4M{0^I|(3bs^Z-mrGC0f8ji;c@MlmcmDKzQP;e3Yn&&pyXhg~(;XKJ0Yymbb1&!Y5@XE`-cGWO-#oIZvYME?*QRjI+2e&> zWxlwQA{>ViW0o+4TaLmY+&6n6+~51quuO??x>dLQo(=o{)k$W= zzE65T#ul)TTkvzmzJIPKFR@Q|ePY3{*2$3fQ}yH@7w8nQ(YF<%jzZ@_DdYKaIiWG8 zPZFsmavUWa&Jjod#btNn=;x8q14sYe>A+D{p*N2Hn|B6BZ6s6-7UgwfWO(@4e>&yt zV*bNB2Qk6~2T#QGfa^~?rFxZy2A>=mMaL?!!S!dV#9eSL#695pvrdfX^?+-^nL4-@ zzCGaja~a<*xDF;q;xWVZ=bf<|$SnMi=%ZUR`{hp6{@Puc2!5g9tiUz)cDRn$0#M=W z$+fPxU}aDq-ZVeh1?7_ON;v27qY9iqngIdl-|7YDU-F@2xf0HGy}108S~%Z(d~p6n zmz0C{RS9V4R}9X1q&B{fHrnsefriX7H=zHr3ul-q&||Uy^kO26)f?#l+j$&2(Er4V z0eU^MJR8t|(@ACo`mcIF#uk8{eS*0H{nzTr=L+=yTTfmBz2*tsL8~pXzg|!NcakRr zO!b}hj7IZ>KF!G&%@ca^mM?OWpTn0F-)hx7X|N8QW77DBE7F}bevFJBN#om22b!x2 zy_3ebyfbKS!*VpQ6Jtr^yG}W~nD2P!AV!l$c{;gHj98Jd_`XxlF6MjQIfxM^BXZ(e zml7hTnqFuUF+Xt1kOrjPp_ipZ9kJ!6|Em&rD7!10V*%0*v!m*IAypsa*ax1T^7e%g5()fAsg z`X}(MhehdJ*~jT~=4o0Czl7!N+O$Y6(s#DOj3u}3+K6MK3;SQO#rAPjyKoDm;gUk~ ztKQV1rX(qqJ2~Yocz9IqVDvkyN|MuO)-lkE1rlXY_PBpB;2aVg>C-5HmAFH>j{_5$ zbW=uJG4QEQOp4Q6)8#GkxZfN%BWxdMv6Fz`N}{Jv!UPh6%D)l#FYwL`@A9I3TA$pN zm#u378rrTX+Gq8}ZEM)EeMS$wC?3Stk!S0ah0ZjDzVVIv*b0uczr)#g zB72hGIF2Xi{Uv_dmV%&(p0bB`yy<4VPjud#n%^%EzO1z;0-Iugj^Ge)G8ZIVcG^*U zuSn>9=imhASaK3!0Ik~ot`KhQTES7R#9WMH_D}k< z4Z}20G92!#(dgD&I&e~R3XRFZ+_XjqHa*U%UT45*f;ii+Co;MHsWSEUsCnhXFq-~G z%s7ZjC%uKwwTgg;y8ytPlQLnS1S8T>l#&%D?_fpLVpQ>Rim$urt|U@trm)ZF$$#!CV9T?#0A zapPW3R&eyOQsX=lr5^|p2!xbN|8TGByxJOvmAL-OP?+JCX^penTNs7htD+BocMD`* z;F5aOIPAI~?1XFSbJimqKMcRPO3D#r+UX4#S8AUNT?B(cX7^nzF$kuCR;wS?FT0C% zk@KilKX#m@tbQP-DRu5^oH*Xa(xqtmSOp~5Oi8Tzx!g&T1-|N+)hL&GKgL$x#VSv4 z#M@B%dWpT|Z7AJefS|k$MLpI18p>{Qk8*LLB;xTj*+bXl6VBGbNzc}CgG#f!q6(M* zGr}M>%Vo|CRg!Gk({(YDWlbyK1&KKq=kcY#AVU>kI<>?M(SAhIHlEMvIA zO#lfEJ$~*^+$0B!M>|j6ob=G5DbHDA+{d6sd>N8D9gZSuAh2|l0YN;*R)5`QNQ=T` zELIdg&gH@q=2jFMb0gNGFd-IK#kC&q#K-IACP0hBM1U2CS7!o3aY)S&pHY!HN{T~& zAO&rbXH;|oa&tey8K;)i9h{5ds{0Fe5@WYG3>>?TCB~c)HW^X`C;1Q?p}nhe1R&$J zu1$pO;gPp!CPdYZ?mP#b{%zX0%TgH!;1BLgIH!yr3?9-iJlw-(?@rDe`B42Ew7gP)%9 zO)*&An@Ccf&`!5z@MeCZh43q2K#9Q%sjD@%*s67Wq-$7UfR^;`USMWD4yZ>|zs;OE3~A26ELrtz6h zoCkibvqEh6pEHkpfswgI{d69~sj^@$7Ka!S8&~l$3ildx5t&W9*gd z5_e0{Mb6zfxA6}i3>R9&n#~XK4@kl^@K>L}cy=8>TR4oWmLSQjzng0h?H$L ze{~G50&l7R!Xx&&8LCOsH`jDc8g^(xQi&#pN+M|t&22X;EEhp2L@g)kZ^&~IgnfT;?FCcpVacY^Yvlj|<5dpf9Wt&P&iGu^ULq5BbsA=)A3nPly>kjk?oMK&>qR4ZiEPT^L20PZ|1F9|isO zi86`4x9P*f!OF7e5*tfAV`JWQrQ?X3k{DONlOpNBAG>joy zNPNDlqVxGk0+I@7d8iz&)IG_4U^0D$O(c3NfN zTKr^g)8sbkJd)(rS8Qphl_fM}2H|1*Ic2Vc7ftCr-Q&E-bqaD?{g=5865L-&EZ0pt zNs{YS-7MGb@_v{wJgC^a)80r^U^>lU%oiDVKnk_!Fw7Da4$T5^(0b z@q<{K#sP_yn1VZ;4K{NG@JOg5w*2gqju&LSEA*MYg=6z1tZF-xB*76tpp~zG|cL)@PV@ z1y9(i=-Q1agGcgE{ceOfMc9ovrF&Q2PE~(DgfvK9saIcu`i7;cR$*V|VYMO6hJ^0L z!wk<&_u{cwY+>Y*u<65JeJ9h4T~hB2iMl;^7*z1$=bRNvr+865F)0IPKA_cvs(NI2 z@$=3j!3#ZcU|F;T2#9G)0b;ik0}y`8umlK5utW+Fzv3hbK&XBhK>VWjV{AYDhD5i7 zUvdcnAZFZV*Md84v%{_;fhBBOyjq)KBy@;C{LDgbW4-+-47uQiv6}6Ji7I z`<(dre8Jc&geU9`!e5cGFE=Gvn&__`46cFTWN8u&oGeY$w7DVgcg9_|x|iXmzp;Im zo#=CB*pHaoj&phoUk+GXnZ`k)W!>mLd>5}V(KALZlKPKktC99FP%DY6m}fbl#5~MY zDPE5_F_@?6Q1>YX^Yr(cKoVinilY5a!qQzy@~Vd5^s0ub%U__u8xeh|)R1T3Im90KobsyH9xo{St{`W)q9hj55qXJ2+V!lH( zP!{Q#lHfd*(&sl^H^xyGWTEsqr?&Ko50o)@>dUnBVeGMmVO8$MywWB0E`5&lIEIkC zM52744EdFk=v6L)!PJ&SVh~KD6PM=}^Ribvk19Nn^(Ev|c&HQtf8@lmB${o_^adwM zN+Q)SD~Vp`{TN$!Nt7K!*jFAy&~-ipm=;0B^$g^bA69P^~}h48j{- z5ePZFP?_QY|5)bu;SPL>RzeH*6JsbZD$aE+hr$b5Duhg z5cK(`a0Y=l>r=6D;%C2{L4aFKM4}lc{VnH~=^4Jr0feywa>Ssg(uO~E3Y&=Ea}ju^ zKB*HUhgnR^HJ$z*8(#TB@pqhOR<8Xn3diFG$_*b7H4tbk+eF{$V%^HN-*?`S!Juos zErX58h3o1W7WRMO#K+~Lq!!^GQ%mG-spStd?jf~MvT=k!7v4gdq?Th?c)!URcbV!n zaIKslnCUK3tlFyQ2aa@lpC5?VW?r!m=u5{NvZtwkNJwW&t_wS!bz5^u&BtO^Uj4Xs zV(a+Msc{BLR{Jp^PE=6XRY<7NaHe(@QZZF9EUC~4K{rnc!OLXk#OY?vr1^h5`7i8w+oCv6z<;l;x9%$9p$Qpvp^bmIEl3rP%1E6v~QBuVa7 z{j%KqPVdLqx^u5SuAsLdgBh7yEsLDM)kxJ-}C z4DjEdF)P;+5%5KgD&Xs^B01S|?)a5ZC_AkI znd3{11(R);6<61He@wS_O|P76-;E}q@=to9@`qh###f?pI1ccLT2v-EmT%0nJ0{qt z0y%%3@x?eL;M-_4m_{(x1CNwENVjOYSe|BOZN0)yZW$6wm zi)JM;$oYFGnGte6>itT{Ara)aNK~ROzv)w+10c>szu7S3V=f_J2KA<_t>Q0mh#qZY z{dm@$JBf%9T)?`q0Ow|$;Z-Qn=^?jKYkPnK@|1BS|1H+$$e-j&1ea((0TE3830DKY zT$FY`F*EWBwspjY5C2dlHhjp5BR)jQh7bSf#8}%GF>&4_KIF_IK161Q5C4=g3-~}K z!h0_D)m}1&1Rv~X?+UGI0zPO{4L*F*8M{@?ta8qIZZAE5L@#_OgHrGz{BAWrH6#dO zPe*XeQeK5{-Nep`soO@z$0jH3P-rIvq@50G70m-MA~lTY@lH~Q+3+t6)}EnYuy$0qC{7eY`c#U;|M1=^422uF7u3QKH^<`R8w6jv)q!5I z1*=LKm+1BHE-7qv3>GV}KsZCyl>Q7CP}A{NCoVT(HF$#+QrP_;CrMye z)yzt@&v`$F*nMX@tMt0bKVMItS9+?ju9gu|-q^OoFga>>OZb9I2&k=3m?ow zwT_BMK=4;^alJv6FcYtb*?&7TzI};r1_g<>8EerWuZXO_44-~eUdNJkPW3R*6I~*K zjy5B(7hfuO2?0jLHnyJf`VNHgQI;5+=puvoh7Te{khBNawNDnFyUQuys!nEz^%xYQ z3;e#C@q<>3C370+ZB)JKzgDG}nJbE=g#ipAzD^fYDkv%)aGA0ii!j*Z7JPiMaTk)c zSQ_l_)Z>swpa{x=Tt=4z=KuNtKqk>X*j2C)f0AFR5;3U)Z!#`R0X;Q0Pml@Kbc`Y6 zgj!+nP3IB>OFM#vq>3np&);$q%$Sq|hDWg+0K3E|j9FE_l>^_-n1ym6yy-?ch z3iZRhVvOS9D#ZmhcUV-X?aRydjr)-lMD)Trz(n=1or}mcyC6DW|#4?Y^mn>kUG>Qm&=4q~1;5S5ICh^?3!-wE_w=UD^HVcXBr8kt^Ozf8u(80Eli5IH##D zIJVuV#zl#OU`>@4-{{n>?7XTpNgixrAZ>mwEzOlxX%>xER)iXbb*3edyhiEPVS(!a zV-DZx8`>l~ne>HRw84<_%^ddhxpr7Y2a_K(Y{fXm64oTgqlji){t}={d7ARTSSKymJD~P zOG5w`O%wySPi73R+NeqTW)|Aiy1}o&9v!R|4JTxr;UfI3Xn@|Pw>SNX89lNCy&jH{ z0comA24t!7q>PLKS*jEgO_d3WrOK0?1Y0Jl(n3C_O0x;BS|{I9tsd ztfoq}0g{tcsUDL1#WH7%-Axyp;0}|mw^Aza>8MGSF&*@*M#6;@(OZ;IN9`_4Xb*@k U?Y7{S!vK%H{K_l&d*#Ca2lRel4gdfE literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.obs b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.obs new file mode 100755 index 0000000000000000000000000000000000000000..5fcfcb62c4e70338ce55aab3c89149f351d7f4c1 GIT binary patch literal 65611 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 MQd<)aB(wnj4?UUG^8f$< literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.rul b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.rul new file mode 100755 index 00000000000..df143b493c4 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Script Files/Setup.rul @@ -0,0 +1,640 @@ + +//////////////////////////////////////////////////////////////////////////////// +// +// IIIIIII SSSSSS +// II SS InstallShield (R) +// II SSSSSS (c) 1996-1997, InstallShield Software Corporation +// II SS (c) 1990-1996, InstallShield Corporation +// IIIIIII SSSSSS All Rights Reserved. +// +// +// This code is generated as a starting setup template. You should +// modify it to provide all necessary steps for your setup. +// +// +// File Name: Setup.rul +// +// Description: InstallShield script +// +// Comments: This template script performs a basic setup on a +// Windows 95 or Windows NT 4.0 platform. With minor +// modifications, this template can be adapted to create +// new, customized setups. +// +//////////////////////////////////////////////////////////////////////////////// + + + // Include header file +#include "sdlang.h" +#include "sddialog.h" + +////////////////////// string defines //////////////////////////// + +#define UNINST_LOGFILE_NAME "Uninst.isu" + +//////////////////// installation declarations /////////////////// + + // ----- DLL prototypes ----- + + + // your DLL prototypes + + + // ---- script prototypes ----- + + // generated + prototype ShowDialogs(); + prototype MoveFileData(); + prototype HandleMoveDataError( NUMBER ); + prototype ProcessBeforeDataMove(); + prototype ProcessAfterDataMove(); + prototype SetupRegistry(); + prototype SetupFolders(); + prototype CleanUpInstall(); + prototype SetupInstall(); + prototype SetupScreen(); + prototype CheckRequirements(); + prototype DialogShowSdWelcome(); + prototype DialogShowSdShowInfoList(); + prototype DialogShowSdAskDestPath(); + prototype DialogShowSdSetupType(); + prototype DialogShowSdComponentDialog2(); + prototype DialogShowSdFinishReboot(); + + // your prototypes + + + // ----- global variables ------ + + // generated + BOOL bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup; + STRING svDir; + STRING svName, svCompany, svSerial; + STRING szAppPath; + STRING svSetupType; + + + // your global variables + + +/////////////////////////////////////////////////////////////////////////////// +// +// MAIN PROGRAM +// +// The setup begins here by hiding the visible setup +// window. This is done to allow all the titles, images, etc. to +// be established before showing the main window. The following +// logic then performs the setup in a series of steps. +// +/////////////////////////////////////////////////////////////////////////////// +program + Disable( BACKGROUND ); + + CheckRequirements(); + + SetupInstall(); + + SetupScreen(); + + if (ShowDialogs()<0) goto end_install; + + if (ProcessBeforeDataMove()<0) goto end_install; + + if (MoveFileData()<0) goto end_install; + + if (ProcessAfterDataMove()<0) goto end_install; + + if (SetupRegistry()<0) goto end_install; + + if (SetupFolders()<0) goto end_install; + + + end_install: + + CleanUpInstall(); + + // If an unrecoverable error occurred, clean up the partial installation. + // Otherwise, exit normally. + + if (bInstallAborted) then + abort; + endif; + +endprogram + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ShowDialogs // +// // +// Purpose: This function manages the display and navigation // +// the standard dialogs that exist in a setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ShowDialogs() + NUMBER nResult; + begin + + Dlg_Start: + // beginning of dialogs label + + Dlg_SdWelcome: + nResult = DialogShowSdWelcome(); + if (nResult = BACK) goto Dlg_Start; + + Dlg_SdShowInfoList: + nResult = DialogShowSdShowInfoList(); + if (nResult = BACK) goto Dlg_SdWelcome; + + Dlg_SdAskDestPath: + nResult = DialogShowSdAskDestPath(); + if (nResult = BACK) goto Dlg_SdShowInfoList; + + Dlg_SdSetupType: + nResult = DialogShowSdSetupType(); + if (nResult = BACK) goto Dlg_SdAskDestPath; + + Dlg_SdComponentDialog2: + if ((nResult = BACK) && (svSetupType != "Custom") && (svSetupType != "")) then + goto Dlg_SdSetupType; + endif; + nResult = DialogShowSdComponentDialog2(); + if (nResult = BACK) goto Dlg_SdSetupType; + + return 0; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessBeforeDataMove // +// // +// Purpose: This function performs any necessary operations prior to the // +// actual data move operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessBeforeDataMove() + STRING svLogFile; + NUMBER nResult; + begin + + InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY ); + + svLogFile = UNINST_LOGFILE_NAME; + + nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 ); + if (nResult < 0) then + MessageBox( @ERROR_UNINSTSETUP, WARNING ); + endif; + + szAppPath = TARGETDIR; // TODO : if your application .exe is in a subdir of TARGETDIR then add subdir + + if ((bIs32BitSetup) && (bIsShellExplorer)) then + RegDBSetItem( REGDB_APPPATH, szAppPath ); + RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY ); + RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME ); + endif; + + // TODO : update any items you want to process before moving the data + // + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: MoveFileData // +// // +// Purpose: This function handles the data movement for // +// the setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function MoveFileData() + NUMBER nResult, nDisk; + begin + + nDisk = 1; + SetStatusWindow( 0, "" ); + Disable( DIALOGCACHE ); + Enable( STATUS ); + StatusUpdate( ON, 100 ); + nResult = ComponentMoveData( MEDIA, nDisk, 0 ); + + HandleMoveDataError( nResult ); + + Disable( STATUS ); + + return nResult; + + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: HandleMoveDataError // +// // +// Purpose: This function handles the error (if any) during the move data // +// operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function HandleMoveDataError( nResult ) + STRING szErrMsg, svComponent , svFileGroup , svFile; + begin + + svComponent = ""; + svFileGroup = ""; + svFile = ""; + + switch (nResult) + case 0: + return 0; + default: + ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult ); + szErrMsg = @ERROR_MOVEDATA + "\n\n" + + @ERROR_COMPONENT + " " + svComponent + "\n" + + @ERROR_FILEGROUP + " " + svFileGroup + "\n" + + @ERROR_FILE + " " + svFile; + SprintfBox( SEVERE, @TITLE_CAPTIONBAR, szErrMsg, nResult ); + bInstallAborted = TRUE; + return nResult; + endswitch; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessAfterDataMove // +// // +// Purpose: This function performs any necessary operations needed after // +// all data has been moved. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessAfterDataMove() + begin + + // TODO : update self-registered files and other processes that + // should be performed after the data has been moved. + + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupRegistry // +// // +// Purpose: This function makes the registry entries for this setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupRegistry() + NUMBER nResult; + + begin + + // TODO : Add all your registry entry keys here + // + // + // RegDBCreateKeyEx, RegDBSetKeyValueEx.... + // + + nResult = CreateRegistrySet( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// +// Function: SetupFolders +// +// Purpose: This function creates all the folders and shortcuts for the +// setup. This includes program groups and items for Windows 3.1. +// +/////////////////////////////////////////////////////////////////////////////// +function SetupFolders() + NUMBER nResult; + + begin + + + // TODO : Add all your folder (program group) along with shortcuts (program items) + // + // + // CreateProgramFolder, AddFolderIcon.... + // + + nResult = CreateShellObjects( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CleanUpInstall // +// // +// Purpose: This cleans up the setup. Anything that should // +// be released or deleted at the end of the setup should // +// be done here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CleanUpInstall() + begin + + + if (bInstallAborted) then + return 0; + endif; + + DialogShowSdFinishReboot(); + + if (BATCH_INSTALL) then // ensure locked files are properly written + CommitSharedFiles(0); + endif; + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupInstall // +// // +// Purpose: This will setup the installation. Any general initialization // +// needed for the installation should be performed here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupInstall() + begin + + Enable( CORECOMPONENTHANDLING ); + + bInstallAborted = FALSE; + + if (bIs32BitSetup) then + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME ^ @PRODUCT_NAME; + else + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME16 ^ @PRODUCT_NAME16; // use shorten names + endif; + + TARGETDIR = svDir; + + SdProductName( @PRODUCT_NAME ); + + Enable( DIALOGCACHE ); + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupScreen // +// // +// Purpose: This function establishes the screen look. This includes // +// colors, fonts, and text to be displayed. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupScreen() + begin + + Enable( FULLWINDOWMODE ); + Enable( INDVFILESTATUS ); + SetTitle( @TITLE_MAIN, 24, WHITE ); + + SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text. + + Enable( BACKGROUND ); + + Delay( 1 ); + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CheckRequirements // +// // +// Purpose: This function checks all minimum requirements for the // +// application being installed. If any fail, then the user // +// is informed and the setup is terminated. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CheckRequirements() + NUMBER nvDx, nvDy, nvResult; + STRING svResult; + + begin + + bWinNT = FALSE; + bIsShellExplorer = FALSE; + + // Check screen resolution. + GetExtents( nvDx, nvDy ); + + if (nvDy < 480) then + MessageBox( @ERROR_VGARESOLUTION, WARNING ); + abort; + endif; + + // set 'setup' operation mode + bIs32BitSetup = TRUE; + GetSystemInfo( ISTYPE, nvResult, svResult ); + if (nvResult = 16) then + bIs32BitSetup = FALSE; // running 16-bit setup + return 0; // no additional information required + endif; + + // --- 32-bit testing after this point --- + + // Determine the target system's operating system. + GetSystemInfo( OS, nvResult, svResult ); + + if (nvResult = IS_WINDOWSNT) then + // Running Windows NT. + bWinNT = TRUE; + + // Check to see if the shell being used is EXPLORER shell. + if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then + if (nvResult >= 4) then + bIsShellExplorer = TRUE; + endif; + endif; + + elseif (nvResult = IS_WINDOWS95 ) then + bIsShellExplorer = TRUE; + + endif; + +end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdWelcome // +// // +// Purpose: This function handles the standard welcome dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdWelcome() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdWelcome( szTitle, szMsg ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdShowInfoList // +// // +// Purpose: This function displays the general information list dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdShowInfoList() + NUMBER nResult; + LIST list; + STRING szTitle, szMsg, szFile; + begin + + szFile = SUPPORTDIR ^ "infolist.txt"; + + list = ListCreate( STRINGLIST ); + ListReadFromFile( list, szFile ); + szTitle = ""; + szMsg = " "; + nResult = SdShowInfoList( szTitle, szMsg, list ); + + ListDestroy( list ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdAskDestPath // +// // +// Purpose: This function asks the user for the destination directory. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdAskDestPath() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 ); + + TARGETDIR = svDir; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdSetupType // +// // +// Purpose: This function displays the standard setup type dialog. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdSetupType() + NUMBER nResult, nType; + STRING szTitle, szMsg; + begin + + switch (svSetupType) + case "Typical": + nType = TYPICAL; + case "Custom": + nType = CUSTOM; + case "Compact": + nType = COMPACT; + case "": + svSetupType = "Typical"; + nType = TYPICAL; + endswitch; + + szTitle = ""; + szMsg = ""; + nResult = SetupType( szTitle, szMsg, "", nType, 0 ); + + switch (nResult) + case COMPACT: + svSetupType = "Compact"; + case TYPICAL: + svSetupType = "Typical"; + case CUSTOM: + svSetupType = "Custom"; + endswitch; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdComponentDialog2 // +// // +// Purpose: This function displays the custom component dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdComponentDialog2() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + if ((svSetupType != "Custom") && (svSetupType != "")) then + return 0; + endif; + + szTitle = ""; + szMsg = ""; + nResult = SdComponentDialog2( szTitle, szMsg, svDir, "" ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdFinishReboot // +// // +// Purpose: This function will show the last dialog of the product. // +// It will allow the user to reboot and/or show some readme text. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdFinishReboot() + NUMBER nResult, nDefOptions; + STRING szTitle, szMsg1, szMsg2, szOption1, szOption2; + NUMBER bOpt1, bOpt2; + begin + + if (!BATCH_INSTALL) then + bOpt1 = FALSE; + bOpt2 = FALSE; + szMsg1 = ""; + szMsg2 = ""; + szOption1 = ""; + szOption2 = ""; + nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); + return 0; + endif; + + nDefOptions = SYS_BOOTMACHINE; + szTitle = ""; + szMsg1 = ""; + szMsg2 = ""; + nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 ); + + return nResult; + end; + + // --- include script file section --- + +#include "sddialog.rul" + + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt b/VC++Files/InstallShield/4.0.XX-classic/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt new file mode 100755 index 00000000000..acad9353244 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt @@ -0,0 +1,25 @@ +This is a release of MySQL Classic 4.0.11a-gamma for Win32. + +NOTE: If you install MySQL in a folder other than +C:\MYSQL or you intend to start MySQL on NT/Win2000 +as a service, you must create a file named C:\MY.CNF +or \Windows\my.ini or \winnt\my.ini with the following +information:: + +[mysqld] +basedir=E:/installation-path/ +datadir=E:/data-path/ + +After your have installed MySQL, the installation +directory will contain 4 files named 'my-small.cnf, +my-medium.cnf, my-large.cnf, my-huge.cnf'. +You can use this as a starting point for your own +C:\my.cnf file. + +If you have any problems, you can mail them to +win32@lists.mysql.com after you have consulted the +MySQL manual and the MySQL mailing list archive +(http://www.mysql.com/documentation/index.html) + +On behalf of the MySQL AB gang, +Michael Widenius \ No newline at end of file diff --git a/VC++Files/InstallShield/4.0.XX-classic/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp b/VC++Files/InstallShield/4.0.XX-classic/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp new file mode 100755 index 0000000000000000000000000000000000000000..3229d50c9bfcabefefb1341fda098d20bcc734b1 GIT binary patch literal 15694 zcmeI3JB%Ae7{@=K-(K76_xXH&Oi7uF4k@AsrK3$jjnYv@G&D%0il|5m3XnjGA{wMf zL_$gf5>dL)5Cs$g3Mf1j1%y!e9<#Hv>lu6R&bNC-MzTHL8PERqKl43y_U_f!UVjC+ zyj%fz32PtY>kWLBpuxxK?R+3FJjmtqYZu|WZ*RcE`?ulUHv!&%s|Q!#R`B6F=isCF z&ckO{FTkx&F2PqfFT>ZjuE4!J*Wu?M?!xcCK7eOWpTLDLet}DOegpX60rajt1ohF6 zaPHGbaQ@~`aPiB>aQT}jaOK_~aQ*&YaO3-@aQo3Sxcm4Yc<|@H@Z|6R;Q90C0`lVh zg#s@W$Xx-Iz0}KVrP>I(*#|g5PdLJF9h?MS&x3RaoaIXA2p4(N7hE}BaV%I}cL;-qtVlj;-e}&Za^l2$Z)OHw_D6{(`O=TtSF@fhgG48#CUZ5I z4yV%;XV*{|iEYl7X*P&l@o}PΞYl3Pc*AWK<5_&B8evjnkZ9&L1hLEKZN3FPHtC zgCT>?5;ECe7}VFS7UP5EU_2Y7IJ*Y3T#lkl%-NFG1}ZO3c5Stn=?H{M=3C@t0UsXOLL1Rv?)sh2j;#7Uc!oV)f#O2xiD zE2oZ)!+pu!@cmHdAUoAF7Leq`#FY7(+4U4TM^10OLp^0dM#+bYeSNGaI{~k~3kxqt zxl-$WcbsD24Qp)i^?|)U>sU}>yL9MSog#v;aGGX!;QEO&v7T$E zPaHT!&ae?^&Irmrv!Gj^)NWj_3ukc$>f{1s;@8{c_Q}f`(v2f; zUxCan!Bk?WB!Y&qpi!98O1nSy9UOSbikxd5l;a=PPBqbiXYHqRLtOqP!C}X zK_KR|rPpbbhqcYmO1kKs*y@YnEHxUu?T5ZRHfe_@K_v>4g>X{t!`VcwoX&l0*buYL zn%>4Ng0n<6OtGf9@d+6{D$vor5PL@#4v5;II~yzF*h(tZX=1KqrA7tl8DQdzn=f@$ z$CtBo2@`Fq~%*lrvfEPylc z_#-C8OvNxZ6C3-JN%Hw7~(%ITmJ|$;bPq z7noXZ6%3i4bD@tEAR!PIiA;39M0e2K&!p`kHC|5(v1i{ zCh`{Wwwz8w)gu~O*Tz2|&Y2UpU!4I5U6R*zvS2xL;!cfgo(R+Hl8WFo)1Fw1gtPi^BL1w{geV-aho6HBV0Tk*Q3+gPELuAnYZSh8#I@A1)afyR literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-classic/Shell Objects/Default.shl b/VC++Files/InstallShield/4.0.XX-classic/Shell Objects/Default.shl new file mode 100755 index 00000000000..187cb651307 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Shell Objects/Default.shl @@ -0,0 +1,12 @@ +[Data] +Folder3= +Group0=Main +Group1=Startup +Folder0= +Folder1= +Folder2= + +[Info] +Type=ShellObject +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/String Tables/0009-English/value.shl b/VC++Files/InstallShield/4.0.XX-classic/String Tables/0009-English/value.shl new file mode 100755 index 00000000000..9359ce70202 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/String Tables/0009-English/value.shl @@ -0,0 +1,23 @@ +[Data] +TITLE_MAIN=MySQL Classic Servers and Clients 4.0.11a-gamma +COMPANY_NAME=MySQL AB +ERROR_COMPONENT=Component: +COMPANY_NAME16=Company +PRODUCT_VERSION=MySQL Classic Servers and Clients 4.0.11a-gamma +ERROR_MOVEDATA=An error occurred during the move data process: %d +ERROR_FILEGROUP=File Group: +UNINST_KEY=MySQL Classic Servers and Clients 4.0.11a-gamma +TITLE_CAPTIONBAR=MySQL Classic Servers and Clients 4.0.11a-gamma +PRODUCT_NAME16=Product +ERROR_VGARESOLUTION=This program requires VGA or better resolution. +ERROR_FILE=File: +UNINST_DISPLAY_NAME=MySQL Classic Servers and Clients 4.0.11a-gamma +PRODUCT_KEY=yourapp.Exe +PRODUCT_NAME=MySQL Classic Servers and Clients 4.0.11a-gamma +ERROR_UNINSTSETUP=unInstaller setup failed to initialize. You may not be able to uninstall this product. + +[General] +Language=0009 +Type=STRINGTABLESPECIFIC +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/String Tables/Default.shl b/VC++Files/InstallShield/4.0.XX-classic/String Tables/Default.shl new file mode 100755 index 00000000000..d4dc4925ab1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/String Tables/Default.shl @@ -0,0 +1,74 @@ +[TITLE_MAIN] +Comment= + +[COMPANY_NAME] +Comment= + +[ERROR_COMPONENT] +Comment= + +[COMPANY_NAME16] +Comment= + +[PRODUCT_VERSION] +Comment= + +[ERROR_MOVEDATA] +Comment= + +[ERROR_FILEGROUP] +Comment= + +[Language] +Lang0=0009 +CurrentLang=0 + +[UNINST_KEY] +Comment= + +[TITLE_CAPTIONBAR] +Comment= + +[Data] +Entry0=ERROR_VGARESOLUTION +Entry1=TITLE_MAIN +Entry2=TITLE_CAPTIONBAR +Entry3=UNINST_KEY +Entry4=UNINST_DISPLAY_NAME +Entry5=COMPANY_NAME +Entry6=PRODUCT_NAME +Entry7=PRODUCT_VERSION +Entry8=PRODUCT_KEY +Entry9=ERROR_MOVEDATA +Entry10=ERROR_UNINSTSETUP +Entry11=COMPANY_NAME16 +Entry12=PRODUCT_NAME16 +Entry13=ERROR_COMPONENT +Entry14=ERROR_FILEGROUP +Entry15=ERROR_FILE + +[PRODUCT_NAME16] +Comment= + +[ERROR_VGARESOLUTION] +Comment= + +[ERROR_FILE] +Comment= + +[General] +Type=STRINGTABLE +Version=1.00.000 + +[UNINST_DISPLAY_NAME] +Comment= + +[PRODUCT_KEY] +Comment= + +[PRODUCT_NAME] +Comment= + +[ERROR_UNINSTSETUP] +Comment= + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Build.tsb b/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Build.tsb new file mode 100755 index 00000000000..3949bd4c066 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Build.tsb @@ -0,0 +1,56 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key6= +Key7= +Key8= +Key9= + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + diff --git a/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Setup.tsb b/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Setup.tsb new file mode 100755 index 00000000000..b0c5a509f0b --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-classic/Text Substitutions/Setup.tsb @@ -0,0 +1,76 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key10= +Key6= +Key11= +Key7= +Key12= +Key8= +Key13= +Key9= + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/4.0.XX-gpl.ipr b/VC++Files/InstallShield/4.0.XX-gpl/4.0.XX-gpl.ipr new file mode 100755 index 00000000000..c415a03a315 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/4.0.XX-gpl.ipr @@ -0,0 +1,51 @@ +[Language] +LanguageSupport0=0009 + +[OperatingSystem] +OSSupport=0000000000010010 + +[Data] +CurrentMedia= +CurrentComponentDef=Default.cdf +ProductName=MySQL Servers and Clients +set_mifserial= +DevEnvironment=Microsoft Visual C++ 6 +AppExe= +set_dlldebug=No +EmailAddresss= +Instructions=Instructions.txt +set_testmode=No +set_mif=No +SummaryText= +Department= +HomeURL= +Author= +Type=Database Application +InstallRoot=D:\MySQL-Install\mysql-4\MySQL Servers and Clients +Version=1.00.000 +InstallationGUID=40744a4d-efed-4cff-84a9-9e6389550f5c +set_level=Level 3 +CurrentFileGroupDef=Default.fdf +Notes=Notes.txt +set_maxerr=50 +set_args= +set_miffile=Status.mif +set_dllcmdline= +Copyright= +set_warnaserr=No +CurrentPlatform= +Category= +set_preproc= +CurrentLanguage=English +CompanyName=MySQL +Description=Description.txt +set_maxwarn=50 +set_crc=Yes +set_compileb4build=No + +[MediaInfo] + +[General] +Type=INSTALLMAIN +Version=1.10.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.cdf b/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.cdf new file mode 100755 index 00000000000..48d37800cd1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.cdf @@ -0,0 +1,192 @@ +[Development] +required0=Servers +SELECTED=Yes +FILENEED=STANDARD +required1=Grant Tables +HTTPLOCATION= +STATUS=Examples, Libraries, Includes and Script files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=Examples, Libraries, Includes and Script files +DISPLAYTEXT=Examples, Libraries, Includes and Script files +IMAGE= +DEFSELECTION=Yes +filegroup0=Development +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Grant Tables] +required0=Servers +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The Grant Tables and Core Files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The Grant Tables and Core Files +DISPLAYTEXT=The Grant Tables and Core Files +IMAGE= +DEFSELECTION=Yes +filegroup0=Grant Tables +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Clients and Tools +INSTALLATION=NEVEROVERWRITE +requiredby2=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Components] +component0=Development +component1=Grant Tables +component2=Servers +component3=Clients and Tools +component4=Documentation + +[TopComponents] +component0=Servers +component1=Clients and Tools +component2=Documentation +component3=Development +component4=Grant Tables + +[SetupType] +setuptype0=Compact +setuptype1=Typical +setuptype2=Custom + +[Clients and Tools] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL clients and Maintenance Tools +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL clients and Maintenance Tools +DISPLAYTEXT=The MySQL clients and Maintenance Tools +IMAGE= +DEFSELECTION=Yes +filegroup0=Clients and Tools +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=NEWERDATE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Servers] +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The MySQL Servers +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Servers +DISPLAYTEXT=The MySQL Servers +IMAGE= +DEFSELECTION=Yes +filegroup0=Servers +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Grant Tables +INSTALLATION=ALWAYSOVERWRITE +requiredby2=Clients and Tools +requiredby3=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[SetupTypeItem-Compact] +Comment= +item0=Grant Tables +item1=Servers +item2=Clients and Tools +item3=Documentation +Descrip= +DisplayText= + +[SetupTypeItem-Custom] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Info] +Type=CompDef +Version=1.00.000 +Name= + +[SetupTypeItem-Typical] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Documentation] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL Documentation with different formats +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Documentation with different formats +DISPLAYTEXT=The MySQL Documentation with different formats +IMAGE= +DEFSELECTION=Yes +filegroup0=Documentation +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.fgl b/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.fgl new file mode 100755 index 00000000000..4e20dcea4ab --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Component Definitions/Default.fgl @@ -0,0 +1,42 @@ +[\] +DISPLAYTEXT=Common Files Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[\] +DISPLAYTEXT=Windows System Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[USERDEFINED] +DISPLAYTEXT=Script-defined Folders +TYPE=USERSTART +fulldirectory= + +[] +DISPLAYTEXT=Program Files Folder +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=General Application Destination +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=Windows Operating System +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[TopDir] +SubDir0= +SubDir1= +SubDir2= +SubDir3=USERDEFINED + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Clients and Tools.fgl b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Clients and Tools.fgl new file mode 100755 index 00000000000..7bba3d7474a --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Clients and Tools.fgl @@ -0,0 +1,31 @@ +[bin] +file15=C:\mysql\bin\replace.exe +file16=C:\mysql\bin\winmysqladmin.cnt +file0=C:\mysql\bin\isamchk.exe +file17=C:\mysql\bin\WINMYSQLADMIN.HLP +file1=C:\mysql\bin\myisamchk.exe +file18=C:\mysql\bin\comp-err.exe +file2=C:\mysql\bin\myisamlog.exe +file19=C:\mysql\bin\my_print_defaults.exe +file3=C:\mysql\bin\myisampack.exe +file4=C:\mysql\bin\mysql.exe +file5=C:\mysql\bin\mysqladmin.exe +file6=C:\mysql\bin\mysqlbinlog.exe +file7=C:\mysql\bin\mysqlc.exe +file8=C:\mysql\bin\mysqlcheck.exe +file9=C:\mysql\bin\mysqldump.exe +file20=C:\mysql\bin\winmysqladmin.exe +file10=C:\mysql\bin\mysqlimport.exe +fulldirectory= +file11=C:\mysql\bin\mysqlshow.exe +file12=C:\mysql\bin\mysqlwatch.exe +file13=C:\mysql\bin\pack_isam.exe +file14=C:\mysql\bin\perror.exe + +[TopDir] +SubDir0=bin + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Default.fdf b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Default.fdf new file mode 100755 index 00000000000..8096a4b74bf --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Default.fdf @@ -0,0 +1,82 @@ +[FileGroups] +group0=Development +group1=Grant Tables +group2=Servers +group3=Clients and Tools +group4=Documentation + +[Development] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Grant Tables] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Clients and Tools] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM=0000000000000000 +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Servers] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Info] +Type=FileGrp +Version=1.00.000 +Name= + +[Documentation] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Development.fgl b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Development.fgl new file mode 100755 index 00000000000..401509e9b7a --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Development.fgl @@ -0,0 +1,241 @@ +[bench\Data\Wisconsin] +file0=C:\mysql\bench\Data\Wisconsin\onek.data +file1=C:\mysql\bench\Data\Wisconsin\tenk.data +fulldirectory= + +[lib\debug] +file0=C:\mysql\lib\debug\libmySQL.dll +file1=C:\mysql\lib\debug\libmySQL.lib +file2=C:\mysql\lib\debug\mysqlclient.lib +file3=C:\mysql\lib\debug\zlib.lib +file4=C:\mysql\lib\debug\regex.lib +file5=C:\mysql\lib\debug\mysys.lib +file6=C:\mysql\lib\debug\strings.lib +fulldirectory= + +[bench\output] +fulldirectory= + +[examples\libmysqltest] +file0=C:\mysql\examples\libmysqltest\myTest.c +file1=C:\mysql\examples\libmysqltest\myTest.dsp +file2=C:\mysql\examples\libmysqltest\myTest.dsw +file3=C:\mysql\examples\libmysqltest\myTest.exe +file4=C:\mysql\examples\libmysqltest\myTest.mak +file5=C:\mysql\examples\libmysqltest\myTest.ncb +file6=C:\mysql\examples\libmysqltest\myTest.opt +file7=C:\mysql\examples\libmysqltest\readme +fulldirectory= + +[include] +file15=C:\mysql\include\libmysqld.def +file16=C:\mysql\include\my_alloc.h +file0=C:\mysql\include\raid.h +file17=C:\mysql\include\my_getopt.h +file1=C:\mysql\include\errmsg.h +file2=C:\mysql\include\Libmysql.def +file3=C:\mysql\include\m_ctype.h +file4=C:\mysql\include\m_string.h +file5=C:\mysql\include\my_list.h +file6=C:\mysql\include\my_pthread.h +file7=C:\mysql\include\my_sys.h +file8=C:\mysql\include\mysql.h +file9=C:\mysql\include\mysql_com.h +file10=C:\mysql\include\mysql_version.h +fulldirectory= +file11=C:\mysql\include\mysqld_error.h +file12=C:\mysql\include\dbug.h +file13=C:\mysql\include\config-win.h +file14=C:\mysql\include\my_global.h + +[examples] +SubDir0=examples\libmysqltest +SubDir1=examples\tests +fulldirectory= + +[lib\opt] +file0=C:\mysql\lib\opt\libmySQL.dll +file1=C:\mysql\lib\opt\libmySQL.lib +file2=C:\mysql\lib\opt\mysqlclient.lib +file3=C:\mysql\lib\opt\zlib.lib +file4=C:\mysql\lib\opt\strings.lib +file5=C:\mysql\lib\opt\mysys-max.lib +file6=C:\mysql\lib\opt\regex.lib +file7=C:\mysql\lib\opt\mysys.lib +fulldirectory= + +[bench\Data] +SubDir0=bench\Data\ATIS +SubDir1=bench\Data\Wisconsin +fulldirectory= + +[bench\limits] +file15=C:\mysql\bench\limits\pg.comment +file16=C:\mysql\bench\limits\solid.cfg +file0=C:\mysql\bench\limits\access.cfg +file17=C:\mysql\bench\limits\solid-nt4.cfg +file1=C:\mysql\bench\limits\access.comment +file18=C:\mysql\bench\limits\sybase.cfg +file2=C:\mysql\bench\limits\Adabas.cfg +file3=C:\mysql\bench\limits\Adabas.comment +file4=C:\mysql\bench\limits\Db2.cfg +file5=C:\mysql\bench\limits\empress.cfg +file6=C:\mysql\bench\limits\empress.comment +file7=C:\mysql\bench\limits\Informix.cfg +file8=C:\mysql\bench\limits\Informix.comment +file9=C:\mysql\bench\limits\msql.cfg +file10=C:\mysql\bench\limits\ms-sql.cfg +fulldirectory= +file11=C:\mysql\bench\limits\Ms-sql65.cfg +file12=C:\mysql\bench\limits\mysql.cfg +file13=C:\mysql\bench\limits\oracle.cfg +file14=C:\mysql\bench\limits\pg.cfg + +[TopDir] +SubDir0=bench +SubDir1=examples +SubDir2=include +SubDir3=lib +SubDir4=scripts + +[bench] +file15=C:\mysql\bench\test-create +file16=C:\mysql\bench\test-insert +file0=C:\mysql\bench\uname.bat +file17=C:\mysql\bench\test-select +file1=C:\mysql\bench\compare-results +file18=C:\mysql\bench\test-wisconsin +file2=C:\mysql\bench\copy-db +file19=C:\mysql\bench\bench-init.pl +file3=C:\mysql\bench\crash-me +file4=C:\mysql\bench\example.bat +file5=C:\mysql\bench\print-limit-table +file6=C:\mysql\bench\pwd.bat +file7=C:\mysql\bench\Readme +SubDir0=bench\Data +file8=C:\mysql\bench\run.bat +SubDir1=bench\limits +file9=C:\mysql\bench\run-all-tests +SubDir2=bench\output +file10=C:\mysql\bench\server-cfg +fulldirectory= +file11=C:\mysql\bench\test-alter-table +file12=C:\mysql\bench\test-ATIS +file13=C:\mysql\bench\test-big-tables +file14=C:\mysql\bench\test-connect + +[examples\tests] +file15=C:\mysql\examples\tests\lock_test.res +file16=C:\mysql\examples\tests\mail_to_db.pl +file0=C:\mysql\examples\tests\unique_users.tst +file17=C:\mysql\examples\tests\table_types.pl +file1=C:\mysql\examples\tests\auto_increment.tst +file18=C:\mysql\examples\tests\test_delayed_insert.pl +file2=C:\mysql\examples\tests\big_record.pl +file19=C:\mysql\examples\tests\udf_test +file3=C:\mysql\examples\tests\big_record.res +file4=C:\mysql\examples\tests\czech-sorting +file5=C:\mysql\examples\tests\deadlock-script.pl +file6=C:\mysql\examples\tests\export.pl +file7=C:\mysql\examples\tests\fork_test.pl +file8=C:\mysql\examples\tests\fork2_test.pl +file9=C:\mysql\examples\tests\fork3_test.pl +file20=C:\mysql\examples\tests\udf_test.res +file21=C:\mysql\examples\tests\auto_increment.res +file10=C:\mysql\examples\tests\function.res +fulldirectory= +file11=C:\mysql\examples\tests\function.tst +file12=C:\mysql\examples\tests\grant.pl +file13=C:\mysql\examples\tests\grant.res +file14=C:\mysql\examples\tests\lock_test.pl + +[bench\Data\ATIS] +file26=C:\mysql\bench\Data\ATIS\stop1.txt +file15=C:\mysql\bench\Data\ATIS\flight_class.txt +file27=C:\mysql\bench\Data\ATIS\time_interval.txt +file16=C:\mysql\bench\Data\ATIS\flight_day.txt +file0=C:\mysql\bench\Data\ATIS\transport.txt +file28=C:\mysql\bench\Data\ATIS\time_zone.txt +file17=C:\mysql\bench\Data\ATIS\flight_fare.txt +file1=C:\mysql\bench\Data\ATIS\airline.txt +file29=C:\mysql\bench\Data\ATIS\aircraft.txt +file18=C:\mysql\bench\Data\ATIS\food_service.txt +file2=C:\mysql\bench\Data\ATIS\airport.txt +file19=C:\mysql\bench\Data\ATIS\ground_service.txt +file3=C:\mysql\bench\Data\ATIS\airport_service.txt +file4=C:\mysql\bench\Data\ATIS\city.txt +file5=C:\mysql\bench\Data\ATIS\class_of_service.txt +file6=C:\mysql\bench\Data\ATIS\code_description.txt +file7=C:\mysql\bench\Data\ATIS\compound_class.txt +file8=C:\mysql\bench\Data\ATIS\connect_leg.txt +file9=C:\mysql\bench\Data\ATIS\date_day.txt +file20=C:\mysql\bench\Data\ATIS\month_name.txt +file21=C:\mysql\bench\Data\ATIS\restrict_carrier.txt +file10=C:\mysql\bench\Data\ATIS\day_name.txt +fulldirectory= +file22=C:\mysql\bench\Data\ATIS\restrict_class.txt +file11=C:\mysql\bench\Data\ATIS\dual_carrier.txt +file23=C:\mysql\bench\Data\ATIS\restriction.txt +file12=C:\mysql\bench\Data\ATIS\fare.txt +file24=C:\mysql\bench\Data\ATIS\state.txt +file13=C:\mysql\bench\Data\ATIS\fconnection.txt +file25=C:\mysql\bench\Data\ATIS\stop.txt +file14=C:\mysql\bench\Data\ATIS\flight.txt + +[General] +Type=FILELIST +Version=1.00.000 + +[scripts] +file37=C:\mysql\scripts\mysqld_safe-watch.sh +file26=C:\mysql\scripts\mysql_zap +file15=C:\mysql\scripts\mysql_fix_privilege_tables +file38=C:\mysql\scripts\mysqldumpslow +file27=C:\mysql\scripts\mysql_zap.sh +file16=C:\mysql\scripts\mysql_fix_privilege_tables.sh +file0=C:\mysql\scripts\Readme +file39=C:\mysql\scripts\mysqldumpslow.sh +file28=C:\mysql\scripts\mysqlaccess +file17=C:\mysql\scripts\mysql_install_db +file1=C:\mysql\scripts\make_binary_distribution.sh +file29=C:\mysql\scripts\mysqlaccess.conf +file18=C:\mysql\scripts\mysql_install_db.sh +file2=C:\mysql\scripts\msql2mysql +file19=C:\mysql\scripts\mysql_secure_installation +file3=C:\mysql\scripts\msql2mysql.sh +file4=C:\mysql\scripts\mysql_config +file5=C:\mysql\scripts\mysql_config.sh +file6=C:\mysql\scripts\mysql_convert_table_format +file7=C:\mysql\scripts\mysql_convert_table_format.sh +file40=C:\mysql\scripts\mysqlhotcopy +file8=C:\mysql\scripts\mysql_explain_log +file41=C:\mysql\scripts\mysqlhotcopy.pl +file30=C:\mysql\scripts\mysqlaccess.sh +file9=C:\mysql\scripts\mysql_explain_log.sh +file42=C:\mysql\scripts\mysqlhotcopy.sh +file31=C:\mysql\scripts\mysqlbug +file20=C:\mysql\scripts\mysql_secure_installation.sh +file43=C:\mysql\scripts\make_binary_distribution +file32=C:\mysql\scripts\mysqlbug.sh +file21=C:\mysql\scripts\mysql_setpermission +file10=C:\mysql\scripts\mysql_find_rows +fulldirectory= +file33=C:\mysql\scripts\mysqld_multi +file22=C:\mysql\scripts\mysql_setpermission.pl +file11=C:\mysql\scripts\mysql_find_rows.pl +file34=C:\mysql\scripts\mysqld_multi.sh +file23=C:\mysql\scripts\mysql_setpermission.sh +file12=C:\mysql\scripts\mysql_find_rows.sh +file35=C:\mysql\scripts\mysqld_safe +file24=C:\mysql\scripts\mysql_tableinfo +file13=C:\mysql\scripts\mysql_fix_extensions +file36=C:\mysql\scripts\mysqld_safe.sh +file25=C:\mysql\scripts\mysql_tableinfo.sh +file14=C:\mysql\scripts\mysql_fix_extensions.sh + +[lib] +file0=C:\mysql\lib\Readme +SubDir0=lib\debug +SubDir1=lib\opt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Documentation.fgl b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Documentation.fgl new file mode 100755 index 00000000000..107ebd1afb7 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Documentation.fgl @@ -0,0 +1,101 @@ +[Docs\Flags] +file59=C:\mysql\Docs\Flags\romania.gif +file48=C:\mysql\Docs\Flags\kroatia.eps +file37=C:\mysql\Docs\Flags\iceland.gif +file26=C:\mysql\Docs\Flags\france.eps +file15=C:\mysql\Docs\Flags\china.gif +file49=C:\mysql\Docs\Flags\kroatia.gif +file38=C:\mysql\Docs\Flags\ireland.eps +file27=C:\mysql\Docs\Flags\france.gif +file16=C:\mysql\Docs\Flags\croatia.eps +file0=C:\mysql\Docs\Flags\usa.gif +file39=C:\mysql\Docs\Flags\ireland.gif +file28=C:\mysql\Docs\Flags\germany.eps +file17=C:\mysql\Docs\Flags\croatia.gif +file1=C:\mysql\Docs\Flags\argentina.gif +file29=C:\mysql\Docs\Flags\germany.gif +file18=C:\mysql\Docs\Flags\czech-republic.eps +file2=C:\mysql\Docs\Flags\australia.eps +file19=C:\mysql\Docs\Flags\czech-republic.gif +file3=C:\mysql\Docs\Flags\australia.gif +file80=C:\mysql\Docs\Flags\usa.eps +file4=C:\mysql\Docs\Flags\austria.eps +file81=C:\mysql\Docs\Flags\argentina.eps +file70=C:\mysql\Docs\Flags\spain.eps +file5=C:\mysql\Docs\Flags\austria.gif +file71=C:\mysql\Docs\Flags\spain.gif +file60=C:\mysql\Docs\Flags\russia.eps +file6=C:\mysql\Docs\Flags\brazil.eps +file72=C:\mysql\Docs\Flags\sweden.eps +file61=C:\mysql\Docs\Flags\russia.gif +file50=C:\mysql\Docs\Flags\latvia.eps +file7=C:\mysql\Docs\Flags\brazil.gif +file73=C:\mysql\Docs\Flags\sweden.gif +file62=C:\mysql\Docs\Flags\singapore.eps +file51=C:\mysql\Docs\Flags\latvia.gif +file40=C:\mysql\Docs\Flags\island.eps +file8=C:\mysql\Docs\Flags\bulgaria.eps +file74=C:\mysql\Docs\Flags\switzerland.eps +file63=C:\mysql\Docs\Flags\singapore.gif +file52=C:\mysql\Docs\Flags\netherlands.eps +file41=C:\mysql\Docs\Flags\island.gif +file30=C:\mysql\Docs\Flags\great-britain.eps +file9=C:\mysql\Docs\Flags\bulgaria.gif +file75=C:\mysql\Docs\Flags\switzerland.gif +file64=C:\mysql\Docs\Flags\south-africa.eps +file53=C:\mysql\Docs\Flags\netherlands.gif +file42=C:\mysql\Docs\Flags\israel.eps +file31=C:\mysql\Docs\Flags\great-britain.gif +file20=C:\mysql\Docs\Flags\denmark.eps +file76=C:\mysql\Docs\Flags\taiwan.eps +file65=C:\mysql\Docs\Flags\south-africa.gif +file54=C:\mysql\Docs\Flags\poland.eps +file43=C:\mysql\Docs\Flags\israel.gif +file32=C:\mysql\Docs\Flags\greece.eps +file21=C:\mysql\Docs\Flags\denmark.gif +file10=C:\mysql\Docs\Flags\canada.eps +fulldirectory= +file77=C:\mysql\Docs\Flags\taiwan.gif +file66=C:\mysql\Docs\Flags\south-africa1.eps +file55=C:\mysql\Docs\Flags\poland.gif +file44=C:\mysql\Docs\Flags\italy.eps +file33=C:\mysql\Docs\Flags\greece.gif +file22=C:\mysql\Docs\Flags\estonia.eps +file11=C:\mysql\Docs\Flags\canada.gif +file78=C:\mysql\Docs\Flags\ukraine.eps +file67=C:\mysql\Docs\Flags\south-africa1.gif +file56=C:\mysql\Docs\Flags\portugal.eps +file45=C:\mysql\Docs\Flags\italy.gif +file34=C:\mysql\Docs\Flags\hungary.eps +file23=C:\mysql\Docs\Flags\estonia.gif +file12=C:\mysql\Docs\Flags\chile.eps +file79=C:\mysql\Docs\Flags\ukraine.gif +file68=C:\mysql\Docs\Flags\south-korea.eps +file57=C:\mysql\Docs\Flags\portugal.gif +file46=C:\mysql\Docs\Flags\japan.eps +file35=C:\mysql\Docs\Flags\hungary.gif +file24=C:\mysql\Docs\Flags\finland.eps +file13=C:\mysql\Docs\Flags\chile.gif +file69=C:\mysql\Docs\Flags\south-korea.gif +file58=C:\mysql\Docs\Flags\romania.eps +file47=C:\mysql\Docs\Flags\japan.gif +file36=C:\mysql\Docs\Flags\iceland.eps +file25=C:\mysql\Docs\Flags\finland.gif +file14=C:\mysql\Docs\Flags\china.eps + +[Docs] +file0=C:\mysql\Docs\manual_toc.html +file1=C:\mysql\Docs\Copying +file2=C:\mysql\Docs\Copying.lib +file3=C:\mysql\Docs\manual.html +file4=C:\mysql\Docs\manual.txt +SubDir0=Docs\Flags +fulldirectory= + +[TopDir] +SubDir0=Docs + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Grant Tables.fgl b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Grant Tables.fgl new file mode 100755 index 00000000000..178065a7003 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Grant Tables.fgl @@ -0,0 +1,36 @@ +[data\test] +fulldirectory= + +[data\mysql] +file15=C:\mysql\data\mysql\func.frm +file16=C:\mysql\data\mysql\func.MYD +file0=C:\mysql\data\mysql\columns_priv.frm +file17=C:\mysql\data\mysql\func.MYI +file1=C:\mysql\data\mysql\columns_priv.MYD +file2=C:\mysql\data\mysql\columns_priv.MYI +file3=C:\mysql\data\mysql\db.frm +file4=C:\mysql\data\mysql\db.MYD +file5=C:\mysql\data\mysql\db.MYI +file6=C:\mysql\data\mysql\host.frm +file7=C:\mysql\data\mysql\host.MYD +file8=C:\mysql\data\mysql\host.MYI +file9=C:\mysql\data\mysql\tables_priv.frm +file10=C:\mysql\data\mysql\tables_priv.MYD +fulldirectory= +file11=C:\mysql\data\mysql\tables_priv.MYI +file12=C:\mysql\data\mysql\user.frm +file13=C:\mysql\data\mysql\user.MYD +file14=C:\mysql\data\mysql\user.MYI + +[TopDir] +SubDir0=data + +[data] +SubDir0=data\mysql +SubDir1=data\test +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Servers.fgl b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Servers.fgl new file mode 100755 index 00000000000..64883f7f369 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/File Groups/Servers.fgl @@ -0,0 +1,229 @@ +[Embedded\Static\release] +file0=C:\mysql\embedded\Static\release\test_stc.dsp +file1=C:\mysql\embedded\Static\release\ReadMe.txt +file2=C:\mysql\embedded\Static\release\StdAfx.cpp +file3=C:\mysql\embedded\Static\release\StdAfx.h +file4=C:\mysql\embedded\Static\release\test_stc.cpp +file5=C:\mysql\embedded\Static\release\mysqlserver.lib +fulldirectory= + +[share\polish] +file0=C:\mysql\share\polish\errmsg.sys +file1=C:\mysql\share\polish\errmsg.txt +fulldirectory= + +[share\dutch] +file0=C:\mysql\share\dutch\errmsg.sys +file1=C:\mysql\share\dutch\errmsg.txt +fulldirectory= + +[share\spanish] +file0=C:\mysql\share\spanish\errmsg.sys +file1=C:\mysql\share\spanish\errmsg.txt +fulldirectory= + +[share\english] +file0=C:\mysql\share\english\errmsg.sys +file1=C:\mysql\share\english\errmsg.txt +fulldirectory= + +[bin] +file0=C:\mysql\bin\mysqld-opt.exe +file1=C:\mysql\bin\mysqld-max.exe +file2=C:\mysql\bin\mysqld-max-nt.exe +file3=C:\mysql\bin\mysqld-nt.exe +file4=C:\mysql\bin\mysqld.exe +file5=C:\mysql\bin\cygwinb19.dll +file6=C:\mysql\bin\libmySQL.dll +fulldirectory= + +[share\korean] +file0=C:\mysql\share\korean\errmsg.sys +file1=C:\mysql\share\korean\errmsg.txt +fulldirectory= + +[share\charsets] +file15=C:\mysql\share\charsets\latin1.conf +file16=C:\mysql\share\charsets\latin2.conf +file0=C:\mysql\share\charsets\win1251ukr.conf +file17=C:\mysql\share\charsets\latin5.conf +file1=C:\mysql\share\charsets\cp1257.conf +file18=C:\mysql\share\charsets\Readme +file2=C:\mysql\share\charsets\croat.conf +file19=C:\mysql\share\charsets\swe7.conf +file3=C:\mysql\share\charsets\danish.conf +file4=C:\mysql\share\charsets\dec8.conf +file5=C:\mysql\share\charsets\dos.conf +file6=C:\mysql\share\charsets\estonia.conf +file7=C:\mysql\share\charsets\german1.conf +file8=C:\mysql\share\charsets\greek.conf +file9=C:\mysql\share\charsets\hebrew.conf +file20=C:\mysql\share\charsets\usa7.conf +file21=C:\mysql\share\charsets\win1250.conf +file10=C:\mysql\share\charsets\hp8.conf +fulldirectory= +file22=C:\mysql\share\charsets\win1251.conf +file11=C:\mysql\share\charsets\hungarian.conf +file23=C:\mysql\share\charsets\cp1251.conf +file12=C:\mysql\share\charsets\Index +file13=C:\mysql\share\charsets\koi8_ru.conf +file14=C:\mysql\share\charsets\koi8_ukr.conf + +[Embedded\DLL\debug] +file0=C:\mysql\embedded\DLL\debug\libmysqld.dll +file1=C:\mysql\embedded\DLL\debug\libmysqld.exp +file2=C:\mysql\embedded\DLL\debug\libmysqld.lib +fulldirectory= + +[Embedded] +file0=C:\mysql\embedded\embedded.dsw +SubDir0=Embedded\DLL +SubDir1=Embedded\Static +fulldirectory= + +[share\ukrainian] +file0=C:\mysql\share\ukrainian\errmsg.sys +file1=C:\mysql\share\ukrainian\errmsg.txt +fulldirectory= + +[share\hungarian] +file0=C:\mysql\share\hungarian\errmsg.sys +file1=C:\mysql\share\hungarian\errmsg.txt +fulldirectory= + +[share\german] +file0=C:\mysql\share\german\errmsg.sys +file1=C:\mysql\share\german\errmsg.txt +fulldirectory= + +[share\portuguese] +file0=C:\mysql\share\portuguese\errmsg.sys +file1=C:\mysql\share\portuguese\errmsg.txt +fulldirectory= + +[share\estonian] +file0=C:\mysql\share\estonian\errmsg.sys +file1=C:\mysql\share\estonian\errmsg.txt +fulldirectory= + +[share\romanian] +file0=C:\mysql\share\romanian\errmsg.sys +file1=C:\mysql\share\romanian\errmsg.txt +fulldirectory= + +[share\french] +file0=C:\mysql\share\french\errmsg.sys +file1=C:\mysql\share\french\errmsg.txt +fulldirectory= + +[share\swedish] +file0=C:\mysql\share\swedish\errmsg.sys +file1=C:\mysql\share\swedish\errmsg.txt +fulldirectory= + +[share\slovak] +file0=C:\mysql\share\slovak\errmsg.sys +file1=C:\mysql\share\slovak\errmsg.txt +fulldirectory= + +[share\greek] +file0=C:\mysql\share\greek\errmsg.sys +file1=C:\mysql\share\greek\errmsg.txt +fulldirectory= + +[TopDir] +file0=C:\mysql\Readme +file1=C:\mysql\mysqlbug.txt +file2=C:\mysql\my-huge.cnf +file3=C:\mysql\my-large.cnf +file4=C:\mysql\my-medium.cnf +file5=C:\mysql\my-small.cnf +SubDir0=bin +SubDir1=share +SubDir2=Embedded + +[share] +SubDir8=share\hungarian +SubDir9=share\charsets +SubDir20=share\spanish +SubDir21=share\swedish +SubDir10=share\italian +SubDir22=share\ukrainian +SubDir11=share\japanese +SubDir12=share\korean +SubDir13=share\norwegian +SubDir14=share\norwegian-ny +SubDir15=share\polish +SubDir16=share\portuguese +SubDir0=share\czech +SubDir17=share\romanian +SubDir1=share\danish +SubDir18=share\russian +SubDir2=share\dutch +SubDir19=share\slovak +SubDir3=share\english +fulldirectory= +SubDir4=share\estonian +SubDir5=share\french +SubDir6=share\german +SubDir7=share\greek + +[share\norwegian-ny] +file0=C:\mysql\share\norwegian-ny\errmsg.sys +file1=C:\mysql\share\norwegian-ny\errmsg.txt +fulldirectory= + +[Embedded\DLL] +file0=C:\mysql\embedded\DLL\test_dll.dsp +file1=C:\mysql\embedded\DLL\StdAfx.h +file2=C:\mysql\embedded\DLL\test_dll.cpp +file3=C:\mysql\embedded\DLL\StdAfx.cpp +SubDir0=Embedded\DLL\debug +SubDir1=Embedded\DLL\release +fulldirectory= + +[Embedded\Static] +SubDir0=Embedded\Static\release +fulldirectory= + +[Embedded\DLL\release] +file0=C:\mysql\embedded\DLL\release\libmysqld.dll +file1=C:\mysql\embedded\DLL\release\libmysqld.exp +file2=C:\mysql\embedded\DLL\release\libmysqld.lib +file3=C:\mysql\embedded\DLL\release\mysql-server.exe +fulldirectory= + +[share\danish] +file0=C:\mysql\share\danish\errmsg.sys +file1=C:\mysql\share\danish\errmsg.txt +fulldirectory= + +[share\czech] +file0=C:\mysql\share\czech\errmsg.sys +file1=C:\mysql\share\czech\errmsg.txt +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + +[share\russian] +file0=C:\mysql\share\russian\errmsg.sys +file1=C:\mysql\share\russian\errmsg.txt +fulldirectory= + +[share\norwegian] +file0=C:\mysql\share\norwegian\errmsg.sys +file1=C:\mysql\share\norwegian\errmsg.txt +fulldirectory= + +[share\japanese] +file0=C:\mysql\share\japanese\errmsg.sys +file1=C:\mysql\share\japanese\errmsg.txt +fulldirectory= + +[share\italian] +file0=C:\mysql\share\italian\errmsg.sys +file1=C:\mysql\share\italian\errmsg.txt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Registry Entries/Default.rge b/VC++Files/InstallShield/4.0.XX-gpl/Registry Entries/Default.rge new file mode 100755 index 00000000000..537dfd82e48 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Registry Entries/Default.rge @@ -0,0 +1,4 @@ +[General] +Type=REGISTRYDATA +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.dbg b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.dbg new file mode 100755 index 0000000000000000000000000000000000000000..0c6d4e6b70812d069322e88155868913fc543e33 GIT binary patch literal 28458 zcmb`Qd0IvO*vmnGkluBr_xflbJ9xfe-}lL=jPO z0k`5(_oZ5;YOS_n-Ivx@YZtfHUAt=iTD59h{eI`Y$z%elCG`8}$H{qj?tAy%bMHO( z-1{CA)lq8t=c827^yL*x$|`-eTk;Tm3(9?4@|XLHYRalb;|nI*S|`-Bg@-D`qkJ_* z#bq^y*Aaa4jT}{5P&22bwz!NxveSRmkakg7rIXec?8`{LB|g#S$YopRLVs0KQ&Uw_ zT2@|CSx`}8^iyS(rB&%abChpkb#+w@H<4QxRTP((RhDqKGGARujjyb#Ql4yXK}|_9 z!oo@^i{a*KO^FXhnQx)5q{bMaN~_9?OKR$iOMLTdtE!E|x)eT&P+L(_xv)Epty);k zlT_DK&8aD;N{Y)0jDcMlrPBJ0BY2#W^78ts!g(b{we`-8 zl~TDX-r);W$D)C@#sq(7@pnOM>-^wG{y56M=u5=vE2D{$NVKh~+1KiC406e>;_Hh; zF(eOCrN2d#*@#8amR5g6eoa>EeZg4BA9gNDzSaIjGk`Jh! zhT5uXm14$wzwy->R zwj?eLC0hKg{AE8)>QM^Y5(%CN?UB7?SP)px6}w`}Lyf^mTrAotaKax;6h&LbsO_36 z4Mjrn=9*wbG@8Dnqa%e!H7p86Dr*rB!?fbQ=3qEn(%u@5#_T#An6|fqhG;BdTUdWd zI60rEwkwyPW~usmUtN9uq`YOCKh+9osCsBBKeSXMbg7^=lu}LFgduIgwb}(+v>V2> z2X26dYKNxUroCv??61B$=wVj6t8ILC@1goE`cI@L7^l9wA2TiG@6_4c;X-JtOLPwM zE@-ODbT0Dc&{W^l{gC%SQ(dF`BVP-%)OC6Q^7YVEH|l}NH$w{7w+B8_F`_jFkkCwGfe%-%|TpFWIgy&rni1JJ7;ggNR5 zu%Fte2l4bjf`)noTIx~gQjbBedPX14)n{R!%hpdxQKSS?EU|}lYq(W}j=uIKeFQgs z8Jg-9XsK7BOT7l&>Nn7%UWZxgO_;6ThB@k8NTc+vqK{B>{gHt5==JvFl*D4um`8^G z4n&4f8R^pg{`T1RO+EFc^sK8f~H!UJRZ$*Xs8v?RI8HzgT@aJ!Tjx7O5Mu9eAC@n zsYvn!?$HWO6@!+FLzhZGw`xnC$X(l$LtqCq)S1vyTcAsAg^ZSct5!xvabtXqv0yN= z-@{yxJc(QEgr>R>TIyoxR=c2AT?(_*WsuRbZ#NyJikgFsYiok*+Cs5l3o~WhlrFd4 z8Iv<=#6`Ix>xMoe2?nw?)O5F<$bssd< z_n=GN58djaoO4r5=Ya^#sgPPr@AaY;pu?ew-Z1Z-15?h1|y?AE6v)K<1&e z<04~3yrVXh2s5(BI~Z*;torrjXddVdXsS1%rQU{a^$uhT>|2c=)8qE?5M7Rv%!NIl zfpM)v#=%u!##J`c!8_ju9_ zr}b+qYe45%9&I2r)nU+5heNj-3_a>dnAO)RJF>@v*u6xY{R1B(!<%6Kk~G}|{_xI| zd9IP2<1m;}(4|Iqjz=B?U21IS1mu&UOO5NCh&&#;)TGWy$a&CE`Os8Tpi52d6lZ!G zwA87c;y|7TEj7J!GV&RnQ{YV4=P~K{9%W5WcaF*Ce{GSw%bJ$*D?3l&$*Z7O)pW|D z#0L#k3r$rAU1|~R^Jvx6j5EDhcefdf{nC~4Qvc!+#XB4aIFkf8c7uSV?h@WW?Q01HJ8O>!FaA}-VkBIXfG4H3pGTa#)A#h(|O3@&`=|wsYXJV z8lz{R9|xJaAu~60seFAp`pFQ(gqAu5den4%2Kv(>ErKR7t#pHL2J@DqKMObQFdC@whDib7(-RB$9YoT_rY#QHjErV7=Rz zZOf(6#B41?tkm6btyNzR?p#9 z*FlR_)m-Eop`~upWyrTcOWmsHA%9!Xhj+k3ekgp*KuN^k5Vn01lSW}?47P};&%f=7 z+)NV@)2LdTWt&Bzzj19pTOv@B2u0eM0_1v0dk8BKsmLE`42E-6gOh)yom=V;`85k@ z=Zcds{iid=rJEt|AzeQt#;+V;Irm++8pM^G_P9d2tX zi=;*b83^26x6K$S5Z8+Z6t=DIG78&m!Z`9W1`ZxiMg|@~mcV7L@V7eyZz}inz(G1@ zsPbT>DbdWNLelDJJWDmC(seiY;mJD6cmyLLa!Q{ zT+G$skf9v9)JW)7qo7BPhF&!WW~s3-Tb&GZ)Hv9WW!YlFVUv=ZJgF{&2FLK66}$8P(dP)x2= z#X?OI%j{~7j738>g={El_D7l+!R>&8ou4#FyovZ%!FqovEWJE+8}V)JyD+j#Uu6bh z`e!Z;_EQZt!4^UTK4yvL?q;b>E~iQsKvVgkrD~x|Erf2Cj?1a+MKD_}Nv@#2mO?`< zgC@(!6{N3Eu0+2Ix>RGb9yyp?1)Cri0o`hClIRFaLO*Gu(8I#ePubQ%R!cCOg`uAY zTn}?u82V|(jc_2#L%%vqZGwZ;W_UQuLq9PCoopb_B(&67(523XUbPKosdHeqIv3`s z9mz&go(Daw0VRxlAv9P61}McP$sn3t&|)PRB%jNYtI=EzEwv}vgnV^ULgm*$LwyUH z>JSZwy^(+&m~ln~S}~)wMaQ5J$nd(qlMHdoyOV3U{a$FQ??Q{U-&!<>_z-NF1d77Z zco6fDz-8K2Y%f4!i7BJ$Hj~GaVV>i0D67dZ5Bg-Xh39w*GAKj0dL}86^k<==o=Zj# z{rLv+d~<>c8Kp|v6SyLl7)b}4AE5{yjWd(El&@@QiHm1w4m474zEDRnCaI zJjtLQ$7B2r z5-WpFIO-5?eHgcPdT|NPoNWKt!G`^6CW~@L7?HVsoj=?bWSl4s#o~!_e>`FTh-#|! z$C`o(x+i-qmC=Z;F6CK!b(lPzF`nNGDKB)XZ0J_G(4+c6uj=0!=js6HX7L(FGpJJn z@`po)eQ2_HZ9{WZrv&$phK4!@n(7;nDWG!$`V%^3_vS=ssG*$_<{u6Z*$W@+n38M@ z$y$)zFo_npcx-21u-!Ker&g8u0K4|itA-5EdPp8;a67q+^Sjf?Cv0GDgTtt z4xV=^G+E$wP_k2@iv?~6W;`8cs~Ipyo!+?#{Ta~BVs{gFn$>wGC7umURRAqj2wkeA zb2Iu{UfsapoF>&8YNmCA)O>u=>>6mX?$i`L(wU?XtfFw4Xm&tL?d&`U`6778 zgE!lmvdGBXL^5P#N=5RdFCG}xyPK5oyx56xS8_ZF6be_vo-PyT=t9N&v zhrAaa@)I5-joH;^jP7=D((c^We(l-qhKT24@hFi}0;hIb+O*4a>29|lb)HW-9)&~| zp<6uxz3S=C3wY{hp!3vu2fgx-1)JL1owdI+uw`!HddV7#%Lpj;-eptU+Nt7nO%7fj z&vtuKi@-<)8&LixoUe$ig3{L8UA(lEKTPkWpu?f5MnOxBhHhdAJ2Awu(5p^{xx^E8 zQmf-(e>F*8NHt8+7r|4YsZP}wBcBH8NfQBl9ZdIapqbY@)NYIxe&x0N{ zA9__e%u<#5GW1o@P}R^>HPBK%=vE7%N7cb>wNzhD%H@#YzPc?D@2^_6IX z&`_)OH<6p5OEp6eYx6y5BG6D#eHC&mbg6aFquTVAA-)-Ov*mdm`t8tCJM{I)=Rpq(@EedX);GdSprLj{lO4(%NqGfy zsVkwI-O3wDzXy8N)i8^7^^I7sxI%|yda`h0*e_{!7OhVFz~UagO%Q2oOIr~ACcTVv zR?4z$N?TK2TFSpm-$c3YhL-xSzL}EV0}XXAB#aL&b}(f327VCSEmp~W&>K<}iq3=ag4-K_S z--qmnF5+MJaW$yFho%V{^r-uhLy##Bvge?`kER7$^seutY1I#)SqIq|gKUiH2hp@a zORa}4dfJ0L+eZBZ^qU})p8g^77U-d0J%oI=-UqiqgMPJ-a-9b)bv|^d3!ntK_L2S~ z=%shs*o%&JOw~o)|U{jmZH*Ck}z{5ZpT|{OR@$w~lBC{&qqrDEX4^kb_ zOYjfvP^;ZrQWH(8YoteubkE2b7l!J`DC96G(dx%2{3z(AcRWU`je%a~n8zvU1ZdJb zou*W3M8A$^DU@b?9nA{;2AY*n zn)MAdekjfQCi(!BW_=5}35px>HgZJ21EUa+9-1`hJEUxbF5HNB$YCRNnl=BRCpLee zl{lHxt`c_7*i+5uw$d{RtniPxwyAz9ZaROJM;re?n)zM3nct;g!}PlpY$SBi%1?^4}k(TIom9@UYj--r27X0_iTPlYn8{T}&r{RcP`%B=PWDyUHZ5lu0)Xy!kX z^IZKWG-c3aKKm2;a_FIf|BSv`e*hOii>Cd6oa>;Q`RoJIEP-B{_CwMvgVMksl4d1z z)3kpW|O_pvBzw5t=5*vRD5v`Zds^vHyzP0zEYI-;m?_W0-&jz4v3D zb0f4=2XrxqeM}CUp@%u_W9ml+?}LwnYzT&(w$G;RQzs_(>&;HP%jQ^jGyga4%O`e2 ze?mb<=uarfNGSdJ6N)ez%Fz5NMVTntTy=6{g?9Oz+a{wMnR`d_ddTJ+?9k!O|u5=}L<7@)sIPRPibcvbP@ENu1JV)L*Zvs~5nM^Nk+`0j zr!#u(pqULNJ=6*DiB#4U;j~~51(KL{=A4=i@<~8Oob3ZA*+^A5AV2GUx^+?NVcJEh zM?#ryU6gk;lLT5rt4p9kn+`x; z1})lj0C!xe2coHm7VSF_O@lrRO(V2u<-^ddhHkp>AoL+9j_KjZVMs7uAAuaxgJB%9 z!w*fS-od2Y2&MB5CWpK07VotxcZ6f0svutl&vDLjmU;oqaw&Lm7zG+rfj3@OmzN#NHC#FB*Wh%GY(gAU(~ewmmua z{WTMQ+Q25Cq>rT9hC-PWj-=W~LYWheq=H97nfi~!D8|Bm#14+4vd2RX#^|GwCqokx zI|g|gbYW=6Q01rVZ=ji}kA<_Lfr%Z9zDOU3rWm>zHjYOwg9d}g@#HffieGm;`BXyj z?vCdf7C>Ih(EmgFI>^C5eFE}gXklC@kbapy5zTUFVO%GosfS+XhZA{zKg_|nPUKaA zfF8oVg3yhL4dH4NWTy}gz|e*mgBVnX7=tmlA;xjc6+?{U8Cr%IC*U3oF;2wvh8ROI zy_2|O92(3XCvnF%=w=Q%iTiGVSs3F`(rknV^T|-|yIBuIvqcYwTcJh7VK~3-)FaTG z1ufP`BhZ`!-K>vBqTc~!eKZRB0_Y*`FdBK69s_qngY(g2$p3O^5pftp4tt>~N(D_{TLC#p|$;b<##n?BQG)tiy^PJ4H zt$<$4a|&tdp@n%)Ax#5xW1gp=4?^)zry@5&3zM8mnl*YFnzc|o)@kI^0*T)0Q@I+2 zZVdBOuCCLkp@~5v(Rw<++5ja8Hl4C}K#TC#4D_3!xHU7#ZL2<=UnTV!=(p*aaJ!xb z&xLaGWEQ{O2`vI&vq*Unbh9*{MGm{6;}{*hUu>IIDwHaIaoR9S+It;h+2>&MVtp`x z6?MP-v)_0tt6pBSX^e$h`-|wjwj%3c+qJ@w`}JyeoI&%oHLzZ8;W&DFvQ8VLbBv&z z*|{*#mKXufkhXSrU1(PUQGTax`eBx zkZl=ViaZaBEzd!&)^lME6kDFluj+Iennlo!Ezd(<22E^v9?!oLiib8IeIqm&Ugwir z5Q^hnjy?p%e#_CUh4gz}fj+7$VJoz-*-FyHp_{?93jKP>Nj+VS+zw?|gbThM8 zlh0=8#eNr%W-GJ^;w~Uf61o{u7m(&`$OgNvAN@m$^dfi_G#FABQ4iNaIUKc!G&evu5uio3(JsW$w|jd(?-08bNkT zx{I?J_QS>%%1I4}_bXNl=0_vPek3B$u(A!xd!Ek+%fP0{ab3 zS;R0n4dYxp^r>$pg&C?>QkW4?Jhqh-X%rNXZ6&QTPS;bs@z7+@ScRMiWuWjQpQ;<+ zbSMjf27WtJH=>yZWuRz8QwU`t5I|q5gK!R%qq#4(d|6J&zF=OcGLGfu~+^ZaV@oZu=ewB`MwHlfqGE1!IxAl4hnpIHVJ8VY|=#4N4ExeqK zJWsRkKof$prtd%#hHku^P3WUgW{ESAW6;C=uo<~sZ-E=3!JM##J8prprMHC~lF*G) zy@h9!;iwPmzm|BayGz_gx;qO!IoI74rjsauECd&Y0*Pk4EnagS#N`G_n)VwqPZy-z zhW(avsgpp>a$uS9fj2+x4B3D{oEr=^HA@_!xLvT3BQlsJmRA_%O;lnCtu@>>ZAuxA z#t6NY3KqO zMlOJ|6MQzmDuxoyJ)7p3tG98r44N3#Hqy_BZj5RhCQ$*i87IymO%*gSr|rlKA+IDr z7vscs@>vSKn9z29wH)T)Vr*xMu7{ilg#9s|?X1*R!^1I~?Z%Oq&35BxoQv(ou^7yD zR&7yuJPyUV+@%fjPoE}af3!6bP7N%w)8GA`vABU5?>nSSqUXtz{l@+rIjT_7&g%nl zPE*<@kQy%bKXbC5={Va}y}6&gxB3psIa2SSPRBqCXL1K^a5D7J_B*KA@i3RRKaUET zqR)q?K-u}f0Qod%(&`tG{&c+)%^CVaI1@_v{vza3eKDL1W!-);`B&&m&{RPQ*Hw{Avl5CDCs5E1}Eo0+$+#*gyJ+_iT+F|`;p&7-U?;yy$87y%Bp)0 zDYxmX(3}G~iUVD^h*zUI56TMsYBW2c8+Y*<^cO=5NAX(Z-O$6%|F@98sjq{3pnyktd}0NUyW6>_5-;))7w9 z*Hi67p}0xcQ|%+6xJlPj;iI7hwywuG$LSkrrb+rnmAQbrbFKkH$mw>_j7fN z{yv(mP&(1~(RAtu(3}OOD?Nbb94G;-2hs0<(tUn_d;ydI)(??)>4)HMC;_a8D8-df z0$2}`!yf47$jn2ezZN<%hJ$ww`Tj;CuV??jPVLWP9OxU0-Is=f;Xt0ahjyZjp5Yw9 zvQ3qkOSgGC`kv?3dpF5_6mh8DM-fLrG0A-tZWI)g+-IBQKHDT8rb_bkk6=EOh5jSR zQ=#mc8=>sEJx>mspoHz8C;e7wGpRRueXF>ye_!YSo>R+QNf?^LZAsLv$M85`?K^OM$8qZm;e}iU~{w-{PVhO)R zzgoYJrb)j6o1r-KZ*X<3eiKa?(ubggEZ;)Y3dOO13r!qK_~&i(>!F2v{|++S?&Q2# zzl*$8zXvrm7;@g@nYTfU!R9@3*bd#y+wYP7Jm_Vxc`r4u_HEdh+^hXembZ<1?*62$ z2KPHPfM8`QX>ykVrN@-CZB71vHL3Thj+6BJRL5{ACiOlQF%pVNy>FY;`?g8Fk4cS1 z(;rvxcT{Db{yofxGSK`1c`9@<>-`b=4E-lK3(6MGpUAUF{~1j&lr5YOkmo{~?> zhcd+c1-Tl^y743AS}5zrkGRVsD6`u~6hAw8bkI{$qCumyqr!Wd-F8dUHT>l+SLVpI^phOWr<7&J99L+{3hd@6^bEf_R z&1T3~9H1Nm{eq`T>VKd=3tE`hKatOYVp9J?zCeEocS3_G_?MJu7qpngz9ffBp_{qv zOVVEsz07D|(vkMSz8?9MMM%oOlb0jA*B}|gm<&m*P1EmNXNI79U6kO}b$?Q&Ye37D zPcfxeD5YV4lRecP5ap0)hkQIDy?n8qx~|jP2fV@6+e|oAe?`R&gK}2+D=Ka@lu*Z4 zRM14NOd0KzDQi<@%Gy+!vNly_7N*IM81uM@ftvg?Q(MThpsY_^$fep1=R#SZxJ_}t zJZP$+oSpQT9?a2;rVdH~!;5~Y&O);c%3PO?Tn}ZI%Rvr6Id+hX+yuo0bIExP^fI>f zLm!3)=Gc#`Q7GFn{dneeFb8w&PntH!OXyI>wgG55poA_4px+F|5C@{)3dOY=NN%0_ zFf?aDajgzRa}E^OY7qJzP+Y6SkuQMaS{;GBOAm&-p}1Cq$^S|yuGL_2*aOA28ch0Y zVPEIi4AYe5vGe*qQCfMiA}HT?OHYNFhbg;)WtoAIZX3BvAIY=sg(eZ^qj>szAs-Ea zZsN>G@vQgjqtQR0kAV+DgYP9BLwO$3-#{blr-L8oGs+;{%PE8Nw)%hWIoYzNPamV+ zzxSj|-&NvtPs%L%0B22l2ax ztcSo4ps7BDmikDagywHhKAkia`4h;8NT7T`X(;#o40_c+^f0dWtqB?f{=j-?s+HHC zy59q_1Lb^E?Z63_c~efs_1Z!*_;tMo(mk|gjCZo6O}{h3G@UwMC#&U@58or$lG#|P zWvcx$#{OZOjJHqH4Nc42?_Q-`!SqY9-OZbpczR>n(I~vM2AckY}W1+mi zF`Q-{2jz6$aGG_J9zlhlqDR81&}6|n3VAw|c-?5^0zC#6K|_^5*~}h`rVL7S?quXj z$Ol89#rSwKzpa5@rt5KBt%EXYk3+v0O5|o7Pqkc+=juu*AC?=>ZyTWaffLXNpsWZc zpji#&AkPGT)eOCio)aj`TA0naIg#`&P&~tlq;G|8#?6VOj6vE7${0G)%w-InNDXYz zllWDK&V!pYA4y>{&nLIdFo!X8G8zpH#?Z+;|2EB6*cdmbpxF*hyu>Noafdzy{dv%0 z^gM;T@6=P#TnH_u_o-+ufqZvKPeXqxw3ygWMZN-hi0+(*e2tzCuZ6sA3r!+D(@A*~ zbP?m3P7b#~50ReflI zy|+$4u%?=?nnV)vQk)EW&7p8WjOqRL58-#yx|k zouE&r67%&La59vW8Z(inK{=^03wfrV4QE3`6+(%?6rd@E@zOvn-98i1d6!2NEdT;F_d^qF;|yDIki#D)s?!0tM$;pFD)TWBa}!>32B<3 zm~|;>LNFVrpp-^ktLLBzLwPxAE^@0bgX^FKD$BS_LeE3f2IcjMd1%_9oHL$}eiM{< zOF8luD6dacAfK%(;WlVs(3L#Tb||J?Ne&l4d3~ai^cO-e?m#7`whQ*v)Nnr=+ESmo z>7M1|PEP+Cg-03ztWl%Om7m{tD!8ZS0K0Ol`sM&2)>eX#i6{8u#z2Wxibdxq1aOaDV-z zze+ctxf;snZ5pVr>!C$RzJXue2)zv24U9&&>PAxjceN%SG2hu^@Wi2!onSt-m+B>{ zT9c(*YShJJNPW9RDuOLhzJ_7<1^K*z-9dQsy{auywL0Z@^3js6&%8dU0~F{7&{98y zF11ewdHjc=p&o&9@F9pHJqEq%ahR>1fH~?(y_%FyK|?*On~KHPc@#MfZJa=Imp8VN*M_&VFuQY+o z);m}0phRig&@6_sHPD8JO?NbGx}#y!9ZfxSGm!9FJOjxF^a0(D9E2XGs*T8Nbq8dl zox4P!$@J7g${3XCse>HW!@dq4_$YyJDg=A@fqs4df8(ZPbeJB#da6w`Cz2kXOLt#M zOB}w~M9GIiIef8+l8=IN_+k@vGzQ9nyiE)S4mmxY9ddg58htLBwNRXr9muWvJh%>u zQ*s`^O6c>^v_Wx7&PUS@#VNS}{U#_*$xh@gP@IwrkpS zP@IyBNPiKOcRDZPsroizWLlNH0=?gAv4m3+sUf1LpWDL)&gKA_46Kez%XUx?BeAU~ z)5lE@8NJzB+K@7iUfiTFrV4I{d=V9TI6ij?Rr6iF3*HM2LK(ZLjtBH^G!H@-L-uYo z4?!;j_in1@VVJ{-wcQxs8|>r2V`X=tfupj-VI%IC!{Bh7QrV&J}vJfGK> zqj>>Z4BVHa`301L`wH~Gh8A&yE0JG;9%2RGM1Di>fp0>CSiv6d^$wKJj_u*MhtOcD zb2RcA?tTq+;5lEK@87QNdo101Tj+N$=X*{B`!CkNwn@L%!yKxwqE?1MiL+ltt&D-;wrrDlc8+gTxIrWlDL{0ovg2cQy`yM(bpoM3gt5k-$I_HuY(0p4%b{q zO_%EH(aeEvJj@%A%b{%I-N1dTplssZz#V=1My}RE6F>7t^mR~PqPvl&TB>j2>T)Ot z?{4C^_0Yw{a5H*8lx6zOXjVg6&)m$fnxU8B;%3Sch6FhDEu@b^i$UWS(#IeT2E7a# zw~%r@%w}nR3zmDPzLoTw^=)tq%qFCH8~UWa9nD$LV9>aoXFgYd8_f=V2RskTLi`T$ z->L6Jb0L(4_?>7jfwB<)4*E->EX40Zz5>cZ{BGoH^j>%^l!f?S^1mL+LVPbd+ze$Q zzL)g3LRpCK<;m}WeO(>3^1og*rdCICf<5CSc7}aQHAA7)@%p!Hc4+IURuWsMfXs~p-{qD_fYF2p=@&BLw%2iay<23DquV`SnuCU z%8AfoYP}DAK9p1L_t6@s=p!AjRBhQ4UD$oxg7ebdR)ej=i)jxpqpg~{x z0r^zwAEK#(^0|bEkbO{`sC~$bpse@zp;-!LrT;McdT7!=9!Arke}pCg4SLBV$g3fz z_MmJ6Jc?!wluhnO(X{Bt&_tm0lE=`j(~qNxL78A5N7Dwyt$G4|JCtqjCy_Tn+3%|1C`Xc>CWrH&o2m6_>Qij#;6vW=M*bfP$C~Vyc@nArnj+&2vrM6> z)f}^9m$RM4o3Hk|-JkGhSWL<+oX@k`fuXd;q|G8@ay&^tLxF}uF_32{&`2l-@(e{E z4aGp7rRd|KoL~MiavpSH4nIMjrk{hSK?ASrIevSF{wbQ7P!8t&47m`Rsu)_T1j^~e z=h2rzIi2`Cxy^?X|9qZ1RzNwP^8#rW=%2$H{UY>1IhgYz>Fe|_&@6)TV$UzoEY-h6 zvkZz)_DeJ?p}d#;EA)OShh2Y-9Dp*UzJ$C+zYNzx*(-XP=V^tq1O75O#G&kfznp5= zgO3WX4n-QGsliBIS^PI&XHGS)v?^`9|FMStvZs;$7_%MJcHX(^(c<=}jnP#3(u-4P zkzUi#mPj|h$Nqmz@}_>xz;Tj(#kPi5sD%;8VhyiQ3!|X;;IA-gjMJ}DU*n<4aPcZ> zCPH}~=2hA(4`wrHyvlGf8TMnic#ZVapuq(D8tJF&-=LWR4K-W;7P(lz4ojekWxRo0 z2Km2$^qa_)P`+C97IF=g7h&GwdFu4rXcj@)wtfeB8I;|^caiI%{MRb)qG^C~65>7d zA;_o0ph>I0$JH?8B(Hv-t5GNe#rx#BPX7)~49Y<9JJKYee8=eb=+{Geh3gN<8}%Py z2Q-*q|Af318pON*jGTmgT@uPZ;h)KQJIrR#_<*bDLwR}YL*!jhzFPDl&vrSKuNHmC z)hnT!9l{T}`&BTDaLI?%?KQAJQ|pK30H)Tz@T;5jN91#}{$F@2wD{P`Uy*Nz7Vhs~ z$?Z<)R^QQoLw`4vFA05&d=HfUyibrH(4WEwp@A#>DLFp`E!^Kv$>9+w(Th(>|2XvG z3V%w8`sR%G-a{miH96ntS~$qpAk&; z*+caglzJGHHS!mfcMRn7`B1{DU)W>z7g))7WO?243#??4{s(n3MgJ3?0_BA9zmQLZ zGLe6YJQGTv{0g}c8mbtI>q{Vqo~bN(O+i`mRWSoi1(Y2s9)X@|BKx46S3+c*wk$bI zZt=$w?LxB@N^sRhn&sM!W(73qv2OGY+JhzlWoq}3CZxS+)<7AXvydZDJ_nMG9D}q1 z%%W#zTiNu<9P}G?F6_|#;3g=m<9_6}1$?U>3b}FwgUUd66Xe literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ino b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ino new file mode 100755 index 0000000000000000000000000000000000000000..204d8ea0f364524a444de8aa4c839fbdfb40413c GIT binary patch literal 58611 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 z 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ins b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.ins new file mode 100755 index 0000000000000000000000000000000000000000..759009b5c8462f5f1b617fb9f202c2e638ce4bc4 GIT binary patch literal 57122 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 U?Y7{S!vK%H{K_l&d*#Ca2lRel4gdfE literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.obs b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.obs new file mode 100755 index 0000000000000000000000000000000000000000..5fcfcb62c4e70338ce55aab3c89149f351d7f4c1 GIT binary patch literal 65611 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 MQd<)aB(wnj4?UUG^8f$< literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.rul b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.rul new file mode 100755 index 00000000000..df143b493c4 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Script Files/Setup.rul @@ -0,0 +1,640 @@ + +//////////////////////////////////////////////////////////////////////////////// +// +// IIIIIII SSSSSS +// II SS InstallShield (R) +// II SSSSSS (c) 1996-1997, InstallShield Software Corporation +// II SS (c) 1990-1996, InstallShield Corporation +// IIIIIII SSSSSS All Rights Reserved. +// +// +// This code is generated as a starting setup template. You should +// modify it to provide all necessary steps for your setup. +// +// +// File Name: Setup.rul +// +// Description: InstallShield script +// +// Comments: This template script performs a basic setup on a +// Windows 95 or Windows NT 4.0 platform. With minor +// modifications, this template can be adapted to create +// new, customized setups. +// +//////////////////////////////////////////////////////////////////////////////// + + + // Include header file +#include "sdlang.h" +#include "sddialog.h" + +////////////////////// string defines //////////////////////////// + +#define UNINST_LOGFILE_NAME "Uninst.isu" + +//////////////////// installation declarations /////////////////// + + // ----- DLL prototypes ----- + + + // your DLL prototypes + + + // ---- script prototypes ----- + + // generated + prototype ShowDialogs(); + prototype MoveFileData(); + prototype HandleMoveDataError( NUMBER ); + prototype ProcessBeforeDataMove(); + prototype ProcessAfterDataMove(); + prototype SetupRegistry(); + prototype SetupFolders(); + prototype CleanUpInstall(); + prototype SetupInstall(); + prototype SetupScreen(); + prototype CheckRequirements(); + prototype DialogShowSdWelcome(); + prototype DialogShowSdShowInfoList(); + prototype DialogShowSdAskDestPath(); + prototype DialogShowSdSetupType(); + prototype DialogShowSdComponentDialog2(); + prototype DialogShowSdFinishReboot(); + + // your prototypes + + + // ----- global variables ------ + + // generated + BOOL bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup; + STRING svDir; + STRING svName, svCompany, svSerial; + STRING szAppPath; + STRING svSetupType; + + + // your global variables + + +/////////////////////////////////////////////////////////////////////////////// +// +// MAIN PROGRAM +// +// The setup begins here by hiding the visible setup +// window. This is done to allow all the titles, images, etc. to +// be established before showing the main window. The following +// logic then performs the setup in a series of steps. +// +/////////////////////////////////////////////////////////////////////////////// +program + Disable( BACKGROUND ); + + CheckRequirements(); + + SetupInstall(); + + SetupScreen(); + + if (ShowDialogs()<0) goto end_install; + + if (ProcessBeforeDataMove()<0) goto end_install; + + if (MoveFileData()<0) goto end_install; + + if (ProcessAfterDataMove()<0) goto end_install; + + if (SetupRegistry()<0) goto end_install; + + if (SetupFolders()<0) goto end_install; + + + end_install: + + CleanUpInstall(); + + // If an unrecoverable error occurred, clean up the partial installation. + // Otherwise, exit normally. + + if (bInstallAborted) then + abort; + endif; + +endprogram + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ShowDialogs // +// // +// Purpose: This function manages the display and navigation // +// the standard dialogs that exist in a setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ShowDialogs() + NUMBER nResult; + begin + + Dlg_Start: + // beginning of dialogs label + + Dlg_SdWelcome: + nResult = DialogShowSdWelcome(); + if (nResult = BACK) goto Dlg_Start; + + Dlg_SdShowInfoList: + nResult = DialogShowSdShowInfoList(); + if (nResult = BACK) goto Dlg_SdWelcome; + + Dlg_SdAskDestPath: + nResult = DialogShowSdAskDestPath(); + if (nResult = BACK) goto Dlg_SdShowInfoList; + + Dlg_SdSetupType: + nResult = DialogShowSdSetupType(); + if (nResult = BACK) goto Dlg_SdAskDestPath; + + Dlg_SdComponentDialog2: + if ((nResult = BACK) && (svSetupType != "Custom") && (svSetupType != "")) then + goto Dlg_SdSetupType; + endif; + nResult = DialogShowSdComponentDialog2(); + if (nResult = BACK) goto Dlg_SdSetupType; + + return 0; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessBeforeDataMove // +// // +// Purpose: This function performs any necessary operations prior to the // +// actual data move operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessBeforeDataMove() + STRING svLogFile; + NUMBER nResult; + begin + + InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY ); + + svLogFile = UNINST_LOGFILE_NAME; + + nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 ); + if (nResult < 0) then + MessageBox( @ERROR_UNINSTSETUP, WARNING ); + endif; + + szAppPath = TARGETDIR; // TODO : if your application .exe is in a subdir of TARGETDIR then add subdir + + if ((bIs32BitSetup) && (bIsShellExplorer)) then + RegDBSetItem( REGDB_APPPATH, szAppPath ); + RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY ); + RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME ); + endif; + + // TODO : update any items you want to process before moving the data + // + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: MoveFileData // +// // +// Purpose: This function handles the data movement for // +// the setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function MoveFileData() + NUMBER nResult, nDisk; + begin + + nDisk = 1; + SetStatusWindow( 0, "" ); + Disable( DIALOGCACHE ); + Enable( STATUS ); + StatusUpdate( ON, 100 ); + nResult = ComponentMoveData( MEDIA, nDisk, 0 ); + + HandleMoveDataError( nResult ); + + Disable( STATUS ); + + return nResult; + + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: HandleMoveDataError // +// // +// Purpose: This function handles the error (if any) during the move data // +// operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function HandleMoveDataError( nResult ) + STRING szErrMsg, svComponent , svFileGroup , svFile; + begin + + svComponent = ""; + svFileGroup = ""; + svFile = ""; + + switch (nResult) + case 0: + return 0; + default: + ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult ); + szErrMsg = @ERROR_MOVEDATA + "\n\n" + + @ERROR_COMPONENT + " " + svComponent + "\n" + + @ERROR_FILEGROUP + " " + svFileGroup + "\n" + + @ERROR_FILE + " " + svFile; + SprintfBox( SEVERE, @TITLE_CAPTIONBAR, szErrMsg, nResult ); + bInstallAborted = TRUE; + return nResult; + endswitch; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessAfterDataMove // +// // +// Purpose: This function performs any necessary operations needed after // +// all data has been moved. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessAfterDataMove() + begin + + // TODO : update self-registered files and other processes that + // should be performed after the data has been moved. + + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupRegistry // +// // +// Purpose: This function makes the registry entries for this setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupRegistry() + NUMBER nResult; + + begin + + // TODO : Add all your registry entry keys here + // + // + // RegDBCreateKeyEx, RegDBSetKeyValueEx.... + // + + nResult = CreateRegistrySet( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// +// Function: SetupFolders +// +// Purpose: This function creates all the folders and shortcuts for the +// setup. This includes program groups and items for Windows 3.1. +// +/////////////////////////////////////////////////////////////////////////////// +function SetupFolders() + NUMBER nResult; + + begin + + + // TODO : Add all your folder (program group) along with shortcuts (program items) + // + // + // CreateProgramFolder, AddFolderIcon.... + // + + nResult = CreateShellObjects( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CleanUpInstall // +// // +// Purpose: This cleans up the setup. Anything that should // +// be released or deleted at the end of the setup should // +// be done here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CleanUpInstall() + begin + + + if (bInstallAborted) then + return 0; + endif; + + DialogShowSdFinishReboot(); + + if (BATCH_INSTALL) then // ensure locked files are properly written + CommitSharedFiles(0); + endif; + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupInstall // +// // +// Purpose: This will setup the installation. Any general initialization // +// needed for the installation should be performed here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupInstall() + begin + + Enable( CORECOMPONENTHANDLING ); + + bInstallAborted = FALSE; + + if (bIs32BitSetup) then + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME ^ @PRODUCT_NAME; + else + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME16 ^ @PRODUCT_NAME16; // use shorten names + endif; + + TARGETDIR = svDir; + + SdProductName( @PRODUCT_NAME ); + + Enable( DIALOGCACHE ); + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupScreen // +// // +// Purpose: This function establishes the screen look. This includes // +// colors, fonts, and text to be displayed. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupScreen() + begin + + Enable( FULLWINDOWMODE ); + Enable( INDVFILESTATUS ); + SetTitle( @TITLE_MAIN, 24, WHITE ); + + SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text. + + Enable( BACKGROUND ); + + Delay( 1 ); + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CheckRequirements // +// // +// Purpose: This function checks all minimum requirements for the // +// application being installed. If any fail, then the user // +// is informed and the setup is terminated. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CheckRequirements() + NUMBER nvDx, nvDy, nvResult; + STRING svResult; + + begin + + bWinNT = FALSE; + bIsShellExplorer = FALSE; + + // Check screen resolution. + GetExtents( nvDx, nvDy ); + + if (nvDy < 480) then + MessageBox( @ERROR_VGARESOLUTION, WARNING ); + abort; + endif; + + // set 'setup' operation mode + bIs32BitSetup = TRUE; + GetSystemInfo( ISTYPE, nvResult, svResult ); + if (nvResult = 16) then + bIs32BitSetup = FALSE; // running 16-bit setup + return 0; // no additional information required + endif; + + // --- 32-bit testing after this point --- + + // Determine the target system's operating system. + GetSystemInfo( OS, nvResult, svResult ); + + if (nvResult = IS_WINDOWSNT) then + // Running Windows NT. + bWinNT = TRUE; + + // Check to see if the shell being used is EXPLORER shell. + if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then + if (nvResult >= 4) then + bIsShellExplorer = TRUE; + endif; + endif; + + elseif (nvResult = IS_WINDOWS95 ) then + bIsShellExplorer = TRUE; + + endif; + +end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdWelcome // +// // +// Purpose: This function handles the standard welcome dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdWelcome() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdWelcome( szTitle, szMsg ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdShowInfoList // +// // +// Purpose: This function displays the general information list dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdShowInfoList() + NUMBER nResult; + LIST list; + STRING szTitle, szMsg, szFile; + begin + + szFile = SUPPORTDIR ^ "infolist.txt"; + + list = ListCreate( STRINGLIST ); + ListReadFromFile( list, szFile ); + szTitle = ""; + szMsg = " "; + nResult = SdShowInfoList( szTitle, szMsg, list ); + + ListDestroy( list ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdAskDestPath // +// // +// Purpose: This function asks the user for the destination directory. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdAskDestPath() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 ); + + TARGETDIR = svDir; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdSetupType // +// // +// Purpose: This function displays the standard setup type dialog. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdSetupType() + NUMBER nResult, nType; + STRING szTitle, szMsg; + begin + + switch (svSetupType) + case "Typical": + nType = TYPICAL; + case "Custom": + nType = CUSTOM; + case "Compact": + nType = COMPACT; + case "": + svSetupType = "Typical"; + nType = TYPICAL; + endswitch; + + szTitle = ""; + szMsg = ""; + nResult = SetupType( szTitle, szMsg, "", nType, 0 ); + + switch (nResult) + case COMPACT: + svSetupType = "Compact"; + case TYPICAL: + svSetupType = "Typical"; + case CUSTOM: + svSetupType = "Custom"; + endswitch; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdComponentDialog2 // +// // +// Purpose: This function displays the custom component dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdComponentDialog2() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + if ((svSetupType != "Custom") && (svSetupType != "")) then + return 0; + endif; + + szTitle = ""; + szMsg = ""; + nResult = SdComponentDialog2( szTitle, szMsg, svDir, "" ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdFinishReboot // +// // +// Purpose: This function will show the last dialog of the product. // +// It will allow the user to reboot and/or show some readme text. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdFinishReboot() + NUMBER nResult, nDefOptions; + STRING szTitle, szMsg1, szMsg2, szOption1, szOption2; + NUMBER bOpt1, bOpt2; + begin + + if (!BATCH_INSTALL) then + bOpt1 = FALSE; + bOpt2 = FALSE; + szMsg1 = ""; + szMsg2 = ""; + szOption1 = ""; + szOption2 = ""; + nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); + return 0; + endif; + + nDefOptions = SYS_BOOTMACHINE; + szTitle = ""; + szMsg1 = ""; + szMsg2 = ""; + nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 ); + + return nResult; + end; + + // --- include script file section --- + +#include "sddialog.rul" + + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt b/VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt new file mode 100755 index 00000000000..c91cb20740d --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt @@ -0,0 +1,25 @@ +This is a release of MySQL 4.0.11a-gamma for Win32. + +NOTE: If you install MySQL in a folder other than +C:\MYSQL or you intend to start MySQL on NT/Win2000 +as a service, you must create a file named C:\MY.CNF +or \Windows\my.ini or \winnt\my.ini with the following +information:: + +[mysqld] +basedir=E:/installation-path/ +datadir=E:/data-path/ + +After your have installed MySQL, the installation +directory will contain 4 files named 'my-small.cnf, +my-medium.cnf, my-large.cnf, my-huge.cnf'. +You can use this as a starting point for your own +C:\my.cnf file. + +If you have any problems, you can mail them to +win32@lists.mysql.com after you have consulted the +MySQL manual and the MySQL mailing list archive +(http://www.mysql.com/documentation/index.html) + +On behalf of the MySQL AB gang, +Michael Widenius \ No newline at end of file diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp b/VC++Files/InstallShield/4.0.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp new file mode 100755 index 0000000000000000000000000000000000000000..3229d50c9bfcabefefb1341fda098d20bcc734b1 GIT binary patch literal 15694 zcmeI3JB%Ae7{@=K-(K76_xXH&Oi7uF4k@AsrK3$jjnYv@G&D%0il|5m3XnjGA{wMf zL_$gf5>dL)5Cs$g3Mf1j1%y!e9<#Hv>lu6R&bNC-MzTHL8PERqKl43y_U_f!UVjC+ zyj%fz32PtY>kWLBpuxxK?R+3FJjmtqYZu|WZ*RcE`?ulUHv!&%s|Q!#R`B6F=isCF z&ckO{FTkx&F2PqfFT>ZjuE4!J*Wu?M?!xcCK7eOWpTLDLet}DOegpX60rajt1ohF6 zaPHGbaQ@~`aPiB>aQT}jaOK_~aQ*&YaO3-@aQo3Sxcm4Yc<|@H@Z|6R;Q90C0`lVh zg#s@W$Xx-Iz0}KVrP>I(*#|g5PdLJF9h?MS&x3RaoaIXA2p4(N7hE}BaV%I}cL;-qtVlj;-e}&Za^l2$Z)OHw_D6{(`O=TtSF@fhgG48#CUZ5I z4yV%;XV*{|iEYl7X*P&l@o}PΞYl3Pc*AWK<5_&B8evjnkZ9&L1hLEKZN3FPHtC zgCT>?5;ECe7}VFS7UP5EU_2Y7IJ*Y3T#lkl%-NFG1}ZO3c5Stn=?H{M=3C@t0UsXOLL1Rv?)sh2j;#7Uc!oV)f#O2xiD zE2oZ)!+pu!@cmHdAUoAF7Leq`#FY7(+4U4TM^10OLp^0dM#+bYeSNGaI{~k~3kxqt zxl-$WcbsD24Qp)i^?|)U>sU}>yL9MSog#v;aGGX!;QEO&v7T$E zPaHT!&ae?^&Irmrv!Gj^)NWj_3ukc$>f{1s;@8{c_Q}f`(v2f; zUxCan!Bk?WB!Y&qpi!98O1nSy9UOSbikxd5l;a=PPBqbiXYHqRLtOqP!C}X zK_KR|rPpbbhqcYmO1kKs*y@YnEHxUu?T5ZRHfe_@K_v>4g>X{t!`VcwoX&l0*buYL zn%>4Ng0n<6OtGf9@d+6{D$vor5PL@#4v5;II~yzF*h(tZX=1KqrA7tl8DQdzn=f@$ z$CtBo2@`Fq~%*lrvfEPylc z_#-C8OvNxZ6C3-JN%Hw7~(%ITmJ|$;bPq z7noXZ6%3i4bD@tEAR!PIiA;39M0e2K&!p`kHC|5(v1i{ zCh`{Wwwz8w)gu~O*Tz2|&Y2UpU!4I5U6R*zvS2xL;!cfgo(R+Hl8WFo)1Fw1gtPi^BL1w{geV-aho6HBV0Tk*Q3+gPELuAnYZSh8#I@A1)afyR literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Shell Objects/Default.shl b/VC++Files/InstallShield/4.0.XX-gpl/Shell Objects/Default.shl new file mode 100755 index 00000000000..187cb651307 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Shell Objects/Default.shl @@ -0,0 +1,12 @@ +[Data] +Folder3= +Group0=Main +Group1=Startup +Folder0= +Folder1= +Folder2= + +[Info] +Type=ShellObject +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/String Tables/0009-English/value.shl b/VC++Files/InstallShield/4.0.XX-gpl/String Tables/0009-English/value.shl new file mode 100755 index 00000000000..ccd18e688eb --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/String Tables/0009-English/value.shl @@ -0,0 +1,23 @@ +[Data] +TITLE_MAIN=MySQL Servers and Clients 4.0.11a-gamma +COMPANY_NAME=MySQL AB +ERROR_COMPONENT=Component: +COMPANY_NAME16=Company +PRODUCT_VERSION=MySQL Servers and Clients 4.0.11a-gamma +ERROR_MOVEDATA=An error occurred during the move data process: %d +ERROR_FILEGROUP=File Group: +UNINST_KEY=MySQL Servers and Clients 4.0.11a-gamma +TITLE_CAPTIONBAR=MySQL Servers and Clients 4.0.11a-gamma +PRODUCT_NAME16=Product +ERROR_VGARESOLUTION=This program requires VGA or better resolution. +ERROR_FILE=File: +UNINST_DISPLAY_NAME=MySQL Servers and Clients 4.0.11a-gamma +PRODUCT_KEY=yourapp.Exe +PRODUCT_NAME=MySQL Servers and Clients 4.0.11a-gamma +ERROR_UNINSTSETUP=unInstaller setup failed to initialize. You may not be able to uninstall this product. + +[General] +Language=0009 +Type=STRINGTABLESPECIFIC +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/String Tables/Default.shl b/VC++Files/InstallShield/4.0.XX-gpl/String Tables/Default.shl new file mode 100755 index 00000000000..d4dc4925ab1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/String Tables/Default.shl @@ -0,0 +1,74 @@ +[TITLE_MAIN] +Comment= + +[COMPANY_NAME] +Comment= + +[ERROR_COMPONENT] +Comment= + +[COMPANY_NAME16] +Comment= + +[PRODUCT_VERSION] +Comment= + +[ERROR_MOVEDATA] +Comment= + +[ERROR_FILEGROUP] +Comment= + +[Language] +Lang0=0009 +CurrentLang=0 + +[UNINST_KEY] +Comment= + +[TITLE_CAPTIONBAR] +Comment= + +[Data] +Entry0=ERROR_VGARESOLUTION +Entry1=TITLE_MAIN +Entry2=TITLE_CAPTIONBAR +Entry3=UNINST_KEY +Entry4=UNINST_DISPLAY_NAME +Entry5=COMPANY_NAME +Entry6=PRODUCT_NAME +Entry7=PRODUCT_VERSION +Entry8=PRODUCT_KEY +Entry9=ERROR_MOVEDATA +Entry10=ERROR_UNINSTSETUP +Entry11=COMPANY_NAME16 +Entry12=PRODUCT_NAME16 +Entry13=ERROR_COMPONENT +Entry14=ERROR_FILEGROUP +Entry15=ERROR_FILE + +[PRODUCT_NAME16] +Comment= + +[ERROR_VGARESOLUTION] +Comment= + +[ERROR_FILE] +Comment= + +[General] +Type=STRINGTABLE +Version=1.00.000 + +[UNINST_DISPLAY_NAME] +Comment= + +[PRODUCT_KEY] +Comment= + +[PRODUCT_NAME] +Comment= + +[ERROR_UNINSTSETUP] +Comment= + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Build.tsb b/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Build.tsb new file mode 100755 index 00000000000..3949bd4c066 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Build.tsb @@ -0,0 +1,56 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key6= +Key7= +Key8= +Key9= + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + diff --git a/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Setup.tsb b/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Setup.tsb new file mode 100755 index 00000000000..b0c5a509f0b --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-gpl/Text Substitutions/Setup.tsb @@ -0,0 +1,76 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key10= +Key6= +Key11= +Key7= +Key12= +Key8= +Key13= +Key9= + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/4.0.XX-pro.ipr b/VC++Files/InstallShield/4.0.XX-pro/4.0.XX-pro.ipr new file mode 100755 index 00000000000..bfa7a082873 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/4.0.XX-pro.ipr @@ -0,0 +1,52 @@ +[Language] +LanguageSupport0=0009 + +[OperatingSystem] +OSSupport=0000000000010010 + +[Data] +CurrentMedia=New Media +CurrentComponentDef=Default.cdf +ProductName=MySQL Servers and Clients +set_mifserial= +DevEnvironment=Microsoft Visual C++ 6 +AppExe= +set_dlldebug=No +EmailAddresss= +Instructions=Instructions.txt +set_testmode=No +set_mif=No +SummaryText= +Department= +HomeURL= +Author= +Type=Database Application +InstallRoot=D:\MySQL-Install\4.0.xpro +Version=1.00.000 +InstallationGUID=40744a4d-efed-4cff-84a9-9e6389550f5c +set_level=Level 3 +CurrentFileGroupDef=Default.fdf +Notes=Notes.txt +set_maxerr=50 +set_args= +set_miffile=Status.mif +set_dllcmdline= +Copyright= +set_warnaserr=No +CurrentPlatform= +Category= +set_preproc= +CurrentLanguage=English +CompanyName=MySQL +Description=Description.txt +set_maxwarn=50 +set_crc=Yes +set_compileb4build=No + +[MediaInfo] +mediadata0=New Media/ + +[General] +Type=INSTALLMAIN +Version=1.10.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.cdf b/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.cdf new file mode 100755 index 00000000000..48d37800cd1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.cdf @@ -0,0 +1,192 @@ +[Development] +required0=Servers +SELECTED=Yes +FILENEED=STANDARD +required1=Grant Tables +HTTPLOCATION= +STATUS=Examples, Libraries, Includes and Script files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=Examples, Libraries, Includes and Script files +DISPLAYTEXT=Examples, Libraries, Includes and Script files +IMAGE= +DEFSELECTION=Yes +filegroup0=Development +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Grant Tables] +required0=Servers +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The Grant Tables and Core Files +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The Grant Tables and Core Files +DISPLAYTEXT=The Grant Tables and Core Files +IMAGE= +DEFSELECTION=Yes +filegroup0=Grant Tables +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Clients and Tools +INSTALLATION=NEVEROVERWRITE +requiredby2=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Components] +component0=Development +component1=Grant Tables +component2=Servers +component3=Clients and Tools +component4=Documentation + +[TopComponents] +component0=Servers +component1=Clients and Tools +component2=Documentation +component3=Development +component4=Grant Tables + +[SetupType] +setuptype0=Compact +setuptype1=Typical +setuptype2=Custom + +[Clients and Tools] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL clients and Maintenance Tools +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL clients and Maintenance Tools +DISPLAYTEXT=The MySQL clients and Maintenance Tools +IMAGE= +DEFSELECTION=Yes +filegroup0=Clients and Tools +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=NEWERDATE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[Servers] +SELECTED=Yes +FILENEED=CRITICAL +HTTPLOCATION= +STATUS=The MySQL Servers +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Servers +DISPLAYTEXT=The MySQL Servers +IMAGE= +DEFSELECTION=Yes +filegroup0=Servers +requiredby0=Development +COMMENT= +INCLUDEINBUILD=Yes +requiredby1=Grant Tables +INSTALLATION=ALWAYSOVERWRITE +requiredby2=Clients and Tools +requiredby3=Documentation +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + +[SetupTypeItem-Compact] +Comment= +item0=Grant Tables +item1=Servers +item2=Clients and Tools +item3=Documentation +Descrip= +DisplayText= + +[SetupTypeItem-Custom] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Info] +Type=CompDef +Version=1.00.000 +Name= + +[SetupTypeItem-Typical] +Comment= +item0=Development +item1=Grant Tables +item2=Servers +item3=Clients and Tools +Descrip= +item4=Documentation +DisplayText= + +[Documentation] +required0=Servers +SELECTED=Yes +FILENEED=HIGHLYRECOMMENDED +required1=Grant Tables +HTTPLOCATION= +STATUS=The MySQL Documentation with different formats +UNINSTALLABLE=Yes +TARGET= +FTPLOCATION= +VISIBLE=Yes +DESCRIPTION=The MySQL Documentation with different formats +DISPLAYTEXT=The MySQL Documentation with different formats +IMAGE= +DEFSELECTION=Yes +filegroup0=Documentation +COMMENT= +INCLUDEINBUILD=Yes +INSTALLATION=ALWAYSOVERWRITE +COMPRESSIFSEPARATE=No +MISC= +ENCRYPT=No +DISK=ANYDISK +TARGETDIRCDROM= +PASSWORD= +TARGETHIDDEN=General Application Destination + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.fgl b/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.fgl new file mode 100755 index 00000000000..4e20dcea4ab --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Component Definitions/Default.fgl @@ -0,0 +1,42 @@ +[\] +DISPLAYTEXT=Common Files Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[\] +DISPLAYTEXT=Windows System Folder +TYPE=TEXTSUBFIXED +fulldirectory= + +[USERDEFINED] +DISPLAYTEXT=Script-defined Folders +TYPE=USERSTART +fulldirectory= + +[] +DISPLAYTEXT=Program Files Folder +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=General Application Destination +TYPE=TEXTSUBFIXED +fulldirectory= + +[] +DISPLAYTEXT=Windows Operating System +SubDir0=\ +TYPE=TEXTSUBFIXED +fulldirectory= + +[TopDir] +SubDir0= +SubDir1= +SubDir2= +SubDir3=USERDEFINED + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Clients and Tools.fgl b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Clients and Tools.fgl new file mode 100755 index 00000000000..7bba3d7474a --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Clients and Tools.fgl @@ -0,0 +1,31 @@ +[bin] +file15=C:\mysql\bin\replace.exe +file16=C:\mysql\bin\winmysqladmin.cnt +file0=C:\mysql\bin\isamchk.exe +file17=C:\mysql\bin\WINMYSQLADMIN.HLP +file1=C:\mysql\bin\myisamchk.exe +file18=C:\mysql\bin\comp-err.exe +file2=C:\mysql\bin\myisamlog.exe +file19=C:\mysql\bin\my_print_defaults.exe +file3=C:\mysql\bin\myisampack.exe +file4=C:\mysql\bin\mysql.exe +file5=C:\mysql\bin\mysqladmin.exe +file6=C:\mysql\bin\mysqlbinlog.exe +file7=C:\mysql\bin\mysqlc.exe +file8=C:\mysql\bin\mysqlcheck.exe +file9=C:\mysql\bin\mysqldump.exe +file20=C:\mysql\bin\winmysqladmin.exe +file10=C:\mysql\bin\mysqlimport.exe +fulldirectory= +file11=C:\mysql\bin\mysqlshow.exe +file12=C:\mysql\bin\mysqlwatch.exe +file13=C:\mysql\bin\pack_isam.exe +file14=C:\mysql\bin\perror.exe + +[TopDir] +SubDir0=bin + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Default.fdf b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Default.fdf new file mode 100755 index 00000000000..8096a4b74bf --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Default.fdf @@ -0,0 +1,82 @@ +[FileGroups] +group0=Development +group1=Grant Tables +group2=Servers +group3=Clients and Tools +group4=Documentation + +[Development] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Grant Tables] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Clients and Tools] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM=0000000000000000 +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Servers] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + +[Info] +Type=FileGrp +Version=1.00.000 +Name= + +[Documentation] +SELFREGISTERING=No +HTTPLOCATION= +LANGUAGE= +OPERATINGSYSTEM= +FTPLOCATION= +FILETYPE=No +INFOTYPE=Standard +COMMENT= +COMPRESS=Yes +COMPRESSDLL= +POTENTIALLY=No +MISC= + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Development.fgl b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Development.fgl new file mode 100755 index 00000000000..df4c058f8ce --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Development.fgl @@ -0,0 +1,239 @@ +[bench\Data\Wisconsin] +file0=C:\mysql\bench\Data\Wisconsin\onek.data +file1=C:\mysql\bench\Data\Wisconsin\tenk.data +fulldirectory= + +[lib\debug] +file0=C:\mysql\lib\debug\libmySQL.dll +file1=C:\mysql\lib\debug\libmySQL.lib +file2=C:\mysql\lib\debug\mysqlclient.lib +file3=C:\mysql\lib\debug\zlib.lib +file4=C:\mysql\lib\debug\mysys.lib +file5=C:\mysql\lib\debug\regex.lib +file6=C:\mysql\lib\debug\strings.lib +fulldirectory= + +[bench\output] +fulldirectory= + +[examples\libmysqltest] +file0=C:\mysql\examples\libmysqltest\myTest.c +file1=C:\mysql\examples\libmysqltest\myTest.dsp +file2=C:\mysql\examples\libmysqltest\myTest.dsw +file3=C:\mysql\examples\libmysqltest\myTest.exe +file4=C:\mysql\examples\libmysqltest\myTest.mak +file5=C:\mysql\examples\libmysqltest\myTest.ncb +file6=C:\mysql\examples\libmysqltest\myTest.opt +file7=C:\mysql\examples\libmysqltest\readme +fulldirectory= + +[include] +file15=C:\mysql\include\libmysqld.def +file16=C:\mysql\include\my_alloc.h +file0=C:\mysql\include\raid.h +file17=C:\mysql\include\my_getopt.h +file1=C:\mysql\include\errmsg.h +file2=C:\mysql\include\Libmysql.def +file3=C:\mysql\include\m_ctype.h +file4=C:\mysql\include\m_string.h +file5=C:\mysql\include\my_list.h +file6=C:\mysql\include\my_pthread.h +file7=C:\mysql\include\my_sys.h +file8=C:\mysql\include\mysql.h +file9=C:\mysql\include\mysql_com.h +file10=C:\mysql\include\mysql_version.h +fulldirectory= +file11=C:\mysql\include\mysqld_error.h +file12=C:\mysql\include\dbug.h +file13=C:\mysql\include\config-win.h +file14=C:\mysql\include\my_global.h + +[examples] +SubDir0=examples\libmysqltest +SubDir1=examples\tests +fulldirectory= + +[lib\opt] +file0=C:\mysql\lib\opt\libmySQL.dll +file1=C:\mysql\lib\opt\libmySQL.lib +file2=C:\mysql\lib\opt\mysqlclient.lib +file3=C:\mysql\lib\opt\zlib.lib +file4=C:\mysql\lib\opt\strings.lib +file5=C:\mysql\lib\opt\regex.lib +file6=C:\mysql\lib\opt\mysys.lib +fulldirectory= + +[bench\Data] +SubDir0=bench\Data\ATIS +SubDir1=bench\Data\Wisconsin +fulldirectory= + +[bench\limits] +file15=C:\mysql\bench\limits\pg.comment +file16=C:\mysql\bench\limits\solid.cfg +file0=C:\mysql\bench\limits\access.cfg +file17=C:\mysql\bench\limits\solid-nt4.cfg +file1=C:\mysql\bench\limits\access.comment +file18=C:\mysql\bench\limits\sybase.cfg +file2=C:\mysql\bench\limits\Adabas.cfg +file3=C:\mysql\bench\limits\Adabas.comment +file4=C:\mysql\bench\limits\Db2.cfg +file5=C:\mysql\bench\limits\empress.cfg +file6=C:\mysql\bench\limits\empress.comment +file7=C:\mysql\bench\limits\Informix.cfg +file8=C:\mysql\bench\limits\Informix.comment +file9=C:\mysql\bench\limits\msql.cfg +file10=C:\mysql\bench\limits\ms-sql.cfg +fulldirectory= +file11=C:\mysql\bench\limits\Ms-sql65.cfg +file12=C:\mysql\bench\limits\mysql.cfg +file13=C:\mysql\bench\limits\oracle.cfg +file14=C:\mysql\bench\limits\pg.cfg + +[TopDir] +SubDir0=bench +SubDir1=examples +SubDir2=include +SubDir3=lib +SubDir4=scripts + +[bench] +file15=C:\mysql\bench\test-create +file16=C:\mysql\bench\test-insert +file0=C:\mysql\bench\uname.bat +file17=C:\mysql\bench\test-select +file1=C:\mysql\bench\compare-results +file18=C:\mysql\bench\test-wisconsin +file2=C:\mysql\bench\copy-db +file19=C:\mysql\bench\bench-init.pl +file3=C:\mysql\bench\crash-me +file4=C:\mysql\bench\example.bat +file5=C:\mysql\bench\print-limit-table +file6=C:\mysql\bench\pwd.bat +file7=C:\mysql\bench\Readme +SubDir0=bench\Data +file8=C:\mysql\bench\run.bat +SubDir1=bench\limits +file9=C:\mysql\bench\run-all-tests +SubDir2=bench\output +file10=C:\mysql\bench\server-cfg +fulldirectory= +file11=C:\mysql\bench\test-alter-table +file12=C:\mysql\bench\test-ATIS +file13=C:\mysql\bench\test-big-tables +file14=C:\mysql\bench\test-connect + +[examples\tests] +file15=C:\mysql\examples\tests\lock_test.res +file16=C:\mysql\examples\tests\mail_to_db.pl +file0=C:\mysql\examples\tests\unique_users.tst +file17=C:\mysql\examples\tests\table_types.pl +file1=C:\mysql\examples\tests\auto_increment.tst +file18=C:\mysql\examples\tests\test_delayed_insert.pl +file2=C:\mysql\examples\tests\big_record.pl +file19=C:\mysql\examples\tests\udf_test +file3=C:\mysql\examples\tests\big_record.res +file4=C:\mysql\examples\tests\czech-sorting +file5=C:\mysql\examples\tests\deadlock-script.pl +file6=C:\mysql\examples\tests\export.pl +file7=C:\mysql\examples\tests\fork_test.pl +file8=C:\mysql\examples\tests\fork2_test.pl +file9=C:\mysql\examples\tests\fork3_test.pl +file20=C:\mysql\examples\tests\udf_test.res +file21=C:\mysql\examples\tests\auto_increment.res +file10=C:\mysql\examples\tests\function.res +fulldirectory= +file11=C:\mysql\examples\tests\function.tst +file12=C:\mysql\examples\tests\grant.pl +file13=C:\mysql\examples\tests\grant.res +file14=C:\mysql\examples\tests\lock_test.pl + +[bench\Data\ATIS] +file26=C:\mysql\bench\Data\ATIS\stop1.txt +file15=C:\mysql\bench\Data\ATIS\flight_class.txt +file27=C:\mysql\bench\Data\ATIS\time_interval.txt +file16=C:\mysql\bench\Data\ATIS\flight_day.txt +file0=C:\mysql\bench\Data\ATIS\transport.txt +file28=C:\mysql\bench\Data\ATIS\time_zone.txt +file17=C:\mysql\bench\Data\ATIS\flight_fare.txt +file1=C:\mysql\bench\Data\ATIS\airline.txt +file29=C:\mysql\bench\Data\ATIS\aircraft.txt +file18=C:\mysql\bench\Data\ATIS\food_service.txt +file2=C:\mysql\bench\Data\ATIS\airport.txt +file19=C:\mysql\bench\Data\ATIS\ground_service.txt +file3=C:\mysql\bench\Data\ATIS\airport_service.txt +file4=C:\mysql\bench\Data\ATIS\city.txt +file5=C:\mysql\bench\Data\ATIS\class_of_service.txt +file6=C:\mysql\bench\Data\ATIS\code_description.txt +file7=C:\mysql\bench\Data\ATIS\compound_class.txt +file8=C:\mysql\bench\Data\ATIS\connect_leg.txt +file9=C:\mysql\bench\Data\ATIS\date_day.txt +file20=C:\mysql\bench\Data\ATIS\month_name.txt +file21=C:\mysql\bench\Data\ATIS\restrict_carrier.txt +file10=C:\mysql\bench\Data\ATIS\day_name.txt +fulldirectory= +file22=C:\mysql\bench\Data\ATIS\restrict_class.txt +file11=C:\mysql\bench\Data\ATIS\dual_carrier.txt +file23=C:\mysql\bench\Data\ATIS\restriction.txt +file12=C:\mysql\bench\Data\ATIS\fare.txt +file24=C:\mysql\bench\Data\ATIS\state.txt +file13=C:\mysql\bench\Data\ATIS\fconnection.txt +file25=C:\mysql\bench\Data\ATIS\stop.txt +file14=C:\mysql\bench\Data\ATIS\flight.txt + +[General] +Type=FILELIST +Version=1.00.000 + +[scripts] +file37=C:\mysql\scripts\mysqld_safe-watch.sh +file26=C:\mysql\scripts\mysql_zap +file15=C:\mysql\scripts\mysql_fix_privilege_tables +file38=C:\mysql\scripts\mysqldumpslow +file27=C:\mysql\scripts\mysql_zap.sh +file16=C:\mysql\scripts\mysql_fix_privilege_tables.sh +file0=C:\mysql\scripts\Readme +file39=C:\mysql\scripts\mysqldumpslow.sh +file28=C:\mysql\scripts\mysqlaccess +file17=C:\mysql\scripts\mysql_install_db +file1=C:\mysql\scripts\make_binary_distribution.sh +file29=C:\mysql\scripts\mysqlaccess.conf +file18=C:\mysql\scripts\mysql_install_db.sh +file2=C:\mysql\scripts\msql2mysql +file19=C:\mysql\scripts\mysql_secure_installation +file3=C:\mysql\scripts\msql2mysql.sh +file4=C:\mysql\scripts\mysql_config +file5=C:\mysql\scripts\mysql_config.sh +file6=C:\mysql\scripts\mysql_convert_table_format +file7=C:\mysql\scripts\mysql_convert_table_format.sh +file40=C:\mysql\scripts\mysqlhotcopy +file8=C:\mysql\scripts\mysql_explain_log +file41=C:\mysql\scripts\mysqlhotcopy.pl +file30=C:\mysql\scripts\mysqlaccess.sh +file9=C:\mysql\scripts\mysql_explain_log.sh +file42=C:\mysql\scripts\mysqlhotcopy.sh +file31=C:\mysql\scripts\mysqlbug +file20=C:\mysql\scripts\mysql_secure_installation.sh +file43=C:\mysql\scripts\make_binary_distribution +file32=C:\mysql\scripts\mysqlbug.sh +file21=C:\mysql\scripts\mysql_setpermission +file10=C:\mysql\scripts\mysql_find_rows +fulldirectory= +file33=C:\mysql\scripts\mysqld_multi +file22=C:\mysql\scripts\mysql_setpermission.pl +file11=C:\mysql\scripts\mysql_find_rows.pl +file34=C:\mysql\scripts\mysqld_multi.sh +file23=C:\mysql\scripts\mysql_setpermission.sh +file12=C:\mysql\scripts\mysql_find_rows.sh +file35=C:\mysql\scripts\mysqld_safe +file24=C:\mysql\scripts\mysql_tableinfo +file13=C:\mysql\scripts\mysql_fix_extensions +file36=C:\mysql\scripts\mysqld_safe.sh +file25=C:\mysql\scripts\mysql_tableinfo.sh +file14=C:\mysql\scripts\mysql_fix_extensions.sh + +[lib] +SubDir0=lib\debug +SubDir1=lib\opt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Documentation.fgl b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Documentation.fgl new file mode 100755 index 00000000000..80fe777cf0f --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Documentation.fgl @@ -0,0 +1,99 @@ +[Docs\Flags] +file59=C:\mysql\Docs\Flags\romania.gif +file48=C:\mysql\Docs\Flags\kroatia.eps +file37=C:\mysql\Docs\Flags\iceland.gif +file26=C:\mysql\Docs\Flags\france.eps +file15=C:\mysql\Docs\Flags\china.gif +file49=C:\mysql\Docs\Flags\kroatia.gif +file38=C:\mysql\Docs\Flags\ireland.eps +file27=C:\mysql\Docs\Flags\france.gif +file16=C:\mysql\Docs\Flags\croatia.eps +file0=C:\mysql\Docs\Flags\usa.gif +file39=C:\mysql\Docs\Flags\ireland.gif +file28=C:\mysql\Docs\Flags\germany.eps +file17=C:\mysql\Docs\Flags\croatia.gif +file1=C:\mysql\Docs\Flags\argentina.gif +file29=C:\mysql\Docs\Flags\germany.gif +file18=C:\mysql\Docs\Flags\czech-republic.eps +file2=C:\mysql\Docs\Flags\australia.eps +file19=C:\mysql\Docs\Flags\czech-republic.gif +file3=C:\mysql\Docs\Flags\australia.gif +file80=C:\mysql\Docs\Flags\usa.eps +file4=C:\mysql\Docs\Flags\austria.eps +file81=C:\mysql\Docs\Flags\argentina.eps +file70=C:\mysql\Docs\Flags\spain.eps +file5=C:\mysql\Docs\Flags\austria.gif +file71=C:\mysql\Docs\Flags\spain.gif +file60=C:\mysql\Docs\Flags\russia.eps +file6=C:\mysql\Docs\Flags\brazil.eps +file72=C:\mysql\Docs\Flags\sweden.eps +file61=C:\mysql\Docs\Flags\russia.gif +file50=C:\mysql\Docs\Flags\latvia.eps +file7=C:\mysql\Docs\Flags\brazil.gif +file73=C:\mysql\Docs\Flags\sweden.gif +file62=C:\mysql\Docs\Flags\singapore.eps +file51=C:\mysql\Docs\Flags\latvia.gif +file40=C:\mysql\Docs\Flags\island.eps +file8=C:\mysql\Docs\Flags\bulgaria.eps +file74=C:\mysql\Docs\Flags\switzerland.eps +file63=C:\mysql\Docs\Flags\singapore.gif +file52=C:\mysql\Docs\Flags\netherlands.eps +file41=C:\mysql\Docs\Flags\island.gif +file30=C:\mysql\Docs\Flags\great-britain.eps +file9=C:\mysql\Docs\Flags\bulgaria.gif +file75=C:\mysql\Docs\Flags\switzerland.gif +file64=C:\mysql\Docs\Flags\south-africa.eps +file53=C:\mysql\Docs\Flags\netherlands.gif +file42=C:\mysql\Docs\Flags\israel.eps +file31=C:\mysql\Docs\Flags\great-britain.gif +file20=C:\mysql\Docs\Flags\denmark.eps +file76=C:\mysql\Docs\Flags\taiwan.eps +file65=C:\mysql\Docs\Flags\south-africa.gif +file54=C:\mysql\Docs\Flags\poland.eps +file43=C:\mysql\Docs\Flags\israel.gif +file32=C:\mysql\Docs\Flags\greece.eps +file21=C:\mysql\Docs\Flags\denmark.gif +file10=C:\mysql\Docs\Flags\canada.eps +fulldirectory= +file77=C:\mysql\Docs\Flags\taiwan.gif +file66=C:\mysql\Docs\Flags\south-africa1.eps +file55=C:\mysql\Docs\Flags\poland.gif +file44=C:\mysql\Docs\Flags\italy.eps +file33=C:\mysql\Docs\Flags\greece.gif +file22=C:\mysql\Docs\Flags\estonia.eps +file11=C:\mysql\Docs\Flags\canada.gif +file78=C:\mysql\Docs\Flags\ukraine.eps +file67=C:\mysql\Docs\Flags\south-africa1.gif +file56=C:\mysql\Docs\Flags\portugal.eps +file45=C:\mysql\Docs\Flags\italy.gif +file34=C:\mysql\Docs\Flags\hungary.eps +file23=C:\mysql\Docs\Flags\estonia.gif +file12=C:\mysql\Docs\Flags\chile.eps +file79=C:\mysql\Docs\Flags\ukraine.gif +file68=C:\mysql\Docs\Flags\south-korea.eps +file57=C:\mysql\Docs\Flags\portugal.gif +file46=C:\mysql\Docs\Flags\japan.eps +file35=C:\mysql\Docs\Flags\hungary.gif +file24=C:\mysql\Docs\Flags\finland.eps +file13=C:\mysql\Docs\Flags\chile.gif +file69=C:\mysql\Docs\Flags\south-korea.gif +file58=C:\mysql\Docs\Flags\romania.eps +file47=C:\mysql\Docs\Flags\japan.gif +file36=C:\mysql\Docs\Flags\iceland.eps +file25=C:\mysql\Docs\Flags\finland.gif +file14=C:\mysql\Docs\Flags\china.eps + +[Docs] +file0=C:\mysql\Docs\manual_toc.html +file1=C:\mysql\Docs\manual.html +file2=C:\mysql\Docs\manual.txt +SubDir0=Docs\Flags +fulldirectory= + +[TopDir] +SubDir0=Docs + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Grant Tables.fgl b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Grant Tables.fgl new file mode 100755 index 00000000000..178065a7003 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Grant Tables.fgl @@ -0,0 +1,36 @@ +[data\test] +fulldirectory= + +[data\mysql] +file15=C:\mysql\data\mysql\func.frm +file16=C:\mysql\data\mysql\func.MYD +file0=C:\mysql\data\mysql\columns_priv.frm +file17=C:\mysql\data\mysql\func.MYI +file1=C:\mysql\data\mysql\columns_priv.MYD +file2=C:\mysql\data\mysql\columns_priv.MYI +file3=C:\mysql\data\mysql\db.frm +file4=C:\mysql\data\mysql\db.MYD +file5=C:\mysql\data\mysql\db.MYI +file6=C:\mysql\data\mysql\host.frm +file7=C:\mysql\data\mysql\host.MYD +file8=C:\mysql\data\mysql\host.MYI +file9=C:\mysql\data\mysql\tables_priv.frm +file10=C:\mysql\data\mysql\tables_priv.MYD +fulldirectory= +file11=C:\mysql\data\mysql\tables_priv.MYI +file12=C:\mysql\data\mysql\user.frm +file13=C:\mysql\data\mysql\user.MYD +file14=C:\mysql\data\mysql\user.MYI + +[TopDir] +SubDir0=data + +[data] +SubDir0=data\mysql +SubDir1=data\test +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/File Groups/Servers.fgl b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Servers.fgl new file mode 100755 index 00000000000..3f875b574f6 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/File Groups/Servers.fgl @@ -0,0 +1,226 @@ +[Embedded\Static\release] +file0=C:\mysql\embedded\Static\release\test_stc.dsp +file1=C:\mysql\embedded\Static\release\ReadMe.txt +file2=C:\mysql\embedded\Static\release\StdAfx.cpp +file3=C:\mysql\embedded\Static\release\StdAfx.h +file4=C:\mysql\embedded\Static\release\test_stc.cpp +file5=C:\mysql\embedded\Static\release\mysqlserver.lib +fulldirectory= + +[share\polish] +file0=C:\mysql\share\polish\errmsg.sys +file1=C:\mysql\share\polish\errmsg.txt +fulldirectory= + +[share\dutch] +file0=C:\mysql\share\dutch\errmsg.sys +file1=C:\mysql\share\dutch\errmsg.txt +fulldirectory= + +[share\spanish] +file0=C:\mysql\share\spanish\errmsg.sys +file1=C:\mysql\share\spanish\errmsg.txt +fulldirectory= + +[share\english] +file0=C:\mysql\share\english\errmsg.sys +file1=C:\mysql\share\english\errmsg.txt +fulldirectory= + +[bin] +file0=C:\mysql\bin\mysqld-opt.exe +file1=C:\mysql\bin\mysqld-nt.exe +file2=C:\mysql\bin\mysqld.exe +file3=C:\mysql\bin\cygwinb19.dll +file4=C:\mysql\bin\libmySQL.dll +fulldirectory= + +[share\korean] +file0=C:\mysql\share\korean\errmsg.sys +file1=C:\mysql\share\korean\errmsg.txt +fulldirectory= + +[share\charsets] +file15=C:\mysql\share\charsets\latin1.conf +file16=C:\mysql\share\charsets\latin2.conf +file0=C:\mysql\share\charsets\win1251ukr.conf +file17=C:\mysql\share\charsets\latin5.conf +file1=C:\mysql\share\charsets\cp1257.conf +file18=C:\mysql\share\charsets\Readme +file2=C:\mysql\share\charsets\croat.conf +file19=C:\mysql\share\charsets\swe7.conf +file3=C:\mysql\share\charsets\danish.conf +file4=C:\mysql\share\charsets\dec8.conf +file5=C:\mysql\share\charsets\dos.conf +file6=C:\mysql\share\charsets\estonia.conf +file7=C:\mysql\share\charsets\german1.conf +file8=C:\mysql\share\charsets\greek.conf +file9=C:\mysql\share\charsets\hebrew.conf +file20=C:\mysql\share\charsets\usa7.conf +file21=C:\mysql\share\charsets\win1250.conf +file10=C:\mysql\share\charsets\hp8.conf +fulldirectory= +file22=C:\mysql\share\charsets\win1251.conf +file11=C:\mysql\share\charsets\hungarian.conf +file23=C:\mysql\share\charsets\cp1251.conf +file12=C:\mysql\share\charsets\Index +file13=C:\mysql\share\charsets\koi8_ru.conf +file14=C:\mysql\share\charsets\koi8_ukr.conf + +[Embedded\DLL\debug] +file0=C:\mysql\embedded\DLL\debug\libmysqld.dll +file1=C:\mysql\embedded\DLL\debug\libmysqld.exp +file2=C:\mysql\embedded\DLL\debug\libmysqld.lib +fulldirectory= + +[Embedded] +file0=C:\mysql\embedded\embedded.dsw +SubDir0=Embedded\DLL +SubDir1=Embedded\Static +fulldirectory= + +[share\ukrainian] +file0=C:\mysql\share\ukrainian\errmsg.sys +file1=C:\mysql\share\ukrainian\errmsg.txt +fulldirectory= + +[share\hungarian] +file0=C:\mysql\share\hungarian\errmsg.sys +file1=C:\mysql\share\hungarian\errmsg.txt +fulldirectory= + +[share\german] +file0=C:\mysql\share\german\errmsg.sys +file1=C:\mysql\share\german\errmsg.txt +fulldirectory= + +[share\portuguese] +file0=C:\mysql\share\portuguese\errmsg.sys +file1=C:\mysql\share\portuguese\errmsg.txt +fulldirectory= + +[share\estonian] +file0=C:\mysql\share\estonian\errmsg.sys +file1=C:\mysql\share\estonian\errmsg.txt +fulldirectory= + +[share\romanian] +file0=C:\mysql\share\romanian\errmsg.sys +file1=C:\mysql\share\romanian\errmsg.txt +fulldirectory= + +[share\french] +file0=C:\mysql\share\french\errmsg.sys +file1=C:\mysql\share\french\errmsg.txt +fulldirectory= + +[share\swedish] +file0=C:\mysql\share\swedish\errmsg.sys +file1=C:\mysql\share\swedish\errmsg.txt +fulldirectory= + +[share\slovak] +file0=C:\mysql\share\slovak\errmsg.sys +file1=C:\mysql\share\slovak\errmsg.txt +fulldirectory= + +[share\greek] +file0=C:\mysql\share\greek\errmsg.sys +file1=C:\mysql\share\greek\errmsg.txt +fulldirectory= + +[TopDir] +file0=C:\mysql\my-huge.cnf +file1=C:\mysql\my-large.cnf +file2=C:\mysql\my-medium.cnf +file3=C:\mysql\my-small.cnf +file4=C:\mysql\MySQLEULA.txt +SubDir0=bin +SubDir1=share +SubDir2=Embedded + +[share] +SubDir8=share\hungarian +SubDir9=share\charsets +SubDir20=share\spanish +SubDir21=share\swedish +SubDir10=share\italian +SubDir22=share\ukrainian +SubDir11=share\japanese +SubDir12=share\korean +SubDir13=share\norwegian +SubDir14=share\norwegian-ny +SubDir15=share\polish +SubDir16=share\portuguese +SubDir0=share\czech +SubDir17=share\romanian +SubDir1=share\danish +SubDir18=share\russian +SubDir2=share\dutch +SubDir19=share\slovak +SubDir3=share\english +fulldirectory= +SubDir4=share\estonian +SubDir5=share\french +SubDir6=share\german +SubDir7=share\greek + +[share\norwegian-ny] +file0=C:\mysql\share\norwegian-ny\errmsg.sys +file1=C:\mysql\share\norwegian-ny\errmsg.txt +fulldirectory= + +[Embedded\DLL] +file0=C:\mysql\embedded\DLL\test_dll.dsp +file1=C:\mysql\embedded\DLL\StdAfx.h +file2=C:\mysql\embedded\DLL\test_dll.cpp +file3=C:\mysql\embedded\DLL\StdAfx.cpp +SubDir0=Embedded\DLL\debug +SubDir1=Embedded\DLL\release +fulldirectory= + +[Embedded\Static] +SubDir0=Embedded\Static\release +fulldirectory= + +[Embedded\DLL\release] +file0=C:\mysql\embedded\DLL\release\libmysqld.dll +file1=C:\mysql\embedded\DLL\release\libmysqld.exp +file2=C:\mysql\embedded\DLL\release\libmysqld.lib +file3=C:\mysql\embedded\DLL\release\mysql-server.exe +fulldirectory= + +[share\danish] +file0=C:\mysql\share\danish\errmsg.sys +file1=C:\mysql\share\danish\errmsg.txt +fulldirectory= + +[share\czech] +file0=C:\mysql\share\czech\errmsg.sys +file1=C:\mysql\share\czech\errmsg.txt +fulldirectory= + +[General] +Type=FILELIST +Version=1.00.000 + +[share\russian] +file0=C:\mysql\share\russian\errmsg.sys +file1=C:\mysql\share\russian\errmsg.txt +fulldirectory= + +[share\norwegian] +file0=C:\mysql\share\norwegian\errmsg.sys +file1=C:\mysql\share\norwegian\errmsg.txt +fulldirectory= + +[share\japanese] +file0=C:\mysql\share\japanese\errmsg.sys +file1=C:\mysql\share\japanese\errmsg.txt +fulldirectory= + +[share\italian] +file0=C:\mysql\share\italian\errmsg.sys +file1=C:\mysql\share\italian\errmsg.txt +fulldirectory= + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Registry Entries/Default.rge b/VC++Files/InstallShield/4.0.XX-pro/Registry Entries/Default.rge new file mode 100755 index 00000000000..537dfd82e48 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Registry Entries/Default.rge @@ -0,0 +1,4 @@ +[General] +Type=REGISTRYDATA +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.dbg b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.dbg new file mode 100755 index 0000000000000000000000000000000000000000..0c6d4e6b70812d069322e88155868913fc543e33 GIT binary patch literal 28458 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ino b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ino new file mode 100755 index 0000000000000000000000000000000000000000..204d8ea0f364524a444de8aa4c839fbdfb40413c GIT binary patch literal 58611 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 z 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ins b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.ins new file mode 100755 index 0000000000000000000000000000000000000000..759009b5c8462f5f1b617fb9f202c2e638ce4bc4 GIT binary patch literal 57122 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 U?Y7{S!vK%H{K_l&d*#Ca2lRel4gdfE literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.obs b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.obs new file mode 100755 index 0000000000000000000000000000000000000000..5fcfcb62c4e70338ce55aab3c89149f351d7f4c1 GIT binary patch literal 65611 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 MQd<)aB(wnj4?UUG^8f$< literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.rul b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.rul new file mode 100755 index 00000000000..df143b493c4 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Script Files/Setup.rul @@ -0,0 +1,640 @@ + +//////////////////////////////////////////////////////////////////////////////// +// +// IIIIIII SSSSSS +// II SS InstallShield (R) +// II SSSSSS (c) 1996-1997, InstallShield Software Corporation +// II SS (c) 1990-1996, InstallShield Corporation +// IIIIIII SSSSSS All Rights Reserved. +// +// +// This code is generated as a starting setup template. You should +// modify it to provide all necessary steps for your setup. +// +// +// File Name: Setup.rul +// +// Description: InstallShield script +// +// Comments: This template script performs a basic setup on a +// Windows 95 or Windows NT 4.0 platform. With minor +// modifications, this template can be adapted to create +// new, customized setups. +// +//////////////////////////////////////////////////////////////////////////////// + + + // Include header file +#include "sdlang.h" +#include "sddialog.h" + +////////////////////// string defines //////////////////////////// + +#define UNINST_LOGFILE_NAME "Uninst.isu" + +//////////////////// installation declarations /////////////////// + + // ----- DLL prototypes ----- + + + // your DLL prototypes + + + // ---- script prototypes ----- + + // generated + prototype ShowDialogs(); + prototype MoveFileData(); + prototype HandleMoveDataError( NUMBER ); + prototype ProcessBeforeDataMove(); + prototype ProcessAfterDataMove(); + prototype SetupRegistry(); + prototype SetupFolders(); + prototype CleanUpInstall(); + prototype SetupInstall(); + prototype SetupScreen(); + prototype CheckRequirements(); + prototype DialogShowSdWelcome(); + prototype DialogShowSdShowInfoList(); + prototype DialogShowSdAskDestPath(); + prototype DialogShowSdSetupType(); + prototype DialogShowSdComponentDialog2(); + prototype DialogShowSdFinishReboot(); + + // your prototypes + + + // ----- global variables ------ + + // generated + BOOL bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup; + STRING svDir; + STRING svName, svCompany, svSerial; + STRING szAppPath; + STRING svSetupType; + + + // your global variables + + +/////////////////////////////////////////////////////////////////////////////// +// +// MAIN PROGRAM +// +// The setup begins here by hiding the visible setup +// window. This is done to allow all the titles, images, etc. to +// be established before showing the main window. The following +// logic then performs the setup in a series of steps. +// +/////////////////////////////////////////////////////////////////////////////// +program + Disable( BACKGROUND ); + + CheckRequirements(); + + SetupInstall(); + + SetupScreen(); + + if (ShowDialogs()<0) goto end_install; + + if (ProcessBeforeDataMove()<0) goto end_install; + + if (MoveFileData()<0) goto end_install; + + if (ProcessAfterDataMove()<0) goto end_install; + + if (SetupRegistry()<0) goto end_install; + + if (SetupFolders()<0) goto end_install; + + + end_install: + + CleanUpInstall(); + + // If an unrecoverable error occurred, clean up the partial installation. + // Otherwise, exit normally. + + if (bInstallAborted) then + abort; + endif; + +endprogram + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ShowDialogs // +// // +// Purpose: This function manages the display and navigation // +// the standard dialogs that exist in a setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ShowDialogs() + NUMBER nResult; + begin + + Dlg_Start: + // beginning of dialogs label + + Dlg_SdWelcome: + nResult = DialogShowSdWelcome(); + if (nResult = BACK) goto Dlg_Start; + + Dlg_SdShowInfoList: + nResult = DialogShowSdShowInfoList(); + if (nResult = BACK) goto Dlg_SdWelcome; + + Dlg_SdAskDestPath: + nResult = DialogShowSdAskDestPath(); + if (nResult = BACK) goto Dlg_SdShowInfoList; + + Dlg_SdSetupType: + nResult = DialogShowSdSetupType(); + if (nResult = BACK) goto Dlg_SdAskDestPath; + + Dlg_SdComponentDialog2: + if ((nResult = BACK) && (svSetupType != "Custom") && (svSetupType != "")) then + goto Dlg_SdSetupType; + endif; + nResult = DialogShowSdComponentDialog2(); + if (nResult = BACK) goto Dlg_SdSetupType; + + return 0; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessBeforeDataMove // +// // +// Purpose: This function performs any necessary operations prior to the // +// actual data move operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessBeforeDataMove() + STRING svLogFile; + NUMBER nResult; + begin + + InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY ); + + svLogFile = UNINST_LOGFILE_NAME; + + nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 ); + if (nResult < 0) then + MessageBox( @ERROR_UNINSTSETUP, WARNING ); + endif; + + szAppPath = TARGETDIR; // TODO : if your application .exe is in a subdir of TARGETDIR then add subdir + + if ((bIs32BitSetup) && (bIsShellExplorer)) then + RegDBSetItem( REGDB_APPPATH, szAppPath ); + RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY ); + RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME ); + endif; + + // TODO : update any items you want to process before moving the data + // + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: MoveFileData // +// // +// Purpose: This function handles the data movement for // +// the setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function MoveFileData() + NUMBER nResult, nDisk; + begin + + nDisk = 1; + SetStatusWindow( 0, "" ); + Disable( DIALOGCACHE ); + Enable( STATUS ); + StatusUpdate( ON, 100 ); + nResult = ComponentMoveData( MEDIA, nDisk, 0 ); + + HandleMoveDataError( nResult ); + + Disable( STATUS ); + + return nResult; + + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: HandleMoveDataError // +// // +// Purpose: This function handles the error (if any) during the move data // +// operation. // +// // +/////////////////////////////////////////////////////////////////////////////// +function HandleMoveDataError( nResult ) + STRING szErrMsg, svComponent , svFileGroup , svFile; + begin + + svComponent = ""; + svFileGroup = ""; + svFile = ""; + + switch (nResult) + case 0: + return 0; + default: + ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult ); + szErrMsg = @ERROR_MOVEDATA + "\n\n" + + @ERROR_COMPONENT + " " + svComponent + "\n" + + @ERROR_FILEGROUP + " " + svFileGroup + "\n" + + @ERROR_FILE + " " + svFile; + SprintfBox( SEVERE, @TITLE_CAPTIONBAR, szErrMsg, nResult ); + bInstallAborted = TRUE; + return nResult; + endswitch; + + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: ProcessAfterDataMove // +// // +// Purpose: This function performs any necessary operations needed after // +// all data has been moved. // +// // +/////////////////////////////////////////////////////////////////////////////// +function ProcessAfterDataMove() + begin + + // TODO : update self-registered files and other processes that + // should be performed after the data has been moved. + + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupRegistry // +// // +// Purpose: This function makes the registry entries for this setup. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupRegistry() + NUMBER nResult; + + begin + + // TODO : Add all your registry entry keys here + // + // + // RegDBCreateKeyEx, RegDBSetKeyValueEx.... + // + + nResult = CreateRegistrySet( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// +// Function: SetupFolders +// +// Purpose: This function creates all the folders and shortcuts for the +// setup. This includes program groups and items for Windows 3.1. +// +/////////////////////////////////////////////////////////////////////////////// +function SetupFolders() + NUMBER nResult; + + begin + + + // TODO : Add all your folder (program group) along with shortcuts (program items) + // + // + // CreateProgramFolder, AddFolderIcon.... + // + + nResult = CreateShellObjects( "" ); + + return nResult; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CleanUpInstall // +// // +// Purpose: This cleans up the setup. Anything that should // +// be released or deleted at the end of the setup should // +// be done here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CleanUpInstall() + begin + + + if (bInstallAborted) then + return 0; + endif; + + DialogShowSdFinishReboot(); + + if (BATCH_INSTALL) then // ensure locked files are properly written + CommitSharedFiles(0); + endif; + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupInstall // +// // +// Purpose: This will setup the installation. Any general initialization // +// needed for the installation should be performed here. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupInstall() + begin + + Enable( CORECOMPONENTHANDLING ); + + bInstallAborted = FALSE; + + if (bIs32BitSetup) then + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME ^ @PRODUCT_NAME; + else + svDir = "C:\\mysql"; //PROGRAMFILES ^ @COMPANY_NAME16 ^ @PRODUCT_NAME16; // use shorten names + endif; + + TARGETDIR = svDir; + + SdProductName( @PRODUCT_NAME ); + + Enable( DIALOGCACHE ); + + return 0; + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: SetupScreen // +// // +// Purpose: This function establishes the screen look. This includes // +// colors, fonts, and text to be displayed. // +// // +/////////////////////////////////////////////////////////////////////////////// +function SetupScreen() + begin + + Enable( FULLWINDOWMODE ); + Enable( INDVFILESTATUS ); + SetTitle( @TITLE_MAIN, 24, WHITE ); + + SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text. + + Enable( BACKGROUND ); + + Delay( 1 ); + end; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: CheckRequirements // +// // +// Purpose: This function checks all minimum requirements for the // +// application being installed. If any fail, then the user // +// is informed and the setup is terminated. // +// // +/////////////////////////////////////////////////////////////////////////////// +function CheckRequirements() + NUMBER nvDx, nvDy, nvResult; + STRING svResult; + + begin + + bWinNT = FALSE; + bIsShellExplorer = FALSE; + + // Check screen resolution. + GetExtents( nvDx, nvDy ); + + if (nvDy < 480) then + MessageBox( @ERROR_VGARESOLUTION, WARNING ); + abort; + endif; + + // set 'setup' operation mode + bIs32BitSetup = TRUE; + GetSystemInfo( ISTYPE, nvResult, svResult ); + if (nvResult = 16) then + bIs32BitSetup = FALSE; // running 16-bit setup + return 0; // no additional information required + endif; + + // --- 32-bit testing after this point --- + + // Determine the target system's operating system. + GetSystemInfo( OS, nvResult, svResult ); + + if (nvResult = IS_WINDOWSNT) then + // Running Windows NT. + bWinNT = TRUE; + + // Check to see if the shell being used is EXPLORER shell. + if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then + if (nvResult >= 4) then + bIsShellExplorer = TRUE; + endif; + endif; + + elseif (nvResult = IS_WINDOWS95 ) then + bIsShellExplorer = TRUE; + + endif; + +end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdWelcome // +// // +// Purpose: This function handles the standard welcome dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdWelcome() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdWelcome( szTitle, szMsg ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdShowInfoList // +// // +// Purpose: This function displays the general information list dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdShowInfoList() + NUMBER nResult; + LIST list; + STRING szTitle, szMsg, szFile; + begin + + szFile = SUPPORTDIR ^ "infolist.txt"; + + list = ListCreate( STRINGLIST ); + ListReadFromFile( list, szFile ); + szTitle = ""; + szMsg = " "; + nResult = SdShowInfoList( szTitle, szMsg, list ); + + ListDestroy( list ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdAskDestPath // +// // +// Purpose: This function asks the user for the destination directory. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdAskDestPath() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + szTitle = ""; + szMsg = ""; + nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 ); + + TARGETDIR = svDir; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdSetupType // +// // +// Purpose: This function displays the standard setup type dialog. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdSetupType() + NUMBER nResult, nType; + STRING szTitle, szMsg; + begin + + switch (svSetupType) + case "Typical": + nType = TYPICAL; + case "Custom": + nType = CUSTOM; + case "Compact": + nType = COMPACT; + case "": + svSetupType = "Typical"; + nType = TYPICAL; + endswitch; + + szTitle = ""; + szMsg = ""; + nResult = SetupType( szTitle, szMsg, "", nType, 0 ); + + switch (nResult) + case COMPACT: + svSetupType = "Compact"; + case TYPICAL: + svSetupType = "Typical"; + case CUSTOM: + svSetupType = "Custom"; + endswitch; + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdComponentDialog2 // +// // +// Purpose: This function displays the custom component dialog. // +// // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdComponentDialog2() + NUMBER nResult; + STRING szTitle, szMsg; + begin + + if ((svSetupType != "Custom") && (svSetupType != "")) then + return 0; + endif; + + szTitle = ""; + szMsg = ""; + nResult = SdComponentDialog2( szTitle, szMsg, svDir, "" ); + + return nResult; + end; + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Function: DialogShowSdFinishReboot // +// // +// Purpose: This function will show the last dialog of the product. // +// It will allow the user to reboot and/or show some readme text. // +// // +/////////////////////////////////////////////////////////////////////////////// +function DialogShowSdFinishReboot() + NUMBER nResult, nDefOptions; + STRING szTitle, szMsg1, szMsg2, szOption1, szOption2; + NUMBER bOpt1, bOpt2; + begin + + if (!BATCH_INSTALL) then + bOpt1 = FALSE; + bOpt2 = FALSE; + szMsg1 = ""; + szMsg2 = ""; + szOption1 = ""; + szOption2 = ""; + nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); + return 0; + endif; + + nDefOptions = SYS_BOOTMACHINE; + szTitle = ""; + szMsg1 = ""; + szMsg2 = ""; + nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 ); + + return nResult; + end; + + // --- include script file section --- + +#include "sddialog.rul" + + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt b/VC++Files/InstallShield/4.0.XX-pro/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt new file mode 100755 index 00000000000..18d7995fd50 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt @@ -0,0 +1,25 @@ +This is a release of MySQL Pro 4.0.11a-gamma for Win32. + +NOTE: If you install MySQL in a folder other than +C:\MYSQL or you intend to start MySQL on NT/Win2000 +as a service, you must create a file named C:\MY.CNF +or \Windows\my.ini or \winnt\my.ini with the following +information:: + +[mysqld] +basedir=E:/installation-path/ +datadir=E:/data-path/ + +After your have installed MySQL, the installation +directory will contain 4 files named 'my-small.cnf, +my-medium.cnf, my-large.cnf, my-huge.cnf'. +You can use this as a starting point for your own +C:\my.cnf file. + +If you have any problems, you can mail them to +win32@lists.mysql.com after you have consulted the +MySQL manual and the MySQL mailing list archive +(http://www.mysql.com/documentation/index.html) + +On behalf of the MySQL AB gang, +Michael Widenius \ No newline at end of file diff --git a/VC++Files/InstallShield/4.0.XX-pro/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp b/VC++Files/InstallShield/4.0.XX-pro/Setup Files/Uncompressed Files/Language Independent/OS Independent/setup.bmp new file mode 100755 index 0000000000000000000000000000000000000000..3229d50c9bfcabefefb1341fda098d20bcc734b1 GIT binary patch literal 15694 zcmeI3JB%Ae7{@=K-(K76_xXH&Oi7uF4k@AsrK3$jjnYv@G&D%0il|5m3XnjGA{wMf zL_$gf5>dL)5Cs$g3Mf1j1%y!e9<#Hv>lu6R&bNC-MzTHL8PERqKl43y_U_f!UVjC+ zyj%fz32PtY>kWLBpuxxK?R+3FJjmtqYZu|WZ*RcE`?ulUHv!&%s|Q!#R`B6F=isCF z&ckO{FTkx&F2PqfFT>ZjuE4!J*Wu?M?!xcCK7eOWpTLDLet}DOegpX60rajt1ohF6 zaPHGbaQ@~`aPiB>aQT}jaOK_~aQ*&YaO3-@aQo3Sxcm4Yc<|@H@Z|6R;Q90C0`lVh zg#s@W$Xx-Iz0}KVrP>I(*#|g5PdLJF9h?MS&x3RaoaIXA2p4(N7hE}BaV%I}cL;-qtVlj;-e}&Za^l2$Z)OHw_D6{(`O=TtSF@fhgG48#CUZ5I z4yV%;XV*{|iEYl7X*P&l@o}PΞYl3Pc*AWK<5_&B8evjnkZ9&L1hLEKZN3FPHtC zgCT>?5;ECe7}VFS7UP5EU_2Y7IJ*Y3T#lkl%-NFG1}ZO3c5Stn=?H{M=3C@t0UsXOLL1Rv?)sh2j;#7Uc!oV)f#O2xiD zE2oZ)!+pu!@cmHdAUoAF7Leq`#FY7(+4U4TM^10OLp^0dM#+bYeSNGaI{~k~3kxqt zxl-$WcbsD24Qp)i^?|)U>sU}>yL9MSog#v;aGGX!;QEO&v7T$E zPaHT!&ae?^&Irmrv!Gj^)NWj_3ukc$>f{1s;@8{c_Q}f`(v2f; zUxCan!Bk?WB!Y&qpi!98O1nSy9UOSbikxd5l;a=PPBqbiXYHqRLtOqP!C}X zK_KR|rPpbbhqcYmO1kKs*y@YnEHxUu?T5ZRHfe_@K_v>4g>X{t!`VcwoX&l0*buYL zn%>4Ng0n<6OtGf9@d+6{D$vor5PL@#4v5;II~yzF*h(tZX=1KqrA7tl8DQdzn=f@$ z$CtBo2@`Fq~%*lrvfEPylc z_#-C8OvNxZ6C3-JN%Hw7~(%ITmJ|$;bPq z7noXZ6%3i4bD@tEAR!PIiA;39M0e2K&!p`kHC|5(v1i{ zCh`{Wwwz8w)gu~O*Tz2|&Y2UpU!4I5U6R*zvS2xL;!cfgo(R+Hl8WFo)1Fw1gtPi^BL1w{geV-aho6HBV0Tk*Q3+gPELuAnYZSh8#I@A1)afyR literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/4.0.XX-pro/Shell Objects/Default.shl b/VC++Files/InstallShield/4.0.XX-pro/Shell Objects/Default.shl new file mode 100755 index 00000000000..187cb651307 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Shell Objects/Default.shl @@ -0,0 +1,12 @@ +[Data] +Folder3= +Group0=Main +Group1=Startup +Folder0= +Folder1= +Folder2= + +[Info] +Type=ShellObject +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/String Tables/0009-English/value.shl b/VC++Files/InstallShield/4.0.XX-pro/String Tables/0009-English/value.shl new file mode 100755 index 00000000000..c1dd3707afb --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/String Tables/0009-English/value.shl @@ -0,0 +1,23 @@ +[Data] +TITLE_MAIN=MySQL Pro Servers and Clients 4.0.11a-gamma +COMPANY_NAME=MySQL AB +ERROR_COMPONENT=Component: +COMPANY_NAME16=Company +PRODUCT_VERSION=MySQL Pro Servers and Clients 4.0.11a-gamma +ERROR_MOVEDATA=An error occurred during the move data process: %d +ERROR_FILEGROUP=File Group: +UNINST_KEY=MySQL Pro Servers and Clients 4.0.11a-gamma +TITLE_CAPTIONBAR=MySQL Pro Servers and Clients 4.0.11a-gamma +PRODUCT_NAME16=Product +ERROR_VGARESOLUTION=This program requires VGA or better resolution. +ERROR_FILE=File: +UNINST_DISPLAY_NAME=MySQL Pro Servers and Clients 4.0.11a-gamma +PRODUCT_KEY=yourapp.Exe +PRODUCT_NAME=MySQL Pro Servers and Clients 4.0.11a-gamma +ERROR_UNINSTSETUP=unInstaller setup failed to initialize. You may not be able to uninstall this product. + +[General] +Language=0009 +Type=STRINGTABLESPECIFIC +Version=1.00.000 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/String Tables/Default.shl b/VC++Files/InstallShield/4.0.XX-pro/String Tables/Default.shl new file mode 100755 index 00000000000..d4dc4925ab1 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/String Tables/Default.shl @@ -0,0 +1,74 @@ +[TITLE_MAIN] +Comment= + +[COMPANY_NAME] +Comment= + +[ERROR_COMPONENT] +Comment= + +[COMPANY_NAME16] +Comment= + +[PRODUCT_VERSION] +Comment= + +[ERROR_MOVEDATA] +Comment= + +[ERROR_FILEGROUP] +Comment= + +[Language] +Lang0=0009 +CurrentLang=0 + +[UNINST_KEY] +Comment= + +[TITLE_CAPTIONBAR] +Comment= + +[Data] +Entry0=ERROR_VGARESOLUTION +Entry1=TITLE_MAIN +Entry2=TITLE_CAPTIONBAR +Entry3=UNINST_KEY +Entry4=UNINST_DISPLAY_NAME +Entry5=COMPANY_NAME +Entry6=PRODUCT_NAME +Entry7=PRODUCT_VERSION +Entry8=PRODUCT_KEY +Entry9=ERROR_MOVEDATA +Entry10=ERROR_UNINSTSETUP +Entry11=COMPANY_NAME16 +Entry12=PRODUCT_NAME16 +Entry13=ERROR_COMPONENT +Entry14=ERROR_FILEGROUP +Entry15=ERROR_FILE + +[PRODUCT_NAME16] +Comment= + +[ERROR_VGARESOLUTION] +Comment= + +[ERROR_FILE] +Comment= + +[General] +Type=STRINGTABLE +Version=1.00.000 + +[UNINST_DISPLAY_NAME] +Comment= + +[PRODUCT_KEY] +Comment= + +[PRODUCT_NAME] +Comment= + +[ERROR_UNINSTSETUP] +Comment= + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Build.tsb b/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Build.tsb new file mode 100755 index 00000000000..3949bd4c066 --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Build.tsb @@ -0,0 +1,56 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key6= +Key7= +Key8= +Key9= + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + diff --git a/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Setup.tsb b/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Setup.tsb new file mode 100755 index 00000000000..b0c5a509f0b --- /dev/null +++ b/VC++Files/InstallShield/4.0.XX-pro/Text Substitutions/Setup.tsb @@ -0,0 +1,76 @@ +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key10= +Key6= +Key11= +Key7= +Key12= +Key8= +Key13= +Key9= + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + +[] +Value= +KeyType=4 + From 3dfcd944fe2fe6d866867ba6c5a0b16016b4bdcc Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Mar 2003 21:35:57 -0800 Subject: [PATCH 145/267] Added PeterG's new internals documenation. Docs/internals.texi: Added PeterG's new internals documentation. BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + Docs/internals.texi | 3782 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 3783 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index dbff0adc758..71e7c58cda7 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -67,6 +67,7 @@ paul@teton.kitebird.com pem@mysql.com peter@linux.local peter@mysql.com +pgulutzan@linux.local ram@mysql.r18.ru ram@ram.(none) ranger@regul.home.lan diff --git a/Docs/internals.texi b/Docs/internals.texi index a94158f84f8..37c8e71c478 100644 --- a/Docs/internals.texi +++ b/Docs/internals.texi @@ -58,6 +58,11 @@ This is a manual about @strong{MySQL} internals. * DBUG:: DBUG Tags To Use * protocol:: MySQL Client/Server Protocol * Fulltext Search:: Fulltext Search in MySQL +* MyISAM Record Structure:: MyISAM Record Structure +* InnoDB Record Structure:: InnoDB Record Structure +* InnoDB Page Structure:: InnoDB Page Structure +* Annotated List Of Files in the MySQL Source Code Distribution:: MySQL Source +* Annotated List Of Files in the InnoDB Source Code Distribution:: InnoDB Source @end menu @@ -1975,6 +1980,3783 @@ weight as number of matched B's increases, because it assigns higher weights to individual B's. Also the first expression in much simplier. So it is the first one, that is implemented in MySQL. + +@chapter MyISAM Record Structure + +@section Introduction + +When you say: +@* + +@strong{CREATE TABLE Table1 ...} +@* + +MySQL creates files named Table1.MYD ("MySQL Data"), Table1.MYI +("MySQL Index"), and Table1.FRM ("Format"). These files will be in the +directory: @* +/// +@* + +For example, if you use Linux, you might find the files here (assume +your database name is "test"): @* +/usr/local/var/test +@* + +And if you use Windows, you might find the files in this directory: @* +\mysql\data\test\ +@*@* + +Let's look at the .MYD Data file (MyISAM SQL Data file) more closely. + +@table @strong +@item Page Size +Unlike most DBMSs, MySQL doesn't store on disk using pages. Therefore +you will not see filler space between rows. (Reminder: This does not +refer to BDB and INNODB tables, which do use pages). +@* + +@item Record Header +The minimal record header is a set of flags: +@itemize @bullet +@item +"X bit" = 0 if row is deleted, = 1 if row is not deleted +@item +"Null Bits" = 0 if column is not NULL, = 1 if column is NULL +@item +"Filler Bits" = 1 +@end itemize +@end table +@* + +Here's an example. Suppose you say: +@* + +@strong{CREATE TABLE Table1 (column1 CHAR(1), column2 CHAR(1), column3 CHAR(1))} +@* + +@strong{INSERT INTO Table1 VALUES ('a', 'b', 'c')} +@* + +@strong{INSERT INTO Table1 VALUES ('d', NULL, 'e')} +@* + +A CHAR(1) column takes precisely one byte (plus one bit of overhead +that is assigned to every column -- I'll describe the details of +column storage later). So the file Table1.MYD looks like this: +@* + +@strong{Hexadecimal Display of Table1.MYD file}@* +@code{ +F1 61 62 63 00 F5 64 00 66 00 ... .abc..d e. +} +@* + +Here's how to read this hexadecimal-dump display:@* +@itemize @bullet +@item +The hexadecimal numbers @code{F1 61 62 63 00 F5 64 20 66 00} are byte +values and the column on the right is an attempt to show the +same bytes in ASCII. +@item +The @code{F1} byte means that there are no null fields in the first row. +@item +The @code{F5} byte means that the second column of the second row is NULL. +@end itemize + +(It's probably easier to understand the flag setting if you restate +@code{F5} as @code{11110101 binary}, and (a) notice that the third flag bit from the +right is @code{on}, and (b) remember that the first flag bit is the X bit.) +@* + +There are complications -- the record header is more complex if there +are variable-length fields -- but the simple display shown in the +example is exactly what you'd see if you took a debugger and looked +at the MySQL Data file. +@* + +@section Physical Attributes of Columns + +Next I'll describe the physical attributes of each column in a row. +The format depends entirely on the data type and the size of the +column, so, for every data type, I'll give a description and an example. +@* + +@table @strong +@item The character data types + +@strong{CHAR} +@itemize @bullet +@item +Storage: fixed-length string with space padding on the right. +@item +Example: a CHAR(5) column containing the value 'A' looks like:@* +@code{hexadecimal 41 20 20 20 20} -- (length = 5, value = @code{'A '}) +@end itemize + +@strong{VARCHAR} +@itemize @bullet +@item +Storage: variable-length string with a preceding length. +@item +Example: a VARCHAR(7) column containing 'A' looks like:@* +@code{hexadecimal 01 41} -- (length = 1, value = @code{'A'}) +@end itemize + +@item The numeric data types + +Important: MySQL stores all multi-byte binary numbers with the +high byte first. This is called "little-endian" numeric storage; +it's normal on Intel x86 machines; MySQL uses it even for non-Intel +machines so that databases will be portable. +@* + +@strong{TINYINT} +@itemize @bullet +@item +Storage: fixed-length binary, always one byte. +@item +Example: a TINYINT column containing 65 looks like:@* +@code{hexadecimal 41} -- (length = 1, value = 65) +@end itemize + +@strong{SMALLINT} +@itemize @bullet +@item +Storage: fixed-length binary, always two bytes. +@item +Example: a SMALLINT column containing 65 looks like:@* +@code{hexadecimal 41 00} -- (length = 2, value = 65) +@end itemize + +@strong{MEDIUMINT} +@itemize @bullet +@item +Storage: fixed-length binary, always three bytes. +@item +Example: a MEDIUMINT column containing 65 looks like:@* +@code{hexadecimal 41 00 00} -- (length = 3, value = 65) +@end itemize + +@strong{INT} +@itemize @bullet +@item +Storage: fixed-length binary, always four bytes. +@item +Example: an INT column containing 65 looks like:@* +@code{hexadecimal 41 00 00 00} -- (length = 4, value = 65) +@end itemize + +@strong{BIGINT} +@itemize @bullet +@item +Storage: fixed-length binary, always eight bytes. +@item +Example: a BIGINT column containing 65 looks like:@* +@code{hexadecimal 41 00 00 00 00 00 00 00} -- (length = 8, value = 65) +@end itemize + +@strong{FLOAT} +@itemize @bullet +@item +Storage: fixed-length binary, always four bytes. +@item +Example: a FLOAT column containing approximately 65 looks like:@* +@code{hexadecimal 00 00 82 42} -- (length = 4, value = 65) +@end itemize + +@strong{DOUBLE PRECISION} +@itemize @bullet +@item +Storage: fixed-length binary, always eight bytes. +@item +Example: a DOUBLE PRECISION column containing approximately 65 looks like:@* +@code{hexadecimal 00 00 00 00 00 40 50 40} -- (length = 8, value = 65) +@end itemize + +@strong{REAL} +@itemize @bullet +@item +Storage: same as FLOAT, or same as DOUBLE PRECISION, depending on setting of the --ansi switch. +@end itemize + +@strong{DECIMAL} +@itemize @bullet +@item +Storage: fixed-length string, with a leading byte for the sign, if any. +@item +Example: a DECIMAL(2) column containing 65 looks like:@* +@code{hexadecimal 20 36 35} -- (length = 3, value = @code{' 65'}) +@item +Example: a DECIMAL(2) UNSIGNED column containing 65 looks like:@* +@code{hexadecimal 36 35} -- (length = 2, value = @code{'65'}) +@item +Example: a DECIMAL(4,2) UNSIGNED column containing 65 looks like:@* +@code{hexadecimal 36 35 2E 30 30} -- (length = 5, value = @code{'65.00'}) +@end itemize + +@strong{NUMERIC} +@itemize @bullet +@item +Storage: same as DECIMAL. +@end itemize + +@strong{BOOL} +@itemize @bullet +@item +Storage: same as TINYINT. +@end itemize + +@item The temporal data types + +@strong{DATE} +@itemize @bullet +@item +Storage: fixed-length series of binary integers, always three bytes +long. +@item +Example: a DATE column containing '0001-01-01' looks like:@* +@code{hexadecimal 21 02 00} +@end itemize + +@strong{DATETIME} +@itemize @bullet +@item +Storage: eight bytes. +@item +Part 1 is a 32-bit integer containing year*10000 + month*100 + day. +@item +Part 2 is a 32-bit integer containing hour*10000 + minute*100 + second. +@item +Example: a DATETIME column for '0001-01-01 01:01:01' looks like:@* +@code{hexadecimal B5 2E 11 5A 02 00 00 00} +@end itemize + +@strong{TIME} +@itemize @bullet +@item +Storage: a value offset from 8385959, always three bytes long. +@item +Example: a TIME column containing '01:01:01' looks like:@* +@code{hexadecimal 75 27 00} +@end itemize + +@strong{TIMESTAMP} +@itemize @bullet +@item +Storage: four bytes long (NOTE TO SELF: not figured out) +@item +Example: a TIMESTAMP column containing '2003-01-01 01:01:01' looks like:@* +@code{hexadecimal 4D AE 12 23} +@end itemize + +@strong{YEAR} +@itemize @bullet +@item +Storage: same as unsigned TINYINT with a base value of 0 = 1901. +@end itemize + +@item Others + +@strong{SET} +@itemize @bullet +@item +Storage: one byte for each eight members in the set. +@item +Maximum length: eight bytes (for maximum 64 members). +@item +This is a bit list. The least significant bit corresponds to the +first listed member of the set. +@item +Example: a SET('A','B','C') column containing 'A' looks like:@* +@code{01} -- (length = 1, value = 'A') +@end itemize + +@strong{ENUM} +@itemize @bullet +@item +Storage: one byte if less than 256 alternatives, else two bytes. +@item +This is an index. The value 1 corresponds to the first listed +alternative. (Note: ENUM always reserves 0 for a blank '' value. This +explains why 'A' is 1 instead of 0.) +@item +Example: an ENUM('A','B','C') column containing 'A' looks like:@* +@code{01} -- (length = 1, value = 'A') +@end itemize + +@item The Large-Object data types + +Warning: Because TINYBLOB's preceding length is one byte long (the +size of a TINYINT) and MEDIUMBLOB's preceding length is three bytes +long (the size of a MEDIUMINT), it's easy to think there's some sort +of correspondence between the BLOB and the INT types. There isn't -- a +BLOB's preceding length is not four bytes long (the size of an INT). +@* + +(NOTE TO SELF: BLOB storage has not been fully addressed here.) +@* + +@strong{TINYBLOB} +@itemize @bullet +@item +Storage: variable-length string with a preceding one-byte length. +@item +Example: a TINYBLOB column containing 'A' looks like:@* +@code{hexadecimal 01 41} -- (length = 2, value = 'A') +@end itemize + +@strong{TINYTEXT} +@itemize @bullet +@item +Storage: same as TINYBLOB. +@end itemize + +@strong{BLOB} +@itemize @bullet +@item +Storage: variable-length string with a preceding two-byte length. +@item +Example: a BLOB column containing 'A' looks like:@* +@code{hexadecimal 01 00 41} -- (length = 2, value = 'A') +@end itemize + +@strong{TEXT} +@itemize @bullet +@item +Storage: same as BLOB. +@end itemize + +@strong{MEDIUMBLOB} +@itemize @bullet +@item +Storage: variable-length string with a preceding length. +@item +Example: a MEDIUMBLOB column containing 'A' looks like:@* +@code{hexadecimal 01 00 00 41} -- (length = 4, value = 'A') +@end itemize + +@strong{MEDIUMTEXT} +@itemize @bullet +@item +Storage: same as MEDIUMBLOB. +@end itemize + +@strong{LONGBLOB} +@itemize @bullet +@item +Storage: variable-length string with a preceding four-byte length. +@item +Example: a LONGBLOB column containing 'A' looks like:@* +@code{hexadecimal 01 00 00 00 41} -- (length = 5, value = 'A') +@end itemize + +@strong{LONGTEXT} +@itemize @bullet +@item +Storage: same as LONGBLOB. +@end itemize + +@end table + +@section Where to Look For More Information + +@strong{References:} @* +Most of the formatting work for MyISAM columns is visible +in the program /sql/field.cc in the source code directory. +@* + +@chapter InnoDB Record Structure + +This page contains: +@itemize @bullet +@item +A high-altitude "summary" picture of the parts of a MySQL/InnoDB +record structure. +@item +A description of each part. +@item +An example. +@end itemize + +After reading this page, you will know how MySQL/InnoDB stores a +physical record. +@* + +@section High-Altitude Picture + +The chart below shows the three parts of a physical record. + +@multitable @columnfractions .10 .35 + +@item @strong{Name} @tab @strong{Size} +@item Field Start Offsets +@tab (F*1) or (F*2) bytes +@item Extra Bytes +@tab 6 bytes +@item Field Contents +@tab depends on content + +@end multitable + +Legend: The letter 'F' stands for 'Number Of Fields'. + +The meaning of the parts is as follows: +@itemize @bullet +@item +The FIELD START OFFSETS is a list of numbers containing the +information "where a field starts". +@item +The EXTRA BYTES is a fixed-size header. +@item +The FIELD CONTENTS contains the actual data. +@end itemize + +@strong{An Important Note About The Word "Origin"}@* +The "Origin" or "Zero Point" of a record is the first byte of the +Field Contents -- not the first byte of the Field Start Offsets. If +there is a pointer to a record, that pointer is pointing to the +Origin. Therefore the first two parts of the record are addressed by +subtracting from the pointer, and only the third part is addressed by +adding to the pointer. + +@subsection FIELD START OFFSETS + +The Field Start Offsets is a list in which each entry is the +position, relative to the Origin, of the start of the next field. The +entries are in reverse order, that is, the first field's offset is at +the end of the list. +@* + +An example: suppose there are three columns. The first column's length +is 1, the second column's length is 2, and the third column's length is 4. +In this case, the offset values are, respectively, 1, 3 (1+2), and 7 (1+2+4). +Because values are reversed, a core dump of the Field Start Offsets +would look like this: @code{07,03,01}. +@* + +There are two complications for special cases: +@itemize @bullet +@item +Complication #1: The size of each offset can be either one byte or +two bytes. One-byte offsets are only usable if the total record size +is less than 127. There is a flag in the "Extra Bytes" part which will +tell you whether the size is one byte or two bytes. +@item +Complication #2: The most significant bits of an offset may contain +flag values. The next two paragraphs explain what the contents are. +@end itemize + +@strong{When The Size Of Each Offset Is One Byte} +@itemize @bullet +@item +1 bit = 0 if field is non-NULL, = 1 if field is NULL +@item +7 bits = the actual offset, a number between 0 and 127 +@end itemize + +@strong{When The Size Of Each Offset Is Two Bytes} +@itemize @bullet +@item +1 bit = 0 if field is non-NULL, = 1 if field is NULL +@item +1 bit = 0 if field is on same page as offset, = 1 if field and offset are on different pages +@item +14 bits = the actual offset, a number between 0 and 16383 +@end itemize + +It is unlikely that the "field and offset are on different pages" +unless the record contains a large BLOB. + +@subsection EXTRA BYTES + +The Extra Bytes are a fixed six-byte header. + +@multitable @columnfractions .10 .25 .35 + +@item @strong{Name} @tab @strong{Size} @tab @strong{Description} +@item @strong{info_bits:} +@item () +@tab 1 bit +@tab unused or unknown +@item () +@tab 1 bit +@tab unused or unknown +@item deleted_flag +@tab 1 bit +@tab 1 if record is deleted +@item min_rec_flag +@tab 1 bit +@tab 1 if record is predefined minimum record +@item n_owned +@tab 4 bits +@tab number of records owned by this record +@item heap_no +@tab 13 bits +@tab record's order number in heap of index page +@item n_fields +@tab 10 bits +@tab number of fields in this record, 1 to 1023 +@item 1byte_offs_flag +@tab 1 bit +@tab 1 if each Field Start Offsets is 1 byte long (this item is also called the "short" flag) +@item @strong{next 16 bits} +@tab 16 bits +@tab pointer to next record in page +@item @strong{TOTAL} +@tab 48 bits + +@end multitable + +Total size is 48 bits, which is six bytes. +@* + +If you're just trying to read the record, the key bit in the Extra +Bytes is 1byte_offs_flag -- you need to know if 1byte_offs_flag is 1 +(i.e.: "short 1-byteoffsets") or 0 (i.e.: "2-byte offsets"). +@* + +Given a pointer to the Origin, InnoDB finds the start of the record as follows: +@enumerate @bullet +@item +Let X = n_fields (the number of fields is by definition equal to the +number of entries in the Field Start Offsets Table). +@item +If 1byte_offs_flag equals 0, then let X = X * 2 because there are +two bytes for each entry instead of just one. +@item +Let X = X + 6, because the fixed size of Extra Bytes is 6. +@item +The start of the record is at (pointer value minus X). +@end enumerate + +@subsection FIELD CONTENTS + +The Field Contents part of the record has all the data. Fields are +stored in the order they were defined in. +@* + +There are no markers between fields, and there is no marker or filler +at the end of a record. +@* + +Here's an example. +@enumerate @bullet +@item +I made a table with this definition: +@*@* + +@strong{CREATE TABLE T + (FIELD1 VARCHAR(3), FIELD2 VARCHAR(3), FIELD3 VARCHAR(3)) + Type=InnoDB;} +@*@* + +To understand what follows, you must know that table T has six columns +-- not three -- because InnoDB automatically added three "system +columns" at the start for its own housekeeping. It happens that these +system columns are the row ID, the transaction ID, and the rollback +pointer, but their values don't matter now. Regard them as three black +boxes. +@*@* + +@item +I put some rows in the table. My last three INSERTs were: +@*@* + +@strong{INSERT INTO T VALUES ('PP', 'PP', 'PP')} +@*@* + +@strong{INSERT INTO T VALUES ('Q', 'Q', 'Q')} +@*@* + +@strong{INSERT INTO T VALUES ('R', NULL, NULL)} +@*@* + +@item +I ran Borland's TDUMP to get a hexadecimal dump of +the contents of \mysql\data\ibdata1, which (in my case) is the +MySQL/InnoDB data file (on Windows). +@end enumerate + +Here is an extract of the dump: + +@multitable @columnfractions .05 .95 + +@item @strong{Address Values In Hexadecimal} @tab @strong{Values In ASCII} +@item @code{0D4280: 00 00 2D 00 84 4F 4F 4F 4F 4F 4F 4F 4F 4F 19 17} +@tab @code{..-..OOOOOOOOO..} +@item @code{0D4290: 15 13 0C 06 00 00 78 0D 02 BF 00 00 00 00 04 21} +@tab @code{......x........!} +@item @code{0D42A0: 00 00 00 00 09 2A 80 00 00 00 2D 00 84 50 50 50} +@tab @code{.....*....-..PPP} +@item @code{0D42B0: 50 50 50 16 15 14 13 0C 06 00 00 80 0D 02 E1 00} +@tab @code{PPP.............} +@item @code{0D42C0: 00 00 00 04 22 00 00 00 00 09 2B 80 00 00 00 2D} +@tab @code{....".....+....-} +@item @code{0D42D0: 00 84 51 51 51 94 94 14 13 0C 06 00 00 88 0D 00} +@tab @code{..QQQ...........} +@item @code{0D42E0: 74 00 00 00 00 04 23 00 00 00 00 09 2C 80 00 00} +@tab @code{t.....#.....,...} +@item @code{0D42F0: 00 2D 00 84 52 00 00 00 00 00 00 00 00 00 00 00} +@tab @code{.-..R...........} + +@end multitable + +A reformatted version of the dump, showing only the relevant bytes, +looks like this (I've put a line break after each field and added labels): + +@strong{Reformatted Hexadecimal Dump}@* +@code{ + 19 17 15 13 0C 06 Field Start Offsets /* First Row */@* + 00 00 78 0D 02 BF Extra Bytes@* + 00 00 00 00 04 21 System Column #1@* + 00 00 00 00 09 2A System Column #2@* + 80 00 00 00 2D 00 84 System Column #3@* + 50 50 Field1 'PP'@* + 50 50 Field2 'PP'@* + 50 50 Field3 'PP'}@* + +@code{ + 16 15 14 13 0C 06 Field Start Offsets /* Second Row */@* + 00 00 80 0D 02 E1 Extra Bytes@* + 00 00 00 00 04 22 System Column #1@* + 00 00 00 00 09 2B 80 System Column #2@* + 00 00 00 2D 00 84 System Column #3@* + 51 Field1 'Q'@* + 51 Field2 'Q'@* + 51 Field3 'Q'}@* + +@code{ + 94 94 14 13 0C 06 Field Start Offsets /* Third Row */@* + 00 00 88 0D 00 74 Extra Bytes@* + 00 00 00 00 04 23 System Column #1@* + 00 00 00 00 09 2C System Column #2@* + 80 00 00 00 2D 00 84 System Column #3@* + 52 Field1 'R'}@* +@* + +You won't need explanation if you followed everything I've said, but +I'll add helpful notes for the three trickiest details. +@itemize @bullet +@item +Helpful Notes About "Field Start Offsets": @* +Notice that the sizes of the record's fields, in forward order, are: +6, 6, 7, 2, 2, 2. Since each offset is for the start of the "next" +field, the hexadecimal offsets are 06, 0c (6+6), 13 (6+6+7), 15 +(6+6+7+2), 17 (6+6+7+2+2), 19 (6+6+7+2+2+2). Reversing the order, the +Field Start Offsets of the first record are: @code{19,17,15,13,0c,06}. +@item +Helpful Notes About "Extra Bytes": @* +Look at the Extra Bytes of the first record: @code{00 00 78 0D 02 BF}. The +fourth byte is @code{0D hexadecimal}, which is @code{1101 binary} ... the 110 is the +last bits of n_fields (@code{110 binary} is 6 which is indeed the number of +fields in the record) and the final 1 bit is 1byte_offs_flag. The +fifth and sixth bytes, which contain @code{02 BF}, constitute the "next" +field. Looking at the original hexadecimal dump, at address +@code{0D42BF} (which is position @code{02BF} within the page), you'll see the beginning bytes of +System Column #1 of the second row. In other words, the "next" field +points to the "Origin" of the following row. +@item +Helpful Notes About NULLs:@* +For the third row, I inserted NULLs in FIELD2 and FIELD3. Therefore in +the Field Start Offsets the top bit is @code{on} for these fields (the +values are @code{94 hexadecimal}, @code{94 hexadecimal}, instead of +@code{14 hexadecimal}, @code{14 hexadecimal}). And the row is +shorter because the NULLs take no space. +@end itemize + +@section Where to Look For More Information + +@strong{References:} @* +The most relevant InnoDB source-code files are rem0rec.c, rem0rec.ic, +and rem0rec.h in the rem ("Record Manager") directory. + +@chapter InnoDB Page Structure + +InnoDB stores all records inside a fixed-size unit which is commonly called a +"page" (though InnoDB sometimes calls it a "block" instead). +Currently all pages are the same size, 16KB. +@* + +A page contains records, but it also contains headers and trailers. +I'll start this description with a high-altitude view of a page's parts, +then I'll describe each part of a page. Finally, I'll show an example. This +discussion deals only with the most common format, for the leaf page of a data file. +@* + +@section High-Altitude View + +An InnoDB page has seven parts: +@itemize @bullet +@item +Fil Header +@item +Page Header +@item +Infimum + Supremum Records +@item +User Records +@item +Free Space +@item +Page Directory +@item +Fil Trailer +@end itemize + +As you can see, a page has two header/trailer pairs. The inner pair, "Page Header" and +"Page Directory", are mostly the concern of the \page program group, +while the outer pair, "Fil Header" and "Fil Trailer", are mostly the +concern of the \fil program group. The "Fil" header also goes goes by +the name of "File Page Header". +@* + +Sandwiched between the headers and trailers, are the records and +the free (unused) space. A page always begins with two unchanging +records called the Infimum and the Supremum. Then come the user +records. Between the user records (which grow downwards) and the page +directory (which grows upwards) there is space for new records. +@* + +@subsection Fil Header + +The Fil Header has eight parts, as follows: + +@multitable @columnfractions .10 .30 .35 + +@item @strong{Name} @tab @strong{Size} @tab @strong{Remarks} +@item FIL_PAGE_SPACE +@tab 4 +@tab 4 ID of the space the page is in +@item FIL_PAGE_OFFSET +@tab 4 +@tab ordinal page number from start of space +@item FIL_PAGE_PREV +@tab 4 +@tab offset of previous page in key order +@item FIL_PAGE_NEXT +@tab 4 +@tab offset of next page in key order +@item FIL_PAGE_LSN +@tab 8 +@tab log serial number of page's latest log record +@item FIL_PAGE_TYPE +@tab 2 +@tab current defined types are: FIL_PAGE_INDEX, FIL_PAGE_UNDO_LOG, FIL_PAGE_INODE, FIL_PAGE_IBUF_FREE_LIST +@item FIL_PAGE_FILE_FLUSH_LSN +@tab 8 +@tab "the file has been flushed to disk at least up to this lsn" (log serial number), + valid only on the first page of the file +@item FIL_PAGE_ARCH_LOG_NO +@tab 4 +@tab the latest archived log file number at the time that FIL_PAGE_FILE_FLUSH_LSN was written (in the log) +@end multitable + +@item +FIL_PAGE_SPACE is a necessary identifier because different pages might belong to +different (table) spaces within the same file. The word +"space" is generic jargon for either "log" or "tablespace". +@*@* + +@item +FIL_PAGE_PREV and FIL_PAGE_NEXT are the page's "backward" and +"forward" pointers. To show what they're about, I'll draw a two-level +B-tree. +@*@* + +@example + -------- + - root - + -------- + | + ---------------------- + | | + | | + -------- -------- + - leaf - <--> - leaf - + -------- -------- +@end example +@* + +Everyone has seen a B-tree and knows that the entries in the root page +point to the leaf pages. (I indicate those pointers with vertical '|' +bars in the drawing.) But sometimes people miss the detail that leaf +pages can also point to each other (I indicate those pointers with a horizontal +two-way pointer '<-->' in the drawing). This feature allows InnoDB to navigate from +leaf to leaf without having to back up to the root level. This is a +sophistication which you won't find in the classic B-tree, which is +why InnoDB should perhaps be called a B+-tree instead. +@*@* + +@item +The fields FIL_PAGE_FILE_FLUSH_LSN, FIL_PAGE_PREV, and FIL_PAGE_NEXT +all have to do with logs, so I'll refer you to my article "How Logs +Work With MySQL And InnoDB" on devarticles.com. +@*@* + +@item +FIL_PAGE_FILE_FLUSH_LSN and FIL_PAGE_ARCH_LOG_NO are only valid for +the first page of a data file. + +@subsection Page Header + +The Page Header has 14 parts, as follows: +@*@* + +@multitable @columnfractions .10 .20 .30 + +@item @strong{Name} @tab @strong{Size} @tab @strong{Remarks} +@item PAGE_N_DIR_SLOTS +@tab 2 +@tab number of directory slots in the Page Directory part; initial value = 2 +@item PAGE_HEAP_TOP +@tab 2 +@tab record pointer to first record in heap +@item PAGE_N_HEAP +@tab 2 +@tab number of heap records; initial value = 2 +@item PAGE_FREE +@tab 2 +@tab record pointer to first free record +@item PAGE_GARBAGE +@tab 2 +@tab "number of bytes in deleted records" +@item PAGE_LAST_INSERT +@tab 2 +@tab record pointer to the last inserted record +@item PAGE_DIRECTION +@tab 2 +@tab either PAGE_LEFT, PAGE_RIGHT, or PAGE_NO_DIRECTION +@item PAGE_N_DIRECTION +@tab 2 +@tab number of consecutive inserts in the same direction, e.g. "last 5 were all to the left" +@item PAGE_N_RECS +@tab 2 +@tab number of user records +@item PAGE_MAX_TRX_ID +@tab 8 +@tab the highest ID of a transaction which might have changed a record on the page (only set for secondary indexes) +@item PAGE_LEVEL +@tab 2 +@tab level within the index (0 for a leaf page) +@item PAGE_INDEX_ID +@tab 8 +@tab identifier of the index the page belongs to +@item PAGE_BTR_SEG_LEAF +@tab 10 +@tab "file segment header for the leaf pages in a B-tree" (this is irrelevant here) +@item PAGE_BTR_SEG_TOP +@tab 10 +@tab "file segment header for the non-leaf pages in a B-tree" (this is irrelevant here) + +@end multitable +@* + +(Note: I'll clarify what a "heap" is when I discuss the User Records part of the page.) +@*@* + +Some of the Page Header parts require further explanation: +@itemize @bullet +@item +PAGE_FREE: @* +Records which have been freed (due to deletion or migration) are in a +one-way linked list. The PAGE_FREE pointer in the page header points +to the first record in the list. The "next" pointer in the record +header (specifically, in the record's Extra Bytes) points to the next +record in the list. +@item +PAGE_DIRECTION and PAGE_N_DIRECTION: @* +It's useful to know whether inserts are coming in a constantly +ascending sequence. That can affect InnoDB's efficiency. +@item +PAGE_HEAP_TOP and PAGE_FREE and PAGE_LAST_INSERT: @* +Warning: Like all record pointers, these point not to the beginning of the +record but to its Origin (see the earlier discussion of Record +Structure). +@item +PAGE_BTR_SEG_LEAF and PAGE_BTR_SEG_TOP: @* +These variables contain information (space ID, page number, and byte offset) about +index node file segments. InnoDB uses the information for allocating new pages. +There are two different variables because InnoDB allocates separately for leaf +pages and upper-level pages. +@end itemize + +@subsection The Infimum And Supremum Records + +"Infimum" and "supremum" are real English words but they are found +only in arcane mathematical treatises, and in InnoDB comments. To +InnoDB, an infimum is lower than the the lowest possible real value +(negative infinity) and a supremum is greater than the greatest +possible real value (positive infinity). InnoDB sets up an infimum +record and a supremum record automatically at page-create time, and +never deletes them. They make a useful barrier to navigation so that +"get-prev" won't pass the beginning and "get-next" won't pass the end. +Also, the infimum record can be a dummy target for temporary record +locks. +@*@* + +The InnoDB code comments distinguish between "the infimum and supremum +records" and the "user records" (all other kinds). +@*@* + +It's sometimes unclear whether InnoDB considers the infimum and +supremum to be part of the header or not. Their size is fixed and +their position is fixed, so I guess so. + +@subsection User Records + +In the User Records part of a page, you'll find all the records that the user +inserted. +@*@* + +There are two ways to navigate through the user records, depending +whether you want to think of their organization as an unordered or an +ordered list. +@*@* + +An unordered list is often called a "heap". If you make a pile of +stones by saying "whichever one I happen to pick up next will go on +top" -- rather than organizing them according to size and colour -- +then you end up with a heap. Similarly, InnoDB does not want to insert +new rows according to the B-tree's key order (that would involve +expensive shifting of large amounts of data), so it inserts new rows +right after the end of the existing rows (at the +top of the Free Space part) or wherever there's space left by a +deleted row. +@*@* + +But by definition the records of a B-tree must be accessible in order +by key value, so there is a record pointer in each record (the "next" +field in the Extra Bytes) which points to the next record in key +order. In other words, the records are a one-way linked list. So +InnoDB can access rows in key order when searching. + +@subsection Free Space + +I think it's clear what the Free Space part of a page is, from the discussion of +other parts. + +@subsection Page Directory + +The Page Directory part of a page has a variable number of record pointers. +Sometimes the record pointers are called "slots" or "directory slots". +Unlike other DBMSs, InnoDB does not have a slot for every record in +the page. Instead it keeps a sparse directory. In a fullish page, +there will be one slot for every six records. +@*@* + +The slots track the records' logical order (the order by key rather +than the order by placement on the heap). Therefore, if the records +are @code{'A' 'B' 'F' 'D'} the slots will be @code{(pointer to 'A') (pointer to +'B') (pointer to 'D') (pointer to 'F')}. Because the slots are in key +order, and each slot has a fixed size, it's easy to do a binary +search of the records on the page via the slots. +@*@* + +(Since the Page Directory does not have a slot for every record, +binary search can only give a rough position and then InnoDB must +follow the "next" record pointers. InnoDB's "sparse slots" policy also +accounts for the n_owned field in the Extra Bytes part of a record: +n_owned indicates how many more records must be gone through because +they don't have their own slots.) + +@subsection Fil Trailer + +The Fil Trailer has one part, as follows: +@*@* + +@multitable @columnfractions .10 .35 .40 + +@item @strong{Name} @tab @strong{Size} @tab @strong{Remarks} +@item FIL_PAGE_END_LSN +@tab 8 +@tab low 4 bytes = checksum of page, last 4 bytes = same as FIL_PAGE_LSN +@end multitable +@* + +The final part of a page, the fil trailer (or File Page Trailer), +exists because InnoDB's architect worried about integrity. It's +impossible for a page to be only half-written, or corrupted by +crashes, because the log-recovery mechanism restores to a consistent +state. But if something goes really wrong, then it's nice to have a +checksum, and to have a value at the very end of the page which must +be the same as a value at the very beginning of the page. + +@section Example + +For this example, I used Borland's TDUMP again, as I did for the earlier chapter on +Record Format. This is what a page looked like: +@*@* + +@multitable @columnfractions .05 .95 + +@item @strong{Address Values In Hexadecimal} @tab @strong{Values In ASCII} +@item @code{0D4000: 00 00 00 00 00 00 00 35 FF FF FF FF FF FF FF FF} +@tab @code{.......5........} +@item @code{0D4010: 00 00 00 00 00 00 E2 64 45 BF 00 00 00 00 00 00} +@tab @code{.......dE.......} +@item @code{0D4020: 00 00 00 00 00 00 00 05 02 F5 00 12 00 00 00 00} +@tab @code{................} +@item @code{0D4030: 02 E1 00 02 00 0F 00 10 00 00 00 00 00 00 00 00} +@tab @code{................} +@item @code{0D4040: 00 00 00 00 00 00 00 00 00 14 00 00 00 00 00 00} +@tab @code{................} +@item @code{0D4050: 00 02 16 B2 00 00 00 00 00 00 00 02 15 F2 08 01} +@tab @code{................} +@item @code{0D4060: 00 00 03 00 89 69 6E 66 69 6D 75 6D 00 09 05 00} +@tab @code{.....infimum....} +@item @code{0D4070: 08 03 00 00 73 75 70 72 65 6D 75 6D 00 22 1D 18} +@tab @code{....supremum."..} +@item @code{0D4080: 13 0C 06 00 00 10 0D 00 B7 00 00 00 00 04 14 00} +@tab @code{................} +@item @code{0D4090: 00 00 00 09 1D 80 00 00 00 2D 00 84 41 41 41 41} +@tab @code{.........-..AAAA} +@item @code{0D40A0: 41 41 41 41 41 41 41 41 41 41 41 1F 1B 17 13 0C} +@tab @code{AAAAAAAAAAA.....} +@item @code{ ... } +@item @code{ ... } +@item @code{0D7FE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74} +@tab @code{...............t} +@item @code{0D7FF0: 02 47 01 AA 01 0A 00 65 3A E0 AA 71 00 00 E2 64} +@tab @code{.G.....e:..q...d} +@end multitable +@*@* + +Let's skip past the first 38 bytes, which are Fil Header. The bytes +of the Page Header start at location @code{0d4026 hexadecimal}: +@*@* + +@multitable @columnfractions .10 .45 .60 + +@item @strong{Location} @tab @strong{Name} @tab @strong{Description} +@item @code{00 05} +@tab PAGE_N_DIR_SLOTS +@tab There are 5 directory slots. +@item @code{02 F5} +@tab PAGE_HEAP_TOP +@tab At location @code{0402F5}, not shown, is the beginning of free space. +Maybe a better name would have been PAGE_HEAP_END +@item @code{00 12} +@tab PAGE_N_HEAP +@tab There are 18 (hexadecimal 12) records in the page. +@item @code{00 00} +@tab PAGE_FREE +@tab There are zero free (deleted) records. +@item @code{00 00} +@tab PAGE_GARBAGE +@tab There are zero bytes in deleted records. +@item @code{02 E1} +@tab PAGE_LAST_INSERT +@tab The last record was inserted at location @code{02E1}, not shown, within the page. +@item @code{00 02} +@tab PAGE_DIRECTION +@tab A glance at page0page.h will tell you that 2 is the #defined value for PAGE_RIGHT. +@item @code{00 0F} +@tab PAGE_N_DIRECTION +@tab The last 15 (hexadecimal 0F) inserts were all done "to the right" +because I was inserting in ascending order. +@item @code{00 10} +@tab PAGE_N_RECS +@tab There are 16 (hexadecimal 10) user records. Notice that PAGE_N_RECS is +smaller than the earlier field, PAGE_N_HEAP. +@item @code{00 00 00 00 00 00 00} +@tab PAGE_MAX_TRX_ID +@item @code{00 00} +@tab PAGE_LEVEL +@tab Zero because this is a leaf page. +@item @code{00 00 00 00 00 00 00 14} +@tab PAGE_INDEX_ID +@tab This is index number 20. +@item @code{00 00 00 00 00 00 00 02 16 B2} +@tab PAGE_BTR_SEG_LEAF +@item @code{00 00 00 00 00 00 00 02 15 F2} +@tab PAGE_BTR_SEG_TOP +@end multitable +@* + +Immediately after the page header are the infimum and supremum +records. Looking at the "Values In ASCII" column in the hexadecimal +dump, you will see that the contents are in fact the words "infimum" +and "supremum" respectively. +@*@* + +Skipping past the User Records and the Free Space, many bytes later, +is the end of the 16KB page. The values shown there are the two trailers. +@itemize @bullet +@item +The first trailer (@code{00 74, 02 47, 01 AA, 01 0A, 00 65}) is the page +directory. It has 5 entries, because the header field PAGE_N_DIR_SLOTS +says there are 5. +@item +The next trailer (@code{3A E0 AA 71, 00 00 E2 64}) is the fil trailer. Notice +that the last four bytes, @code{00 00 E2 64}, appeared before in the fil +header. +@end itemize + +@section Where to Look For More Information + +@strong{References:} @* +The most relevant InnoDB source-code files are page0page.c, +page0page.ic, and page0page.h in \page directory. + +@chapter Annotated List Of Files in the MySQL Source Code Distribution + +This is a description of the files that you get when you download the +source code of MySQL. This description begins with a list +of the 43 directories and a short comment about each one. Then, for +each directory, in alphabetical order, a longer description is +supplied. When a directory contains significant program files, a list of each C +program is given along with an explanation of its intended function. + +@section Directory Listing + +@strong{Directory -- Short Comment} +@itemize @bullet +@item +bdb -- The Berkeley Database table handler +@item +BitKeeper -- BitKeeper administration +@item +BUILD -- Build switches +@item +Build-tools -- Build tools +@item +client -- Client library +@item +cmd-line-utils -- Command-line utilities +@item +dbug -- Fred Fish's dbug library +@item +div -- Deadlock test +@item +Docs -- Preliminary documents about internals and new modules +@item +extra -- Eight minor standalone utility programs +@item +fs -- File System +@item +heap -- The HEAP table handler +@item +Images -- Empty directory +@item +include -- Include (*.h) files +@item +innobase -- The Innobase (InnoDB) table handler +@item +isam -- The ISAM (MySQL) table handler +@item +libmysql -- For producing MySQL as a library (e.g. a Windows DLL) +@item +libmysql_r -- Only one file, a makefile +@item +libmysqld -- The MySQL Library +@item +man -- Manual pages +@item +merge -- The MERGE table handler (see Reference Manual section 7.2) +* myisam -- The MyISAM table handler +@item +myisammrg -- The MyISAM Merge table handler +@item +mysql-test -- A test suite for mysqld +@item +mysys -- MySQL system library (Low level routines for file access +etc.) +@item +netware -- Files related to the Novell NetWare version of MySQL +@item +NEW-RPMS -- New "RPM Package Manager" files +@item +os2 -- Routines for working with the OS/2 operating system +@item +pstack -- Process stack display +@item +regex -- Regular Expression library for support of REGEXP function +@item +repl-tests -- Test cases for replication +@item +SCCS -- Source Code Control System +@item +scripts -- SQL batches, e.g. for converting msql to MySQL +@item +sql -- Programs for handling SQL commands. The "core" of MySQL +@item +sql-bench -- The MySQL benchmarks +@item +SSL -- Secure Sockets Layer +@item +strings -- Library for C string routines, e.g. atof, strchr +@item +support-files -- 15 files used for building, containing switches? +@item +tests -- Tests in Perl +@item +tools -- mysqlmanager.c +@item +VC++Files -- Includes this entire directory, repeated for VC++ +(Windows) use +@item +vio -- Virtual I/O Library +@item +zlib -- data compression library +@end itemize + +@subsection bdb + +The Berkeley Database table handler. +@*@* + +The Berkeley Database (BDB) is maintained by Sleepycat Software. +@*@* + +The documentation for BDB is available at +http://www.sleepycat.com/docs/. Since it's reasonably thorough +documentation, a description of the BDB program files is not included +in this document. +@*@* + +@subsection BitKeeper + +BitKeeper administration. +@*@* + +This directory may be present if you downloaded the MySQL source using +BitKeeper rather than via the mysql.com site. The files in the +BitKeeper directory are for maintenance purposes only -- they are not +part of the MySQL package. +@*@* + +@subsection BUILD + +Build switches. +@*@* + +This directory contains the build switches for compilation on various +platforms. There is a subdirectory for each set of options. The main +ones are: +@itemize @bullet +@item +alpha +@item +ia64 +@item +pentium (with and without debug or bdb, etc.) +@item +solaris +@end itemize +@*@* + +@subsection Build-tools + +Build tools. +@*@* + +This directory contains batch files for extracting, making +directories, and making programs from source files. There are several +subdirectories -- for building Linux executables, for compiling, for +performing all build steps, etc. +@*@* + +@subsection client + +Client library. +@*@* + +The client library includes mysql.cc (the source of the 'mysql' +executable) and other utilities. Most of the utilities are mentioned +in the MySQL Reference Manual. Generally these are standalone C +programs which one runs in "client mode", that is, they call the +server. +@*@* + +The C program files in the directory are: +@item +connect_test.c -- test that a connect is possible +@item +get_password.c -- ask for a password from the console +@item +insert_test.c -- test that an insert is possible +@item +list_test.c -- test that a select is possible +@item +mysql.cc -- "The MySQL command tool" +@item +mysqladmin.c -- maintenance of MYSQL databases +@item +mysqlcheck.c -- check all databases, check connect, etc. +@item +mysqldump.c -- dump table's contents in ascii +@item +mysqlimport.c -- import file into a table +@item +mysqlmanager-pwgen.c -- pwgen seems to stand for "password +generation" +@item +mysqlmanagerc.c -- entry point for mysql manager +@item +mysqlshow.c -- show databases, tables or columns +@item +mysqltest.c -- test program +@item +password.c -- password checking routines +@item +select_test.c -- test that a select is possible +@item +showdb_test.c -- test that a show-databases is possible +@item +ssl_test.c -- test that SSL is possible +@item +thread_test.c -- test that threading is possible +@*@* + +@subsection cmd-line-utils + +Command-line utilities. +@*@* + +There are two subdirectories: \readline and \libedit. All the files +here are "non-MYSQL" files, in the sense that MySQL AB didn't produce +them, it just uses them. It should be unnecessary to study the +programs in these files unless +you are writing or debugging a tty-like client for MySQL, such as +mysql.exe. +@*@* + +The \readline subdirectory contains the files of the GNU Readline +Library, "a library for reading lines of text with interactive input +and history editing". The programs are copyrighted by the Free +Software Foundation. +@*@* + +The \libedit (library of edit functions) subdirectory has files +written by Christos Zoulas. They are for editing the line contents. +These are the program files in the \libedit subdirectory: +@item +chared.c -- character editor +@item +common.c -- common editor functions +@item +el.c -- editline interface functions +@item +emacs.c -- emacs functions +@item +fgetln.c -- get line +@item +hist.c -- history access functions +@item +history.c -- more history access functions +@item +key.c -- procedures for maintaining the extended-key map +@item +map.c -- editor function definitions +@item +parse.c -- parse an editline extended command +@item +prompt.c -- prompt printing functions +@item +read.c -- terminal read functions +@item +readline.c -- read line +@item +refresh.c -- "lower level screen refreshing functions" +@item +search.c -- "history and character search functions" +@item +sig.c -- for signal handling +@item +strlcpy.c -- string copy +@item +term.c -- "editor/termcap-curses interface" +@item +tokenizer.c -- Bourne shell line tokenizer +@item +tty.c -- for a tty interface +@item +vi.c -- commands used when in the vi (editor) mode +@*@* + +@subsection dbug + +Fred Fish's dbug library. +@*@* + +This is not really part of the MySQL package. Rather, it's a set of +public-domain routines which are useful for debugging MySQL programs. +@*@* + +How it works: One inserts a function call that begins with DBUG_* in +one of the regular MYSQL programs. For example, in get_password.c, you +will find this line: @* +DBUG_ENTER("get_tty_password"); @* +at the start of a routine, and this line: @* +DBUG_RETURN(my_strdup(to,MYF(MY_FAE))); @* +at the end of the routine. These lines don't affect production code. +Features of the dbug library include profiling and state pushing. +@*@* + +The C programs in this directory are: +@item +dbug.c -- The main module +@item +dbug_analyze.c -- Reads a file produced by trace functions +@item +example1.c -- A tiny example +@item +example2.c -- A tiny example +@item +example3.c -- A tiny example +@item +factorial.c -- A tiny example +@item +main.c -- A tiny example +@item +sanity.c -- Declaration of a variable +@*@* + +@subsection div + +Deadlock test. +@*@* + +This file contains only one program, deadlock_test.c. +@*@* + +@subsection Docs + +Preliminary documents about internals and new modules. +@*@* + +This directory doesn't have much at present that's very useful to the +student, but the plan is that some documentation related to the source +files and the internal workings of MySQL, including perhaps some +documentation from developers themselves, will be placed here. +@*@* + +These sub-directories are part of this directory: +@item +books -- .gif images and empty .txt files; no real information +@item +flags -- images of flags of countries +@item +images -- flag backgrounds and the MySQL dolphin logo +@item +mysql-logos -- more MySQL-related logos, some of them moving +@item +raw-flags -- more country flags, all .gif files +@item +support -- various files for generating texinfo/docbook +documentation +@item +to-be-included... -- an empty subdirectory +@item +translations -- some Portuguese myodbc documentation +@*@* + +In the main directory, you'll find some .txt files related to the +methods that MySQL uses to produce its printed and html documents, odd +bits in various languages, and the single file in the directory which +has any importance -- internals.texi -- The "MySQL Internals" +document. +@*@* + +Despite the name, internals.texi is not really much of a description +of MySQL internals. However, there is some useful description of the +functions in the mysys directory (see below), and of the structure of +client/server messages (doubtless very useful for people who want to +make their own JDBC drivers, or just sniff). +@*@* + +@subsection extra + +Eight minor standalone utility programs. +@*@* + +These eight programs are all standalone utilities, that is, they have +a main() function and their main role is to show information that the +MySQL server needs or produces. Most are unimportant. They are as +follows: +@item +my_print_defaults.c -- print all parameters in a default file +@item +mysql_install.c -- startup: install MySQL server +@item +mysql_waitpid.c -- wait for a program to terminate +@item +perror.c -- "print error" -- given error number, display message +@item +replace.c -- replace strings in text files +@item +resolve_stack_dump.c -- show symbolic info from a stack dump +@item +resolveip.c -- convert an IP address to a hostname, or vice versa +@*@* + +@subsection fs + +File System. +@*@* + +Here the word "File System" does not refer to the mere idea of a +directory of files on a disk drive, but to object-based access. The +concept has been compared with Oracle's Internet File System (iFS). +@*@* + +The original developer of the files on this directory is Tonu Samuel, +a former MySQL AB employee. Here is a quote (somewhat edited) from +Tonu Samuel's web page (http://no.spam.ee/~tonu/index.php): +"Question: What is it? +Answer: Actually this is not filesystem in common terms. MySQL FS +makes it possible to make SQL tables and some functions available over +a filesystem. MySQL does not require disk space, it uses an ordinary +MySQL daemon to store data." +The descriptions imply that this is a development project. +@*@* + +There are four program files in the directory: +@item +database.c -- "emulate filesystem behaviour on top of SQL database" +@item +libmysqlfs.c -- Search/replace, show-functions, and parse routines +@item +mysqlcorbafs.c -- Connection with the CORBA "Object Request Broker" +@item +mysqlcorbafs_test.c -- Utility to test the working of mysqlcorbafs.c + +@*@* + +@subsection heap + +The HEAP table handler. +@*@* + +All the MySQL table handlers (i.e. the handlers that MySQL itself +produces) have files with similar names and functions. Thus, this +(heap) directory contains a lot of duplication of the myisam directory +(for the MyISAM table handler). Such duplicates have been marked with +an "*" in the following list. For example, you will find that +\heap\hp_extra.c has a close equivalent in the myisam directory +(\myisam\mi_extra.c) with the same descriptive comment. +@*@* + +@item +hp_block.c -- Read/write a block (i.e. a page) +@item +hp_clear.c -- Remove all records in the database +@item +hp_close.c -- * close database +@item +hp_create.c -- * create a table +@item +hp_delete.c -- * delete a row +@item +hp_extra.c -- * for setting options and buffer sizes when optimizing +@item +hp_hash.c -- Hash functions used for saving keys +@item +hp_info.c -- * Information about database status +@item +hp_open.c -- * open database +@item +hp_panic.c -- * the hp_panic routine, probably for sudden shutdowns +@item +hp_rename.c -- * rename a table +@item +hp_rfirst.c -- * read first row through a specific key (very short) +@item +hp_rkey.c -- * read record using a key +@item +hp_rlast.c -- * read last row with same key as previously-read row +@item +hp_rnext.c -- * read next row with same key as previously-read row +@item +hp_rprev.c -- * read previous row with same key as previously-read +row +@item +hp_rrnd.c -- * read a row based on position +@item +hp_rsame.c -- * find current row using positional read or key-based +read +@item +hp_scan.c -- * read all rows sequentially +@item +hp_static.c -- * static variables (very short) +@item +hp_test1.c -- * testing basic functions +@item +hp_test2.c -- * testing database and storing results +@item +hp_update.c -- * update an existing row +@item +hp_write.c -- * insert a new row +@*@* + +There are fewer files in the heap directory than in the myisam +directory, because fewer are necessary. For example, there is no need +for a \myisam\mi_cache.c equivalent (to cache reads) or a +\myisam\log.c equivalent (to log statements). +@*@* + +@subsection Images + +Empty directory. +@*@* + +There are no files in this directory. +@*@* + +@subsection include + +Include (*.h) files. +@*@* + +These files may be included in C program files. Note that each +individual directory will also have its own *.h files, for including +in its own *.c programs. The *.h files in the include directory are +ones that might be included from more than one place. +@*@* + +For example, the mysys directory contains a C file named rijndael.c, +but does not include rijndael.h. The include directory contains +rijndael.h. Looking further, you'll find that rijndael.h is also +included in other places: by my_aes.c and my_aes.h. +@*@* + +The include directory contains 51 *.h (include) files. +@*@* + +@subsection innobase + +The Innobase (InnoDB) table handler. +@*@* + +A full description of these files can be found elsewhere in this +document. +@*@* + +@subsection isam + +The ISAM table handler. +@*@* + +The C files in this directory are: +@item +_cache.c -- for reading records from a cache +@item +changed.c -- a single routine for setting a "changed" flag (very +short) +@item +close.c -- close database +@item +create.c -- create a table +@item +_dbug.c -- support routines for use with "dbug" (see the \dbug +description) +@item +delete.c -- delete a row +@item +_dynrec.c -- functions to handle space-packed records and blobs +@item +extra.c -- setting options and buffer sizes when optimizing table +handling +@item +info.c -- Information about database status +@item +_key.c -- for handling keys +@item +_locking.c -- lock database +@item +log.c -- save commands in log file which myisamlog program can read +@item +_packrec.c -- compress records +@item +_page.c -- read and write pages containing keys +@item +panic.c -- the mi_panic routine, probably for sudden shutdowns +@item +range.c -- approximate count of how many records lie between two +keys +@item +rfirst.c -- read first row through a specific key (very short) +@item +rkey.c -- read a record using a key +@item +rlast.c -- read last row with same key as previously-read row +@item +rnext.c -- read next row with same key as previously-read row +@item +rprev.c -- read previous row with same key as previously-read row +@item +rrnd.c -- read a row based on position +@item +rsame.c -- find current row using positional read or key-based read +@item +rsamepos.c -- positional read +@item +_search.c -- key-handling functions +@item +static.c -- static variables (very short) +@item +_statrec.c -- functions to handle fixed-length records +@item +test1.c -- testing basic functions +@item +test2.c -- testing database and storing results +@item +test3.c -- testing locking +@item +update.c -- update an existing row +@item +write.c -- insert a new row +@item +pack_isam.c -- pack isam file (NOTE TO SELF ?? equivalent to +\myisam\myisampack.c) +@*@* + +Except for one minor C file (pack_isam.c) every program in the ISAM +directory has a counterpart in the MyISAM directory. For example +\isam\update.c corresponds to \myisam\mi_update.c. However, the +reverse is not true -- there are many files in the MyISAM directory +which have no counterpart in the ISAM directory. +@*@* + +The reason is simple -- it's because the ISAM files are becoming +obsolete. When MySQL programmers add new features, they add them for +MyISAM only. The student can therefore ignore all files in this +directory and study the MyISAM programs instead. +@*@* + +@subsection libmysql + +The MySQL Library, Part 1. +@*@* + +The files here are for producing MySQL as a library (e.g. a Windows +DLL). The idea is that, instead of producing separate mysql (client) +and mysqld (server) programs, one produces a library. Instead of +sending messages, the client part merely calls the server part. +@*@* + +The libmysql files are split into three directories: libmysql (this +one), libmysql_r (the next one), and libmysqld (the next one after +that). It may be that the original intention was that the libmysql +directory would hold the "client part" files, and the libmysqld +directory would hold the "server part" files. +@*@* + +The program files on this directory are: +@item +conf_to_src.c -- has to do with charsets +@item +dll.c -- initialization of the dll library +@item +errmsg.c -- English error messages, compare \mysys\errors.c +@item +get_password.c -- get password +@item +libmysql.c -- the main "packet-sending emulation" program +@item +manager.c -- initialize/connect/fetch with MySQL manager +@*@* + +@subsection libmysql_r + +The MySQL Library, Part 2. +@*@* + +This is a continuation of the libmysql directory. There is only one +file here: +@item +makefile.am +@*@* + +@subsection libmysqld + +The MySQL library, Part 3. +@*@* + +This is a continuation of the libmysql directory. The program files on +this directory are: +@item +libmysqld.c -- The called side, compare the mysqld.exe source +@item +lib_vio.c -- Emulate the vio directory's communication buffer +@*@* + +@subsection man + +Manual pages. +@*@* + +These are not the actual "man" (manual) pages, they are switches for +the production. +@*@* + +@subsection merge + +The MERGE table handler. +@*@* + +For a description of the MERGE table handler, see the MySQL Reference +Manual, section 7.2. +@*@* + +You'll notice that there seem to be several directories with +similar-sounding names of C files in them. That's because the MySQL +table handlers are all quite similar. +@*@* + +The related directories are: +@item +\isam -- for ISAM +@item +\myisam -- for MyISAM +@item +\merge -- for ISAM MERGE (mostly call functions in \isam programs) +@item +\myisammrg -- for MyISAM MERGE (mostly call functions in \myisam +programs) +@*@* + +To avoid duplication, only the \myisam program versions are discussed. +@*@* + +The C programs in this (merge) directory are: +@item +mrg_close.c -- compare \isam's close.c +@item +mrg_create.c -- "" create.c +@item +mrg_delete.c -- "" delete.c +@item +mrg_extra.c -- "" extra.c +@item +mrg_info.c -- "" info.c +@item +mrg_locking.c -- "" locking.c +@item +mrg_open.c -- "" open.c +@item +mrg_panic.c -- "" panic.c +@item +mrg_rrnd.c -- "" rrnd.c +@item +mrg_rsame.c -- "" rsame.c +@item +mrg_static.c -- "" static.c +@item +mrg_update.c -- "" update.c +@*@* + +@subsection myisam + +The MyISAM table handler. +@*@* + +The C files in this subdirectory come in six main groups: +@item +ft*.c files -- ft stands for "Full Text", code contributed by Sergei +Golubchik +@item +mi*.c files -- mi stands for "My Isam", these are the main programs +for Myisam +@item +myisam*.c files -- for example, "myisamchk" utility routine +functions source +@item +rt*.c files -- rt stands for "rtree", some code was written by +Alexander Barkov +@item +sp*.c files -- sp stands for "spatial", some code was written by +Ramil Kalimullin +@item +sort.c -- this is a single file that sorts keys for index-create +purposes +@*@* + +The "full text" and "rtree" and "spatial" program sets are for special +purposes, so this document focuses only on the mi*.c "myisam" C +programs. They are: +@item +mi_cache.c -- for reading records from a cache +@item +mi_changed.c -- a single routine for setting a "changed" flag (very +short) +@item +mi_check.c -- doesn't just do checks, ?? for myisamchk program? +@item +mi_checksum.c -- calculates a checksum for a row +@item +mi_close.c -- close database +@item +mi_create.c -- create a table +@item +mi_dbug.c -- support routines for use with "dbug" (see \dbug +description) +@item +mi_delete.c -- delete a row +@item +mi_delete_all.c -- delete all rows +@item +mi_delete_table.c -- delete a table (very short) +@item +mi_dynrec.c -- functions to handle space-packed records and blobs +@item +mi_extra.c -- setting options and buffer sizes when optimizing +@item +mi_info.c -- "Ger tillbaka en struct med information om isam-filen" +@item +mi_key.c -- for handling keys +@item +mi_locking.c -- lock database +@item +mi_log.c -- save commands in log file which myisamlog program can +read +@item +mi_open.c -- open database +@item +mi_packrec.c -- compress records +@item +mi_page.c -- read and write pages containing keys +@item +mi_panic.c -- the mi_panic routine, probably for sudden shutdowns +@item +mi_range.c -- approximate count of how many records lie between two +keys +@item +mi_rename.c -- rename a table +@item +mi_rfirst.c -- read first row through a specific key (very short) +@item +mi_rkey.c -- read a record using a key +@item +mi_rlast.c -- read last row with same key as previously-read row +@item +mi_rnext.c -- read next row with same key as previously-read row +@item +mi_rnext_same.c -- same as mi_rnext.c, but abort if the key changes +@item +mi_rprev.c -- read previous row with same key as previously-read row +@item +mi_rrnd.c -- read a row based on position +@item +mi_rsame.c -- find current row using positional read or key-based +read +@item +mi_rsamepos.c -- positional read +@item +mi_scan.c -- read all rows sequentially +@item +mi_search.c -- key-handling functions +@item +mi_static.c -- static variables (very short) +@item +mi_statrec.c -- functions to handle fixed-length records +@item +mi_test1.c -- testing basic functions +@item +mi_test2.c -- testing database and storing results +@item +mi_test3.c -- testing locking +@item +mi_unique.c -- functions to check if a row is unique +@item +mi_update.c -- update an existing row +@item +mi_write.c -- insert a new row +@*@* + +@subsection myisammrg + +MyISAM Merge table handler. +@*@* + +As with other table handlers, you'll find that the *.c files in the +myissammrg directory have counterparts in the myisam directory. In +fact, this general description of a myisammrg program is almost always +true: The myisammrg +function checks an argument, the myisammrg function formulates an +expression for passing to a myisam function, the myisammrg calls a +myisam function, the myisammrg function returns. +@*@* + +These are the 21 files in the myisammrg directory, with notes about +the myisam functions or programs they're connected with: +@item +myrg_close.c -- mi_close.c +@item +myrg_create.c -- mi_create.c +@item +myrg_delete.c -- mi_delete.c / delete last-read record +@item +myrg_extra.c -- mi_extra.c / "extra functions we want to do ..." +@item +myrg_info.c -- mi_info.c / display information about a mymerge file +@item +myrg_locking.c -- mi_locking.c / lock databases +@item +myrg_open.c -- mi_open.c / open a MyISAM MERGE table +@item +myrg_panic.c -- mi_panic.c / close in a hurry +@item +myrg_queue.c -- read record based on a key +@item +myrg_range.c -- mi_range.c / find records in a range +@item +myrg_rfirst.c -- mi_rfirst.c / read first record according to +specific key +@item +myrg_rkey.c -- mi_rkey.c / read record based on a key +@item +myrg_rlast.c -- mi_rlast.c / read last row with same key as previous +read +@item +myrg_rnext.c -- mi_rnext.c / read next row with same key as previous +read +@item +myrg_rnext_same.c -- mi_rnext_same.c / read next row with same key +@item +myrg_rprev.c -- mi_rprev.c / read previous row with same key +@item +myrg_rrnd.c -- mi_rrnd.c / read record with random access +@item +myrg_rsame.c -- mi_rsame.c / call mi_rsame function, see +\myisam\mi_rsame.c +@item +myrg_static.c -- mi_static.c / static variable declaration +@item +myrg_update.c -- mi_update.c / call mi_update function, see +\myisam\mi_update.c +@item +myrg_write.c -- mi_write.c / call mi_write function, see +\myisam\mi_write.c +@*@* + +@subsection mysql-test + +A test suite for mysqld. +@*@* + +The directory has a README file which explains how to run the tests, +how to make new tests (in files with the filename extension "*.test"), +and how to report errors. +@*@* + +There are four subdirectories: +@item +\misc -- contains one minor Perl program +@item +\r -- contains *.result, i.e. "what happened" files and +*.required, i.e. "what should happen" file +@item +\std_data -- contains standard data for input to tests +@item +\t -- contains tests +@*@* + +There are 186 *.test files in the \t subdirectory. Primarily these are +SQL scripts which try out a feature, output a result, and compare the +result with what's required. Some samples of what the test files check +are: latin1_de comparisons, date additions, the HAVING clause, outer +joins, openSSL, load data, logging, truncate, and UNION. +@*@* + +There are other tests in these directories: +@itemize @bullet +@item +sql-bench +@item +repl-tests +@item +tests +@end itemize + +@subsection mysys + +MySQL system library (Low level routines for file access etc.). +@*@* + +There are 115 *.c programs in this directory: +@item +array.c -- Dynamic array handling +@item +charset.c -- Using dynamic character sets, set default character +set, ... +@item +charset2html.c -- Checking what character set a browser is using +@item +checksum.c -- Calculate checksum for a memory block, used for +pack_isam +@item +default.c -- Find defaults from *.cnf or *.ini files +@item +errors.c -- English text of global errors +@item +hash.c -- Hash search/compare/free functions "for saving keys" +@item +list.c -- Double-linked lists +@item +make-conf.c -- "Make a charset .conf file out of a ctype-charset.c +file" +@item +md5.c -- MD5 ("Message Digest 5") algorithm from RSA Data Security +@item +mf_brkhant.c -- Prevent user from doing a Break during critical +execution +@item +mf_cache.c -- "Open a temporary file and cache it with io_cache" +@item +mf_dirname.c -- Parse/convert directory names +@item +mf_fn_ext.c -- Get filename extension +@item +mf_format.c -- Format a filename +@item +mf_getdate.c -- Get date, return in yyyy-mm-dd hh:mm:ss format +@item +mf_iocache.c -- Cached read/write of files in fixed-size units +@item +mf_iocache2.c -- Continuation of mf_iocache.c +@item +mf_keycache.c -- Key block caching for certain file types +@item +mf_loadpath.c -- Return full path name (no ..\ stuff) +@item +mf_pack.c -- Packing/unpacking directory names for create purposes +@item +mf_path.c -- Determine where a program can find its files +@item +mf_qsort.c -- Quicksort +@item +mf_qsort2.c -- Quicksort, part 2 +@item +mf_radix.c -- Radix sort +@item +mf_same.c -- Determine whether filenames are the same +@item +mf_sort.c -- Sort with choice of Quicksort or Radix sort +@item +mf_soundex.c -- Soundex algorithm derived from EDN Nov. 14, 1985 +(pg. 36) +@item +mf_strip.c -- Strip trail spaces from a string +@item +mf_tempdir.c -- Initialize/find/free temporary directory +@item +mf_tempfile.c -- Create a temporary file +@item +mf_unixpath.c -- Convert filename to UNIX-style filename +@item +mf_util.c -- Routines, #ifdef'd, which may be missing on some +machines +@item +mf_wcomp.c -- Comparisons with wildcards +@item +mf_wfile.c -- Finding files with wildcards +@item +mulalloc.c -- Malloc many pointers at the same time +@item +my_aes.c -- AES encryption +@item +my_alarm.c -- Set a variable value when an alarm is received +@item +my_alloc.c -- malloc of results which will be freed simultaneously +@item +my_append.c -- one file to another +@item +my_bit.c -- smallest X where 2^X >= value, maybe useful for +divisions +@item +my_bitmap.c -- Handle uchar arrays as large bitmaps +@item +my_chsize.c -- Truncate file if shorter, else fill with a filler +character +@item +my_clock.c -- Time-of-day ("clock()") function, with OS-dependent +#ifdef's +@item +my_compress.c -- Compress packet (see also description of \zlib +directory) +@item +my_copy.c -- Copy files +@item +my_create.c -- Create file +@item +my_delete.c -- Delete file +@item +my_div.c -- Get file's name +@item +my_dup.c -- Open a duplicated file +@item +my_error.c -- Return formatted error to user +@item +my_fopen.c -- File open +@item +my_fstream.c -- Streaming file read/write +@item +my_getwd.c -- Get working directory +@item +my_gethostbyname.c -- Thread-safe version of standard net +gethostbyname() func +@item +my_getopt.c -- Find out what options are in effect +@item +my_handler.c -- Compare two keys in various possible formats +@item +my_init.c -- Initialize variables and functions in the mysys library +@item +my_lib.c -- Compare/convert directory names and file names +@item +my_lock.c -- Lock part of a file +@item +my_lockmem.c -- "Allocate a block of locked memory" +@item +my_lread.c -- Read a specified number of bytes from a file into +memory +@item +my_lwrite.c -- Write a specified number of bytes from memory into a +file +@item +my_malloc.c -- Malloc (memory allocate) and dup functions +@item +my_messnc.c -- Put out a message on stderr with "no curses" +@item +my_mkdir.c -- Make directory +@item +my_net.c -- Thread-safe version of net inet_ntoa function +@item +my_netware.c -- Functions used only with the Novell Netware version +of MySQL +@item +my_once.c -- Allocation / duplication for "things we don't need to +free" +@item +my_open.c -- Open a file +@item +my_os2cond.c -- OS2-specific: "A simple implementation of posix +conditions" +@item +my_os2dirsrch.c -- OS2-specific: Emulate a Win32 directory search +@item +my_os2dlfcn.c -- OS2-specific: Emulate UNIX dynamic loading +@item +my_os2file64.c -- OS2-specific: For File64bit setting +@item +my_os2mutex.c -- OS2-specific: For mutex handling +@item +my_os2thread.c -- OS2-specific: For thread handling +@item +my_os2tls.c -- OS2-specific: For thread-local storage +@item +my_port.c -- AIX-specific: my_ulonglong2double() +@item +my_pread.c -- Read a specified number of bytes from a file +@item +my_pthread.c -- A wrapper for thread-handling functions in different +OSs +@item +my_quick.c -- Read/write (labelled a "quicker" interface, perhaps +obsolete) +@item +my_read.c -- Read a specified number of bytes from a file, possibly +retry +@item +my_realloc.c -- Reallocate memory allocated with my_alloc.c +(probably) +@item +my_redel.c -- Rename and delete file +@item +my_rename.c -- Rename without delete +@item +my_seek.c -- Seek, i.e. point to a spot within a file +@item +my_semaphore.c -- Semaphore routines, for use on OS that doesn't +support them +@item +my_sleep.c -- Wait n microseconds +@item +my_static.c -- Static-variable definitions +@item +my_symlink.c -- Read a symbolic link (symlinks are a UNIX thing, I +guess) +@item +my_symlink2.c -- Part 2 of my_symlink.c +@item +my_tempnam.c -- Obsolete temporary-filename routine used by ISAM +table handler +@item +my_thr_init.c -- initialize/allocate "all mysys & debug thread +variables" +@item +my_wincond.c -- Windows-specific: emulate Posix conditions +@item +my_winsem.c -- Windows-specific: emulate Posix threads +@item +my_winthread.c -- Windows-specific: emulate Posix threads +@item +my_write.c -- Write a specified number of bytes to a file +@item +ptr_cmp.c -- Point to an optimal byte-comparison function +@item +queues.c -- Handle priority queues as in Robert Sedgewick's book +@item +raid2.c -- RAID support (the true implementation is in raid.cc) +@item +rijndael.c -- "Optimised ANSI C code for the Rijndael cipher (now +AES") +@item +safemalloc.c -- A version of the standard malloc() with safety +checking +@item +sha1.c -- Implementation of Secure Hashing Algorithm 1 +@item +string.c -- Initialize/append/free dynamically-sized strings +@item +testhash.c -- Standalone program: test the hash library routines +@item +test_charset.c -- Standalone program: display character set +information +@item +test_dir.c -- Standalone program: placeholder for "test all +functions" idea +@item +test_fn.c -- Standalone program: apparently tests a function +@item +test_xml.c -- Standalone program: test XML routines +@item +thr_alarm.c -- Thread alarms and signal handling +@item +thr_lock.c -- "Read and write locks for Posix threads" +@item +thr_mutex.c -- A wrapper for mutex functions +@item +thr_rwlock.c -- Synchronizes the readers' thread locks with the +writer's lock +@item +tree.c -- Initialize/search/free binary trees +@item +typelib.c -- Determine what type a field has +@*@* + +You can find documentation for the main functions in these files +elsewhere in this document. +For example, the main functions in my_getwd.c are described thus: +@*@* + +@example +"int my_getwd _A((string buf, uint size, myf MyFlags)); @* + int my_setwd _A((const char *dir, myf MyFlags)); @* + Get and set working directory." @* +@end example + +@subsection netware + +Files related to the Novell NetWare version of MySQL. +@*@* + +There are 39 files on this directory. Most have filename extensions of +*.def, *.sql, or *.c. +@*@* + +The twenty-five *.def files are all from Novell Inc. They contain import or +export symbols. (".def" is a common filename extension for +"definition".) +@*@* + +The two *.sql files are short scripts of SQL statements used in +testing. +@*@* + +These are the five *.c files, all from Novell Inc.: +@itemize @bullet +@item +libmysqlmain.c -- Only one function: init_available_charsets() +@item +my_manage.c -- Standalone management utility +@item +mysql_install_db.c -- Compare \scripts\mysql_install_db.sh +@item +mysql_test_run.c -- Short test program +@item +mysqld_safe.c -- Compare \scripts\mysqld_safe.sh +@end itemize + +Perhaps the most important file is: +@item +netware.patch -- NetWare-specific build instructions and switches +(compare \mysql-4.1\ltmain.sh) +@*@* + +For instructions about basic installation, see "Deployment Guide For +NetWare AMP" at: +@url{http://developer.novell.com/ndk/whitepapers/namp.htm} +@* + +@subsection NEW-RPMS + +New "RPM Package Manager" files. +@*@* + +This directory is not part of the Windows distribution. Perhaps in +MYSQL's Linux distribution it has files for use with Red Hat +installations -- a point that needs checking someday. +@*@* + +@subsection os2 + +Routines for working with the OS2 operating system. +@*@* + +The files in this directory are the product of the efforts of three +people from outside MySQL: Yuri Dario, Timo Maier, and John M +Alfredsson. There are no .C program files in this directory. +@*@* + +The contents of \os2 are: +@item +A Readme.Txt file +@item +An \include subdirectory containing .h files which are for OS/2 only +@item +Files used in the build process (configuration, switches, and one +.obj) +@*@* + +The README file refers to MySQL version 3.23, which suggests that +there have been no updates for MySQL 4.0 for this section. +@*@* + +@subsection pstack + +Process stack display. +@*@* + +This is a set of publicly-available debugging aids which all do pretty +well the same thing: display the contents of the stack, along with +symbolic information, for a running process. There are versions for +various object file formats (such as ELF and IEEE-695). Most of the +programs are copyrighted by the Free Software Foundation and are +marked as "part of GNU Binutils". +@*@* + +In other words, the pstack files are not really part of the MySQL +library. They are merely useful when you re-program some MYSQL code +and it crashes. +@*@* + +@subsection regex + +Regular Expression library for support of REGEXP function. +@*@* + +This is the copyrighted product of Henry Spencer from the University +of Toronto. It's a fairly-well-known implementation of the +requirements of POSIX 1003.2 Section 2.8. The library is bundled with +Apache and is the default implementation for regular-expression +handling in BSD Unix. MySQL's Monty Widenius has made minor changes in +three programs (debug.c, engine.c, regexec.c) but this is not a MySQL +package. MySQL calls it only in order to support two MySQL functions: +REGEXP and RLIKE. +@*@* + +Some of Mr Spencer's documentation for the regex library can be found +in the README and WHATSNEW files. +@*@* + +One MySQL program which uses regex is \cmd-line-utils\libedit\search.c +@*@* + +This program calls the 'regcomp' function, which is the entry point in +\regex\regexp.c. +@*@* + +@subsection repl-tests + +Test cases for replication. +@*@* + +There are six short and trivial-looking tests in these subdirectories: +@item +\test-auto-inc -- Do auto-Increment columns work? +@item +\test-bad-query -- Does insert in PK column work? +@item +\test-dump -- Do LOAD statements work? +@item +\test-repl -- Does replication work? +@item +\test-repl-alter -- Does ALTER TABLE work? +@item +\test-repl-ts -- Does TIMESTAMP column work? +@*@* + +@subsection SCCS + +Source Code Control System. +@*@* + +You will see this directory if and only if you used BitKeeper for +downloading the source. The files here are for BitKeeper +administration and are not of interest to application programmers. +@*@* + +@subsection scripts + +SQL batches, e.g. for converting msql to MySQL. +@*@* + +The *.sh filename extension apparently stands for "shell script". +Linux programmers use it where Windows programmers would use a *.bat +(batch filename extension). +@*@* + +The *.sh files on this directory are: +@item +fill_help_tables.sh -- Create help-information tables and insert +@item +make_binary_distribution.sh -- Get configure information, make, +produce tar +@item +msql2mysql.sh -- Convert mSQL to MySQL +@item +mysqlbug.sh -- Create a bug report and mail it +@item +mysqld_multi.sh -- Start/stop any number of mysqld instances +@item +mysqld_safe-watch.sh -- Start/restart in safe mode +@item +mysqld_safe.sh -- Start/restart in safe mode +@item +mysqldumpslow.sh -- Parse and summarize the slow query log +@item +mysqlhotcopy.sh -- Hot backup +@item +mysql_config.sh -- Get configure information that client might need +@item +mysql_convert_table_format.sh -- Conversion, e.g. from ISAM to +MyISAM +@item +mysql_explain_log.sh -- Put a log (made with --log) into a MySQL +table +@item +mysql_find_rows.sh -- Search for queries containing +@item +mysql_fix_extensions.sh -- Renames some file extensions, not +recommended +@item +mysql_fix_privilege_tables.sh -- Fix mysql.user etc. if upgrading to +MySQL 3.23.14+ +@item +mysql_install_db.sh -- Create privilege tables and func table +@item +mysql_secure_installation.sh -- Disallow remote root login, +eliminate test, etc. +@item +mysql_setpermission.sh -- Aid to add users or databases, sets +privileges +@item +mysql_tableinfo.sh -- Puts info re MySQL tables into a MySQL table +@item +mysql_zap.sh -- Kill processes which match pattern +@*@* + +@subsection sql + +Programs for handling SQL commands. The "core" of MySQL. +@*@* + +These are the .c and .cc files in the sql directory: +@item +cache_manager.cc -- manages a number of blocks +@item +convert.cc -- convert tables between different character sets +@item +derror.cc -- read language-dependent message file +@item +des_key_file.cc -- load DES keys from plaintext file +@item +field.cc -- "implement classes defined in field.h" (long) +@item +field_conv.cc -- functions to copy data to or from fields +@item +filesort.cc -- sort file +@item +frm_crypt.cc -- contains only one short function: get_crypt_for_frm +@item +gen_lex_hash.cc -- Knuth's algorithm from Vol 3 Sorting and +Searching, Chapter 6.3 +@item +gstream.cc -- GTextReadStream +@item +handler.cc -- handler-calling functions +@item +hash_filo.cc -- static-sized hash tables +@item +ha_berkeley.cc -- Handler: BDB +@item +ha_heap.cc -- Handler: Heap +@item +ha_innodb.cc -- Handler: InnoDB +@item +ha_isam.cc -- Handler: ISAM +@item +ha_isammrg.cc -- Handler: (ISAM MERGE) +@item +ha_myisam.cc -- Handler: MyISAM +@item +ha_myisammrg.cc -- Handler: (MyISAM MERGE) +@item +hostname.cc -- Given IP, return hostname +@item +init.cc -- Init and dummy functions for interface with unireg +@item +item.cc -- Item functions +@item +item_buff.cc -- Buffers to save and compare item values +@item +item_cmpfunc.cc -- Definition of all compare functions +@item +item_create.cc -- Create an item. Used by lex.h. +@item +item_func.cc -- Numerical functions +@item +item_row.cc -- Row items for comparing rows and for IN on rows +@item +item_sum.cc -- Set functions (sum, avg, etc.) +@item +item_strfunc.cc -- String functions +@item +item_subselect.cc -- Item subselect +@item +item_timefunc.cc -- Date/time functions, e.g. week of year +@item +item_uniq.cc -- Empty file, here for compatibility reasons +@item +key.cc -- Functions to handle keys and fields in forms +@item +lock.cc -- Locks +@item +log.cc -- Logs +@item +log_event.cc -- Log event +@item +matherr.c -- Handling overflow, underflow, etc. +@item +mf_iocache.cc -- Caching of (sequential) reads +@item +mini_client.cc -- Client included in server for server-server +messaging +@item +mysqld.cc -- Source of mysqld.exe +@item +my_lock.c -- Lock part of a file +@item +net_serv.cc -- Read/write of packets on a network socket +@item +nt_servc.cc -- Initialize/register/remove an NT service +@item +opt_ft.cc -- Create a FT or QUICK RANGE based on a key (very short) +* opt_range.cc -- Range of keys +@item +opt_sum.cc -- Optimize functions in presence of (implied) GROUP BY +@item +password.c -- Password checking +@item +procedure.cc -- Procedure +@item +protocol.cc -- Low level functions for storing data to be sent to +client +@item +records.cc -- Functions to read, write, and lock records +@item +repl_failsafe.cc -- Replication fail-save +@item +set_var.cc -- MySQL variables +@item +slave.cc -- Procedures for a slave in a master/slave (replication?) +relation +@item +spatial.cc -- Geometry stuff (lines, points, etc.) +@item +sql_acl.cc -- Functions related to ACL security +@item +sql_analyse.cc -- Analyse an input string (?) +@item +sql_base.cc -- Basic functions needed by many modules +@item +sql_cache.cc -- SQL cache, with long comments about how caching +works +@item +sql_class.cc -- SQL class +@item +sql_crypt.cc -- Encode / decode, very short +@item +sql_db.cc -- Create / drop database +@item +sql_delete.cc -- The DELETE statement +@item +sql_derived.cc -- Derived tables, with long comments +@item +sql_do.cc -- The DO statement +@item +sql_error.cc -- Errors and warnings +@item +sql_handler.cc -- Direct access to ISAM +@item +sql_help.cc -- The HELP statement (if there is one?) +@item +sql_insert.cc -- The INSERT statement +@item +sql_lex.cc -- Related to lex or yacc +@item +sql_list.cc -- Only list_node_end_of_list, short +@item +sql_load.cc -- The LOAD DATA statement? +@item +sql_map.cc -- Memory-mapped files? +@item +sql_manager.cc -- Maintenance tasks, e.g. flushing the buffers +periodically +@item +sql_olap.cc -- ROLLUP +@item +sql_parse.cc -- Parse an SQL statement +@item +sql_prepare.cc -- Prepare an SQL statement +@item +sql_repl.cc -- Replication +@item +sql_rename.cc -- Rename table +@item +sql_select.cc -- Select and join optimisation +@item +sql_show.cc -- The SHOW statement +@item +sql_string.cc -- String functions: alloc, realloc, copy, convert, +etc. +@item +sql_table.cc -- The DROP TABLE and ALTER TABLE statements +@item +sql_test.cc -- Some debugging information +@item +sql_udf.cc -- User-defined functions +@item +sql_union.cc -- The UNION operator +@item +sql_update.cc -- The UPDATE statement +@item +stacktrace.c -- Display stack trace (Linux/Intel only?) +@item +table.cc -- Table metadata retrieval, mostly +@item +thr_malloc.cc -- Mallocs used in threads +@item +time.cc -- Date and time functions +@item +udf_example.cc -- Example file of user-defined functions +@item +uniques.cc -- Function to handle quick removal of duplicates +@item +unireg.cc -- Create a unireg form file from a FIELD and field-info +struct +@*@* + +@subsection sql-bench + +The MySQL Benchmarks. +@*@* + +This directory has the programs and input files which MySQL uses for +its comparisons of MySQL, PostgreSQL, mSQL, Solid, etc. Since MySQL +publishes the comparative results, it's only right that it should make +available all the material necessary to reproduce all the tests. +@*@* + +There are five subdirectories and sub-subdirectories: +@item +\Comments -- Comments about results from tests of Access, Adabas, +etc. +@item +\Data\ATIS -- .txt files containing input data for the "ATIS" tests +@item +\Data\Wisconsin -- .txt files containing input data for the +"Wisconsin" tests +@item +\Results -- old test results +@item +\Results-win32 -- old test results from Windows 32-bit tests +@*@* + +There are twenty-four *.sh (shell script) files, which involve Perl +programs. +@*@* + +There are three *.bat (batch) files. +@*@* + +There is one README file and one TODO file. +@*@* + +@subsection SSL + +Secure Sockets Layer. +@*@* + +This isn't a code directory. It contains a short note from Tonu Samuel +(the NOTES file) and seven *.pem files. PEM stands for "Privacy +Enhanced Mail" and is an Internet standard for adding security to +electronic mail. Finally, there are two short scripts for running +clients and servers over SSL connections. +@*@* + +@subsection strings + +The string library. +@*@* + +Many of the files in this subdirectory are equivalent to well-known +functions that appear in most C string libraries. For those, there is +documentation available in most compiler handbooks. +@*@* + +On the other hand, some of the files are MySQL additions or +improvements. Often the MySQL changes are attempts to optimize the +standard libraries. It doesn't seem that anyone tried to optimize for +recent Pentium class processors, though. +@*@* + +The .C files are: +@item +atof.c -- ascii-to-float, MySQL version +@item +bchange.c -- short replacement routine written by Monty Widenius in +1987 +@item +bcmp.c -- binary compare, rarely used +@item +bcopy-duff.c -- block copy: attempt to copy memory blocks faster +than cmemcpy +@item +bfill.c -- byte fill, to fill a buffer with (length) copies of a +byte +@item +bmove.c -- block move +@item +bmove512.c -- "should be the fastest way to move a multiple of 512 +bytes" +@item +bmove_upp.c -- bmove.c variant, starting with last byte +@item +bzero.c -- something like bfill with an argument of 0 +@item +conf_to_src.c -- reading a configuration file (NOTE TO SELF ? what's +this doing here?) +@item +ctype*.c -- string handling programs for each char type MySQL +handles +@item +do_ctype.c -- display case-conversion and sort-conversion tables +@item +int2str.c -- integer-to-string +@item +is_prefix.c -- checks whether string1 starts with string2 +@item +llstr.c -- convert long long to temporary-buffer string, return +pointer +@item +longlong2str.c -- ditto, but to argument-buffer +@item +memcmp.c -- memory compare +@item +memset.c -- memory set +@item +my_vsnprintf.c -- variant of printf +@item +r_strinstr.c -- see if one string is within another +@item +str2int.c -- convert string to integer +@item +strappend.c -- append one string to another +@item +strcat.c -- concatenate strings +@item +strcend.c -- point to where a character C occurs within str, or NULL +@item +strchr.c -- point to first place in string where character occurs +@item +strcmp.c -- compare two strings +@item +strcont.c -- point to where any one of a set of characters appears +@item +strend.c -- point to the '\0' byte which terminates str +@item +strfill.c -- fill a string with n copies of a byte +@item +strinstr.c -- find string within string +@item +strlen.c -- return length of string in bytes +@item +strmake.c -- move n characters, or move till end +@item +strmov.c -- move source to dest and return pointer to end +@item +strnlen.c -- return length of string, or return n +@item +strnmov.c -- move source to dest for source size, or for n bytes +@item +strrchr.c -- find a character within string, searching from end +@item +strstr.c -- find an instance of pattern within source +@item +strto.c -- string to long, to long long, to unsigned long, etc. +@item +strtol.c -- string to long +@item +strtoll.c -- string to long long +@item +strtoul.c -- string to unsigned long +@item +strtoull.c -- string to unsigned long long +@item +strxmov.c -- move a series of concatenated source strings to dest +@item +strxnmov.c -- like strxmov.c but with a maximum length n +@item +str_test.c -- test of all the string functions encoded in assembler +@item +udiv.c -- unsigned long divide +@item +xml.c -- read and parse XML strings +@*@* + +There are also four .ASM files -- macros.asm, ptr_cmp.asm, +strings.asm, and strxmov.asm -- which can replace some of the +C-program functions. But again, they look like optimizations for old +members of the Intel processor family. +@*@* + +@subsection support-files + +Support files. +@*@* + +The files here are for building ("making") MySQL given a package +manager, compiler, linker, and other build tools. The support files +provide instructions and switches for the build processes. +@*@* + +@subsection tests + +Tests in Perl. +@*@* + +These are tests that were run once to check for bugs in various +scenarios: forks, locks, big records, exporting, truncating, etc. +@*@* + +@subsection tools + +Tools -- well, actually, one tool. +@*@* + +The only file is: +@item +mysqlmanager.c -- A "server management daemon" by Sasha Pachev +@*@* + +@subsection VC++Files + +Visual C++ Files. +@*@* + +Includes this entire directory, repeated for VC++ (Windows) use. +@*@* + +VC++Files has subdirectories which are copies of the main directories. +For example there is a subdirectory \VC++Files\heap, which has the +same files as \heap. So for a description of the files in +\VC++Files\heap, see the description of the files in \heap. The same +applies for almost all of VC++Files's subdirectories (bdb, client, +isam, libmysql, etc.). The difference is that the \VC++Files variants +are specifically for compilation with Microsoft Visual C++ in 32-bit +Windows environments. +@*@* + +In addition to the "subdirectories which are duplicates of +directories", VC++Files contains these subdirectories, which are not +duplicates: +@item +comp_err -- (nearly empty) +@item +contrib -- (nearly empty) +@item +InstallShield script files +@item +isamchk -- (nearly empty) +@item +libmysqltest -- one small non-MySQL test program: mytest.c +@item +myisamchk -- (nearly empty) +@item +myisamlog -- (nearly empty) +@item +myisammrg -- (nearly empty) +@item +mysqlbinlog -- (nearly empty) +@item +mysqlmanager -- MFC foundation class files created by AppWizard +@item +mysqlserver -- (nearly empty) +@item +mysqlshutdown -- one short program, mysqlshutdown.c +@item +mysqlwatch.c -- Windows service initialization and monitoring +@item +my_print_defaults -- (nearly empty) +@item +pack_isam -- (nearly empty) +@item +perror -- (nearly empty) +@item +prepare -- (nearly empty) +@item +replace -- (nearly empty) +@item +SCCS -- source code control system +@item +test1 -- tests connecting via X threads +@item +thr_insert_test -- (nearly empty) +@item +thr_test -- one short program used to test for memory-allocation bug +@item +winmysqladmin -- the winmysqladmin.exe source. machine-generated? +@*@* + +@subsection vio + +Virtual I/O Library. +@*@* + +The VIO routines are wrappers for the various network I/O calls that +happen with different protocols. The idea is that in the main modules +one won't have to write separate bits of code for each protocol. Thus +vio's purpose is somewhat like the purpose of Microsoft's winsock +library. +@*@* + +The underlying protocols at this moment are: TCP/IP, Named Pipes (for +WindowsNT), Shared Memory, and Secure Sockets (SSL). +@*@* + +The C programs are: +@item +test-ssl.c -- Short standalone test program: SSL +@item +test-sslclient.c -- Short standalone test program: clients +@item +test-sslserver.c -- Short standalone test program: server +@item +vio.c -- Declarations + open/close functions +@item +viosocket.c -- Send/retrieve functions +@item +viossl.c -- SSL variations for the above +@item +viosslfactories.c -- Certification / Verification +@item +viotest.cc -- Short standalone test program: general +@item +viotest-ssl.c -- Short standalone test program: SSL +@item +viotest-sslconnect.cc -- Short standalone test program: SSL connect +@*@* + +The older functions -- raw_net_read, raw_net_write -- are now +obsolete. +@*@* + +@subsection zlib + +Data compression library. +@*@* + +Zlib -- which presumably stands for "Zip Library" -- is not a MySQL +package. It was produced by the GNU Zip (gzip.org) people. Zlib is a +variation of the famous "Lempel-Ziv" method, which is also used by +"Zip". The method for reducing the size of any arbitrary string of +bytes is as follows: +@itemize @bullet +@item +Find a substring which occurs twice in the string. +@item +Replace the second occurrence of the substring with (a) a pointer to +the first occurrence, plus (b) an indication of the length of the +first occurrence. +@end itemize + +There is a full description of the library's functions in the gzip +manual at: @* +@url{http://www.gzip.org/zlib/manual.html} @* +There is therefore no need to list the modules in this document. +@*@* + +The MySQL program that uses zlib is \mysys\my_compress.c. The use is +for packet compression. The client sends messages to the server which +are compressed by zlib. See also: \sql\net_serv.cc. + +@chapter Annotated List Of Files in the InnoDB Source Code Distribution + +ERRATUM BY HEIKKI TUURI (START) +@*@* + +Errata about InnoDB row locks:@*@* + +@example + #define LOCK_S 4 /* shared */ + #define LOCK_X 5 /* exclusive */ +... +@strong{/* Waiting lock flag */} + #define LOCK_WAIT 256 +/* this wait bit should be so high that it can be ORed to the lock +mode and type; when this bit is set, it means that the lock has not +yet been granted, it is just waiting for its turn in the wait queue */ +... +@strong{/* Precise modes */} + #define LOCK_ORDINARY 0 +/* this flag denotes an ordinary next-key lock in contrast to LOCK_GAP +or LOCK_REC_NOT_GAP */ + #define LOCK_GAP 512 +/* this gap bit should be so high that it can be ORed to the other +flags; when this bit is set, it means that the lock holds only on the +gap before the record; for instance, an x-lock on the gap does not +give permission to modify the record on which the bit is set; locks of +this type are created when records are removed from the index chain of +records */ + #define LOCK_REC_NOT_GAP 1024 +/* this bit means that the lock is only on the index record and does +NOT block inserts to the gap before the index record; this is used in +the case when we retrieve a record with a unique key, and is also used +in locking plain SELECTs (not part of UPDATE or DELETE) when the user +has set the READ COMMITTED isolation level */ + #define LOCK_INSERT_INTENTION 2048 +/* this bit is set when we place a waiting gap type record lock +request in order to let an insert of an index record to wait until +there are no conflicting locks by other transactions on the gap; note +that this flag remains set when the waiting lock is granted, or if the +lock is inherited to a neighboring record */ +@end example +@* + +ERRATUM BY HEIKKI TUURI (END) +@*@* + +The InnoDB source files are the best place to look for information +about internals of the file structure that MySQLites can optionally +use for transaction support. But when you first look at all the +subdirectories and file names you'll wonder: Where Do I Start? It can +be daunting. +@*@* + +Well, I've been through that phase, so I'll pass on what I had to +learn on the first day that I looked at InnoDB source files. I am very +sure that this will help you grasp, in overview, the organization of +InnoDB modules. I'm also going to add comments about what is going on +-- which you should mistrust! These comments are reasonable working +hypotheses; nevertheless, they have not been subjected to expert peer +review. +@*@* + +Here's how I'm going to organize the discussion. I'll take each of the +32 InnoDB subdirectories that come with the MySQL 4.0 source code in +\mysql\innobase (on my Windows directory). The format of each section +will be like this every time: +@*@* + +@strong{\subdirectory-name (LONGER EXPLANATORY NAME)}@* +@multitable @columnfractions .10 .20 .40 .50 +@item @strong{File Name} @tab @strong{What Name Stands For} @tab @strong{Size} @tab @strong{Comment Inside File} +@item file-name +@tab my-own-guess +@tab in-bytes +@tab from-the-file-itself +@end multitable +...@* +My-Comments@* +@* + +For example: @* +@example +" +@strong{\ha (HASHING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + ha0ha.c Hashing/Hashing 7,452 Hash table with external chains + + Comments about hashing will be here. +" +@end example +@* + +The "Comment Inside File" column is a direct copy from the first /* +comment */ line inside the file. All other comments are mine. After +I've discussed each directory, I'll finish with some notes about +naming conventions and a short list of URLs that you can use for +further reference. +@*@* + +Now let's begin. +@*@* + +@example +@strong{\ha (HASHING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + ha0ha.c Hashing / Hashing 7,452 Hash table with external chains + +I'll hold my comments until the next section, \hash (HASHING). + +@strong{\hash (HASHING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + hash0hash.c Hashing / Hashing 3,257 Simple hash table utility + +The two C programs in the \ha and \hashing directories -- ha0ha.c and +hash0hash.c -- both refer to a "hash table" but hash0hash.c is +specialized, it is mostly about accessing points in the table under +mutex control. + +When a "database" is so small that InnoDB can load it all into memory +at once, it's more efficient to access it via a hash table. After all, +no disk i/o can be saved by using an index lookup, if there's no disk. + +@strong{\os (OPERATING SYSTEM)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + os0shm.c OS / Shared Memory 3,150 To shared memory primitives + os0file.c OS / File 64,412 To i/o primitives + os0thread.c OS / Thread 6,827 To thread control primitives + os0proc.c OS / Process 3,700 To process control primitives + os0sync.c OS / Synchronization 10,208 To synchronization primitives + +This is a group of utilities that other modules may call whenever they +want to use an operating-system resource. For example, in os0file.c +there is a public InnoDB function named os_file_create_simple(), which +simply calls the Windows-API function CreateFile. Naturally the +contents of this group are somewhat different for other operating systems. + +The "Shared Memory" functions in os0shm.c are only called from the +communications program com0shm.c (see \com COMMUNICATIONS). The i/o +and thread-control primitives are called extensively. The word +"synchronization" in this context refers to the mutex-create and +mutex-wait functionality. + +@strong{\ut (UTILITIES)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + ut0ut.c Utilities / Utilities 7,041 Various utilities + ut0byte.c Utilities / Debug 1,856 Byte utilities + ut0rnd.c Utilities / Random 1,475 Random numbers and hashing + ut0mem.c Utilities / Memory 5,530 Memory primitives + ut0dbg.c Utilities / Debug 642 Debug utilities + +The two functions in ut0byte.c are just for lower/upper case +conversion and comparison. The single function in ut0rnd.c is for +finding a prime slightly greater than the given argument, which is +useful for hash functions, but unrelated to randomness. The functions +in ut0mem.c are wrappers for "malloc" and "free" calls -- for the +real "memory" module see section \mem (MEMORY). Finally, the +functions in ut0ut.c are a miscellany that didn't fit better elsewhere: +get_high_bytes, clock, time, difftime, get_year_month_day, and "sprintf" +for various diagnostic purposes. + +In short: the \ut group is trivial. + +@strong{\buf (BUFFERING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + buf0buf.c Buffering / Buffering 53,246 The database buffer buf_pool + buf0flu.c Buffering / Flush 23,711 ... flush algorithm + buf0lru.c / least-recently-used 20,245 ... replacement algorithm + buf0rea.c Buffering / read 17,399 ... read + +There is a separate file group (\mem MEMORY) which handles memory +requests in general.A "buffer" usually has a more specific +definition, as a memory area which contains copies of pages that +ordinarily are in the main data file. The "buffer pool" is the set +of all buffers (there are lots of them because InnoDB doesn't +depend on the OS's caching to make things faster). + +The pool size is fixed (at the time of this writing) but the rest of +the buffering architecture is sophisticated, involving a host of +control structures. In general: when InnoDB needs to access a new page +it looks first in the buffer pool; InnoDB reads from disk to a new +buffer when the page isn't there; InnoDB chucks old buffers (basing +its decision on a conventional Least-Recently-Used algorithm) when it +has to make space for a new buffer. + +There are routines for checking a page's validity, and for read-ahead. +An example of "read-ahead" use: if a sequential scan is going on, then +a DBMS can read more than one page at a time, which is efficient +because reading 32,768 bytes (two pages) takes less than twice as long +as reading 16,384 bytes (one page). + +@strong{\btr (B-TREE)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + btr0btr.c B-tree / B-tree 74,255 B-tree + btr0cur.c B-tree / Cursor 94,950 index tree cursor + btr0sea.c B-tree / Search 36,580 index tree adaptive search + btr0pcur.c B-tree / persistent cursor 14,548 index tree persistent cursor + +If you total up the sizes of the C files, you'll see that \btr is the +second-largest file group in InnoDB. This is understandable because +maintaining a B-tree is a relatively complex task. Luckily, there has +been a lot of work done to describe efficient management of B-tree and +B+-tree structures, much of it open-source or public-domain, since +their original invention over thirty years ago. + +InnoDB likes to put everything in B-trees. This is what I'd call a +"distinguishing characteristic" because in all the major DBMSs (like +IBM DB2, Microsoft SQL Server, and Oracle), the main or default or +classic structure is the heap-and-index. In InnoDB the main structure +is just the index. To put it another way: InnoDB keeps the rows in the +leaf node of the index, rather than in a separate file. Compare +Oracle's Index Organized Tables, and Microsoft SQL Server's Clustered +Indexes. + +This, by the way, has some consequences. For example, you may as well +have a primary key since otherwise InnoDB will make one anyway. And +that primary key should be the shortest of the candidate keys, since +InnoDB +will use it as a pointer if there are secondary indexes. + +Most importantly, it means that rows have no fixed address. Therefore +the routines for managing file pages should be good. We'll see about +that when we look at the \row (ROW) program group later. + +@strong{\com (COMMUNCATION)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + com0com.c Communication 6,913 Communication primitives + com0shm.c Communication / 24,633 ... through shared memory + Shared Memory + +The communication primitives in com0com.c are said to be modelled +after the ones in Microsoft's winsock library (the Windows Sockets +interface). The communication primitives in com0shm.c are at a +slightly lower level, and are called from the routines in com0com.c. + +I was interested in seeing how InnoDB would handle inter-process +communication, since there are many options -- named pipes, TCP/IP, +Windows messaging, and Shared Memory being the main ones that come to +mind. It appears that InnoDB prefers Shared Memory. The main idea is: +there is an area of memory which two different processes (or threads, +of course) can both access. To communicate, a thread gets an +appropriate mutex, puts in a request, and waits for a response. Thread +interaction is also a subject for the os0thread.c program in another +program group, \os (OPERATING SYSTEM). + +@strong{\dyn (DYNAMICALLY ALLOCATED ARRAY)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + dyn0dyn.c Dynamic / Dynamic 994 dynamically allocated array + +There is a single function in the dyn0dyn.c program, for adding a +block to the dynamically allocated array. InnoDB might use the array +for managing concurrency between threads. + +At the moment, the \dyn program group is trivial. + +@strong{\fil (FILE)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + fil0fil.c File / File 39,725 The low-level file system + +The reads and writes to the database files happen here, in +co-ordination with the low-level file i/o routines (see os0file.h in +the \os program group). + +Briefly: a table's contents are in pages, which are in files, which +are in tablespaces. Files do not grow; instead one can add new files +to the tablespace. As we saw earlier (discussing the \btr program group) +the pages are nodes of B-trees. Since that's the case, new additions can +happen at various places in the logical file structure, not +necessarily at the end. Reads and writes are asynchronous, and go into +buffers, which are set up by routines in the \buf program group. + +@strong{\fsp (FILE SPACE)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + fsp0fsp.c File Space Management 100,271 File space management + +I would have thought that the \fil (FILE) and \fsp (FILE SPACE) +MANAGEMENT programs would fit together in the same program group; +however, I guess the InnoDB folk are splitters rather than lumpers. + +It's in fsp0fsp.c that one finds some of the descriptions and comments +of extents, segments, and headers. For example, the "descriptor bitmap +of the pages in the extent" is in here, and you can find as well how +the free-page list is maintained, what's in the bitmaps, and what +various header fields' contents are. + +@strong{\fut (FILE UTILITY)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + fut0fut.c File Utility / Utility 293 File-based utilities + fut0lst.c File Utility / List 14,129 File-based list utilities + +Mainly these small programs affect only file-based lists, so maybe +saying "File Utility" is too generic. The real work with data files +goes on in the \fsp program group. + +@strong{\log (LOGGING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + log0log.c Logging / Logging 77,834 Database log + log0recv.c Logging / Recovery 80,701 Recovery + +I've already written about the \log program group, so here's a link to +my previous article: "How Logs work with MySQL and InnoDB": +@url{http://www.devarticles.com/art/1/181/2} + +@strong{\mem (MEMORY)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + mem0mem.c Memory / Memory 9,971 The memory management + mem0dbg.c Memory / Debug 21,297 ... the debug code + mem0pool.c Memory / Pool 16,293 ... the lowest level + +There is a long comment at the start of the mem0pool.c program, which +explains what the memory-consumers are, and how InnoDB tries to +satisfy them. The main thing to know is that there are really three +pools: the buffer pool (see the \buf program group), the log pool (see the \log +program group), and the common pool, which is where everything that's +not in the buffer or log pools goes (for example the parsed SQL +statements and the data dictionary cache). + +@strong{\mtr (MINI-TRANSACTION)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + mtr0mtr.c Mini-transaction / 12,433 Mini-transaction buffer + mtr0log.c Mini-transaction / Log 8,180 ... log routines + +The mini-transaction routines are called from most of the other +program groups. I'd describe this as a low-level utility set. + +@strong{\que (QUERY GRAPH)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + que0que.c Query Graph / Query 35,964 Query graph + +The program que0que.c ostensibly is about the execution of stored +procedures which contain commit/rollback statements. I took it that +this has little importance for the average MySQL user. + +@strong{\rem (RECORD MANAGER)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + rem0rec.c Record Manager 14,961 Record Manager + rem0cmp.c Record Manager / 25,263 Comparison services for records + Comparison + +There's an extensive comment near the start of rem0rec.c title +"Physical Record" and it's recommended reading. At some point you'll +ask what are all those bits that surround the data in the rows on a page, +and this is where you'll find the answer. + +@strong{\row (ROW)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + row0row.c Row / Row 16,764 General row routines + row0uins.c Row / Undo Insert 7,199 Fresh insert undo + row0umod.c Row / Undo Modify 17,147 Undo modify of a row + row0undo.c Row / Undo 10,254 Row undo + row0vers.c Row / Version 12,288 Row versions + row0mysql.c Row / MySQL 63,556 Interface [to MySQL] + row0ins.c Row / Insert 42,829 Insert into a table + row0sel.c Row / Select 85,923 Select + row0upd.c Row / Update 44,456 Update of a row + row0purge.c Row / Purge 14,961 Purge obsolete records + +Rows can be selected, inserted, updated/deleted, or purged (a +maintenance activity). These actions have ancillary actions, for +example after insert there can be an index-update test, but it seems +to me that sometimes the ancillary action has no MySQL equivalent (yet) +and so is inoperative. + +Speaking of MySQL, notice that one of the larger programs in the \row +program group is the "interface between Innobase row operations and +MySQL" (row0mysql.c) -- information interchange happens at this level +because rows in InnoDB and in MySQL are analogous, something which +can't be said for pages and other levels. + +@strong{\srv (Server)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + srv0srv.c Server / Server 79,058 Server main program + srv0que.c Server / Query 2,361 Server query execution + srv0start.c Server / Start 34,586 Starts the server + +This is where the server reads the initial configuration files, splits +up the threads, and gets going. There is a long comment deep in the +program (you might miss it at first glance) titled "IMPLEMENTATION OF +THE SERVER MAIN PROGRAM" in which you'll find explanations about +thread priority, and about what the responsibiities are for various +thread types. + +InnoDB has many threads, for example "user threads" (which wait for +client requests and reply to them), "parallel communication threads" +(which take part of a user thread's job if a query process can be +split), "utility threads" (background priority), and a "master thread" +(high priority, usually asleep). + +@strong{\thr (Thread Local Storage)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + thr0loc.c Thread / Local 5,261 The thread local storage + +InnoDB doesn't use the Windows-API thread-local-storage functions, +perhaps because they're not portable enough. + +@strong{\trx (Transaction)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + trx0trx.c Transaction / 37,447 The transaction + trx0purge.c Transaction / Purge 26,782 ... Purge old versions + trx0rec.c Transaction / Record 36,525 ... Undo log record + trx0sys.c Transaction / System 20,671 ... System + trx0rseg.c / Rollback segment 6,214 ... Rollback segment + trx0undo.c Transaction / Undo 46,595 ... Undo log + +InnoDB's transaction management is supposedly "in the style of Oracle" +and that's close to true but can mislead you. +@item +First: InnoDB uses rollback segments like Oracle8i does -- but +Oracle9i uses a different name +@item +Second: InnoDB uses multi-versioning like Oracle does -- but I see +nothing that looks like an Oracle ITL being stored in the InnoDB data +pages. +@item +Third: InnoDB and Oracle both have short (back-to-statement-start) +versioning for the READ COMMITTED isolation level and long +(back-to-transaction-start) versioning for higher levels -- but InnoDB +and Oracle have different "default" isolation levels. +@item +Finally: InnoDB's documentation says it has to lock "the gaps before +index keys" to prevent phantoms -- but any Oracle user will tell you that +phantoms are impossible anyway at the SERIALIZABLE isolation level, so +key-locks are unnecessary. + +The main idea, though, is that InnoDB has multi-versioning. So does +Oracle. This is very different from the way that DB2 and SQL Server do +things. + +@strong{\usr (USER)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + usr0sess.c User / Session 27,415 Sessions + +One user can have multiple sessions (the session being all the things +that happen betweeen a connect and disconnect). This is where InnoDB +tracks session IDs, and server/client messaging. It's another of those +items which is usually MySQL's job, though. + +@strong{\data (DATA)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + data0data.c Data / Data 26,002 SQL data field and tuple + data0type.c Data / Type 2,122 Data types + +This is a collection of minor utility routines affecting rows. + +@strong{\dict (DICTIONARY)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + dict0dict.c Dictionary / Dictionary 84,667 Data dictionary system + dict0boot.c Dictionary / boot 12,134 ... creation and booting + dict0load.c Dictionary / load 26,546 ... load to memory cache + dict0mem.c Dictionary / memory 8,221 ... memory object creation + +The data dictionary (known in some circles as the catalog) has the +metadata information about objects in the database -- column sizes, +table names, and the like. + +@strong{\eval (EVALUATING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + eval0eval.c Evaluating/Evaluating 15,682 SQL evaluator + eval0proc.c Evaluating/Procedures 5,000 Executes SQL procedures + +The evaluating step is a late part of the process of interpreting an +SQL statement -- parsing has already occurred during \pars (PARSING). + +The ability to execute SQL stored procedures is an InnoDB feature, but +not a MySQL feature, so the eval0proc.c program is unimportant. + +@strong{\ibuf (INSERT BUFFER)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + ibuf0ibuf.c Insert Buffer / 69,884 Insert buffer + +The words "Insert Buffer" mean not "buffer used for INSERT" but +"insertion of a buffer into the buffer pool" (see the \buf BUFFER +program group description). The matter is complex due to possibilities +for deadlocks, a problem to which the comments in the ibuf0ibuf.c +program devote considerable attention. + +@strong{\mach (MACHINE FORMAT)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + mach0data.c Machine/Data 2,319 Utilities for converting + +The mach0data.c program has two small routines for reading compressed +ulints (unsigned long integers). + +@strong{\lock (LOCKING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + lock0lock.c Lock / Lock 127,646 The transaction lock system + +If you've used DB2 or SQL Server, you might think that locks have their +own in-memory table, that row locks might need occasional escalation to +table locks, and that there are three lock types: Shared, Update, Exclusive. + +All those things are untrue with InnoDB! Locks are kept in the database +pages. A bunch of row locks can't be rolled together into a single table +lock. And most importantly there's only one lock type. I call this type +"Update" because it has the characteristics of DB2 / SQL Server Update +locks, that is, it blocks other updates but doesn't block reads. +Unfortunately, InnoDB comments refer to them as "x-locks" etc. + +To sum it up: if your background is Oracle you won't find too much +surprising, but if your background is DB2 or SQL Server the locking +concepts and terminology will probably confuse you at first. + +You can find an online article about the differences between +Oracle-style and DB2/SQL-Server-style locks at: +@url{http://dbazine.com/gulutzan6.html} + +@strong{\odbc (ODBC)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + odbc0odbc.c ODBC / ODBC 16,865 ODBC client library + +The odbc0odbc.c program has a small selection of old ODBC-API +functions: SQLAllocEnv, SQLAllocConnect, SQLAllocStmt, SQLConnect, +SQLError, SQLPrepare, SQLBindParameter, SQLExecute. + +@strong{\page (PAGE)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + page0page.c Page / Page 44,309 Index page routines + page0cur.c Page / Cursor 30,305 The page cursor + +It's in the page0page.c program that you'll learn as follows: index +pages start with a header, entries in the page are in order, at the +end of the page is a sparse "page directory" (what I would have called +a slot table) which makes binary searches easier. + +Incidentally, the program comments refer to "a page size of 8 kB" +which seems obsolete. In univ.i (a file containing universal +constants) the page size is now #defined as 16KB. + +@strong{\pars (PARSING)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + pars0pars.c Parsing/Parsing 49,947 SQL parser + pars0grm.c Parsing/Grammar 62,685 A Bison parser + pars0opt.c Parsing/Optimizer 30,809 Simple SQL Optimizer + pars0sym.c Parsing/Symbol Table 5,541 SQL parser symbol table + lexyy.c ?/Lexer 59,948 Lexical scanner + +The job is to input a string containing an SQL statement and output an +in-memory parse tree. The EVALUATING (subdirectory \eval) programs +will use the tree. + +As is common practice, the Bison and Flex tools were used -- pars0grm.c +is what the Bison parser produced from an original file named pars0grm.y +(not supplied), and lexyy.c is what Flex produced. + +Since InnoDB is a DBMS by itself, it's natural to find SQL parsing in +it. But in the MySQL/InnoDB combination, MySQL handles most of the +parsing. These files are unimportant. + +@strong{\read (READ)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + read0read.c Read / Read 6,244 Cursor read + +The read0read.c program opens a "read view" of a query result, using +some functions in the \trx program group. + +@strong{\sync (SYNCHRONIZATION)} + File Name What Name Stands For Size Comment Inside File + --------- -------------------- ------ ------------------- + sync0sync.c Synchronization / 35,918 Mutex, the basic sync primitive + sync0arr.c ... / array 26,461 Wait array used in primitives + sync0ipm.c ... / interprocess 4,027 for interprocess sync + sync0rw.c ... / read-write 22,220 read-write lock for thread sync + +A mutex (Mutual Exclusion) is an object which only one thread/process +can hold at a time. Any modern operating system API has some functions +for mutexes; however, as the comments in the sync0sync.c code indicate, it +can be faster to write one's own low-level mechanism. In fact the old +assembly-language XCHG trick is in here -- this is the only program +that contains any assembly code. +@end example +@* +@* + +This is the end of the section-by-section account of InnoDB +subdirectories. +@*@* + +@strong{A Note About File Naming} @*@* + +There appears to be a naming convention. The first letters of the file +name are the same as the subdirectory name, then there is a '0' +separator, then there is an individual name. For the main program in a +subdirectory, the individual name may be a repeat of the subdirectory +name. For example, there is a file named ha0ha.c (the first two +letters ha mean "it's in in subdirectory ..\ha", the next letter 0 +means "0 separator", the next two letters mean "this is the main ha +program"). This naming convention is not strict, though: for example +the file lexyy.c is in the \pars subdirectory. +@*@* + +@strong{A Note About Copyrights} @*@* + +Most of the files begin with a copyright notice or a creation date, +for example "Created 10/25/1995 Heikki Tuuri". I don't know a great +deal about the history of InnoDB, but found it interesting that most +creation dates were between 1994 and 1998. +@*@* + +@strong{References} @*@* + +Ryan Bannon, Alvin Chin, Faryaaz Kassam and Andrew Roszko @* +"InnoDB Concrete Architecture" @* +@url{http://www.swen.uwaterloo.ca/~mrbannon/cs798/assignment_02/innodb.pdf} +@item +A student paper. It's an interesting attempt to figure out InnoDB's +architecture using tools, but I didn't end up using it for the specific +purposes of this article. +@*@* + +Peter Gulutzan @* +"How Logs Work With MySQL And InnoDB" @* +@url{http://www.devarticles.com/art/1/181/2} +@*@* + +Heikki Tuuri @* +"InnoDB Engine in MySQL-Max-3.23.54 / MySQL-4.0.9: The Up-to-Date +Reference Manual of InnoDB" @* +@url{http://www.innodb.com/ibman.html} +@item +This is the natural starting point for all InnoDB information. Mr +Tuuri also appears frequently on MySQL forums. +@*@* + @summarycontents @contents From dd93a7994ae99a05e57bee815eae718ef88c00ca Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 12:54:34 +0400 Subject: [PATCH 146/267] Case insensitivrly has been added in charset and collation names. --- mysql-test/r/ctype_collate.result | 4 ++++ mysql-test/t/ctype_collate.test | 2 ++ mysys/charset.c | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index 70f3eb50d00..21429709d93 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -528,6 +528,10 @@ SET NAMES latin1 COLLATE latin1_bin; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation latin1_bin +SET NAMES LATIN1 COLLATE Latin1_Bin; +SHOW VARIABLES LIKE 'client_collation'; +Variable_name Value +client_collation latin1_bin SET NAMES 'latin1' COLLATE 'latin1_bin'; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 7fd3229e1a4..c2ebf39170e 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -135,6 +135,8 @@ SHOW VARIABLES LIKE 'client_collation'; SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; SET NAMES latin1 COLLATE latin1_bin; SHOW VARIABLES LIKE 'client_collation'; +SET NAMES LATIN1 COLLATE Latin1_Bin; +SHOW VARIABLES LIKE 'client_collation'; SET NAMES 'latin1' COLLATE 'latin1_bin'; SHOW VARIABLES LIKE 'client_collation'; SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; diff --git a/mysys/charset.c b/mysys/charset.c index b1abd460c2e..8bc250a3f07 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -479,7 +479,7 @@ uint get_charset_number(const char *charset_name) for (cs= all_charsets; cs < all_charsets+255; ++cs) { - if ( cs[0] && cs[0]->name && !strcmp(cs[0]->name, charset_name)) + if ( cs[0] && cs[0]->name && !strcasecmp(cs[0]->name, charset_name)) return cs[0]->number; } return 0; /* this mimics find_type() */ @@ -593,7 +593,7 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name, for (css= all_charsets; css < all_charsets+255; ++css) { if ( css[0] && (css[0]->state & cs_flags) && - css[0]->csname && !strcmp(css[0]->csname, cs_name)) + css[0]->csname && !strcasecmp(css[0]->csname, cs_name)) { cs= css[0]->number ? get_internal_charset(css[0]->number,flags) : NULL; break; From 9fb88bfb146915e9bbb26f971a2de21bd2f5b976 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 14:12:28 +0400 Subject: [PATCH 147/267] Fix for embeded library compile --- sql/log.cc | 2 ++ sql/mysqld.cc | 2 ++ sql/sql_parse.cc | 2 ++ 3 files changed, 6 insertions(+) diff --git a/sql/log.cc b/sql/log.cc index 65497a3e065..170e976e643 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1260,6 +1260,7 @@ err: } pthread_mutex_unlock(&LOCK_log); +#ifdef HAVE_REPLICATION if (should_rotate && expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; @@ -1267,6 +1268,7 @@ err: error= purge_logs_before_date(current_thd, purge_time); } +#endif DBUG_RETURN(error); } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 49b005c480f..c6403f97f07 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2176,12 +2176,14 @@ static int init_server_components() open_log(&mysql_bin_log, glob_hostname, opt_bin_logname, "-bin", opt_binlog_index_name,LOG_BIN); using_update_log=1; +#ifdef HAVE_REPLICATION if (expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; if (purge_time >= 0) mysql_bin_log.purge_logs_before_date(current_thd, purge_time); } +#endif } if (opt_error_log) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index cd3fe0afefa..a3b8ccafc11 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3940,12 +3940,14 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables) mysql_log.new_file(1); mysql_update_log.new_file(1); mysql_bin_log.new_file(1); +#ifdef HAVE_REPLICATION if (expire_logs_days) { long purge_time= time(0) - expire_logs_days*24*60*60; if (purge_time >= 0) mysql_bin_log.purge_logs_before_date(thd, purge_time); } +#endif mysql_slow_log.new_file(1); if (ha_flush_logs()) result=1; From a4aaac02f3b50f2009a163d531afb686a03e47dd Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 12:20:29 +0100 Subject: [PATCH 148/267] texinfo syntax cleanup. 4.1 protocol sections are still too broken for this file to be compiled :( --- Docs/internals.texi | 109 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 87 insertions(+), 22 deletions(-) diff --git a/Docs/internals.texi b/Docs/internals.texi index 37c8e71c478..1f90b8d1999 100644 --- a/Docs/internals.texi +++ b/Docs/internals.texi @@ -51,6 +51,7 @@ This is a manual about @strong{MySQL} internals. @menu * caching:: How MySQL Handles Caching +* join_buffer_size:: * flush tables:: How MySQL Handles @code{FLUSH TABLES} * filesort:: How MySQL Does Sorting (@code{filesort}) * coding guidelines:: Coding Guidelines @@ -61,12 +62,12 @@ This is a manual about @strong{MySQL} internals. * MyISAM Record Structure:: MyISAM Record Structure * InnoDB Record Structure:: InnoDB Record Structure * InnoDB Page Structure:: InnoDB Page Structure -* Annotated List Of Files in the MySQL Source Code Distribution:: MySQL Source -* Annotated List Of Files in the InnoDB Source Code Distribution:: InnoDB Source +* Files in MySQL Sources:: Annotated List Of Files in the MySQL Source Code Distribution +* Files in InnoDB Sources:: Annotated List Of Files in the InnoDB Source Code Distribution @end menu -@node caching, flush tables, Top, Top +@node caching, join_buffer_size, Top, Top @chapter How MySQL Handles Caching @strong{MySQL} has the following caches: @@ -109,7 +110,7 @@ use many join caches in the worst case. @end table @node join_buffer_size, flush tables, caching, Top -@subchapter How MySQL uses the join_buffer cache +@chapter How MySQL uses the join_buffer cache Basic information about @code{join_buffer_size}: @@ -180,7 +181,7 @@ same algorithm described above to handle it. (In other words, we store the same row combination several times into different buffers) @end itemize -@node flush tables, filesort, caching, Top +@node flush tables, filesort, join_buffer_size, Top @chapter How MySQL Handles @code{FLUSH TABLES} @itemize @bullet @@ -1655,8 +1656,8 @@ fe 00 . . @c @printindex fn -@node 4.1 protocol,,, -@subchapter MySQL 4.1 protocol +@c @node 4.1 protocol,,, +@c @chapter MySQL 4.1 protocol @node 4.1 protocol changes,,, @section Changes to 4.0 protocol in 4.1 @@ -1699,7 +1700,7 @@ results will sent as binary (low-byte-first). The field description packet is sent as a response to a query that contains a result set. It can be distinguished from a ok packet by the fact that the first byte can't be 0 for a field packet. -@xref {4.1 ok packet}. +@xref{4.1 ok packet}. The header packet has the following structure: @@ -1825,7 +1826,7 @@ parameter in the query: @item 2 @tab 2 byte column flags (NOT_NULL_FLAG etc) @item 1 @tab Number of decimals @item 4 @tab Max column length. -@end itemize +@end multitable Note that the above is not yet in 4.1 but will be added this month. @@ -1834,7 +1835,7 @@ able to provide the optimal information for all parameters. If number of columns, in the header packet, is not 0 then the prepared statement will contain a result set. In this case the packet -is followed by a field description result set. @xref{4.1 field descr}. +is followed by a field description result set. @xref{4.1 field desc}. @node 4.1 long data,,, @@ -1858,7 +1859,7 @@ This packet is sent from client -> server: @item 2 @tab Parameter number @item 2 @tab Type of parameter (not used at this point) @item # @tab data (Rest of packet) -@end itemize +@end multitable The server will NOT send an @code{ok} or @code{error} packet in responce for this. If there is any errors (like to big string), one @@ -1880,7 +1881,7 @@ execute or if one has rebound the parameters. @item 2*param_count @tab Type of parameters (only given if new_parameter_bound flag is 1) @item # @tab Parameter data, repeated for each parameter that are NOT NULL and not used with mysql_send_long_data(). -@end itemize +@end multitable The null-bit-map is for all parameters (including parameters sent with 'mysql_send_long_data). If parameter 0 is NULL, then bit 0 in the @@ -1938,7 +1939,7 @@ DATETIME, DATE and TIME are sent to the server in a binary format as follows: The first byte is a length byte and then comes all parameters that are not 0. (Always counted from the beginning). -@node Fulltext Search, , protocol, Top +@node Fulltext Search, MyISAM Record Structure, protocol, Top @chapter Fulltext Search in MySQL Hopefully, sometime there will be complete description of @@ -1981,6 +1982,7 @@ higher weights to individual B's. Also the first expression in much simplier. So it is the first one, that is implemented in MySQL. +@node MyISAM Record Structure, InnoDB Record Structure, Fulltext Search, Top @chapter MyISAM Record Structure @section Introduction @@ -2365,6 +2367,7 @@ Most of the formatting work for MyISAM columns is visible in the program /sql/field.cc in the source code directory. @* +@node InnoDB Record Structure,InnoDB Page Structure,MyISAM Record Structure,Top @chapter InnoDB Record Structure This page contains: @@ -2516,7 +2519,7 @@ Bytes is 1byte_offs_flag -- you need to know if 1byte_offs_flag is 1 @* Given a pointer to the Origin, InnoDB finds the start of the record as follows: -@enumerate @bullet +@itemize @bullet @item Let X = n_fields (the number of fields is by definition equal to the number of entries in the Field Start Offsets Table). @@ -2527,7 +2530,7 @@ two bytes for each entry instead of just one. Let X = X + 6, because the fixed size of Extra Bytes is 6. @item The start of the record is at (pointer value minus X). -@end enumerate +@end itemize @subsection FIELD CONTENTS @@ -2540,7 +2543,7 @@ at the end of a record. @* Here's an example. -@enumerate @bullet +@itemize @bullet @item I made a table with this definition: @*@* @@ -2575,7 +2578,7 @@ I put some rows in the table. My last three INSERTs were: I ran Borland's TDUMP to get a hexadecimal dump of the contents of \mysql\data\ibdata1, which (in my case) is the MySQL/InnoDB data file (on Windows). -@end enumerate +@end itemize Here is an extract of the dump: @@ -2670,6 +2673,7 @@ shorter because the NULLs take no space. The most relevant InnoDB source-code files are rem0rec.c, rem0rec.ic, and rem0rec.h in the rem ("Record Manager") directory. +@node InnoDB Page Structure,Files in MySQL Sources,InnoDB Record Structure,Top @chapter InnoDB Page Structure InnoDB stores all records inside a fixed-size unit which is commonly called a @@ -2751,6 +2755,7 @@ The Fil Header has eight parts, as follows: @tab the latest archived log file number at the time that FIL_PAGE_FILE_FLUSH_LSN was written (in the log) @end multitable +@itemize @item FIL_PAGE_SPACE is a necessary identifier because different pages might belong to different (table) spaces within the same file. The word @@ -2796,6 +2801,7 @@ Work With MySQL And InnoDB" on devarticles.com. @item FIL_PAGE_FILE_FLUSH_LSN and FIL_PAGE_ARCH_LOG_NO are only valid for the first page of a data file. +@end itemize @subsection Page Header @@ -3098,6 +3104,7 @@ header. The most relevant InnoDB source-code files are page0page.c, page0page.ic, and page0page.h in \page directory. +@node Files in MySQL Sources,Files in InnoDB Sources,InnoDB Page Structure,Top @chapter Annotated List Of Files in the MySQL Source Code Distribution This is a description of the files that you get when you download the @@ -3153,7 +3160,8 @@ libmysqld -- The MySQL Library man -- Manual pages @item merge -- The MERGE table handler (see Reference Manual section 7.2) -* myisam -- The MyISAM table handler +@item +myisam -- The MyISAM table handler @item myisammrg -- The MyISAM Merge table handler @item @@ -3269,6 +3277,7 @@ server. @*@* The C program files in the directory are: +@itemize @bullet @item connect_test.c -- test that a connect is possible @item @@ -3306,6 +3315,7 @@ showdb_test.c -- test that a show-databases is possible ssl_test.c -- test that SSL is possible @item thread_test.c -- test that threading is possible +@end itemize @*@* @subsection cmd-line-utils @@ -3330,6 +3340,7 @@ Software Foundation. The \libedit (library of edit functions) subdirectory has files written by Christos Zoulas. They are for editing the line contents. These are the program files in the \libedit subdirectory: +@itemize @bullet @item chared.c -- character editor @item @@ -3372,6 +3383,7 @@ tokenizer.c -- Bourne shell line tokenizer tty.c -- for a tty interface @item vi.c -- commands used when in the vi (editor) mode +@end itemize @*@* @subsection dbug @@ -3394,6 +3406,7 @@ Features of the dbug library include profiling and state pushing. @*@* The C programs in this directory are: +@itemize @bullet @item dbug.c -- The main module @item @@ -3410,6 +3423,7 @@ factorial.c -- A tiny example main.c -- A tiny example @item sanity.c -- Declaration of a variable +@end itemize @*@* @subsection div @@ -3432,6 +3446,7 @@ documentation from developers themselves, will be placed here. @*@* These sub-directories are part of this directory: +@itemize @bullet @item books -- .gif images and empty .txt files; no real information @item @@ -3449,6 +3464,7 @@ documentation to-be-included... -- an empty subdirectory @item translations -- some Portuguese myodbc documentation +@end itemize @*@* In the main directory, you'll find some .txt files related to the @@ -3474,6 +3490,7 @@ These eight programs are all standalone utilities, that is, they have a main() function and their main role is to show information that the MySQL server needs or produces. Most are unimportant. They are as follows: +@itemize @bullet @item my_print_defaults.c -- print all parameters in a default file @item @@ -3488,6 +3505,7 @@ replace.c -- replace strings in text files resolve_stack_dump.c -- show symbolic info from a stack dump @item resolveip.c -- convert an IP address to a hostname, or vice versa +@end itemize @*@* @subsection fs @@ -3512,6 +3530,7 @@ The descriptions imply that this is a development project. @*@* There are four program files in the directory: +@itemize @bullet @item database.c -- "emulate filesystem behaviour on top of SQL database" @item @@ -3587,6 +3606,7 @@ hp_test2.c -- * testing database and storing results hp_update.c -- * update an existing row @item hp_write.c -- * insert a new row +@end itemize @*@* There are fewer files in the heap directory than in the myisam @@ -3638,6 +3658,7 @@ The ISAM table handler. @*@* The C files in this directory are: +@itemize @bullet @item _cache.c -- for reading records from a cache @item @@ -3709,6 +3730,7 @@ write.c -- insert a new row @item pack_isam.c -- pack isam file (NOTE TO SELF ?? equivalent to \myisam\myisampack.c) +@end itemize @*@* Except for one minor C file (pack_isam.c) every program in the ISAM @@ -3743,6 +3765,7 @@ directory would hold the "server part" files. @*@* The program files on this directory are: +@itemize @bullet @item conf_to_src.c -- has to do with charsets @item @@ -3755,6 +3778,7 @@ get_password.c -- get password libmysql.c -- the main "packet-sending emulation" program @item manager.c -- initialize/connect/fetch with MySQL manager +@end itemize @*@* @subsection libmysql_r @@ -3764,8 +3788,10 @@ The MySQL Library, Part 2. This is a continuation of the libmysql directory. There is only one file here: +@itemize @bullet @item makefile.am +@end itemize @*@* @subsection libmysqld @@ -3775,10 +3801,12 @@ The MySQL library, Part 3. This is a continuation of the libmysql directory. The program files on this directory are: +@itemize @bullet @item libmysqld.c -- The called side, compare the mysqld.exe source @item lib_vio.c -- Emulate the vio directory's communication buffer +@end itemize @*@* @subsection man @@ -3805,6 +3833,7 @@ table handlers are all quite similar. @*@* The related directories are: +@itemize @bullet @item \isam -- for ISAM @item @@ -3814,12 +3843,14 @@ The related directories are: @item \myisammrg -- for MyISAM MERGE (mostly call functions in \myisam programs) +@end itemize @*@* To avoid duplication, only the \myisam program versions are discussed. @*@* The C programs in this (merge) directory are: +@itemize @bullet @item mrg_close.c -- compare \isam's close.c @item @@ -3844,6 +3875,7 @@ mrg_rsame.c -- "" rsame.c mrg_static.c -- "" static.c @item mrg_update.c -- "" update.c +@end itemize @*@* @subsection myisam @@ -3852,6 +3884,7 @@ The MyISAM table handler. @*@* The C files in this subdirectory come in six main groups: +@itemize @bullet @item ft*.c files -- ft stands for "Full Text", code contributed by Sergei Golubchik @@ -3870,11 +3903,13 @@ Ramil Kalimullin @item sort.c -- this is a single file that sorts keys for index-create purposes +@end itemize @*@* The "full text" and "rtree" and "spatial" program sets are for special purposes, so this document focuses only on the mi*.c "myisam" C programs. They are: +@itemize @bullet @item mi_cache.c -- for reading records from a cache @item @@ -3962,6 +3997,7 @@ mi_unique.c -- functions to check if a row is unique mi_update.c -- update an existing row @item mi_write.c -- insert a new row +@end itemize @*@* @subsection myisammrg @@ -3980,6 +4016,7 @@ myisam function, the myisammrg function returns. These are the 21 files in the myisammrg directory, with notes about the myisam functions or programs they're connected with: +@itemize @bullet @item myrg_close.c -- mi_close.c @item @@ -4028,6 +4065,7 @@ myrg_update.c -- mi_update.c / call mi_update function, see @item myrg_write.c -- mi_write.c / call mi_write function, see \myisam\mi_write.c +@end itemize @*@* @subsection mysql-test @@ -4041,6 +4079,7 @@ and how to report errors. @*@* There are four subdirectories: +@itemize @bullet @item \misc -- contains one minor Perl program @item @@ -4050,6 +4089,7 @@ There are four subdirectories: \std_data -- contains standard data for input to tests @item \t -- contains tests +@end itemize @*@* There are 186 *.test files in the \t subdirectory. Primarily these are @@ -4075,6 +4115,7 @@ MySQL system library (Low level routines for file access etc.). @*@* There are 115 *.c programs in this directory: +@itemize @bullet @item array.c -- Dynamic array handling @item @@ -4334,6 +4375,7 @@ writer's lock tree.c -- Initialize/search/free binary trees @item typelib.c -- Determine what type a field has +@end itemize @*@* You can find documentation for the main functions in these files @@ -4380,9 +4422,11 @@ mysqld_safe.c -- Compare \scripts\mysqld_safe.sh @end itemize Perhaps the most important file is: +@itemize @bullet @item netware.patch -- NetWare-specific build instructions and switches (compare \mysql-4.1\ltmain.sh) +@end itemize @*@* For instructions about basic installation, see "Deployment Guide For @@ -4411,6 +4455,7 @@ Alfredsson. There are no .C program files in this directory. @*@* The contents of \os2 are: +@itemize @bullet @item A Readme.Txt file @item @@ -4418,6 +4463,7 @@ An \include subdirectory containing .h files which are for OS/2 only @item Files used in the build process (configuration, switches, and one .obj) +@end itemize @*@* The README file refers to MySQL version 3.23, which suggests that @@ -4474,6 +4520,7 @@ Test cases for replication. @*@* There are six short and trivial-looking tests in these subdirectories: +@itemize @bullet @item \test-auto-inc -- Do auto-Increment columns work? @item @@ -4486,6 +4533,7 @@ There are six short and trivial-looking tests in these subdirectories: \test-repl-alter -- Does ALTER TABLE work? @item \test-repl-ts -- Does TIMESTAMP column work? +@end itemize @*@* @subsection SCCS @@ -4509,6 +4557,7 @@ Linux programmers use it where Windows programmers would use a *.bat @*@* The *.sh files on this directory are: +@itemize @bullet @item fill_help_tables.sh -- Create help-information tables and insert @item @@ -4556,6 +4605,7 @@ privileges mysql_tableinfo.sh -- Puts info re MySQL tables into a MySQL table @item mysql_zap.sh -- Kill processes which match pattern +@end itemize @*@* @subsection sql @@ -4564,6 +4614,7 @@ Programs for handling SQL commands. The "core" of MySQL. @*@* These are the .c and .cc files in the sql directory: +@itemize @bullet @item cache_manager.cc -- manages a number of blocks @item @@ -4755,8 +4806,8 @@ udf_example.cc -- Example file of user-defined functions @item uniques.cc -- Function to handle quick removal of duplicates @item -unireg.cc -- Create a unireg form file from a FIELD and field-info -struct +unireg.cc -- Create a unireg form file from a FIELD and field-info struct +@end itemize @*@* @subsection sql-bench @@ -4771,6 +4822,7 @@ available all the material necessary to reproduce all the tests. @*@* There are five subdirectories and sub-subdirectories: +@itemize @bullet @item \Comments -- Comments about results from tests of Access, Adabas, etc. @@ -4783,6 +4835,7 @@ etc. \Results -- old test results @item \Results-win32 -- old test results from Windows 32-bit tests +@end itemize @*@* There are twenty-four *.sh (shell script) files, which involve Perl @@ -4824,6 +4877,7 @@ recent Pentium class processors, though. @*@* The .C files are: +@itemize @bullet @item atof.c -- ascii-to-float, MySQL version @item @@ -4925,6 +4979,7 @@ str_test.c -- test of all the string functions encoded in assembler udiv.c -- unsigned long divide @item xml.c -- read and parse XML strings +@end itemize @*@* There are also four .ASM files -- macros.asm, ptr_cmp.asm, @@ -4958,8 +5013,10 @@ Tools -- well, actually, one tool. @*@* The only file is: +@itemize @bullet @item mysqlmanager.c -- A "server management daemon" by Sasha Pachev +@end itemize @*@* @subsection VC++Files @@ -4983,6 +5040,7 @@ Windows environments. In addition to the "subdirectories which are duplicates of directories", VC++Files contains these subdirectories, which are not duplicates: +@itemize @bullet @item comp_err -- (nearly empty) @item @@ -5029,6 +5087,7 @@ thr_insert_test -- (nearly empty) thr_test -- one short program used to test for memory-allocation bug @item winmysqladmin -- the winmysqladmin.exe source. machine-generated? +@end itemize @*@* @subsection vio @@ -5048,6 +5107,7 @@ WindowsNT), Shared Memory, and Secure Sockets (SSL). @*@* The C programs are: +@itemize @bullet @item test-ssl.c -- Short standalone test program: SSL @item @@ -5068,6 +5128,7 @@ viotest.cc -- Short standalone test program: general viotest-ssl.c -- Short standalone test program: SSL @item viotest-sslconnect.cc -- Short standalone test program: SSL connect +@end itemize @*@* The older functions -- raw_net_read, raw_net_write -- are now @@ -5103,6 +5164,7 @@ The MySQL program that uses zlib is \mysys\my_compress.c. The use is for packet compression. The client sends messages to the server which are compressed by zlib. See also: \sql\net_serv.cc. +@node Files in InnoDB Sources,,Files in MySQL Sources,Top @chapter Annotated List Of Files in the InnoDB Source Code Distribution ERRATUM BY HEIKKI TUURI (START) @@ -5207,6 +5269,7 @@ Now let's begin. @*@* @example + @strong{\ha (HASHING)} File Name What Name Stands For Size Comment Inside File --------- -------------------- ------ ------------------- @@ -5529,6 +5592,7 @@ perhaps because they're not portable enough. InnoDB's transaction management is supposedly "in the style of Oracle" and that's close to true but can mislead you. +@itemize @item First: InnoDB uses rollback segments like Oracle8i does -- but Oracle9i uses a different name @@ -5546,6 +5610,7 @@ Finally: InnoDB's documentation says it has to lock "the gaps before index keys" to prevent phantoms -- but any Oracle user will tell you that phantoms are impossible anyway at the SERIALIZABLE isolation level, so key-locks are unnecessary. +@end itemize The main idea, though, is that InnoDB has multi-versioning. So does Oracle. This is very different from the way that DB2 and SQL Server do @@ -5737,7 +5802,7 @@ creation dates were between 1994 and 1998. Ryan Bannon, Alvin Chin, Faryaaz Kassam and Andrew Roszko @* "InnoDB Concrete Architecture" @* @url{http://www.swen.uwaterloo.ca/~mrbannon/cs798/assignment_02/innodb.pdf} -@item + A student paper. It's an interesting attempt to figure out InnoDB's architecture using tools, but I didn't end up using it for the specific purposes of this article. @@ -5752,7 +5817,7 @@ Heikki Tuuri @* "InnoDB Engine in MySQL-Max-3.23.54 / MySQL-4.0.9: The Up-to-Date Reference Manual of InnoDB" @* @url{http://www.innodb.com/ibman.html} -@item + This is the natural starting point for all InnoDB information. Mr Tuuri also appears frequently on MySQL forums. @*@* From bfaa1d9a2b23e859809ec6f2c9c8303bd47b4932 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 15:34:46 +0400 Subject: [PATCH 149/267] filesort.cc, sql_analyse.cc, item_func.cc, item_strfunc.cc, field.cc: Unnesessary binary() calls have been removed sql/field.cc: Unnesessary binary() calls have been removed sql/item_strfunc.cc: Unnesessary binary() calls have been removed sql/item_func.cc: Unnesessary binary() calls have been removed sql/sql_analyse.cc: Unnesessary binary() calls have been removed sql/filesort.cc: Unnesessary binary() calls have been removed --- sql/field.cc | 2 +- sql/filesort.cc | 31 ++++++++++++------------------- sql/item_func.cc | 4 ++-- sql/item_strfunc.cc | 10 +++++----- sql/sql_analyse.cc | 8 ++++---- 5 files changed, 24 insertions(+), 31 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 5a8cbdfbb1c..133d7a6c21a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5163,7 +5163,7 @@ void Field_set::sql_type(String &res) const bool Field::eq_def(Field *field) { - if (real_type() != field->real_type() || binary() != field->binary() || + if (real_type() != field->real_type() || charset() != field->charset() || pack_length() != field->pack_length()) return 0; return 1; diff --git a/sql/filesort.cc b/sql/filesort.cc index 6bc0fc957a9..cc7b15f1f4a 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -507,8 +507,7 @@ static void make_sortkey(register SORTPARAM *param, if (res->ptr() != (char*) to) memcpy(to,res->ptr(),length); bzero((char *)to+length,diff); - if (!item->binary()) - my_tosort(cs, (char*) to,length); + my_tosort(cs, (char*) to,length); } break; } @@ -918,6 +917,7 @@ sortlength(SORT_FIELD *sortorder, uint s_length, bool *multi_byte_charset) { reg2 uint length; THD *thd= current_thd; + CHARSET_INFO *cs; *multi_byte_charset= 0; length=0; @@ -926,20 +926,17 @@ sortlength(SORT_FIELD *sortorder, uint s_length, bool *multi_byte_charset) sortorder->need_strxnfrm= 0; if (sortorder->field) { + if (sortorder->field->type() == FIELD_TYPE_BLOB) sortorder->length= thd->variables.max_sort_length; else { sortorder->length=sortorder->field->pack_length(); - if (!sortorder->field->binary()) + if (use_strnxfrm((cs=sortorder->field->charset()))) { - CHARSET_INFO *cs=sortorder->field->charset(); - if (use_strnxfrm(cs)) - { - sortorder->need_strxnfrm= 1; - *multi_byte_charset= 1; - sortorder->length= sortorder->length*cs->strxfrm_multiply; - } + sortorder->need_strxnfrm= 1; + *multi_byte_charset= 1; + sortorder->length= sortorder->length*cs->strxfrm_multiply; } } if (sortorder->field->maybe_null()) @@ -950,15 +947,11 @@ sortlength(SORT_FIELD *sortorder, uint s_length, bool *multi_byte_charset) switch ((sortorder->result_type=sortorder->item->result_type())) { case STRING_RESULT: sortorder->length=sortorder->item->max_length; - if (!sortorder->item->binary()) - { - CHARSET_INFO *cs=sortorder->item->charset(); - if (use_strnxfrm(cs)) - { - sortorder->length= sortorder->length*cs->strxfrm_multiply; - sortorder->need_strxnfrm= 1; - *multi_byte_charset= 1; - } + if (use_strnxfrm((cs=sortorder->item->charset()))) + { + sortorder->length= sortorder->length*cs->strxfrm_multiply; + sortorder->need_strxnfrm= 1; + *multi_byte_charset= 1; } break; case INT_RESULT: diff --git a/sql/item_func.cc b/sql/item_func.cc index da5e9cbb89c..0361fd0db65 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1024,7 +1024,7 @@ longlong Item_func_char_length::val_int() return 0; /* purecov: inspected */ } null_value=0; - return (longlong) (!args[0]->binary()) ? res->numchars() : res->length(); + return (longlong) res->numchars(); } longlong Item_func_coercibility::val_int() @@ -1156,7 +1156,7 @@ longlong Item_func_ord::val_int() null_value=0; if (!res->length()) return 0; #ifdef USE_MB - if (use_mb(res->charset()) && !args[0]->binary()) + if (use_mb(res->charset())) { register const char *str=res->ptr(); register uint32 n=0, l=my_ismbchar(res->charset(),str,str+res->length()); diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 5738f217063..f049c13c974 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -650,7 +650,7 @@ String *Item_func_reverse::val_str(String *str) ptr = (char *) res->ptr(); end=ptr+res->length(); #ifdef USE_MB - if (use_mb(res->charset()) && !binary()) + if (use_mb(res->charset())) { String tmpstr; tmpstr.copy(*res); @@ -1015,7 +1015,7 @@ String *Item_func_substr_index::val_str(String *str) return &empty_string; // Wrong parameters #ifdef USE_MB - if (use_mb(res->charset()) && !binary()) + if (use_mb(res->charset())) { const char *ptr=res->ptr(); const char *strend = ptr+res->length(); @@ -1169,7 +1169,7 @@ String *Item_func_rtrim::val_str(String *str) { char chr=(*remove_str)[0]; #ifdef USE_MB - if (use_mb(res->charset()) && !binary()) + if (use_mb(res->charset())) { while (ptr < end) { @@ -1186,7 +1186,7 @@ String *Item_func_rtrim::val_str(String *str) { const char *r_ptr=remove_str->ptr(); #ifdef USE_MB - if (use_mb(res->charset()) && !binary()) + if (use_mb(res->charset())) { loop: while (ptr + remove_length < end) @@ -1237,7 +1237,7 @@ String *Item_func_trim::val_str(String *str) while (ptr+remove_length <= end && !memcmp(ptr,r_ptr,remove_length)) ptr+=remove_length; #ifdef USE_MB - if (use_mb(res->charset()) && !binary()) + if (use_mb(res->charset())) { char *p=ptr; register uint32 l; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 36464126ae5..d121a151011 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -732,7 +732,7 @@ void field_str::get_opt_type(String *answer, ha_rows total_rows) { if (must_be_blob) { - if (item->binary()) + if (item->charset() == &my_charset_bin) answer->append("TINYBLOB", 8); else answer->append("TINYTEXT", 8); @@ -750,21 +750,21 @@ void field_str::get_opt_type(String *answer, ha_rows total_rows) } else if (max_length < (1L << 16)) { - if (item->binary()) + if (item->charset() == &my_charset_bin) answer->append("BLOB", 4); else answer->append("TEXT", 4); } else if (max_length < (1L << 24)) { - if (item->binary()) + if (item->charset() == &my_charset_bin) answer->append("MEDIUMBLOB", 10); else answer->append("MEDIUMTEXT", 10); } else { - if (item->binary()) + if (item->charset() == &my_charset_bin) answer->append("LONGBLOB", 8); else answer->append("LONGTEXT", 8); From fa2dfa0116cdf730f90cba6107398537efccf95b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 16:23:18 +0400 Subject: [PATCH 150/267] sql_lex.cc: Move all charset recoding to the same place sql/sql_lex.cc: Move all charset recoding to the same place --- sql/sql_lex.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 94c06d41634..9df94204644 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -359,8 +359,6 @@ static char *get_text(LEX *lex) *to=0; lex->yytoklen=(uint) (to-start); } - if (lex->convert_set) - lex->convert_set->convert((char*) start,lex->yytoklen); return (char*) start; } } @@ -849,6 +847,8 @@ int yylex(void *arg, void *yythd) break; } yylval->lex_str.length=lex->yytoklen; + if (lex->convert_set) + lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(TEXT_STRING); case STATE_COMMENT: // Comment From eec2f8ba2f996c70b26fb8fd7a7fe0d7e419a540 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 13:52:15 +0100 Subject: [PATCH 151/267] - fixed newly added DBUG_RETURN to DBUG_VOID_RETURN (compile failed with "DBUG_RETURN undeclared" on Mac OS X) --- sql/sql_class.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_class.cc b/sql/sql_class.cc index a481b365182..5cec1ba7a81 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -426,7 +426,7 @@ void THD::close_active_vio() vio_close(active_vio); active_vio = 0; } - DBUG_RETURN; + DBUG_VOID_RETURN; } #endif From 012c8f9175c826b8b154fd9d1ef64ce560ff718d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 14:34:07 +0100 Subject: [PATCH 152/267] test result updated after merge --- mysql-test/r/analyse.result | 17 +++++++++++++++-- mysql-test/r/group_by.result | 5 +++++ mysql-test/r/select.result | 13 +++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/analyse.result b/mysql-test/r/analyse.result index c183530df48..5e859bb0b7a 100644 --- a/mysql-test/r/analyse.result +++ b/mysql-test/r/analyse.result @@ -1,13 +1,26 @@ drop table if exists t1,t2; -create table t1 (i int, j int); -insert into t1 values (1,2), (3,4), (5,6), (7,8); +create table t1 (i int, j int, empty_string char(10), bool char(1), d date); +insert into t1 values (1,2,"","Y","2002-03-03"), (3,4,"","N","2002-03-04"), (5,6,"","Y","2002-03-04"), (7,8,"","N","2002-03-05"); select * from t1 procedure analyse(); Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL +select * from t1 procedure analyse(2); +Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype +t1.i 1 7 1 1 0 0 4.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.j 2 8 1 1 0 0 5.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL create table t2 select * from t1 procedure analyse(); select * from t2; Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL drop table t1,t2; diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 6627890f86c..91f33e0cd9f 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -303,6 +303,11 @@ score count(*) 2 1 1 2 drop table t1; +create table t1 (a date default null, b date default null); +insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01'); +select a,min(b) c,count(distinct rand()) from t1 group by a having c 2; +DROP TABLE t1; CREATE TABLE t1 (gvid int(10) unsigned default NULL, hmid int(10) unsigned default NULL, volid int(10) unsigned default NULL, mmid int(10) unsigned default NULL, hdid int(10) unsigned default NULL, fsid int(10) unsigned default NULL, ctid int(10) unsigned default NULL, dtid int(10) unsigned default NULL, cost int(10) unsigned default NULL, performance int(10) unsigned default NULL, serialnumber bigint(20) unsigned default NULL, monitored tinyint(3) unsigned default '1', removed tinyint(3) unsigned default '0', target tinyint(3) unsigned default '0', dt_modified timestamp(14) NOT NULL, name varchar(255) binary default NULL, description varchar(255) default NULL, UNIQUE KEY hmid (hmid,volid)) TYPE=MyISAM; INSERT INTO t1 VALUES (200001,2,1,1,100,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\E$',''),(200002,2,2,1,101,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\C$',''),(200003,1,3,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,20020425060427,'c:',NULL); CREATE TABLE t2 ( hmid int(10) unsigned default NULL, volid int(10) unsigned default NULL, sampletid smallint(5) unsigned default NULL, sampletime datetime default NULL, samplevalue bigint(20) unsigned default NULL, KEY idx1 (hmid,volid,sampletid,sampletime)) TYPE=MyISAM; @@ -3467,7 +3477,6 @@ a a a 2 2 2 3 3 3 drop table t1; -drop table if exists t1,t2; CREATE TABLE t1 ( aa char(2), id int(11) NOT NULL auto_increment, t2_id int(11) NOT NULL default '0', PRIMARY KEY (id), KEY replace_id (t2_id)) TYPE=MyISAM; INSERT INTO t1 VALUES ("1",8264,2506),("2",8299,2517),("3",8301,2518),("4",8302,2519),("5",8303,2520),("6",8304,2521),("7",8305,2522); CREATE TABLE t2 ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=MyISAM; @@ -3479,4 +3488,4 @@ aa id t2_id id 4 8302 2519 2519 5 8303 2520 2520 6 8304 2521 2521 -drop table if exists t1,t2; +drop table t1,t2; From e97a000a654d25877f2ab23e2fb3114efa94fa08 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 14:40:13 +0100 Subject: [PATCH 153/267] make test result more obvious --- mysql-test/r/select.result | 3 ++- mysql-test/t/select.test | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index bc86ed84edb..1ad3043b4b2 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -3251,7 +3251,8 @@ UNIQUE KEY pseudo (pseudo) ); INSERT INTO t1 (pseudo) VALUES ('test'); INSERT INTO t1 (pseudo) VALUES ('test1'); -SELECT 1 from t1 where rand() > 2; +SELECT 1 as rnd1 from t1 where rand() > 2; +rnd1 DROP TABLE t1; CREATE TABLE t1 (gvid int(10) unsigned default NULL, hmid int(10) unsigned default NULL, volid int(10) unsigned default NULL, mmid int(10) unsigned default NULL, hdid int(10) unsigned default NULL, fsid int(10) unsigned default NULL, ctid int(10) unsigned default NULL, dtid int(10) unsigned default NULL, cost int(10) unsigned default NULL, performance int(10) unsigned default NULL, serialnumber bigint(20) unsigned default NULL, monitored tinyint(3) unsigned default '1', removed tinyint(3) unsigned default '0', target tinyint(3) unsigned default '0', dt_modified timestamp(14) NOT NULL, name varchar(255) binary default NULL, description varchar(255) default NULL, UNIQUE KEY hmid (hmid,volid)) TYPE=MyISAM; INSERT INTO t1 VALUES (200001,2,1,1,100,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\E$',''),(200002,2,2,1,101,1,1,1,0,0,0,1,0,1,20020425060057,'\\\\ARKIVIO-TESTPDC\\C$',''),(200003,1,3,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,1,20020425060427,'c:',NULL); diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 85783e30a82..de90eeec2e8 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1739,7 +1739,7 @@ CREATE TABLE t1 ( ); INSERT INTO t1 (pseudo) VALUES ('test'); INSERT INTO t1 (pseudo) VALUES ('test1'); -SELECT 1 from t1 where rand() > 2; +SELECT 1 as rnd1 from t1 where rand() > 2; DROP TABLE t1; # From f3eb7fe0c3259b001f77c30844f42f96562c23f1 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 16:43:43 +0200 Subject: [PATCH 154/267] Better fix for GRANT bug tests/grant.pl: More options for test tests/grant.res: new test results --- sql/sql_base.cc | 7 +++++-- tests/grant.pl | 55 +++++++++++++++++++++++++++++-------------------- tests/grant.res | 14 ++++++------- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 1ed0673f4cf..f0b370c23d7 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1644,7 +1644,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) found_table=1; Field *find=find_field_in_table(thd,tables->table,name,length, grant_option && - tables->grant.want_privilege ,1); + tables->table->grant.want_privilege, + 1); if (find) { if (find == WRONG_GRANT) @@ -1683,7 +1684,9 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) for (; tables ; tables=tables->next) { Field *field=find_field_in_table(thd,tables->table,name,length, - grant_option && tables->grant.want_privilege ,allow_rowid); + grant_option && + tables->table->grant.want_privilege, + allow_rowid); if (field) { if (field == WRONG_GRANT) diff --git a/tests/grant.pl b/tests/grant.pl index a82e99645bc..c41b22157bd 100644 --- a/tests/grant.pl +++ b/tests/grant.pl @@ -8,12 +8,13 @@ use DBI; use Getopt::Long; use strict; -use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug - $opt_verbose $opt_server $opt_root_user $opt_password $opt_user - $opt_database $opt_host $version $user $tables_cols $columns_cols); +use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug + $opt_verbose $opt_server $opt_root_user $opt_password $opt_user + $opt_database $opt_host $version $user $tables_cols $columns_cols + $opt_silent); -$version="1.0"; -$opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=0; +$version="1.1"; +$opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0; $opt_host="localhost", $opt_server="mysql"; $opt_root_user="root"; @@ -21,7 +22,7 @@ $opt_password=""; $opt_user="grant_user"; $opt_database="grant_test"; -GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose") || usage(); +GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose","silent") || usage(); usage() if ($opt_help || $opt_Information); $user="$opt_user\@$opt_host"; @@ -477,7 +478,10 @@ sub user_connect $password, { PrintError => 0}); if (!$user_dbh) { - print "$DBI::errstr\n"; + if ($opt_verbose || !$ignore_error) + { + print "Error on connect: $DBI::errstr\n"; + } if (!$ignore_error) { die "The above should not have failed!"; @@ -492,7 +496,7 @@ sub user_connect sub safe_query { my ($query,$ignore_error)=@_; - if (do_query($dbh,$query)) + if (do_query($dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { @@ -509,7 +513,7 @@ sub safe_query sub user_query { my ($query,$ignore_error)=@_; - if (do_query($user_dbh,$query)) + if (do_query($user_dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { @@ -525,8 +529,8 @@ sub user_query sub do_query { - my ($my_dbh, $query)=@_; - my ($sth,$row,$tab,$col,$found); + my ($my_dbh, $query, $ignore_error)=@_; + my ($sth, $row, $tab, $col, $found, $fatal_error); print "$query\n" if ($opt_debug || $opt_verbose); if (!($sth= $my_dbh->prepare($query))) @@ -536,25 +540,32 @@ sub do_query } if (!$sth->execute) { - print "Error in execute: $DBI::errstr\n"; - die if ($DBI::errstr =~ /parse error/); + $fatal_error= ($DBI::errstr =~ /parse error/); + if (!$ignore_error || $opt_verbose || $fatal_error) + { + print "Error in execute: $DBI::errstr\n"; + } + die if ($fatal_error); $sth->finish; return 1; } $found=0; - while (($row=$sth->fetchrow_arrayref)) + if (!$opt_silent) { - $found=1; - $tab=""; - foreach $col (@$row) + while (($row=$sth->fetchrow_arrayref)) { - print $tab; - print defined($col) ? $col : "NULL"; - $tab="\t"; + $found=1; + $tab=""; + foreach $col (@$row) + { + print $tab; + print defined($col) ? $col : "NULL"; + $tab="\t"; + } + print "\n"; } - print "\n"; + print "\n" if ($found); } - print "\n" if ($found); $sth->finish; return 0; } diff --git a/tests/grant.res b/tests/grant.res index 91c37a2c9f8..1c74e5b1d1b 100644 --- a/tests/grant.res +++ b/tests/grant.res @@ -9,13 +9,13 @@ drop database grant_test Error in execute: Can't drop database 'grant_test'. Database doesn't exist create database grant_test Connecting grant_user -Access denied for user: '@localhost' to database 'grant_test' +Error on connect: Access denied for user: '@localhost' to database 'grant_test' grant select on *.* to grant_user@localhost set password FOR grant_user2@localhost = password('test') Error in execute: Can't find any matching row in the user table set password FOR grant_user=password('test') Connecting grant_user -Access denied for user: 'grant_user@localhost' (Using password: NO) +Error on connect: Access denied for user: 'grant_user@localhost' (Using password: NO) set password FOR grant_user='' Connecting grant_user select * from mysql.user where user = 'grant_user' @@ -48,7 +48,7 @@ Error in execute: The host or user argument to GRANT is too long grant select on grant_test.test to grant_user with grant option Error in execute: grant command denied to user: 'grant_user@localhost' for table 'test' set password FOR ''@''='' -Error in execute: You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords +Error in execute: Can't find any matching row in the user table set password FOR root@localhost = password('test') Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' revoke select on *.* from grant_user@localhost @@ -86,7 +86,7 @@ select count(*) from grant_test.test revoke ALL PRIVILEGES on *.* from grant_user@localhost Connecting grant_user -Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' delete from user where user='grant_user' flush privileges delete from user where user='grant_user' @@ -133,7 +133,7 @@ insert into grant_test.test values (6,0) Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' REVOKE GRANT OPTION on grant_test.* from grant_user@localhost Connecting grant_user -Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant ALL PRIVILEGES on grant_test.* to grant_user@localhost Connecting grant_user select * from mysql.user where user = 'grant_user' @@ -156,7 +156,7 @@ localhost grant_user N N N N N N N N N N N N N N select * from mysql.db where user = 'grant_user' Connecting grant_user -Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant create on grant_test.test2 to grant_user@localhost Connecting grant_user create table grant_test.test2 (a int not null) @@ -168,7 +168,7 @@ Error in execute: select command denied to user: 'grant_user@localhost' for tabl show keys from test Error in execute: select command denied to user: 'grant_user@localhost' for table 'test' show columns from test2 -a int(11) 0 +a int(11) 0 show keys from test2 select * from test From 2b051ccb813711a90db74330f5e9c35e52dc5e24 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 18:16:47 +0100 Subject: [PATCH 155/267] - added option "--skip-disk-image" and short form "-s" in addition to the already existing "--skip-dmg" (per Monty request) - Fixed handling of license files --- Build-tools/Do-pkg | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Build-tools/Do-pkg b/Build-tools/Do-pkg index 24360cbeefc..e95d86c0f6e 100755 --- a/Build-tools/Do-pkg +++ b/Build-tools/Do-pkg @@ -34,7 +34,7 @@ GetOptions( "help|h", "log|l:s", "mail|m=s", - "skip-dmg", + "skip-dmg|skip-disk-image|s", "suffix=s", "verbose|v", "version=s", @@ -74,7 +74,7 @@ $TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>; $INFO= <$SUPFILEDIR/Info.plist>; $DESC= <$SUPFILEDIR/Description.plist>; @RESOURCES= qw/ ReadMe.txt postinstall preinstall /; -@LICENSES= qw{ $SRCBASEDIR/COPYING $SRCBASEDIR/MySQLEULA.txt }; +@LICENSES= ("$SRCBASEDIR/COPYING","$SRCBASEDIR/MySQLEULA.txt"); &print_help("") if ($opt_help || !$opt_suffix || !$opt_version); @@ -125,12 +125,14 @@ foreach $resfile (@RESOURCES) # Search for license file foreach $license (@LICENSES) { - last if (-f "$license") + if (-f "$license") + { + $command= "cp $license $RESOURCE_DIR/License.txt"; + &run_command($command, "Error while copying $license to $RESOURCE_DIR"); + } } -&abort("Could not find a license file!") unless (-f "$license"); -$command= "cp $license $RESOURCE_DIR/License.txt"; -&run_command($command, "Error while copying $license to $RESOURCE_DIR"); +&abort("Could not find a license file!") unless (-f "$RESOURCE_DIR/License.txt"); # Extract the binary tarball and create the "mysql" symlink &logger("Extracting $TAR to $PKGROOT"); @@ -228,7 +230,7 @@ Options: is enabled) Note that the \@-Sign needs to be quoted! Example: --mail=user\\\@domain.com - --skip-dmg Just build the PKG, don't put it into a +-s, --skip-disk-image Just build the PKG, don't put it into a disk image afterwards --suffix= The package suffix (e.g. "-standard" or "-pro) --version= The MySQL version number (e.g. 4.0.11-gamma) From ae01a3533b67811b335ce0dc877db3ea4568dd26 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 18:46:40 +0100 Subject: [PATCH 156/267] fix for crash with small sort_buffer --- sql/filesort.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sql/filesort.cc b/sql/filesort.cc index ee87d508dd3..6ea97eb219a 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -198,6 +198,11 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, param.keys--; maxbuffer+=10; /* Some extra range */ + if (memavl < param.sort_length*MERGEBUFF2) + { + my_error(ER_OUT_OF_SORTMEMORY,MYF(0)); + goto err; + } if (memavl < MIN_SORT_MEMORY) { my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),sortbuff_size); From f927267680b5a369101b625efe95c857d6bb854b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 23:09:25 +0200 Subject: [PATCH 157/267] ha_innodb.cc: Fix bug: MySQL could erroneously return Empty set if InnoDB estimated index range size to 0 records though the range was not empty; MySQL also failed to do the next-key locking in the case of an empty index range sql/ha_innodb.cc: Fix bug: MySQL could erroneously return Empty set if InnoDB estimated index range size to 0 records though the range was not empty; MySQL also failed to do the next-key locking in the case of an empty index range --- sql/ha_innodb.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 0af1fb7b50a..ea8eaf6653e 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -3486,6 +3486,16 @@ ha_innobase::records_in_range( prebuilt->trx->op_info = (char*)""; + /* The MySQL optimizer seems to believe an estimate of 0 rows is + always accurate and may return the result 'Empty set' based on that. + The accuracy is not guaranteed, and even if it were, for a locking + read we should anyway perform the search to set the next-key lock. + Add 1 to the value to make sure MySQL does not make the assumption! */ + + if (n_rows == 0) { + n_rows = 1; + } + DBUG_RETURN((ha_rows) n_rows); } From 11881c42890a8c22ba9cb5ee68d4240abad5c4e9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Mar 2003 23:10:50 +0200 Subject: [PATCH 158/267] ha_innobase.cc: Fix bug: MySQL could erroneously return Empty set if InnoDB estimated index range size to 0 records though the range was not empty; MySQL also failed to do the next-key locking in the case of an empty index range sql/ha_innobase.cc: Fix bug: MySQL could erroneously return Empty set if InnoDB estimated index range size to 0 records though the range was not empty; MySQL also failed to do the next-key locking in the case of an empty index range --- sql/ha_innobase.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc index 5b2af70f34e..c0aea197b1f 100644 --- a/sql/ha_innobase.cc +++ b/sql/ha_innobase.cc @@ -3098,6 +3098,16 @@ ha_innobase::records_in_range( my_free((char*) key_val_buff2, MYF(0)); + /* The MySQL optimizer seems to believe an estimate of 0 rows is + always accurate and may return the result 'Empty set' based on that. + The accuracy is not guaranteed, and even if it were, for a locking + read we should anyway perform the search to set the next-key lock. + Add 1 to the value to make sure MySQL does not make the assumption! */ + + if (n_rows == 0) { + n_rows = 1; + } + DBUG_RETURN((ha_rows) n_rows); } From 76aa0ea583e814f9f30cf0a0398782deb68d6498 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 13:10:33 +0400 Subject: [PATCH 159/267] SCRUM IS_USED_LOCK('lock') implementation sql/item_create.cc: create_func_is_used_lock implementation sql/item_create.h: create_func_is_used_lock declaration sql/item_func.cc: thread_id member added to the ULL class sql/item_func.h: class Item_func_is_used_lock added sql/lex.h: IS_USED_LOCK function added to the SQL --- sql/item_create.cc | 6 ++++++ sql/item_create.h | 1 + sql/item_func.cc | 28 ++++++++++++++++++++++++++-- sql/item_func.h | 10 ++++++++++ sql/lex.h | 1 + 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/sql/item_create.cc b/sql/item_create.cc index d90c708fc0f..67a435043de 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -475,6 +475,12 @@ Item *create_func_is_free_lock(Item* a) return new Item_func_is_free_lock(a); } +Item *create_func_is_used_lock(Item* a) +{ + current_thd->lex.uncacheable(); + return new Item_func_is_used_lock(a); +} + Item *create_func_quote(Item* a) { return new Item_func_quote(a); diff --git a/sql/item_create.h b/sql/item_create.h index 135bd6b02c4..ce0a6d9ce86 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -100,6 +100,7 @@ Item *create_func_version(void); Item *create_func_weekday(Item* a); Item *create_load_file(Item* a); Item *create_func_is_free_lock(Item* a); +Item *create_func_is_used_lock(Item* a); Item *create_func_quote(Item* a); Item *create_func_geometry_from_text(Item* a); diff --git a/sql/item_func.cc b/sql/item_func.cc index da5e9cbb89c..e644859a477 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1632,8 +1632,10 @@ public: bool locked; pthread_cond_t cond; pthread_t thread; + ulong thread_id; - ULL(const char *key_arg,uint length) :key_length(length),count(1),locked(1) + ULL(const char *key_arg,uint length, ulong id) + :key_length(length),count(1),locked(1), thread_id(id) { key=(char*) my_memdup((byte*) key_arg,length,MYF(0)); pthread_cond_init(&cond,NULL); @@ -1837,7 +1839,7 @@ longlong Item_func_get_lock::val_int() if (!(ull= ((ULL*) hash_search(&hash_user_locks,(byte*) res->ptr(), res->length())))) { - ull=new ULL(res->ptr(),res->length()); + ull=new ULL(res->ptr(),res->length(), thd->thread_id); if (!ull || !ull->initialized()) { delete ull; @@ -2698,6 +2700,28 @@ longlong Item_func_is_free_lock::val_int() return 0; } +longlong Item_func_is_used_lock::val_int() +{ + String *res=args[0]->val_str(&value); + THD *thd=current_thd; + ULL *ull; + + null_value=1; + if (!res || !res->length()) + return 0; + + pthread_mutex_lock(&LOCK_user_locks); + ull= (ULL*) hash_search(&hash_user_locks,(byte*) res->ptr(), + res->length()); + pthread_mutex_unlock(&LOCK_user_locks); + if (!ull || !ull->locked) + return 0; + + null_value=0; + return ull->thread_id; +} + + /************************************************************************** Spatial functions diff --git a/sql/item_func.h b/sql/item_func.h index 860ddbbbadf..213d36607dd 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1151,6 +1151,16 @@ public: void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;} }; +class Item_func_is_used_lock :public Item_int_func +{ + String value; +public: + Item_func_is_used_lock(Item *a) :Item_int_func(a) {} + longlong val_int(); + const char *func_name() const { return "is_used_lock"; } + void fix_length_and_dec() { decimals=0; max_length=10; maybe_null=1;} +}; + /* For type casts */ enum Item_cast diff --git a/sql/lex.h b/sql/lex.h index 80f84628d27..bcce2038d94 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -509,6 +509,7 @@ static SYMBOL sql_functions[] = { { "ISEMPTY", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isempty)}, { "ISNULL", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isnull)}, { "IS_FREE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_free_lock)}, + { "IS_USED_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_used_lock)}, { "LAST_INSERT_ID", SYM(LAST_INSERT_ID),0,0}, { "ISSIMPLE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_issimple)}, { "LCASE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_lcase)}, From 6da897e04b3da790dfd0eed9d26dddf558e000dc Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 14:16:09 +0200 Subject: [PATCH 160/267] fixed uncachable union (bug #150) mysql-test/r/union.result: sect of uncachable union mysql-test/t/union.test: sect of uncachable union sql/sql_lex.h: fixed uncachable union --- mysql-test/r/union.result | 4 ++++ mysql-test/t/union.test | 2 ++ sql/sql_lex.h | 10 ++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index bf79af2831a..0edf5df7ae1 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -269,3 +269,7 @@ id select_type table type possible_keys key key_len ref rows Extra drop table t1,t2; (select 1) union (select 2) order by 0; Unknown column '0' in 'order clause' +SELECT @a:=1 UNION SELECT @a:=@a+1; +@a:=1 +1 +2 diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index d41860c1b72..d2f35b59f54 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -144,3 +144,5 @@ explain (select * from t1 where a=1) union (select * from t1 where b=1); drop table t1,t2; --error 1054 (select 1) union (select 2) order by 0; + +SELECT @a:=1 UNION SELECT @a:=@a+1; diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 21c151d33b2..2d79feeaf2b 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -501,11 +501,13 @@ typedef struct st_lex but we should merk all subselects as uncacheable from current till most upper */ - for (SELECT_LEX_NODE *sl= current_select; - sl != &select_lex; - sl= sl->outer_select()) + SELECT_LEX_NODE *sl; + SELECT_LEX_UNIT *un; + for (sl= current_select, un= sl->master_unit(); + un != &unit; + sl= sl->outer_select(), un= sl->master_unit()) { - sl->uncacheable = sl->master_unit()->uncacheable= 1; + sl->uncacheable = un->uncacheable= 1; } } } LEX; From 6d47e03f56b6c8a564448f303130be10011a1447 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 14:17:56 +0100 Subject: [PATCH 161/267] - we need to require an installation on the root volume (/usr/local/mysql) --- support-files/MacOSX/Info.plist.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support-files/MacOSX/Info.plist.sh b/support-files/MacOSX/Info.plist.sh index c8e4eb1c2d4..f14902ff379 100644 --- a/support-files/MacOSX/Info.plist.sh +++ b/support-files/MacOSX/Info.plist.sh @@ -29,7 +29,7 @@ IFPkgFlagRestartAction NoRestart IFPkgFlagRootVolumeOnly - + IFPkgFlagUpdateInstalledLanguages IFPkgFormatVersion From aeb47edbbc10addaf7b551b8f2de17142f3ad269 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 18:08:12 +0400 Subject: [PATCH 162/267] Every charset now have its own parser state arrays --- include/m_ctype.h | 18 +++ mysys/charset.c | 64 +++++++- sql/sql_lex.cc | 301 ++++++++++++++++---------------------- sql/sql_lex.h | 15 +- sql/sql_yacc.yy | 6 +- strings/ctype-big5.c | 1 + strings/ctype-bin.c | 1 + strings/ctype-czech.c | 1 + strings/ctype-euc_kr.c | 1 + strings/ctype-extra.c | 24 +++ strings/ctype-gb2312.c | 1 + strings/ctype-gbk.c | 1 + strings/ctype-latin1.c | 1 + strings/ctype-latin1_de.c | 1 + strings/ctype-sjis.c | 1 + strings/ctype-tis620.c | 1 + strings/ctype-ujis.c | 1 + strings/ctype-utf8.c | 2 + strings/ctype-win1250ch.c | 1 + 19 files changed, 250 insertions(+), 192 deletions(-) diff --git a/include/m_ctype.h b/include/m_ctype.h index 19c7d315f4a..43338c1942d 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -74,6 +74,22 @@ typedef struct my_uni_idx_st } MY_UNI_IDX; +enum my_lex_states +{ + MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, + MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, + MY_LEX_FOUND_IDENT, MY_LEX_SIGNED_NUMBER, MY_LEX_REAL, MY_LEX_HEX_NUMBER, + MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, + MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, + MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, + MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_COLON, + MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, + MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, + MY_LEX_IDENT_OR_KEYWORD, MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, + MY_LEX_STRING_OR_DELIMITER +}; + + typedef struct charset_info_st { uint number; @@ -89,6 +105,8 @@ typedef struct charset_info_st uchar *sort_order; uint16 *tab_to_uni; MY_UNI_IDX *tab_from_uni; + uchar state_map[256]; + uchar ident_map[256]; /* Collation routines */ uint strxfrm_multiply; diff --git a/mysys/charset.c b/mysys/charset.c index 8bc250a3f07..3ad27469c03 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -29,7 +29,7 @@ - Initializing charset related structures - Loading dynamic charsets - Searching for a proper CHARSET_INFO - using charset name, collation name or collatio ID + using charset name, collation name or collation ID - Setting server default character set */ @@ -54,6 +54,62 @@ static void set_max_sort_char(CHARSET_INFO *cs) } +static void init_state_maps(CHARSET_INFO *cs) +{ + uint i; + uchar *state_map= cs->state_map; + uchar *ident_map= cs->ident_map; + + /* Fill state_map with states to get a faster parser */ + for (i=0; i < 256 ; i++) + { + if (my_isalpha(cs,i)) + state_map[i]=(uchar) MY_LEX_IDENT; + else if (my_isdigit(cs,i)) + state_map[i]=(uchar) MY_LEX_NUMBER_IDENT; +#if defined(USE_MB) && defined(USE_MB_IDENT) + else if (use_mb(cs) && my_ismbhead(cs, i)) + state_map[i]=(uchar) MY_LEX_IDENT; +#endif + else if (!my_isgraph(cs,i)) + state_map[i]=(uchar) MY_LEX_SKIP; + else + state_map[i]=(uchar) MY_LEX_CHAR; + } + state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) MY_LEX_IDENT; + state_map[(uchar)'\'']=(uchar) MY_LEX_STRING; + state_map[(uchar)'-']=state_map[(uchar)'+']=(uchar) MY_LEX_SIGNED_NUMBER; + state_map[(uchar)'.']=(uchar) MY_LEX_REAL_OR_POINT; + state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) MY_LEX_CMP_OP; + state_map[(uchar)'<']= (uchar) MY_LEX_LONG_CMP_OP; + state_map[(uchar)'&']=state_map[(uchar)'|']=(uchar) MY_LEX_BOOL; + state_map[(uchar)'#']=(uchar) MY_LEX_COMMENT; + state_map[(uchar)';']=(uchar) MY_LEX_COLON; + state_map[(uchar)':']=(uchar) MY_LEX_SET_VAR; + state_map[0]=(uchar) MY_LEX_EOL; + state_map[(uchar)'\\']= (uchar) MY_LEX_ESCAPE; + state_map[(uchar)'/']= (uchar) MY_LEX_LONG_COMMENT; + state_map[(uchar)'*']= (uchar) MY_LEX_END_LONG_COMMENT; + state_map[(uchar)'@']= (uchar) MY_LEX_USER_END; + state_map[(uchar) '`']= (uchar) MY_LEX_USER_VARIABLE_DELIMITER; + state_map[(uchar)'"']= (uchar) MY_LEX_STRING_OR_DELIMITER; + + /* + Create a second map to make it faster to find identifiers + */ + for (i=0; i < 256 ; i++) + { + ident_map[i]= (uchar) (state_map[i] == MY_LEX_IDENT || + state_map[i] == MY_LEX_NUMBER_IDENT); + } + + /* Special handling of hex and binary strings */ + state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX; + state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN; + + +} + static void simple_cs_init_functions(CHARSET_INFO *cs) { @@ -211,8 +267,11 @@ static void simple_cs_copy_data(CHARSET_INFO *to, CHARSET_INFO *from) to->name= my_once_strdup(from->name,MYF(MY_WME)); if (from->ctype) + { to->ctype= (uchar*) my_once_memdup((char*) from->ctype, MY_CS_CTYPE_TABLE_SIZE, MYF(MY_WME)); + init_state_maps(to); + } if (from->to_lower) to->to_lower= (uchar*) my_once_memdup((char*) from->to_lower, MY_CS_TO_LOWER_TABLE_SIZE, MYF(MY_WME)); @@ -447,7 +506,10 @@ static my_bool init_available_charsets(myf myflags) for (cs=all_charsets; cs < all_charsets+255 ; cs++) { if (*cs) + { set_max_sort_char(*cs); + init_state_maps(*cs); + } } strmov(get_charsets_dir(fname), MY_CHARSET_INDEX); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 9df94204644..cd0a653ba86 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -75,8 +75,6 @@ inline int lex_casecmp(const char *s, const char *t, uint len) #include "lex_hash.h" -static uchar state_map[256], ident_map[256]; - void lex_init(void) { @@ -89,53 +87,6 @@ void lex_init(void) VOID(pthread_key_create(&THR_LEX,NULL)); - /* Fill state_map with states to get a faster parser */ - for (i=0; i < sizeof(state_map) ; i++) - { - if (my_isalpha(system_charset_info,i)) - state_map[i]=(uchar) STATE_IDENT; - else if (my_isdigit(system_charset_info,i)) - state_map[i]=(uchar) STATE_NUMBER_IDENT; -#if defined(USE_MB) && defined(USE_MB_IDENT) - else if (use_mb(system_charset_info) && my_ismbhead(system_charset_info, i)) - state_map[i]=(uchar) STATE_IDENT; -#endif - else if (!my_isgraph(system_charset_info,i)) - state_map[i]=(uchar) STATE_SKIP; - else - state_map[i]=(uchar) STATE_CHAR; - } - state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) STATE_IDENT; - state_map[(uchar)'\'']=(uchar) STATE_STRING; - state_map[(uchar)'-']=state_map[(uchar)'+']=(uchar) STATE_SIGNED_NUMBER; - state_map[(uchar)'.']=(uchar) STATE_REAL_OR_POINT; - state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) STATE_CMP_OP; - state_map[(uchar)'<']= (uchar) STATE_LONG_CMP_OP; - state_map[(uchar)'&']=state_map[(uchar)'|']=(uchar) STATE_BOOL; - state_map[(uchar)'#']=(uchar) STATE_COMMENT; - state_map[(uchar)';']=(uchar) STATE_COLON; - state_map[(uchar)':']=(uchar) STATE_SET_VAR; - state_map[0]=(uchar) STATE_EOL; - state_map[(uchar)'\\']= (uchar) STATE_ESCAPE; - state_map[(uchar)'/']= (uchar) STATE_LONG_COMMENT; - state_map[(uchar)'*']= (uchar) STATE_END_LONG_COMMENT; - state_map[(uchar)'@']= (uchar) STATE_USER_END; - state_map[(uchar) '`']= (uchar) STATE_USER_VARIABLE_DELIMITER; - state_map[(uchar)'"']= (uchar) STAT_STRING_OR_DELIMITER; - - /* - Create a second map to make it faster to find identifiers - */ - for (i=0; i < sizeof(ident_map) ; i++) - { - ident_map[i]= (uchar) (state_map[i] == STATE_IDENT || - state_map[i] == STATE_NUMBER_IDENT); - } - - /* Special handling of hex and binary strings */ - state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) STATE_IDENT_OR_HEX; - state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) STATE_IDENT_OR_BIN; - DBUG_VOID_RETURN; } @@ -156,7 +107,7 @@ void lex_free(void) LEX *lex_start(THD *thd, uchar *buf,uint length) { LEX *lex= &thd->lex; - lex->next_state=STATE_START; + lex->next_state=MY_LEX_START; lex->end_of_query=(lex->ptr=buf)+length; lex->yylineno = 1; lex->select_lex.create_refs=lex->in_comment=0; @@ -458,8 +409,8 @@ inline static uint int_token(const char *str,uint length) // yylex remember the following states from the following yylex() -// STATE_EOQ ; found end of query -// STATE_OPERATOR_OR_IDENT ; last state was an ident, text or number +// MY_LEX_EOQ ; found end of query +// MY_LEX_OPERATOR_OR_IDENT ; last state was an ident, text or number // (which can't be followed by a signed number) int yylex(void *arg, void *yythd) @@ -467,76 +418,79 @@ int yylex(void *arg, void *yythd) reg1 uchar c; int tokval; uint length; - enum lex_states state,prev_state; + enum my_lex_states state,prev_state; LEX *lex= &(((THD *)yythd)->lex); YYSTYPE *yylval=(YYSTYPE*) arg; + CHARSET_INFO *cs= ((THD *) yythd)->variables.thd_charset; + uchar *state_map= cs->state_map; + uchar *ident_map= cs->ident_map; lex->yylval=yylval; // The global state lex->tok_start=lex->tok_end=lex->ptr; prev_state=state=lex->next_state; - lex->next_state=STATE_OPERATOR_OR_IDENT; + lex->next_state=MY_LEX_OPERATOR_OR_IDENT; LINT_INIT(c); for (;;) { switch (state) { - case STATE_OPERATOR_OR_IDENT: // Next is operator or keyword - case STATE_START: // Start of token + case MY_LEX_OPERATOR_OR_IDENT: // Next is operator or keyword + case MY_LEX_START: // Start of token // Skip startspace - for (c=yyGet() ; (state_map[c] == STATE_SKIP) ; c= yyGet()) + for (c=yyGet() ; (state_map[c] == MY_LEX_SKIP) ; c= yyGet()) { if (c == '\n') lex->yylineno++; } lex->tok_start=lex->ptr-1; // Start of real token - state= (enum lex_states) state_map[c]; + state= (enum my_lex_states) state_map[c]; break; - case STATE_ESCAPE: + case MY_LEX_ESCAPE: if (yyGet() == 'N') { // Allow \N as shortcut for NULL yylval->lex_str.str=(char*) "\\N"; yylval->lex_str.length=2; return NULL_SYM; } - case STATE_CHAR: // Unknown or single char token - case STATE_SKIP: // This should not happen + case MY_LEX_CHAR: // Unknown or single char token + case MY_LEX_SKIP: // This should not happen yylval->lex_str.str=(char*) (lex->ptr=lex->tok_start);// Set to first chr yylval->lex_str.length=1; c=yyGet(); if (c != ')') - lex->next_state= STATE_START; // Allow signed numbers + lex->next_state= MY_LEX_START; // Allow signed numbers if (c == ',') lex->tok_start=lex->ptr; // Let tok_start point at next item return((int) c); - case STATE_IDENT_OR_HEX: + case MY_LEX_IDENT_OR_HEX: if (yyPeek() == '\'') { // Found x'hex-number' - state= STATE_HEX_NUMBER; + state= MY_LEX_HEX_NUMBER; break; } /* Fall through */ - case STATE_IDENT_OR_BIN: // TODO: Add binary string handling - case STATE_IDENT: + case MY_LEX_IDENT_OR_BIN: // TODO: Add binary string handling + case MY_LEX_IDENT: #if defined(USE_MB) && defined(USE_MB_IDENT) - if (use_mb(system_charset_info)) + if (use_mb(cs)) { - if (my_ismbhead(system_charset_info, yyGetLast())) + if (my_ismbhead(cs, yyGetLast())) { - int l = my_ismbchar(system_charset_info, + int l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query); if (l == 0) { - state = STATE_CHAR; + state = MY_LEX_CHAR; continue; } lex->ptr += l - 1; } while (ident_map[c=yyGet()]) { - if (my_ismbhead(system_charset_info, c)) + if (my_ismbhead(cs, c)) { int l; - if ((l = my_ismbchar(system_charset_info, + if ((l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query)) == 0) break; @@ -550,16 +504,16 @@ int yylex(void *arg, void *yythd) length= (uint) (lex->ptr - lex->tok_start)-1; if (lex->ignore_space) { - for (; state_map[c] == STATE_SKIP ; c= yyGet()); + for (; state_map[c] == MY_LEX_SKIP ; c= yyGet()); } if (c == '.' && ident_map[yyPeek()]) - lex->next_state=STATE_IDENT_SEP; + lex->next_state=MY_LEX_IDENT_SEP; else { // '(' must follow directly if function yyUnget(); if ((tokval = find_keyword(lex,length,c == '('))) { - lex->next_state= STATE_START; // Allow signed numbers + lex->next_state= MY_LEX_START; // Allow signed numbers return(tokval); // Was keyword } yySkip(); // next state does a unget @@ -582,30 +536,30 @@ int yylex(void *arg, void *yythd) else return(IDENT); - case STATE_IDENT_SEP: // Found ident and now '.' - lex->next_state=STATE_IDENT_START;// Next is an ident (not a keyword) + case MY_LEX_IDENT_SEP: // Found ident and now '.' + lex->next_state=MY_LEX_IDENT_START;// Next is an ident (not a keyword) yylval->lex_str.str=(char*) lex->ptr; yylval->lex_str.length=1; c=yyGet(); // should be '.' return((int) c); - case STATE_NUMBER_IDENT: // number or ident which num-start - while (my_isdigit(system_charset_info,(c = yyGet()))) ; + case MY_LEX_NUMBER_IDENT: // number or ident which num-start + while (my_isdigit(cs,(c = yyGet()))) ; if (!ident_map[c]) { // Can't be identifier - state=STATE_INT_OR_REAL; + state=MY_LEX_INT_OR_REAL; break; } if (c == 'e' || c == 'E') { // The following test is written this way to allow numbers of type 1e1 - if (my_isdigit(system_charset_info,yyPeek()) || + if (my_isdigit(cs,yyPeek()) || (c=(yyGet())) == '+' || c == '-') { // Allow 1E+10 - if (my_isdigit(system_charset_info,yyPeek())) // Number must have digit after sign + if (my_isdigit(cs,yyPeek())) // Number must have digit after sign { yySkip(); - while (my_isdigit(system_charset_info,yyGet())) ; + while (my_isdigit(cs,yyGet())) ; yylval->lex_str=get_token(lex,yyLength()); return(FLOAT_NUM); } @@ -615,7 +569,7 @@ int yylex(void *arg, void *yythd) else if (c == 'x' && (lex->ptr - lex->tok_start) == 2 && lex->tok_start[0] == '0' ) { // Varbinary - while (my_isxdigit(system_charset_info,(c = yyGet()))) ; + while (my_isxdigit(cs,(c = yyGet()))) ; if ((lex->ptr - lex->tok_start) >= 4 && !ident_map[c]) { yylval->lex_str=get_token(lex,yyLength()); @@ -627,28 +581,28 @@ int yylex(void *arg, void *yythd) yyUnget(); } // fall through - case STATE_IDENT_START: // Incomplete ident + case MY_LEX_IDENT_START: // Incomplete ident #if defined(USE_MB) && defined(USE_MB_IDENT) - if (use_mb(system_charset_info)) + if (use_mb(cs)) { - if (my_ismbhead(system_charset_info, yyGetLast())) + if (my_ismbhead(cs, yyGetLast())) { - int l = my_ismbchar(system_charset_info, + int l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query); if (l == 0) { - state = STATE_CHAR; + state = MY_LEX_CHAR; continue; } lex->ptr += l - 1; } while (ident_map[c=yyGet()]) { - if (my_ismbhead(system_charset_info, c)) + if (my_ismbhead(cs, c)) { int l; - if ((l = my_ismbchar(system_charset_info, + if ((l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query)) == 0) break; @@ -661,28 +615,28 @@ int yylex(void *arg, void *yythd) while (ident_map[c = yyGet()]) ; if (c == '.' && ident_map[yyPeek()]) - lex->next_state=STATE_IDENT_SEP;// Next is '.' + lex->next_state=MY_LEX_IDENT_SEP;// Next is '.' // fall through - case STATE_FOUND_IDENT: // Complete ident + case MY_LEX_FOUND_IDENT: // Complete ident yylval->lex_str=get_token(lex,yyLength()); if (lex->convert_set) lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(IDENT); - case STATE_USER_VARIABLE_DELIMITER: + case MY_LEX_USER_VARIABLE_DELIMITER: { char delim= c; // Used char lex->tok_start=lex->ptr; // Skip first ` #ifdef USE_MB - if (use_mb(system_charset_info)) + if (use_mb(cs)) { while ((c=yyGet()) && c != delim && c != (uchar) NAMES_SEP_CHAR) { - if (my_ismbhead(system_charset_info, c)) + if (my_ismbhead(cs, c)) { int l; - if ((l = my_ismbchar(system_charset_info, + if ((l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query)) == 0) break; @@ -721,67 +675,67 @@ int yylex(void *arg, void *yythd) yySkip(); // Skip end ` return(IDENT); } - case STATE_SIGNED_NUMBER: // Incomplete signed number - if (prev_state == STATE_OPERATOR_OR_IDENT) + case MY_LEX_SIGNED_NUMBER: // Incomplete signed number + if (prev_state == MY_LEX_OPERATOR_OR_IDENT) { if (c == '-' && yyPeek() == '-' && - (my_isspace(system_charset_info,yyPeek2()) || - my_iscntrl(system_charset_info,yyPeek2()))) - state=STATE_COMMENT; + (my_isspace(cs,yyPeek2()) || + my_iscntrl(cs,yyPeek2()))) + state=MY_LEX_COMMENT; else - state= STATE_CHAR; // Must be operator + state= MY_LEX_CHAR; // Must be operator break; } - if (!my_isdigit(system_charset_info,c=yyGet()) || yyPeek() == 'x') + if (!my_isdigit(cs,c=yyGet()) || yyPeek() == 'x') { if (c != '.') { - if (c == '-' && my_isspace(system_charset_info,yyPeek())) - state=STATE_COMMENT; + if (c == '-' && my_isspace(cs,yyPeek())) + state=MY_LEX_COMMENT; else - state = STATE_CHAR; // Return sign as single char + state = MY_LEX_CHAR; // Return sign as single char break; } yyUnget(); // Fix for next loop } - while (my_isdigit(system_charset_info,c=yyGet())) ; // Incomplete real or int number + while (my_isdigit(cs,c=yyGet())) ; // Incomplete real or int number if ((c == 'e' || c == 'E') && - (yyPeek() == '+' || yyPeek() == '-' || my_isdigit(system_charset_info,yyPeek()))) + (yyPeek() == '+' || yyPeek() == '-' || my_isdigit(cs,yyPeek()))) { // Real number yyUnget(); c= '.'; // Fool next test } // fall through - case STATE_INT_OR_REAL: // Compleat int or incompleat real + case MY_LEX_INT_OR_REAL: // Compleat int or incompleat real if (c != '.') { // Found complete integer number. yylval->lex_str=get_token(lex,yyLength()); return int_token(yylval->lex_str.str,yylval->lex_str.length); } // fall through - case STATE_REAL: // Incomplete real number - while (my_isdigit(system_charset_info,c = yyGet())) ; + case MY_LEX_REAL: // Incomplete real number + while (my_isdigit(cs,c = yyGet())) ; if (c == 'e' || c == 'E') { c = yyGet(); if (c == '-' || c == '+') c = yyGet(); // Skip sign - if (!my_isdigit(system_charset_info,c)) + if (!my_isdigit(cs,c)) { // No digit after sign - state= STATE_CHAR; + state= MY_LEX_CHAR; break; } - while (my_isdigit(system_charset_info,yyGet())) ; + while (my_isdigit(cs,yyGet())) ; yylval->lex_str=get_token(lex,yyLength()); return(FLOAT_NUM); } yylval->lex_str=get_token(lex,yyLength()); return(REAL_NUM); - case STATE_HEX_NUMBER: // Found x'hexstring' + case MY_LEX_HEX_NUMBER: // Found x'hexstring' yyGet(); // Skip ' - while (my_isxdigit(system_charset_info,(c = yyGet()))) ; + while (my_isxdigit(cs,(c = yyGet()))) ; length=(lex->ptr - lex->tok_start); // Length of hexnum+3 if (!(length & 1) || c != '\'') { @@ -794,56 +748,56 @@ int yylex(void *arg, void *yythd) lex->yytoklen-=3; return (HEX_NUM); - case STATE_CMP_OP: // Incomplete comparison operator - if (state_map[yyPeek()] == STATE_CMP_OP || - state_map[yyPeek()] == STATE_LONG_CMP_OP) + case MY_LEX_CMP_OP: // Incomplete comparison operator + if (state_map[yyPeek()] == MY_LEX_CMP_OP || + state_map[yyPeek()] == MY_LEX_LONG_CMP_OP) yySkip(); if ((tokval = find_keyword(lex,(uint) (lex->ptr - lex->tok_start),0))) { - lex->next_state= STATE_START; // Allow signed numbers + lex->next_state= MY_LEX_START; // Allow signed numbers return(tokval); } - state = STATE_CHAR; // Something fishy found + state = MY_LEX_CHAR; // Something fishy found break; - case STATE_LONG_CMP_OP: // Incomplete comparison operator - if (state_map[yyPeek()] == STATE_CMP_OP || - state_map[yyPeek()] == STATE_LONG_CMP_OP) + case MY_LEX_LONG_CMP_OP: // Incomplete comparison operator + if (state_map[yyPeek()] == MY_LEX_CMP_OP || + state_map[yyPeek()] == MY_LEX_LONG_CMP_OP) { yySkip(); - if (state_map[yyPeek()] == STATE_CMP_OP) + if (state_map[yyPeek()] == MY_LEX_CMP_OP) yySkip(); } if ((tokval = find_keyword(lex,(uint) (lex->ptr - lex->tok_start),0))) { - lex->next_state= STATE_START; // Found long op + lex->next_state= MY_LEX_START; // Found long op return(tokval); } - state = STATE_CHAR; // Something fishy found + state = MY_LEX_CHAR; // Something fishy found break; - case STATE_BOOL: + case MY_LEX_BOOL: if (c != yyPeek()) { - state=STATE_CHAR; + state=MY_LEX_CHAR; break; } yySkip(); tokval = find_keyword(lex,2,0); // Is a bool operator - lex->next_state= STATE_START; // Allow signed numbers + lex->next_state= MY_LEX_START; // Allow signed numbers return(tokval); - case STAT_STRING_OR_DELIMITER: + case MY_LEX_STRING_OR_DELIMITER: if (((THD *) yythd)->variables.sql_mode & MODE_ANSI_QUOTES) { - state= STATE_USER_VARIABLE_DELIMITER; + state= MY_LEX_USER_VARIABLE_DELIMITER; break; } /* " used for strings */ - case STATE_STRING: // Incomplete text string + case MY_LEX_STRING: // Incomplete text string if (!(yylval->lex_str.str = get_text(lex))) { - state= STATE_CHAR; // Read char by char + state= MY_LEX_CHAR; // Read char by char break; } yylval->lex_str.length=lex->yytoklen; @@ -851,16 +805,16 @@ int yylex(void *arg, void *yythd) lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(TEXT_STRING); - case STATE_COMMENT: // Comment + case MY_LEX_COMMENT: // Comment lex->select_lex.options|= OPTION_FOUND_COMMENT; while ((c = yyGet()) != '\n' && c) ; yyUnget(); // Safety against eof - state = STATE_START; // Try again + state = MY_LEX_START; // Try again break; - case STATE_LONG_COMMENT: /* Long C comment? */ + case MY_LEX_LONG_COMMENT: /* Long C comment? */ if (yyPeek() != '*') { - state=STATE_CHAR; // Probable division + state=MY_LEX_CHAR; // Probable division break; } yySkip(); // Skip '*' @@ -869,8 +823,8 @@ int yylex(void *arg, void *yythd) { ulong version=MYSQL_VERSION_ID; yySkip(); - state=STATE_START; - if (my_isdigit(system_charset_info,yyPeek())) + state=MY_LEX_START; + if (my_isdigit(cs,yyPeek())) { // Version number version=strtol((char*) lex->ptr,(char**) &lex->ptr,10); } @@ -888,88 +842,87 @@ int yylex(void *arg, void *yythd) } if (lex->ptr != lex->end_of_query) yySkip(); // remove last '/' - state = STATE_START; // Try again + state = MY_LEX_START; // Try again break; - case STATE_END_LONG_COMMENT: + case MY_LEX_END_LONG_COMMENT: if (lex->in_comment && yyPeek() == '/') { yySkip(); lex->in_comment=0; - state=STATE_START; + state=MY_LEX_START; } else - state=STATE_CHAR; // Return '*' + state=MY_LEX_CHAR; // Return '*' break; - case STATE_SET_VAR: // Check if ':=' + case MY_LEX_SET_VAR: // Check if ':=' if (yyPeek() != '=') { - state=STATE_CHAR; // Return ':' + state=MY_LEX_CHAR; // Return ':' break; } yySkip(); return (SET_VAR); - case STATE_COLON: // optional line terminator + case MY_LEX_COLON: // optional line terminator if (yyPeek()) { if (((THD *)yythd)->client_capabilities & CLIENT_MULTI_QUERIES) { lex->found_colon=(char*)lex->ptr; ((THD *)yythd)->server_status |= SERVER_MORE_RESULTS_EXISTS; - lex->next_state=STATE_END; + lex->next_state=MY_LEX_END; return(END_OF_INPUT); } else - state=STATE_CHAR; // Return ';' + state=MY_LEX_CHAR; // Return ';' break; } /* fall true */ - case STATE_EOL: - lex->next_state=STATE_END; // Mark for next loop + case MY_LEX_EOL: + lex->next_state=MY_LEX_END; // Mark for next loop return(END_OF_INPUT); - case STATE_END: - lex->next_state=STATE_END; + case MY_LEX_END: + lex->next_state=MY_LEX_END; return(0); // We found end of input last time /* Actually real shouldn't start with . but allow them anyhow */ - case STATE_REAL_OR_POINT: - if (my_isdigit(system_charset_info,yyPeek())) - state = STATE_REAL; // Real + case MY_LEX_REAL_OR_POINT: + if (my_isdigit(cs,yyPeek())) + state = MY_LEX_REAL; // Real else { - state = STATE_CHAR; // return '.' - lex->next_state=STATE_IDENT_START;// Next is an ident (not a keyword) + state = MY_LEX_CHAR; // return '.' + lex->next_state=MY_LEX_IDENT_START;// Next is an ident (not a keyword) } break; - case STATE_USER_END: // end '@' of user@hostname + case MY_LEX_USER_END: // end '@' of user@hostname switch (state_map[yyPeek()]) { - case STATE_STRING: - case STATE_USER_VARIABLE_DELIMITER: - case STAT_STRING_OR_DELIMITER: + case MY_LEX_STRING: + case MY_LEX_USER_VARIABLE_DELIMITER: + case MY_LEX_STRING_OR_DELIMITER: break; - case STATE_USER_END: - lex->next_state=STATE_SYSTEM_VAR; + case MY_LEX_USER_END: + lex->next_state=MY_LEX_SYSTEM_VAR; break; default: - lex->next_state=STATE_HOSTNAME; + lex->next_state=MY_LEX_HOSTNAME; break; } yylval->lex_str.str=(char*) lex->ptr; yylval->lex_str.length=1; return((int) '@'); - case STATE_HOSTNAME: // end '@' of user@hostname - for (c=yyGet() ; - my_isalnum(system_charset_info,c) || c == '.' || c == '_' || - c == '$'; + case MY_LEX_HOSTNAME: // end '@' of user@hostname + for (c=yyGet() ; + my_isalnum(cs,c) || c == '.' || c == '_' || c == '$'; c= yyGet()) ; yylval->lex_str=get_token(lex,yyLength()); return(LEX_HOSTNAME); - case STATE_SYSTEM_VAR: + case MY_LEX_SYSTEM_VAR: yylval->lex_str.str=(char*) lex->ptr; yylval->lex_str.length=1; - lex->next_state=STATE_IDENT_OR_KEYWORD; + lex->next_state=MY_LEX_IDENT_OR_KEYWORD; yySkip(); // Skip '@' return((int) '@'); - case STATE_IDENT_OR_KEYWORD: + case MY_LEX_IDENT_OR_KEYWORD: /* We come here when we have found two '@' in a row. We should now be able to handle: @@ -978,7 +931,7 @@ int yylex(void *arg, void *yythd) while (ident_map[c=yyGet()]) ; if (c == '.') - lex->next_state=STATE_IDENT_SEP; + lex->next_state=MY_LEX_IDENT_SEP; length= (uint) (lex->ptr - lex->tok_start)-1; if ((tokval= find_keyword(lex,length,0))) { diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 21c151d33b2..b540f3ef0d1 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -77,19 +77,6 @@ enum enum_sql_command { SQLCOM_END }; -enum lex_states -{ - STATE_START, STATE_CHAR, STATE_IDENT, STATE_IDENT_SEP, STATE_IDENT_START, - STATE_FOUND_IDENT, STATE_SIGNED_NUMBER, STATE_REAL, STATE_HEX_NUMBER, - STATE_CMP_OP, STATE_LONG_CMP_OP, STATE_STRING, STATE_COMMENT, STATE_END, - STATE_OPERATOR_OR_IDENT, STATE_NUMBER_IDENT, STATE_INT_OR_REAL, - STATE_REAL_OR_POINT, STATE_BOOL, STATE_EOL, STATE_ESCAPE, STATE_LONG_COMMENT, - STATE_END_LONG_COMMENT, STATE_COLON, STATE_SET_VAR, STATE_USER_END, - STATE_HOSTNAME, STATE_SKIP, STATE_USER_VARIABLE_DELIMITER, STATE_SYSTEM_VAR, - STATE_IDENT_OR_KEYWORD, STATE_IDENT_OR_HEX, STATE_IDENT_OR_BIN, - STAT_STRING_OR_DELIMITER -}; - typedef List List_item; @@ -474,7 +461,7 @@ typedef struct st_lex ulong thread_id,type; enum_sql_command sql_command; thr_lock_type lock_option; - enum lex_states next_state; + enum my_lex_states next_state; enum enum_duplicates duplicates; enum enum_tx_isolation tx_isolation; enum enum_ha_read_modes ha_read_mode; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3473f2ecab8..fac3315f5c9 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3867,7 +3867,7 @@ literal: | REAL_NUM { $$ = new Item_real($1.str, $1.length); } | FLOAT_NUM { $$ = new Item_float($1.str, $1.length); } | NULL_SYM { $$ = new Item_null(); - Lex->next_state=STATE_OPERATOR_OR_IDENT;} + Lex->next_state=MY_LEX_OPERATOR_OR_IDENT;} | HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);} | DATE_SYM text_literal { $$ = $2; } | TIME_SYM text_literal { $$ = $2; } @@ -3964,8 +3964,8 @@ ident: LEX *lex= Lex; $$.str= lex->thd->strmake($1.str,$1.length); $$.length=$1.length; - if (lex->next_state != STATE_END) - lex->next_state=STATE_OPERATOR_OR_IDENT; + if (lex->next_state != MY_LEX_END) + lex->next_state= MY_LEX_OPERATOR_OR_IDENT; } ; diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index c1d6d9e63de..87b76ce789b 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -6244,6 +6244,7 @@ CHARSET_INFO my_charset_big5 = sort_order_big5, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 1, /* strxfrm_multiply */ my_strnncoll_big5, my_strnncollsp_big5, diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index b39697e6f81..9f5cad01cb2 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -306,6 +306,7 @@ CHARSET_INFO my_charset_bin = bin_char_array, /* sort_order */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_binary, /* strnncoll */ my_strnncoll_binary, diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index 9bdf666cc21..11e40dcf32f 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -618,6 +618,7 @@ CHARSET_INFO my_charset_czech = sort_order_czech, tab_8859_2_uni, /* tab_to_uni */ idx_uni_8859_2, /* tab_from_uni */ + "","", 4, /* strxfrm_multiply */ my_strnncoll_czech, my_strnncollsp_czech, diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c index bd588c351c4..5ccc2cf486b 100644 --- a/strings/ctype-euc_kr.c +++ b/strings/ctype-euc_kr.c @@ -8652,6 +8652,7 @@ CHARSET_INFO my_charset_euc_kr = sort_order_euc_kr, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple, diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index cd82ffdd9bb..b95228c9f65 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -2818,6 +2818,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_latin1, tab_8859_1_uni, /* tab_to_uni */ idx_uni_8859_1, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -2869,6 +2870,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_cp1251, tab_cp1251_uni, /* tab_to_uni */ idx_uni_cp1251, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -2919,6 +2921,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_cp1257, tab_cp1257_uni, /* tab_to_uni */ idx_uni_cp1257, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -2969,6 +2972,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_croat, tab_8859_2_uni, /* tab_to_uni */ idx_uni_8859_2, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3020,6 +3024,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_danish, tab_8859_1_uni, /* tab_to_uni */ idx_uni_8859_1, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3070,6 +3075,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_dec8, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3120,6 +3126,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_dos, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3170,6 +3177,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_estonia, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3221,6 +3229,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_german1, tab_8859_1_uni, /* tab_to_uni */ idx_uni_8859_1, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3271,6 +3280,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_greek, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3321,6 +3331,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_hebrew, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3371,6 +3382,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_hp8, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3421,6 +3433,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_hungarian, tab_8859_2_uni, /* tab_to_uni */ idx_uni_8859_2, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3471,6 +3484,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_koi8_ru, tab_koi8_r_uni, /* tab_to_uni */ idx_uni_koi8_r, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3521,6 +3535,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_koi8_ukr, tab_koi8_u_uni, /* tab_to_uni */ idx_uni_koi8_u, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3572,6 +3587,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_latin2, tab_8859_2_uni, /* tab_to_uni */ idx_uni_8859_2, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3622,6 +3638,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_latin5, tab_8859_9_uni, /* tab_to_uni */ idx_uni_8859_9, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3673,6 +3690,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_swe7, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3724,6 +3742,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_usa7, tab_us_ascii_uni, /* tab_to_uni */ idx_uni_us_ascii, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3774,6 +3793,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_win1250, tab_cp1250_uni, /* tab_to_uni */ idx_uni_cp1250, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3824,6 +3844,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_win1251ukr, tab_cp1251_uni, /* tab_to_uni */ idx_uni_cp1251, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3874,6 +3895,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_armscii8, tab_armscii_8_uni, /* tab_to_uni */ idx_uni_armscii_8, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3924,6 +3946,7 @@ CHARSET_INFO compiled_charsets[] = { sort_order_win1251, tab_cp1251_uni, /* tab_to_uni */ idx_uni_cp1251, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple,/* strnncollsp */ @@ -3973,6 +3996,7 @@ CHARSET_INFO compiled_charsets[] = { NULL, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, NULL, /* strnncoll */ NULL, /* strnncollsp */ diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c index 9eca4383176..f346c249677 100644 --- a/strings/ctype-gb2312.c +++ b/strings/ctype-gb2312.c @@ -5702,6 +5702,7 @@ CHARSET_INFO my_charset_gb2312 = sort_order_gb2312, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple, diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index c1a65c48aef..9c3a36ffb9b 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -9899,6 +9899,7 @@ CHARSET_INFO my_charset_gbk = sort_order_gbk, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 1, /* strxfrm_multiply */ my_strnncoll_gbk, my_strnncollsp_gbk, diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index 36260356816..7e721299692 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -188,6 +188,7 @@ CHARSET_INFO my_charset_latin1 = sort_order_latin1, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 2, /* strxfrm_multiply */ my_strnncoll_simple, my_strnncollsp_simple, diff --git a/strings/ctype-latin1_de.c b/strings/ctype-latin1_de.c index 66f47bb7326..e07bc6e9a70 100644 --- a/strings/ctype-latin1_de.c +++ b/strings/ctype-latin1_de.c @@ -359,6 +359,7 @@ CHARSET_INFO my_charset_latin1_de = sort_order_latin1_de, tab_8859_1_uni, /* tab_to_uni */ idx_uni_8859_1, /* tab_from_uni */ + "","", 2, /* strxfrm_multiply */ my_strnncoll_latin1_de, my_strnncollsp_latin1_de, diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index af87c550727..daeeb1706aa 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -4486,6 +4486,7 @@ CHARSET_INFO my_charset_sjis = sort_order_sjis, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 1, /* strxfrm_multiply */ my_strnncoll_sjis, my_strnncollsp_sjis, diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index fd3a9318c25..345627dbc18 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -709,6 +709,7 @@ CHARSET_INFO my_charset_tis620 = sort_order_tis620, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 4, /* strxfrm_multiply */ my_strnncoll_tis620, my_strnncollsp_tis620, diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c index 6c238d50dcc..4930c6f95aa 100644 --- a/strings/ctype-ujis.c +++ b/strings/ctype-ujis.c @@ -8443,6 +8443,7 @@ CHARSET_INFO my_charset_ujis = sort_order_ujis, NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 0, /* strxfrm_multiply */ my_strnncoll_simple,/* strnncoll */ my_strnncollsp_simple, diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index ecd163ac4c5..2db00e64c72 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1988,6 +1988,7 @@ CHARSET_INFO my_charset_utf8 = to_upper_utf8, /* sort_order */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 1, /* strxfrm_multiply */ my_strnncoll_utf8, /* strnncoll */ my_strnncollsp_utf8, @@ -3095,6 +3096,7 @@ CHARSET_INFO my_charset_ucs2 = to_upper_ucs2, /* sort_order */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ + "","", 1, /* strxfrm_multiply */ my_strnncoll_ucs2, /* strnncoll */ my_strnncoll_ucs2, diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c index 978a5e8a55b..49ca0cf996c 100644 --- a/strings/ctype-win1250ch.c +++ b/strings/ctype-win1250ch.c @@ -653,6 +653,7 @@ CHARSET_INFO my_charset_win1250ch = sort_order_win1250ch, tab_cp1250_uni, /* tab_to_uni */ idx_uni_cp1250, /* tab_from_uni */ + "","", 2, /* strxfrm_multiply */ my_strnncoll_win1250ch, my_strnncollsp_win1250ch, From 251a616f31f1e76844dfcd912bf03850e25c9dc2 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 16:07:15 +0100 Subject: [PATCH 163/267] Small fixes in mysql_tableinfo. It's only code tiny changes, does not modify the output of the script. scripts/mysql_tableinfo.sh: Small fixes in this program which I contributed some time ago. These fixes are waiting in Monty's mailbox since August, and there are tiny : * use array{'x'} instead of array{x} * use fetchrow_arrayref instead of fetchrow_array * try to hide the command-line options from 'ps' like mysqlhotcopy does * use 'map' instead of homegrown function * use $_ instead of $i when possible --- scripts/mysql_tableinfo.sh | 114 ++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/scripts/mysql_tableinfo.sh b/scripts/mysql_tableinfo.sh index bfe9be377c7..f5083a776c6 100644 --- a/scripts/mysql_tableinfo.sh +++ b/scripts/mysql_tableinfo.sh @@ -10,7 +10,7 @@ mysql_tableinfo - creates and populates information tables with the output of SHOW DATABASES, SHOW TABLES (or SHOW TABLE STATUS), SHOW COLUMNS and SHOW INDEX. -This is version 1.0. +This is version 1.1. =head1 SYNOPSIS @@ -62,7 +62,7 @@ GetOptions( \%opt, "quiet|q", ) or usage("Invalid option"); -if ($opt{help}) {usage();} +if ($opt{'help'}) {usage();} my ($db_to_write,$db_like_wild,$tbl_like_wild); if (@ARGV==0) @@ -74,6 +74,8 @@ $db_like_wild=($ARGV[0])?$ARGV[0]:"%"; shift @ARGV; $tbl_like_wild=($ARGV[0])?$ARGV[0]:"%"; shift @ARGV; if (@ARGV>0) { usage("Too many arguments"); } +$0 = $1 if $0 =~ m:/([^/]+)$:; + my $info_db="`".$opt{'prefix'}."db`"; my $info_tbl="`".$opt{'prefix'}."tbl". (($opt{'tbl-status'})?"_status":"")."`"; @@ -84,11 +86,11 @@ my $info_idx="`".$opt{'prefix'}."idx`"; # --- connect to the database --- my $dsn = ";host=$opt{'host'}"; -$dsn .= ";port=$opt{port}" if $opt{port}; -$dsn .= ";mysql_socket=$opt{socket}" if $opt{socket}; +$dsn .= ";port=$opt{'port'}" if $opt{'port'}; +$dsn .= ";mysql_socket=$opt{'socket'}" if $opt{'socket'}; my $dbh = DBI->connect("dbi:mysql:$dsn;mysql_read_default_group=perl", - $opt{user}, $opt{password}, + $opt{'user'}, $opt{'password'}, { RaiseError => 1, PrintError => 0, @@ -104,20 +106,19 @@ if (!$opt{'quiet'}) { print "\n!! This program is doing to do:\n\n"; print "**DROP** TABLE ...\n" if ($opt{'clear'} or $opt{'clear-only'}); - print "**DELETE** FROM ... WHERE `Database LIKE $db_like_wild AND `Table` LIKE $tbl_like_wild + print "**DELETE** FROM ... WHERE `Database` LIKE $db_like_wild AND `Table` LIKE $tbl_like_wild **INSERT** INTO ... on the following tables :\n"; - my $i; - foreach $i (($info_db, $info_tbl), - (($opt{'col'})?$info_col:()), - (($opt{'idx'})?$info_idx:())) + + foreach (($info_db, $info_tbl), + (($opt{'col'})?$info_col:()), + (($opt{'idx'})?$info_idx:())) { - print(" $db_to_write.$i\n"); + print(" $db_to_write.$_\n"); } print "\nContinue (you can skip this confirmation step with --quiet) ? (y|n) [n]"; - my $answer=; - unless ($answer =~ /^\s*y\s*$/i) + if ( !~ /^\s*y\s*$/i) { print "Nothing done!\n";exit; } @@ -126,17 +127,16 @@ on the following tables :\n"; if ($opt{'clear'} or $opt{'clear-only'}) { #do not drop the $db_to_write database ! - my $i; - foreach $i (($info_db, $info_tbl), - (($opt{'col'})?$info_col:()), - (($opt{'idx'})?$info_idx:())) + foreach (($info_db, $info_tbl), + (($opt{'col'})?$info_col:()), + (($opt{'idx'})?$info_idx:())) { - $dbh->do("DROP TABLE IF EXISTS $db_to_write.$i"); + $dbh->do("DROP TABLE IF EXISTS $db_to_write.$_"); } if ($opt{'clear-only'}) { print "Wrote to database $db_to_write .\n" unless ($opt{'quiet'}); - exit(); + exit; } } @@ -151,14 +151,14 @@ $dbh->do("CREATE DATABASE IF NOT EXISTS $db_to_write"); $dbh->do("USE $db_to_write"); #get databases -$sth{db}=$dbh->prepare("SHOW DATABASES LIKE $db_like_wild"); -$sth{db}->execute; +$sth{'db'}=$dbh->prepare("SHOW DATABASES LIKE $db_like_wild"); +$sth{'db'}->execute; #create $info_db which will receive info about databases. #Ensure that the first column to be called "Database" (as SHOW DATABASES LIKE #returns a varying #column name (of the form "Database (%...)") which is not suitable) -$extra_col_desc{db}=do_create_table("db",$info_db,undef,"`Database`"); +$extra_col_desc{'db'}=do_create_table("db",$info_db,undef,"`Database`"); #we'll remember the type of the `Database` column (as returned by #SHOW DATABASES), which we will need when creating the next tables. @@ -166,55 +166,56 @@ $extra_col_desc{db}=do_create_table("db",$info_db,undef,"`Database`"); $dbh->do("DELETE FROM $info_db WHERE `Database` LIKE $db_like_wild"); -while (@{$row{db}}=$sth{db}->fetchrow_array) #go through all databases +while ($row{'db'}=$sth{'db'}->fetchrow_arrayref) #go through all databases { #insert the database name $dbh->do("INSERT INTO $info_db VALUES(" - .join_quote(@{$row{db}}).")"); + .join(',' , ( map $dbh->quote($_), @{$row{'db'}} ) ).")" ); #for each database, get tables - $sth{tbl}=$dbh->prepare("SHOW TABLE" + $sth{'tbl'}=$dbh->prepare("SHOW TABLE" .( ($opt{'tbl-status'}) ? " STATUS" : "S" ) - ." from `${$row{db}}[0]` LIKE $tbl_like_wild"); - $sth{tbl}->execute; + ." from `$row{'db'}->[0]` LIKE $tbl_like_wild"); + $sth{'tbl'}->execute; unless ($done_create_table{$info_tbl}) #tables must be created only once, and out-of-date info must be #cleared once { $done_create_table{$info_tbl}=1; - $extra_col_desc{table}= + $extra_col_desc{'tbl'}= do_create_table("tbl",$info_tbl, #add an extra column (database name) at the left #and ensure that the table name will be called "Table" #(this is unncessesary with #SHOW TABLE STATUS, but necessary with SHOW TABLES (which returns a column #named "Tables_in_...")) - "`Database` ".$extra_col_desc{db},"`Table`"); + "`Database` ".$extra_col_desc{'db'},"`Table`"); $dbh->do("DELETE FROM $info_tbl WHERE `Database` LIKE $db_like_wild AND `Table` LIKE $tbl_like_wild"); } - while (@{$row{tbl}}=$sth{tbl}->fetchrow_array) + while ($row{'tbl'}=$sth{'tbl'}->fetchrow_arrayref) { $dbh->do("INSERT INTO $info_tbl VALUES(" - .$dbh->quote(${$row{db}}[0]).",".join_quote(@{$row{tbl}}).")"); + .$dbh->quote($row{'db'}->[0])."," + .join(',' , ( map $dbh->quote($_), @{$row{'tbl'}} ) ).")"); #for each table, get columns... if ($opt{'col'}) { - $sth{col}=$dbh->prepare("SHOW COLUMNS FROM `${$row{tbl}}[0]` FROM `${$row{db}}[0]`"); - $sth{col}->execute; + $sth{'col'}=$dbh->prepare("SHOW COLUMNS FROM `$row{'tbl'}->[0]` FROM `$row{'db'}->[0]`"); + $sth{'col'}->execute; unless ($done_create_table{$info_col}) { $done_create_table{$info_col}=1; do_create_table("col",$info_col, - "`Database` ".$extra_col_desc{db}."," - ."`Table` ".$extra_col_desc{table}."," + "`Database` ".$extra_col_desc{'db'}."," + ."`Table` ".$extra_col_desc{'tbl'}."," ."`Seq_in_table` BIGINT(3)"); #We need to add a sequence number (1 for the first column of the table, #2 for the second etc) so that users are able to retrieve columns in order @@ -225,13 +226,13 @@ while (@{$row{db}}=$sth{db}->fetchrow_array) #go through all databases AND `Table` LIKE $tbl_like_wild"); } my $col_number=0; - while (@{$row{col}}=$sth{col}->fetchrow_array) + while ($row{'col'}=$sth{'col'}->fetchrow_arrayref) { $dbh->do("INSERT INTO $info_col VALUES(" - .$dbh->quote(${$row{db}}[0])."," - .$dbh->quote(${$row{tbl}}[0])."," + .$dbh->quote($row{'db'}->[0])."," + .$dbh->quote($row{'tbl'}->[0])."," .++$col_number."," - .join_quote(@{$row{col}}).")"); + .join(',' , ( map $dbh->quote($_), @{$row{'col'}} ) ).")"); } } @@ -239,22 +240,22 @@ while (@{$row{db}}=$sth{db}->fetchrow_array) #go through all databases if ($opt{'idx'}) { - $sth{idx}=$dbh->prepare("SHOW INDEX FROM `${$row{tbl}}[0]` FROM `${$row{db}}[0]`"); - $sth{idx}->execute; + $sth{'idx'}=$dbh->prepare("SHOW INDEX FROM `$row{'tbl'}->[0]` FROM `$row{'db'}->[0]`"); + $sth{'idx'}->execute; unless ($done_create_table{$info_idx}) { $done_create_table{$info_idx}=1; do_create_table("idx",$info_idx, - "`Database` ".$extra_col_desc{db}); + "`Database` ".$extra_col_desc{'db'}); $dbh->do("DELETE FROM $info_idx WHERE `Database` LIKE $db_like_wild AND `Table` LIKE $tbl_like_wild"); } - while (@{$row{idx}}=$sth{idx}->fetchrow_array) + while ($row{'idx'}=$sth{'idx'}->fetchrow_arrayref) { $dbh->do("INSERT INTO $info_idx VALUES(" - .$dbh->quote(${$row{db}}[0])."," - .join_quote(@{$row{idx}}).")"); + .$dbh->quote($row{'db'}->[0])."," + .join(',' , ( map $dbh->quote($_), @{$row{'idx'}} ) ).")"); } } } @@ -263,37 +264,30 @@ while (@{$row{db}}=$sth{db}->fetchrow_array) #go through all databases print "Wrote to database $db_to_write .\n" unless ($opt{'quiet'}); exit; -sub join_quote -{ - my (@list)=@_; my $i; - foreach $i (@list) { $i=$dbh->quote($i); } - return (join ',',@list); -} sub do_create_table { my ($sth_key,$target_tbl,$extra_col_desc,$first_col_name)=@_; my $create_table_query=$extra_col_desc; - my ($i,$type,$first_col_desc,$col_desc); + my ($i,$first_col_desc,$col_desc); for ($i=0;$i<$sth{$sth_key}->{NUM_OF_FIELDS};$i++) { if ($create_table_query) { $create_table_query.=", "; } - $type=$sth{$sth_key}->{mysql_type_name}->[$i]; - $col_desc=$type; - if ($type =~ /char|int/i) + $col_desc=$sth{$sth_key}->{mysql_type_name}->[$i]; + if ($col_desc =~ /char|int/i) { $col_desc.="($sth{$sth_key}->{PRECISION}->[$i])"; } - elsif ($type =~ /decimal|numeric/i) #(never seen that) + elsif ($col_desc =~ /decimal|numeric/i) #(never seen that) { $col_desc.= "($sth{$sth_key}->{PRECISION}->[$i],$sth{$sth_key}->{SCALE}->[$i])"; } - elsif ($type !~ /date/i) #date and datetime are OK, + elsif ($col_desc !~ /date/i) #date and datetime are OK, #no precision or scale for them { - warn "unexpected column type '$type' + warn "unexpected column type '$col_desc' (neither 'char','int','decimal|numeric') when creating $target_tbl, hope table creation will go OK\n"; } @@ -393,6 +387,10 @@ Caution: info tables contain certain columns (e.g. Database, Table, Null...) whose names, as they are MySQL reserved words, need to be backquoted (`...`) when used in SQL statements. +Caution: as information fetching and info tables filling happen at the +same time, info tables may contain inaccurate information about +themselves. + =head1 OPTIONS =over 4 From 03b0df9481c6f83ab67c1c79d8c6cc2db0ca9223 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 17:08:42 +0200 Subject: [PATCH 164/267] Check for empty table/column names mysql-test/t/create.test: Test for empty table/column name tests/grant.pl: More tests tests/grant.res: More tests --- mysql-test/t/create.test | 8 ++++++++ sql/sql_parse.cc | 3 +-- sql/sql_table.cc | 12 +++++------- sql/table.cc | 7 ++++++- tests/grant.pl | 10 ++++++++++ tests/grant.res | 5 +++++ 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test index 1a829eec6a3..b11c07e5b8d 100644 --- a/mysql-test/t/create.test +++ b/mysql-test/t/create.test @@ -59,6 +59,14 @@ create table test_$1.test2$ (a int); drop table test_$1.test2$; drop database test_$1; +--error 1103 +create table `` (a int); +--error 1103 +drop table if exists ``; +--error 1166 +create table t1 (`` int); +drop table if exists t1; + # # Test of CREATE ... SELECT with indexes # diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 8daba09174e..62c2f18c882 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2758,8 +2758,7 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias, if (!table) DBUG_RETURN(0); // End of memory alias_str= alias ? alias->str : table->table.str; - if (table->table.length > NAME_LEN || - check_table_name(table->table.str,table->table.length) || + if (check_table_name(table->table.str,table->table.length) || table->db.str && check_db_name(table->db.str)) { net_printf(&thd->net,ER_WRONG_TABLE_NAME,table->table.str); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 2ff7c9c1a75..f273821c5e0 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -244,6 +244,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, } if (!(sql_field->flags & NOT_NULL_FLAG)) null_fields++; + if (check_column_name(sql_field->field_name)) + { + my_error(ER_WRONG_COLUMN_NAME, MYF(0), sql_field->field_name); + DBUG_RETURN(-1); + } while ((dup_field=it2++) != sql_field) { if (my_strcasecmp(sql_field->field_name, dup_field->field_name) == 0) @@ -688,13 +693,6 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, while ((item=it++)) { create_field *cr_field; - if (strlen(item->name) > NAME_LEN || - check_column_name(item->name)) - { - my_error(ER_WRONG_COLUMN_NAME,MYF(0),item->name); - DBUG_RETURN(0); - } - Field *field=create_tmp_field(&tmp_table,item,item->type(), (Item_result_field***) 0, &tmp_field,0,0); if (!field || diff --git a/sql/table.cc b/sql/table.cc index 3afadec3801..5503dddf085 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1099,6 +1099,8 @@ bool check_db_name(char *name) bool check_table_name(const char *name, uint length) { const char *end= name+length; + if (!length || length > NAME_LEN) + return 1; while (name != end) { @@ -1122,6 +1124,8 @@ bool check_table_name(const char *name, uint length) bool check_column_name(const char *name) { + const char *start= name; + while (*name) { #if defined(USE_MB) && defined(USE_MB_IDENT) @@ -1139,7 +1143,8 @@ bool check_column_name(const char *name) return 1; name++; } - return 0; + /* Error if empty or too long column name */ + return (name == start || (uint) (name - start) > NAME_LEN); } /* diff --git a/tests/grant.pl b/tests/grant.pl index c41b22157bd..bf67ce5e790 100644 --- a/tests/grant.pl +++ b/tests/grant.pl @@ -207,6 +207,16 @@ user_query("delete from $opt_database.test where a=1",1); user_query("update $opt_database.test set b=3 where b=1",1); user_query("update $opt_database.test set b=b+1",1); +# +# Test global SELECT privilege combined with table level privileges +# + +safe_query("grant SELECT on *.* to $user"); +user_connect(0); +user_query("update $opt_database.test set b=b+1"); +safe_query("revoke SELECT on *.* from $user"); +user_connect(0); + # Add one privilege at a time until the user has all privileges user_query("select * from test",1); safe_query("grant select on $opt_database.test to $user"); diff --git a/tests/grant.res b/tests/grant.res index 1c74e5b1d1b..44e20db555f 100644 --- a/tests/grant.res +++ b/tests/grant.res @@ -192,6 +192,11 @@ update grant_test.test set b=3 where b=1 Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' update grant_test.test set b=b+1 Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +grant SELECT on *.* to grant_user@localhost +Connecting grant_user +update grant_test.test set b=b+1 +revoke SELECT on *.* from grant_user@localhost +Connecting grant_user select * from test Error in execute: select command denied to user: 'grant_user@localhost' for table 'test' grant select on grant_test.test to grant_user@localhost From 892879901e2243dc7436dc56912b735a39fa1acd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 10:35:13 -0800 Subject: [PATCH 165/267] Fix for not to assert in DBUG mode when the result type is INT24 as data is sent in INT32 format (normal protocol only, prepared protocol already handles it) sql/protocol.cc: Fix for not to assert in DBUG mode when the result type is INT24 as data is sent in INT32 format --- sql/protocol.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/protocol.cc b/sql/protocol.cc index 6bd5c4534e9..ce2ce49dcd8 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -742,7 +742,9 @@ bool Protocol_simple::store_short(longlong from) bool Protocol_simple::store_long(longlong from) { #ifndef DEBUG_OFF - DBUG_ASSERT(field_types == 0 || field_types[field_pos++] == MYSQL_TYPE_LONG); + DBUG_ASSERT(field_types == 0 || + field_types[field_pos++] == MYSQL_TYPE_INT24 || + field_types[field_pos++] == MYSQL_TYPE_LONG); #endif char buff[20]; return net_store_data((char*) buff, From c03b4b725553d7b03e79aa8717bc23567863a12e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 20:22:06 +0100 Subject: [PATCH 166/267] cleanup --- sql/key.cc | 2 +- sql/sql_select.cc | 14 +++++--------- sql/sql_select.h | 3 +-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/sql/key.cc b/sql/key.cc index 38ab596e213..feda9e156b3 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -67,7 +67,7 @@ int find_ref_key(TABLE *table,Field *field, uint *key_length) /* Copy a key from record to some buffer */ - /* if length == 0 then copy hole key */ + /* if length == 0 then copy whole key */ void key_copy(byte *key,TABLE *table,uint idx,uint key_length) { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5408fd1e17f..8244b7c5fd4 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2757,19 +2757,15 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j, KEYUSE *org_keyuse, if (!keyuse->used_tables && !(join->select_options & SELECT_DESCRIBE)) { // Compare against constant - store_key_item *tmp=new store_key_item(thd, - keyinfo->key_part[i].field, - (char*)key_buff + - maybe_null, - maybe_null ? - (char*) key_buff : 0, - keyinfo->key_part[i].length, - keyuse->val); + store_key_item tmp(thd, keyinfo->key_part[i].field, + (char*)key_buff + maybe_null, + maybe_null ? (char*) key_buff : 0, + keyinfo->key_part[i].length, keyuse->val); if (thd->is_fatal_error) { return TRUE; } - tmp->copy(); + tmp.copy(); } else *ref_key++= get_store_key(thd, diff --git a/sql/sql_select.h b/sql/sql_select.h index bb928846186..eb97a744745 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -174,7 +174,7 @@ class JOIN :public Sql_alloc Item_sum **sum_funcs; Procedure *procedure; Item *having; - Item *tmp_having; // To store Having when processed tenporary table + Item *tmp_having; // To store Having when processed temporary table uint select_options; select_result *result; TMP_TABLE_PARAM tmp_table_param; @@ -307,7 +307,6 @@ class store_key :public Sql_alloc { protected: Field *to_field; // Store data here - Field *key_field; // Copy of key field char *null_ptr; char err; public: From fcf035a0d85bc49c8c071246ce22a19f2fea395b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Mar 2003 23:06:55 +0200 Subject: [PATCH 167/267] Code cleanup --- sql/filesort.cc | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/sql/filesort.cc b/sql/filesort.cc index 6ea97eb219a..029d9b1212f 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -95,7 +95,7 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, ha_rows *examined_rows) { int error; - uint memavl,old_memavl,maxbuffer,skr; + uint memavl,old_memavl,min_sort_memory,maxbuffer,skr; BUFFPEK *buffpek; ha_rows records; uchar **sort_keys; @@ -162,7 +162,8 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, #endif memavl=sortbuff_size; - while (memavl >= MIN_SORT_MEMORY) + min_sort_memory= max(MIN_SORT_MEMORY, param.sort_length*MERGEBUFF2); + while (memavl >= min_sort_memory) { if ((ulonglong) (records+1)*(param.sort_length+sizeof(char*))+sizeof(BUFFPEK)*10 < (ulonglong) memavl) @@ -192,18 +193,13 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, else my_free((gptr) sort_keys,MYF(0)); old_memavl=memavl; - if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY) - memavl=MIN_SORT_MEMORY; + if ((memavl=memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory) + memavl=min_sort_memory; } param.keys--; maxbuffer+=10; /* Some extra range */ - if (memavl < param.sort_length*MERGEBUFF2) - { - my_error(ER_OUT_OF_SORTMEMORY,MYF(0)); - goto err; - } - if (memavl < MIN_SORT_MEMORY) + if (memavl < min_sort_memory) { my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),sortbuff_size); goto err; From 13a5a24c6170921bb97796d96ca9f0ac20e5308e Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 04:34:06 +0200 Subject: [PATCH 168/267] Code cleanup sql/sql_parse.cc: Removed not needed test --- sql/sql_parse.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 24643f18ac7..8fe5922baf0 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1521,11 +1521,6 @@ mysql_execute_command(void) if (error) goto error; } - if (strlen(tables->real_name) > NAME_LEN) - { - net_printf(&thd->net,ER_WRONG_TABLE_NAME,tables->real_name); - break; - } LOCK_ACTIVE_MI; // fetch_master_table will send the error to the client on failure if (!fetch_master_table(thd, tables->db, tables->real_name, From aad26453e66074dbbbcc66628a975dd135c41a53 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 11:56:03 +0100 Subject: [PATCH 169/267] fixed typo (double ++ in assert) removed all side effects from asserts for not to confuse casual reader --- sql/protocol.cc | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/sql/protocol.cc b/sql/protocol.cc index ce2ce49dcd8..454b8bae625 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -719,7 +719,8 @@ bool Protocol_simple::store(const char *from, uint length) bool Protocol_simple::store_tiny(longlong from) { #ifndef DEBUG_OFF - DBUG_ASSERT(field_types == 0 || field_types[field_pos++] == MYSQL_TYPE_TINY); + DBUG_ASSERT(field_types == 0 || field_types[field_pos] == MYSQL_TYPE_TINY); + field_pos++; #endif char buff[20]; return net_store_data((char*) buff, @@ -731,7 +732,8 @@ bool Protocol_simple::store_short(longlong from) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_SHORT); + field_types[field_pos] == MYSQL_TYPE_SHORT); + field_pos++; #endif char buff[20]; return net_store_data((char*) buff, @@ -742,9 +744,10 @@ bool Protocol_simple::store_short(longlong from) bool Protocol_simple::store_long(longlong from) { #ifndef DEBUG_OFF - DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_INT24 || - field_types[field_pos++] == MYSQL_TYPE_LONG); + DBUG_ASSERT(field_types == 0 || + field_types[field_pos] == MYSQL_TYPE_INT24 || + field_types[field_pos] == MYSQL_TYPE_LONG); + field_pos++; #endif char buff[20]; return net_store_data((char*) buff, @@ -756,7 +759,8 @@ bool Protocol_simple::store_longlong(longlong from, bool unsigned_flag) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_LONGLONG); + field_types[field_pos] == MYSQL_TYPE_LONGLONG); + field_pos++; #endif char buff[22]; return net_store_data((char*) buff, @@ -770,7 +774,8 @@ bool Protocol_simple::store(float from, uint32 decimals, String *buffer) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_FLOAT); + field_types[field_pos] == MYSQL_TYPE_FLOAT); + field_pos++; #endif buffer->set((double) from, decimals, thd->variables.thd_charset); return net_store_data((char*) buffer->ptr(), buffer->length()); @@ -781,7 +786,8 @@ bool Protocol_simple::store(double from, uint32 decimals, String *buffer) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_DOUBLE); + field_types[field_pos] == MYSQL_TYPE_DOUBLE); + field_pos++; #endif buffer->set(from, decimals, thd->variables.thd_charset); return net_store_data((char*) buffer->ptr(), buffer->length()); @@ -829,7 +835,8 @@ bool Protocol_simple::store_date(TIME *tm) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_DATE); + field_types[field_pos] == MYSQL_TYPE_DATE); + field_pos++; #endif char buff[40]; uint length; @@ -845,7 +852,8 @@ bool Protocol_simple::store_time(TIME *tm) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || - field_types[field_pos++] == MYSQL_TYPE_TIME); + field_types[field_pos] == MYSQL_TYPE_TIME); + field_pos++; #endif char buff[40]; uint length; @@ -1035,7 +1043,7 @@ bool Protocol_prep::store(TIME *tm) uint length; field_pos++; pos= buff+1; - + int2store(pos, tm->year); pos[2]= (uchar) tm->month; pos[3]= (uchar) tm->day; @@ -1074,7 +1082,7 @@ bool Protocol_prep::store_time(TIME *tm) field_pos++; pos= buff+1; pos[0]= tm->neg ? 1 : 0; - int4store(pos+1, tm->day); + int4store(pos+1, tm->day); pos[5]= (uchar) tm->hour; pos[6]= (uchar) tm->minute; pos[7]= (uchar) tm->second; From 23c774bc727f668c3663226e63b6452a95f3a851 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 15:19:06 +0400 Subject: [PATCH 170/267] sql_lex.cc: Use LEX charset instead of system one sql/sql_lex.cc: Use LEX charset instead of system one --- sql/sql_lex.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index cd0a653ba86..378aa380a3c 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -209,6 +209,7 @@ static char *get_text(LEX *lex) { reg1 uchar c,sep; uint found_escape=0; + CHARSET_INFO *cs= lex->thd->variables.thd_charset; sep= yyGetLast(); // String should end with this //lex->tok_start=lex->ptr-1; // Remember ' @@ -217,8 +218,8 @@ static char *get_text(LEX *lex) c = yyGet(); #ifdef USE_MB int l; - if (use_mb(system_charset_info) && - (l = my_ismbchar(system_charset_info, + if (use_mb(cs) && + (l = my_ismbchar(cs, (const char *)lex->ptr-1, (const char *)lex->end_of_query))) { lex->ptr += l-1; @@ -262,8 +263,8 @@ static char *get_text(LEX *lex) { #ifdef USE_MB int l; - if (use_mb(system_charset_info) && - (l = my_ismbchar(system_charset_info, + if (use_mb(cs) && + (l = my_ismbchar(cs, (const char *)str, (const char *)end))) { while (l--) *to++ = *str++; From d8ea9fc972982e582637c4cd2f486c1d32a4ab82 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 12:35:09 +0100 Subject: [PATCH 171/267] - tagged ChangeSet 1.1358 as mysql-3.23.56 - bumped up version number to 3.23.57 in configure.in --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index a8aacc6a6bf..cc6f3a79b69 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! -AM_INIT_AUTOMAKE(mysql, 3.23.56) +AM_INIT_AUTOMAKE(mysql, 3.23.57) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 From 20a28bdc68064b490319a948ce819646f6341bdf Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 17:24:21 +0400 Subject: [PATCH 172/267] sql_parse.cc, sql_db.cc: less system_charset_info sql/sql_db.cc: less system_charset_info sql/sql_parse.cc: less system_charset_info --- sql/sql_db.cc | 8 ++++---- sql/sql_parse.cc | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 517438d9203..99763d717fe 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -108,7 +108,7 @@ static bool load_db_opt(const char *path, HA_CREATE_INFO *create) { char *pos= buf+nbytes-1; /* Remove end space and control characters */ - while (pos > buf && !my_isgraph(system_charset_info, pos[-1])) + while (pos > buf && !my_isgraph(&my_charset_latin1, pos[-1])) pos--; *pos=0; if ((pos= strchr(buf, '='))) @@ -414,8 +414,8 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db, DBUG_PRINT("info",("Examining: %s", file->name)); /* Check if file is a raid directory */ - if (my_isdigit(system_charset_info,file->name[0]) && - my_isdigit(system_charset_info,file->name[1]) && + if (my_isdigit(&my_charset_latin1,file->name[0]) && + my_isdigit(&my_charset_latin1,file->name[1]) && !file->name[2] && !level) { char newpath[FN_REFLEN]; @@ -440,7 +440,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db, continue; } strxmov(filePath,org_path,"/",file->name,NullS); - if (db && !my_strcasecmp(system_charset_info, + if (db && !my_strcasecmp(&my_charset_latin1, fn_ext(file->name), reg_ext)) { /* Drop the table nicely */ diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index a3b8ccafc11..bdbec6bc76f 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -912,7 +912,7 @@ extern "C" pthread_handler_decl(handle_bootstrap,arg) while (fgets(buff, thd->net.max_packet, file)) { uint length=(uint) strlen(buff); - while (length && (my_isspace(system_charset_info, buff[length-1]) || + while (length && (my_isspace(thd->charset(), buff[length-1]) || buff[length-1] == ';')) length--; buff[length]=0; @@ -1265,7 +1265,7 @@ restore_user: ulong length= thd->query_length-(ulong)(thd->lex.found_colon-thd->query); /* Remove garbage at start of query */ - while (my_isspace(system_charset_info, *packet) && length > 0) + while (my_isspace(thd->charset(), *packet) && length > 0) { packet++; length--; @@ -1539,14 +1539,14 @@ bool alloc_query(THD *thd, char *packet, ulong packet_length) { packet_length--; // Remove end null /* Remove garbage at start and end of query */ - while (my_isspace(system_charset_info,packet[0]) && packet_length > 0) + while (my_isspace(thd->charset(),packet[0]) && packet_length > 0) { packet++; packet_length--; } char *pos=packet+packet_length; // Point at end null while (packet_length > 0 && - (pos[-1] == ';' || my_isspace(system_charset_info,pos[-1]))) + (pos[-1] == ';' || my_isspace(thd->charset() ,pos[-1]))) { pos--; packet_length--; From 41bad531ead68ab52ecef24084c7194eb2af8359 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 18:42:55 +0100 Subject: [PATCH 173/267] - fixed C++-style comments to make IBM C compiler happy client/mysqlshow.c: - fixed C++-style comment to make IBM C compiler happy --- client/mysqlshow.c | 2 +- strings/t_ctype.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/mysqlshow.c b/client/mysqlshow.c index 0b47e06534f..ccae43e4e27 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -84,7 +84,7 @@ int main(int argc, char **argv) } *to= *pos; } - *to= *pos; // just to copy a '\0' if '\\' was used + *to= *pos; /* just to copy a '\0' if '\\' was used */ } if (first_argument_uses_wildcards) wild= argv[--argc]; diff --git a/strings/t_ctype.h b/strings/t_ctype.h index ac1fa408c0e..4f6f78cd188 100644 --- a/strings/t_ctype.h +++ b/strings/t_ctype.h @@ -40,7 +40,7 @@ typedef unsigned char tchar; #define IGNORE 0 -// level 1 symbols & order +/* level 1 symbols & order */ enum l1_symbols { L1_08 = TOT_LEVELS, L1_18, @@ -142,7 +142,7 @@ enum l1_symbols { L1_SARA_AI_MAIMALAI }; -// level 2 symbols & order +/* level 2 symbols & order */ enum l2_symbols { L2_BLANK = TOT_LEVELS, L2_THAII, @@ -156,7 +156,7 @@ enum l2_symbols { L2_TONE4 }; -// level 3 symbols & order +/* level 3 symbols & order */ enum l3_symbols { L3_BLANK = TOT_LEVELS, L3_SPACE, @@ -201,7 +201,7 @@ enum l3_symbols { L3_V_LINE }; -// level 4 symbols & order +/* level 4 symbols & order */ enum l4_symbols { L4_BLANK = TOT_LEVELS, L4_MIN, From 3ce965da7a598ba56339d497cc07cd27c5c51e24 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 20:05:03 +0200 Subject: [PATCH 174/267] row0sel.c: Fix bug number 154: GROUP BY and DISTINCT could treat NULL values inequal innobase/row/row0sel.c: Fix bug number 154: GROUP BY and DISTINCT could treat NULL values inequal --- innobase/row/row0sel.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index ef12bd9362a..4bc81ad8a8e 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -2130,19 +2130,14 @@ row_sel_store_mysql_rec( extern_field_heap = NULL; } } else { - /* MySQL sometimes seems to copy the 'data' - pointed to by a BLOB field even if the field - has been marked to contain the SQL NULL value. - This caused seg faults reported by two users. - Set the BLOB length to 0 and the data pointer - to NULL to avoid a seg fault. */ + /* MySQL seems to assume the field for an SQL NULL + value is set to zero. Not taking this into account + caused seg faults with NULL BLOB fields, and + bug number 154 in the MySQL bug database: GROUP BY + and DISTINCT could treat NULL values inequal. */ - if (templ->type == DATA_BLOB) { - row_sel_field_store_in_mysql_format( - mysql_rec + templ->mysql_col_offset, - templ->mysql_col_len, NULL, - 0, templ->type, templ->is_unsigned); - } + memset(mysql_rec + templ->mysql_col_offset, '\0', + templ->mysql_col_len); if (!templ->mysql_null_bit_mask) { fprintf(stderr, From 3ad8b4c19c93a309466579cce971bbcc382511d4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 15 Mar 2003 20:05:55 +0200 Subject: [PATCH 175/267] row0sel.c: Fix bug number 154: GROUP BY and DISTINCT could treat NULL values inequal innobase/row/row0sel.c: Fix bug number 154: GROUP BY and DISTINCT could treat NULL values inequal --- innobase/row/row0sel.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index 5f260634149..c9de502eb9a 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -2115,19 +2115,14 @@ row_sel_store_mysql_rec( extern_field_heap = NULL; } } else { - /* MySQL sometimes seems to copy the 'data' - pointed to by a BLOB field even if the field - has been marked to contain the SQL NULL value. - This caused seg faults reported by two users. - Set the BLOB length to 0 and the data pointer - to NULL to avoid a seg fault. */ + /* MySQL seems to assume the field for an SQL NULL + value is set to zero. Not taking this into account + caused seg faults with NULL BLOB fields, and + bug number 154 in the MySQL bug database: GROUP BY + and DISTINCT could treat NULL values inequal. */ - if (templ->type == DATA_BLOB) { - row_sel_field_store_in_mysql_format( - mysql_rec + templ->mysql_col_offset, - templ->mysql_col_len, NULL, - 0, templ->type, templ->is_unsigned); - } + memset(mysql_rec + templ->mysql_col_offset, '\0', + templ->mysql_col_len); if (!templ->mysql_null_bit_mask) { fprintf(stderr, From 6b11fa3a247e9dd961f0a570a208cedeb750c1a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 10:56:14 +0400 Subject: [PATCH 176/267] set_default_charset() is not used anymore Some system_charset_info were removed BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + client/mysql.cc | 2 +- client/mysqlcheck.c | 2 +- client/mysqldump.c | 2 +- client/mysqlimport.c | 2 +- client/sql_string.h | 4 ++-- heap/hp_test1.c | 2 +- heap/hp_test2.c | 11 ++++++----- include/my_sys.h | 2 -- isam/isamchk.c | 2 +- mysys/charset.c | 37 ------------------------------------- mysys/charset2html.c | 5 +++-- mysys/test_charset.c | 5 +++-- sql/mysqld.cc | 3 ++- 14 files changed, 23 insertions(+), 57 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 62ae7f6af5b..148c96de0bc 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -77,6 +77,7 @@ ram@gw.udmsearch.izhnet.ru ram@mysql.r18.ru ram@ram.(none) ranger@regul.home.lan +root@home.(none) root@x3.internalnet salle@banica.(none) salle@geopard.(none) diff --git a/client/mysql.cc b/client/mysql.cc index f784f529c46..03f8d226d13 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -790,7 +790,7 @@ static int get_options(int argc, char **argv) } if (default_charset) { - if (set_default_charset_by_name(default_charset, MYF(MY_WME))) + if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); } if (argc > 1) diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index cd67a2c7522..0333833ba11 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -309,7 +309,7 @@ static int get_options(int *argc, char ***argv) } if (default_charset) { - if (set_default_charset_by_name(default_charset, MYF(MY_WME))) + if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); } if (*argc > 0 && opt_alldbs) diff --git a/client/mysqldump.c b/client/mysqldump.c index 49bc56890fb..18755b7a913 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -483,7 +483,7 @@ static int get_options(int *argc, char ***argv) } if (default_charset) { - if (set_default_charset_by_name(default_charset, MYF(MY_WME))) + if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); } if ((*argc < 1 && !opt_alldbs) || (*argc > 0 && opt_alldbs)) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index 408a5873589..ff6895145f7 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -239,7 +239,7 @@ static int get_options(int *argc, char ***argv) } if (default_charset) { - if (set_default_charset_by_name(default_charset, MYF(MY_WME))) + if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); } if (*argc < 2) diff --git a/client/sql_string.h b/client/sql_string.h index 42f9e446981..33f34a43b7f 100644 --- a/client/sql_string.h +++ b/client/sql_string.h @@ -39,12 +39,12 @@ public: String() { Ptr=0; str_length=Alloced_length=0; alloced=0; - str_charset=default_charset_info; + str_charset= &my_charset_latin1; } String(uint32 length_arg) { alloced=0; Alloced_length=0; (void) real_alloc(length_arg); - str_charset=default_charset_info; + str_charset= &my_charset_latin1; } String(const char *str, CHARSET_INFO *cs) { diff --git a/heap/hp_test1.c b/heap/hp_test1.c index 2e0a57a12d3..96399fe4f2e 100644 --- a/heap/hp_test1.c +++ b/heap/hp_test1.c @@ -51,7 +51,7 @@ int main(int argc, char **argv) keyinfo[0].seg[0].type=HA_KEYTYPE_BINARY; keyinfo[0].seg[0].start=1; keyinfo[0].seg[0].length=6; - keyinfo[0].seg[0].charset=default_charset_info; + keyinfo[0].seg[0].charset= &my_charset_latin1; keyinfo[0].flag = HA_NOSAME; deleted=0; diff --git a/heap/hp_test2.c b/heap/hp_test2.c index 73e8039d125..09ade212fa6 100644 --- a/heap/hp_test2.c +++ b/heap/hp_test2.c @@ -64,6 +64,7 @@ int main(int argc, char *argv[]) HA_KEYSEG keyseg[MAX_KEYS*5]; HEAP_PTR position; HP_CREATE_INFO hp_create_info; + CHARSET_INFO *cs= &my_charset_latin1; MY_INIT(argv[0]); /* init my_sys library & pthreads */ LINT_INIT(position); @@ -85,7 +86,7 @@ int main(int argc, char *argv[]) keyinfo[0].seg[0].start=0; keyinfo[0].seg[0].length=6; keyinfo[0].seg[0].null_bit=0; - keyinfo[0].seg[0].charset=default_charset_info; + keyinfo[0].seg[0].charset=cs; keyinfo[1].seg=keyseg+1; keyinfo[1].keysegs=2; keyinfo[1].flag=0; @@ -94,12 +95,12 @@ int main(int argc, char *argv[]) keyinfo[1].seg[0].start=7; keyinfo[1].seg[0].length=6; keyinfo[1].seg[0].null_bit=0; - keyinfo[1].seg[0].charset=default_charset_info; + keyinfo[1].seg[0].charset=cs; keyinfo[1].seg[1].type=HA_KEYTYPE_TEXT; keyinfo[1].seg[1].start=0; /* key in two parts */ keyinfo[1].seg[1].length=6; keyinfo[1].seg[1].null_bit=0; - keyinfo[1].seg[1].charset=default_charset_info; + keyinfo[1].seg[1].charset=cs; keyinfo[2].seg=keyseg+3; keyinfo[2].keysegs=1; keyinfo[2].flag=HA_NOSAME; @@ -108,7 +109,7 @@ int main(int argc, char *argv[]) keyinfo[2].seg[0].start=12; keyinfo[2].seg[0].length=8; keyinfo[2].seg[0].null_bit=0; - keyinfo[2].seg[0].charset=default_charset_info; + keyinfo[2].seg[0].charset=cs; keyinfo[3].seg=keyseg+4; keyinfo[3].keysegs=1; keyinfo[3].flag=HA_NOSAME; @@ -118,7 +119,7 @@ int main(int argc, char *argv[]) keyinfo[3].seg[0].length=1; keyinfo[3].seg[0].null_bit=1; keyinfo[3].seg[0].null_pos=38; - keyinfo[3].seg[0].charset=default_charset_info; + keyinfo[3].seg[0].charset=cs; bzero((char*) key1,sizeof(key1)); bzero((char*) key3,sizeof(key3)); diff --git a/include/my_sys.h b/include/my_sys.h index b23de114ede..e53e2442983 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -209,11 +209,9 @@ extern CHARSET_INFO compiled_charsets[]; extern uint get_charset_number(const char *cs_name); extern const char *get_charset_name(uint cs_number); extern CHARSET_INFO *get_charset(uint cs_number, myf flags); -extern my_bool set_default_charset(uint cs, myf flags); extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, uint cs_flags, myf my_flags); -extern my_bool set_default_charset_by_name(const char *cs_name, myf flags); extern void free_charsets(void); extern char *list_charsets(myf want_flags); /* my_free() this string... */ extern char *get_charsets_dir(char *buf); diff --git a/isam/isamchk.c b/isam/isamchk.c index 35b4e881962..dc772290e13 100644 --- a/isam/isamchk.c +++ b/isam/isamchk.c @@ -681,7 +681,7 @@ static void get_options(register int *argc, register char ***argv) } if (default_charset) { - if (set_default_charset_by_name(default_charset, MYF(MY_WME))) + if (!(default_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); } return; diff --git a/mysys/charset.c b/mysys/charset.c index 3ad27469c03..7baacd613b4 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -606,24 +606,6 @@ CHARSET_INFO *get_charset(uint cs_number, myf flags) return cs; } -my_bool set_default_charset(uint cs, myf flags) -{ - CHARSET_INFO *new_charset; - DBUG_ENTER("set_default_charset"); - DBUG_PRINT("enter",("character set: %d",(int) cs)); - - new_charset= get_charset(cs, flags); - if (!new_charset) - { - DBUG_PRINT("error",("Couldn't set default character set")); - DBUG_RETURN(TRUE); /* error */ - } - default_charset_info= new_charset; - system_charset_info= new_charset; - - DBUG_RETURN(FALSE); -} - CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags) { uint cs_number; @@ -673,25 +655,6 @@ CHARSET_INFO *get_charset_by_csname(const char *cs_name, } -my_bool set_default_charset_by_name(const char *cs_name, myf flags) -{ - CHARSET_INFO *new_charset; - DBUG_ENTER("set_default_charset_by_name"); - DBUG_PRINT("enter",("character set: %s", cs_name)); - - new_charset= get_charset_by_name(cs_name, flags); - if (!new_charset) - { - DBUG_PRINT("error",("Couldn't set default character set")); - DBUG_RETURN(TRUE); /* error */ - } - - default_charset_info= new_charset; - system_charset_info= new_charset; - DBUG_RETURN(FALSE); -} - - /* Only append name if it doesn't exist from before */ static my_bool charset_in_string(const char *name, DYNAMIC_STRING *s) diff --git a/mysys/charset2html.c b/mysys/charset2html.c index 0d6450a8116..3da24232ad4 100644 --- a/mysys/charset2html.c +++ b/mysys/charset2html.c @@ -108,6 +108,7 @@ static void print_cs(CHARSET_INFO *cs) int main(int argc, char **argv) { const char *the_set = MYSQL_CHARSET; int argcnt = 1; + CHARSET_INFO *cs; my_init(); @@ -120,10 +121,10 @@ int main(int argc, char **argv) { if (argc > argcnt) charsets_dir = argv[argcnt++]; - if (set_default_charset_by_name(the_set, MYF(MY_WME))) + if (!(cs= get_charset_by_name(the_set, MYF(MY_WME)))) return 1; - print_cs(default_charset_info); + print_cs(cs); return 0; } diff --git a/mysys/test_charset.c b/mysys/test_charset.c index d031007a1da..6b0f728593a 100644 --- a/mysys/test_charset.c +++ b/mysys/test_charset.c @@ -58,6 +58,7 @@ int main(int argc, char **argv) { const char *the_set = MYSQL_CHARSET; char *cs_list; int argcnt = 1; + CHARSET_INFO *cs; my_init(); @@ -70,11 +71,11 @@ int main(int argc, char **argv) { if (argc > argcnt) charsets_dir = argv[argcnt++]; - if (set_default_charset_by_name(the_set, MYF(MY_WME))) + if (!(cs= get_charset_by_name(the_set, MYF(MY_WME)))) return 1; puts("CHARSET INFO:"); - _print_csinfo(default_charset_info); + _print_csinfo(cs); fflush(stdout); cs_list = list_charsets(MYF(MY_CS_COMPILED | MY_CS_CONFIG)); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c6403f97f07..5c6988f1a0c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2068,8 +2068,9 @@ static int init_common_variables(const char *conf_file_name, int argc, #ifdef USE_REGEX regex_init(&my_charset_latin1); #endif - if (set_default_charset_by_name(sys_charset.value, MYF(MY_WME))) + if (!(default_charset_info= get_charset_by_name(sys_charset.value, MYF(MY_WME)))) return 1; + system_charset_info= default_charset_info; charsets_list= list_charsets(MYF(MY_CS_COMPILED | MY_CS_CONFIG)); if (use_temp_pool && bitmap_init(&temp_pool,1024,1)) From f08688c5ee2aed851f92393b06b1b704ef0dd118 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 09:01:47 +0200 Subject: [PATCH 177/267] trx0roll.c: Fix compiler warning in Windows about ib_longlong to ulint conversion innobase/trx/trx0roll.c: Fix compiler warning in Windows about ib_longlong to ulint conversion --- innobase/trx/trx0roll.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/innobase/trx/trx0roll.c b/innobase/trx/trx0roll.c index deaee16b7cc..a9f8c5ad22c 100644 --- a/innobase/trx/trx0roll.c +++ b/innobase/trx/trx0roll.c @@ -699,9 +699,9 @@ try_again: and the transaction has at least 1000 row operations to undo */ if (srv_is_being_started && trx_roll_max_undo_no > 1000) { - progress_pct = 100 - - (ut_conv_dulint_to_longlong(undo_no) * 100) - / trx_roll_max_undo_no; + progress_pct = 100 - (ulint) + ((ut_conv_dulint_to_longlong(undo_no) * 100) + / trx_roll_max_undo_no); if (progress_pct != trx_roll_progress_printed_pct) { if (trx_roll_progress_printed_pct == 0) { fprintf(stderr, From 2aa9f207358c2c82c63e4e5ac6f952dbf6aeddec Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 11:20:45 +0400 Subject: [PATCH 178/267] mysqltest.c, mysqlimport.c, mysqldump.c, mysqlcheck.c, mysql.cc: system_charset_info was removed client/mysql.cc: system_charset_info was removed client/mysqlcheck.c: system_charset_info was removed client/mysqldump.c: system_charset_info was removed client/mysqlimport.c: system_charset_info was removed client/mysqltest.c: system_charset_info was removed --- client/mysql.cc | 77 ++++++++++++++++++++++---------------------- client/mysqlcheck.c | 10 +++--- client/mysqldump.c | 21 ++++++------ client/mysqlimport.c | 11 +++---- client/mysqltest.c | 49 ++++++++++++++-------------- 5 files changed, 82 insertions(+), 86 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 03f8d226d13..9e49a6eab2c 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -92,9 +92,9 @@ extern "C" { #endif #ifdef FN_NO_CASE_SENCE -#define cmp_database(A,B) my_strcasecmp(system_charset_info, (A), (B)) +#define cmp_database(cs,A,B) my_strcasecmp((cs), (A), (B)) #else -#define cmp_database(A,B) strcmp((A),(B)) +#define cmp_database(cs,A,B) strcmp((A),(B)) #endif #if !defined( __WIN__) && !defined( OS2) && !defined(__NETWARE__) && (!defined(HAVE_mit_thread) || !defined(THREAD)) @@ -133,7 +133,8 @@ static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0; static my_string opt_mysql_unix_port=0; static int connect_flag=CLIENT_INTERACTIVE; static char *current_host,*current_db,*current_user=0,*opt_password=0, - *current_prompt=0, *default_charset; + *current_prompt=0, + *default_charset= (char*) MYSQL_CHARSET; static char *histfile; static String glob_buffer,old_buffer; static String processed_prompt; @@ -160,6 +161,7 @@ static uint prompt_counter; static char *shared_memory_base_name=0; #endif static uint opt_protocol=0; +static CHARSET_INFO *charset_info= &my_charset_latin1; #include "sslopt-vars.h" @@ -788,11 +790,8 @@ static int get_options(int argc, char **argv) opt_reconnect= 0; connect_flag= 0; /* Not in interactive mode */ } - if (default_charset) - { - if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) - exit(1); - } + if (!(charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) + exit(1); if (argc > 1) { usage(0); @@ -919,14 +918,14 @@ static COMMANDS *find_command (char *name,char cmd_char) } else { - while (my_isspace(system_charset_info,*name)) + while (my_isspace(charset_info,*name)) name++; if (strchr(name,';') || strstr(name,"\\g")) return ((COMMANDS *) 0); if ((end=strcont(name," \t"))) { len=(uint) (end - name); - while (my_isspace(system_charset_info,*end)) + while (my_isspace(charset_info,*end)) end++; if (!*end) end=0; // no arguments to function @@ -939,7 +938,7 @@ static COMMANDS *find_command (char *name,char cmd_char) { if (commands[i].func && ((name && - !my_strncasecmp(system_charset_info,name,commands[i].name,len) && + !my_strncasecmp(charset_info,name,commands[i].name,len) && !commands[i].name[len] && (!end || (end && commands[i].takes_params))) || !name && commands[i].cmd_char == cmd_char)) @@ -968,13 +967,13 @@ static bool add_line(String &buffer,char *line,char *in_string, for (pos=out=line ; (inchar= (uchar) *pos) ; pos++) { - if (my_isspace(system_charset_info,inchar) && out == line && + if (my_isspace(charset_info,inchar) && out == line && buffer.is_empty()) continue; #ifdef USE_MB int l; - if (use_mb(system_charset_info) && - (l = my_ismbchar(system_charset_info, pos, strend))) { + if (use_mb(charset_info) && + (l = my_ismbchar(charset_info, pos, strend))) { while (l--) *out++ = *pos++; pos--; @@ -993,7 +992,7 @@ static bool add_line(String &buffer,char *line,char *in_string, } if ((com=find_command(NullS,(char) inchar))) { - const String tmp(line,(uint) (out-line), system_charset_info); + const String tmp(line,(uint) (out-line), charset_info); buffer.append(tmp); if ((*com->func)(&buffer,pos-1) > 0) return 1; // Quit @@ -1037,7 +1036,7 @@ static bool add_line(String &buffer,char *line,char *in_string, } else if (!*ml_comment && (!*in_string && (inchar == '#' || inchar == '-' && pos[1] == '-' && - my_isspace(system_charset_info,pos[2])))) + my_isspace(charset_info,pos[2])))) break; // comment to end of line else if (!*in_string && inchar == '/' && *(pos+1) == '*' && *(pos+2) != '!') { @@ -1593,7 +1592,7 @@ com_go(String *buffer,char *line __attribute__((unused))) (void) com_print(buffer,0); if (skip_updates && - (buffer->length() < 4 || my_strnncoll(system_charset_info, + (buffer->length() < 4 || my_strnncoll(charset_info, (const uchar*)buffer->ptr(),4, (const uchar*)"SET ",4))) { @@ -1784,7 +1783,7 @@ print_table_data(MYSQL_RES *result) print_field_types(result); mysql_field_seek(result,0); } - separator.copy("+",1,system_charset_info); + separator.copy("+",1,charset_info); while ((field = mysql_fetch_field(result))) { uint length= column_names ? field->name_length : 0; @@ -2001,8 +2000,8 @@ safe_put_field(const char *pos,ulong length) { #ifdef USE_MB int l; - if (use_mb(system_charset_info) && - (l = my_ismbchar(system_charset_info, pos, end))) + if (use_mb(charset_info) && + (l = my_ismbchar(charset_info, pos, end))) { while (l--) tee_putc(*pos++, PAGER); @@ -2063,7 +2062,7 @@ com_tee(String *buffer, char *line __attribute__((unused))) if (status.batch) return 0; - while (my_isspace(system_charset_info,*line)) + while (my_isspace(charset_info,*line)) line++; if (!(param = strchr(line, ' '))) // if outfile wasn't given, use the default { @@ -2082,12 +2081,12 @@ com_tee(String *buffer, char *line __attribute__((unused))) } /* eliminate the spaces before the parameters */ - while (my_isspace(system_charset_info,*param)) + while (my_isspace(charset_info,*param)) param++; end= strmake(file_name, param, sizeof(file_name) - 1); /* remove end space from command line */ - while (end > file_name && (my_isspace(system_charset_info,end[-1]) || - my_iscntrl(system_charset_info,end[-1]))) + while (end > file_name && (my_isspace(charset_info,end[-1]) || + my_iscntrl(charset_info,end[-1]))) end--; end[0]= 0; if (end == file_name) @@ -2123,7 +2122,7 @@ com_pager(String *buffer, char *line __attribute__((unused))) if (status.batch) return 0; /* Skip space from file name */ - while (my_isspace(system_charset_info,*line)) + while (my_isspace(charset_info,*line)) line++; if (!(param= strchr(line, ' '))) // if pager was not given, use the default { @@ -2139,11 +2138,11 @@ com_pager(String *buffer, char *line __attribute__((unused))) } else { - while (my_isspace(system_charset_info,*param)) + while (my_isspace(charset_info,*param)) param++; end=strmake(pager_name, param, sizeof(pager_name)-1); - while (end > pager_name && (my_isspace(system_charset_info,end[-1]) || - my_iscntrl(system_charset_info,end[-1]))) + while (end > pager_name && (my_isspace(charset_info,end[-1]) || + my_iscntrl(charset_info,end[-1]))) end--; end[0]=0; strmov(pager, pager_name); @@ -2327,16 +2326,16 @@ static int com_source(String *buffer, char *line) FILE *sql_file; /* Skip space from file name */ - while (my_isspace(system_charset_info,*line)) + while (my_isspace(charset_info,*line)) line++; if (!(param = strchr(line, ' '))) // Skip command name return put_info("Usage: \\. | source ", INFO_ERROR, 0); - while (my_isspace(system_charset_info,*param)) + while (my_isspace(charset_info,*param)) param++; end=strmake(source_name,param,sizeof(source_name)-1); - while (end > source_name && (my_isspace(system_charset_info,end[-1]) || - my_iscntrl(system_charset_info,end[-1]))) + while (end > source_name && (my_isspace(charset_info,end[-1]) || + my_iscntrl(charset_info,end[-1]))) end--; end[0]=0; unpack_filename(source_name,source_name); @@ -2385,7 +2384,7 @@ com_use(String *buffer __attribute__((unused)), char *line) put_info("USE must be followed by a database name", INFO_ERROR); return 0; } - if (!current_db || cmp_database(current_db, tmp)) + if (!current_db || cmp_database(charset_info, current_db, tmp)) { if (one_database) skip_updates= 1; @@ -2448,16 +2447,16 @@ char *get_arg(char *line, my_bool get_next_arg) else { /* skip leading white spaces */ - while (my_isspace(system_charset_info, *ptr)) + while (my_isspace(charset_info, *ptr)) ptr++; if (*ptr == '\\') // short command was used ptr+= 2; - while (*ptr &&!my_isspace(system_charset_info, *ptr)) // skip command + while (*ptr &&!my_isspace(charset_info, *ptr)) // skip command ptr++; } if (!*ptr) return NullS; - while (my_isspace(system_charset_info, *ptr)) + while (my_isspace(charset_info, *ptr)) ptr++; if (*ptr == '\'' || *ptr == '\"' || *ptr == '`') { @@ -2485,7 +2484,7 @@ char *get_arg(char *line, my_bool get_next_arg) } } for (ptr-= count; ptr && *ptr; ptr++) - if (!my_isspace(system_charset_info, *ptr)) + if (!my_isspace(charset_info, *ptr)) valid_arg= 1; return valid_arg ? ptr - count : '\0'; } @@ -2636,7 +2635,7 @@ com_status(String *buffer __attribute__((unused)), tee_fprintf(stdout, "Protocol version:\t%d\n", mysql_get_proto_info(&mysql)); tee_fprintf(stdout, "Connection:\t\t%s\n", mysql_get_host_info(&mysql)); tee_fprintf(stdout, "Client characterset:\t%s\n", - system_charset_info->name); + charset_info->name); tee_fprintf(stdout, "Server characterset:\t%s\n", mysql.charset->name); #ifndef EMBEDDED_LIBRARY if (strstr(mysql_get_host_info(&mysql),"TCP/IP") || ! mysql.unix_socket) @@ -2747,7 +2746,7 @@ static void remove_cntrl(String &buffer) { char *start,*end; end=(start=(char*) buffer.ptr())+buffer.length(); - while (start < end && !my_isgraph(system_charset_info,end[-1])) + while (start < end && !my_isgraph(charset_info,end[-1])) end--; buffer.length((uint) (end-start)); } diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 0333833ba11..cd8cd0ef82e 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -37,14 +37,15 @@ static my_bool opt_alldbs = 0, opt_check_only_changed = 0, opt_extended = 0, tty_password = 0, opt_frm = 0; static uint verbose = 0, opt_mysql_port=0; static my_string opt_mysql_unix_port = 0; -static char *opt_password = 0, *current_user = 0, *default_charset = 0, - *current_host = 0; +static char *opt_password = 0, *current_user = 0, + *default_charset = (char *)MYSQL_CHARSET, *current_host = 0; static int first_error = 0; DYNAMIC_ARRAY tables4repair; #ifdef HAVE_SMEM static char *shared_memory_base_name=0; #endif static uint opt_protocol=0; +static CHARSET_INFO *charset_info= &my_charset_latin1; enum operations {DO_CHECK, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE}; @@ -307,11 +308,8 @@ static int get_options(int *argc, char ***argv) else what_to_do = DO_CHECK; } - if (default_charset) - { - if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) + if (!(charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) exit(1); - } if (*argc > 0 && opt_alldbs) { printf("You should give only options, no arguments at all, with option\n"); diff --git a/client/mysqldump.c b/client/mysqldump.c index 18755b7a913..72d9200a6f6 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -84,7 +84,8 @@ static MYSQL mysql_connection,*sock=0; static char insert_pat[12 * 1024],*opt_password=0,*current_user=0, *current_host=0,*path=0,*fields_terminated=0, *lines_terminated=0, *enclosed=0, *opt_enclosed=0, *escaped=0, - *where=0, *default_charset, *opt_compatible_mode_str= 0, + *where=0, *default_charset= (char *)MYSQL_CHARSET, + *opt_compatible_mode_str= 0, *err_ptr= 0; static ulong opt_compatible_mode= 0; static uint opt_mysql_port= 0, err_len= 0; @@ -98,6 +99,7 @@ FILE *md_result_file; static char *shared_memory_base_name=0; #endif static uint opt_protocol= 0; +static CHARSET_INFO *charset_info= &my_charset_latin1; const char *compatible_mode_names[]= { @@ -481,11 +483,8 @@ static int get_options(int *argc, char ***argv) my_progname); return(1); } - if (default_charset) - { - if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) - exit(1); - } + if (!(charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) + exit(1); if ((*argc < 1 && !opt_alldbs) || (*argc > 0 && opt_alldbs)) { short_usage(); @@ -592,7 +591,7 @@ static my_bool test_if_special_chars(const char *str) { #if MYSQL_VERSION_ID >= 32300 for ( ; *str ; str++) - if (!my_isvar(system_charset_info,*str) && *str != '$') + if (!my_isvar(charset_info,*str) && *str != '$') return 1; #endif return 0; @@ -1138,7 +1137,7 @@ static void dumpTable(uint numFields, char *table) /* change any strings ("inf","nan",..) into NULL */ char *ptr = row[i]; dynstr_append(&extended_row, - (!my_isalpha(system_charset_info,*ptr)) ? + (!my_isalpha(charset_info,*ptr)) ? ptr : "NULL"); } } @@ -1172,9 +1171,9 @@ static void dumpTable(uint numFields, char *table) if (opt_xml) fprintf(md_result_file, "\t\t%s\n", field->name, - !my_isalpha(system_charset_info, *ptr) ? ptr: "NULL"); + !my_isalpha(charset_info, *ptr) ? ptr: "NULL"); else - fputs((!my_isalpha(system_charset_info,*ptr)) ? + fputs((!my_isalpha(charset_info,*ptr)) ? ptr : "NULL", md_result_file); } } @@ -1481,7 +1480,7 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length, char buff[255]; *err_pos= 0; /* No error yet */ - while (end > x && my_isspace(system_charset_info, end[-1])) + while (end > x && my_isspace(charset_info, end[-1])) end--; *err_len= 0; diff --git a/client/mysqlimport.c b/client/mysqlimport.c index ff6895145f7..efb117280c4 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -43,10 +43,12 @@ static MYSQL mysql_connection; static char *opt_password=0, *current_user=0, *current_host=0, *current_db=0, *fields_terminated=0, *lines_terminated=0, *enclosed=0, *opt_enclosed=0, - *escaped=0, *opt_columns=0, *default_charset; + *escaped=0, *opt_columns=0, + *default_charset= (char*) MYSQL_CHARSET; static uint opt_mysql_port=0; static my_string opt_mysql_unix_port=0; static my_string opt_ignore_lines=0; +static CHARSET_INFO *charset_info= &my_charset_latin1; #include #ifdef HAVE_SMEM @@ -237,11 +239,8 @@ static int get_options(int *argc, char ***argv) fprintf(stderr, "You can't use --ignore (-i) and --replace (-r) at the same time.\n"); return(1); } - if (default_charset) - { - if (!(system_charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) - exit(1); - } + if (!(charset_info= get_charset_by_name(default_charset, MYF(MY_WME)))) + exit(1); if (*argc < 2) { usage(); diff --git a/client/mysqltest.c b/client/mysqltest.c index 7894b6cd2cf..0c9e763bdfa 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -123,6 +123,7 @@ static int block_stack[BLOCK_STACK_DEPTH]; static int block_ok_stack[BLOCK_STACK_DEPTH]; static uint global_expected_errno[MAX_EXPECTED_ERRORS], global_expected_errors; +static CHARSET_INFO *charset_info= &my_charset_latin1; DYNAMIC_ARRAY q_lines; typedef struct @@ -489,9 +490,9 @@ void init_parser() int hex_val(int c) { - if (my_isdigit(system_charset_info,c)) + if (my_isdigit(charset_info,c)) return c - '0'; - else if ((c = my_tolower(system_charset_info,c)) >= 'a' && c <= 'f') + else if ((c = my_tolower(charset_info,c)) >= 'a' && c <= 'f') return c - 'a' + 10; else return -1; @@ -601,7 +602,7 @@ VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw, { const char* save_var_name = var_name, *end; end = (var_name_end) ? *var_name_end : 0; - while (my_isvar(system_charset_info,*var_name) && var_name != end) + while (my_isvar(charset_info,*var_name) && var_name != end) ++var_name; if (var_name == save_var_name) { @@ -752,7 +753,7 @@ int do_server_op(struct st_query* q,const char* op) com_p=strmov(com_p,"_exec "); if (!*p) die("Missing server name in server_%s\n",op); - while (*p && !my_isspace(system_charset_info,*p)) + while (*p && !my_isspace(charset_info,*p)) { *com_p++=*p++; } @@ -785,7 +786,7 @@ int do_require_version(struct st_query* q) if (!*p) die("Missing version argument in require_version\n"); ver_arg = p; - while (*p && !my_isspace(system_charset_info,*p)) + while (*p && !my_isspace(charset_info,*p)) p++; *p = 0; ver_arg_len = p - ver_arg; @@ -815,7 +816,7 @@ int do_source(struct st_query* q) if (!*p) die("Missing file name in source\n"); name = p; - while (*p && !my_isspace(system_charset_info,*p)) + while (*p && !my_isspace(charset_info,*p)) p++; *p = 0; @@ -1055,11 +1056,11 @@ int do_let(struct st_query* q) if (!*p) die("Missing variable name in let\n"); var_name = p; - while (*p && (*p != '=' || my_isspace(system_charset_info,*p))) + while (*p && (*p != '=' || my_isspace(charset_info,*p))) p++; var_name_end = p; if (*p == '=') p++; - while (*p && my_isspace(system_charset_info,*p)) + while (*p && my_isspace(charset_info,*p)) p++; var_val_start = p; return var_set(var_name, var_name_end, var_val_start, q->end); @@ -1089,7 +1090,7 @@ int do_disable_rpl_parse(struct st_query* q __attribute__((unused))) int do_sleep(struct st_query* q, my_bool real_sleep) { char *p=q->first_argument; - while (*p && my_isspace(system_charset_info,*p)) + while (*p && my_isspace(charset_info,*p)) p++; if (!*p) die("Missing argument in sleep\n"); @@ -1105,7 +1106,7 @@ static void get_file_name(char *filename, struct st_query* q) char* p=q->first_argument; strnmov(filename, p, FN_REFLEN); /* Remove end space */ - while (p > filename && my_isspace(system_charset_info,p[-1])) + while (p > filename && my_isspace(charset_info,p[-1])) p--; p[0]=0; } @@ -1191,7 +1192,7 @@ static char *get_string(char **to_ptr, char **from_ptr, if (*from != ' ' && *from) die("Wrong string argument in %s\n", q->query); - while (my_isspace(system_charset_info,*from)) /* Point to next string */ + while (my_isspace(charset_info,*from)) /* Point to next string */ from++; *to =0; /* End of string marker */ @@ -1248,7 +1249,7 @@ static void get_replace(struct st_query *q) insert_pointer_name(&to_array,to); } for (i=1,pos=word_end_chars ; i < 256 ; i++) - if (my_isspace(system_charset_info,i)) + if (my_isspace(charset_info,i)) *pos++= i; *pos=0; /* End pointer */ if (!(glob_replace=init_replace((char**) from_array.typelib.type_names, @@ -1285,7 +1286,7 @@ int select_connection(char *p) if (!*p) die("Missing connection name in connect\n"); name = p; - while (*p && !my_isspace(system_charset_info,*p)) + while (*p && !my_isspace(charset_info,*p)) p++; *p = 0; @@ -1311,7 +1312,7 @@ int close_connection(struct st_query* q) if (!*p) die("Missing connection name in connect\n"); name = p; - while (*p && !my_isspace(system_charset_info,*p)) + while (*p && !my_isspace(charset_info,*p)) p++; *p = 0; @@ -1348,12 +1349,12 @@ int close_connection(struct st_query* q) char* safe_get_param(char* str, char** arg, const char* msg) { DBUG_ENTER("safe_get_param"); - while (*str && my_isspace(system_charset_info,*str)) + while (*str && my_isspace(charset_info,*str)) str++; *arg = str; for (; *str && *str != ',' && *str != ')' ; str++) { - if (my_isspace(system_charset_info,*str)) + if (my_isspace(charset_info,*str)) *str = 0; } if (!*str) @@ -1636,7 +1637,7 @@ int read_line(char* buf, int size) { state = R_COMMENT; } - else if (my_isspace(system_charset_info,c)) + else if (my_isspace(charset_info,c)) { if (c == '\n') start_lineno= ++*lineno; /* Query hasn't started yet */ @@ -1762,7 +1763,7 @@ int read_query(struct st_query** q_ptr) { expected_errno = 0; p++; - for (;my_isdigit(system_charset_info,*p);p++) + for (;my_isdigit(charset_info,*p);p++) expected_errno = expected_errno * 10 + *p - '0'; q->expected_errno[0] = expected_errno; q->expected_errno[1] = 0; @@ -1770,27 +1771,27 @@ int read_query(struct st_query** q_ptr) } } - while (*p && my_isspace(system_charset_info,*p)) + while (*p && my_isspace(charset_info,*p)) p++ ; if (*p == '@') { p++; p1 = q->record_file; - while (!my_isspace(system_charset_info,*p) && + while (!my_isspace(charset_info,*p) && p1 < q->record_file + sizeof(q->record_file) - 1) *p1++ = *p++; *p1 = 0; } } - while (*p && my_isspace(system_charset_info,*p)) + while (*p && my_isspace(charset_info,*p)) p++; if (!(q->query_buf=q->query=my_strdup(p,MYF(MY_WME)))) die(NullS); /* Calculate first word and first argument */ - for (p=q->query; *p && !my_isspace(system_charset_info,*p) ; p++) ; + for (p=q->query; *p && !my_isspace(charset_info,*p) ; p++) ; q->first_word_len = (uint) (p - q->query); - while (*p && my_isspace(system_charset_info,*p)) + while (*p && my_isspace(charset_info,*p)) p++; q->first_argument=p; q->end = strend(q->query); @@ -2346,7 +2347,7 @@ static void init_var_hash() { VAR* v; DBUG_ENTER("init_var_hash"); - if (hash_init(&var_hash, system_charset_info, + if (hash_init(&var_hash, charset_info, 1024, 0, 0, get_var_key, var_free, MYF(0))) die("Variable hash initialization failed"); var_from_env("MASTER_MYPORT", "9306"); From 23f252855e5dcb18ac55cf9ce303f61c28e06421 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 12:30:10 +0400 Subject: [PATCH 179/267] system_charset_info has been moved to /sql directory and isn't used in libraries any longer --- extra/mysql_install.c | 2 +- extra/replace.c | 2 +- extra/resolve_stack_dump.c | 10 +++++----- extra/resolveip.c | 2 +- libmysql/libmysql.c | 20 ++++++++++---------- mysys/charset.c | 1 - mysys/default.c | 10 +++++----- mysys/mf_iocache2.c | 2 +- mysys/my_error.c | 2 +- mysys/my_getwd.c | 2 +- mysys/my_init.c | 2 +- mysys/typelib.c | 4 ++-- sql/sql_string.cc | 1 + tools/mysqlmanager.c | 24 +++++++++++++----------- 14 files changed, 43 insertions(+), 41 deletions(-) diff --git a/extra/mysql_install.c b/extra/mysql_install.c index 3f3da8cfb51..11f33028ce1 100644 --- a/extra/mysql_install.c +++ b/extra/mysql_install.c @@ -157,7 +157,7 @@ static int get_answer(QUESTION_WIDGET* w) char c; if (!fgets(buf,sizeof(buf),w->in)) die("Failed fgets on input stream"); - switch ((c=my_tolower(system_charset_info,*buf))) + switch ((c=my_tolower(&my_charset_latin1,*buf))) { case '\n': return w->default_ind; diff --git a/extra/replace.c b/extra/replace.c index 5826586988a..8e007e3a971 100644 --- a/extra/replace.c +++ b/extra/replace.c @@ -113,7 +113,7 @@ char *argv[]; exit(1); for (i=1,pos=word_end_chars ; i < 256 ; i++) - if (my_isspace(system_charset_info,i)) + if (my_isspace(&my_charset_latin1,i)) *pos++=i; *pos=0; if (!(replace=init_replace((char**) from.typelib.type_names, diff --git a/extra/resolve_stack_dump.c b/extra/resolve_stack_dump.c index f19ef467b5c..06a670b935d 100644 --- a/extra/resolve_stack_dump.c +++ b/extra/resolve_stack_dump.c @@ -175,9 +175,9 @@ trace dump and specify the path to it with -s or --symbols-file"); static uchar hex_val(char c) { uchar l; - if (my_isdigit(system_charset_info,c)) + if (my_isdigit(&my_charset_latin1,c)) return c - '0'; - l = my_tolower(system_charset_info,c); + l = my_tolower(&my_charset_latin1,c); if (l < 'a' || l > 'f') return HEX_INVALID; return (uchar)10 + ((uchar)c - (uchar)'a'); @@ -203,10 +203,10 @@ static int init_sym_entry(SYM_ENTRY* se, char* buf) if (!se->addr) return -1; - while (my_isspace(system_charset_info,*buf++)) + while (my_isspace(&my_charset_latin1,*buf++)) /* empty */; - while (my_isspace(system_charset_info,*buf++)) + while (my_isspace(&my_charset_latin1,*buf++)) /* empty - skip more space */; --buf; /* now we are on the symbol */ @@ -288,7 +288,7 @@ static void do_resolve() { p = buf; /* skip space */ - while (my_isspace(system_charset_info,*p)) + while (my_isspace(&my_charset_latin1,*p)) ++p; if (*p++ == '0' && *p++ == 'x') diff --git a/extra/resolveip.c b/extra/resolveip.c index c9446b0fdf2..95861bca2bc 100644 --- a/extra/resolveip.c +++ b/extra/resolveip.c @@ -122,7 +122,7 @@ int main(int argc, char **argv) { ip = *argv++; - if (my_isdigit(system_charset_info,ip[0])) + if (my_isdigit(&my_charset_latin1,ip[0])) { taddr = inet_addr(ip); if (taddr == htonl(INADDR_BROADCAST)) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 6fe199bb45e..564db0fe111 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1693,9 +1693,9 @@ STDCALL mysql_rpl_query_type(const char* q, int len) for (; q < q_end; ++q) { char c; - if (my_isalpha(system_charset_info, (c= *q))) + if (my_isalpha(&my_charset_latin1, (c= *q))) { - switch (my_tolower(system_charset_info,c)) { + switch (my_tolower(&my_charset_latin1,c)) { case 'i': /* insert */ case 'u': /* update or unlock tables */ case 'l': /* lock tables or load data infile */ @@ -1703,10 +1703,10 @@ STDCALL mysql_rpl_query_type(const char* q, int len) case 'a': /* alter */ return MYSQL_RPL_MASTER; case 'c': /* create or check */ - return my_tolower(system_charset_info,q[1]) == 'h' ? MYSQL_RPL_ADMIN : + return my_tolower(&my_charset_latin1,q[1]) == 'h' ? MYSQL_RPL_ADMIN : MYSQL_RPL_MASTER; case 's': /* select or show */ - return my_tolower(system_charset_info,q[1]) == 'h' ? MYSQL_RPL_ADMIN : + return my_tolower(&my_charset_latin1,q[1]) == 'h' ? MYSQL_RPL_ADMIN : MYSQL_RPL_SLAVE; case 'f': /* flush */ case 'r': /* repair */ @@ -4842,40 +4842,40 @@ static void send_data_str(MYSQL_BIND *param, char *value, uint length) switch(param->buffer_type) { case MYSQL_TYPE_TINY: { - uchar data= (uchar)my_strntol(system_charset_info,value,length,10,NULL, + uchar data= (uchar)my_strntol(&my_charset_latin1,value,length,10,NULL, &err); *buffer= data; break; } case MYSQL_TYPE_SHORT: { - short data= (short)my_strntol(system_charset_info,value,length,10,NULL, + short data= (short)my_strntol(&my_charset_latin1,value,length,10,NULL, &err); int2store(buffer, data); break; } case MYSQL_TYPE_LONG: { - int32 data= (int32)my_strntol(system_charset_info,value,length,10,NULL, + int32 data= (int32)my_strntol(&my_charset_latin1,value,length,10,NULL, &err); int4store(buffer, data); break; } case MYSQL_TYPE_LONGLONG: { - longlong data= my_strntoll(system_charset_info,value,length,10,NULL,&err); + longlong data= my_strntoll(&my_charset_latin1,value,length,10,NULL,&err); int8store(buffer, data); break; } case MYSQL_TYPE_FLOAT: { - float data = (float)my_strntod(system_charset_info,value,length,NULL,&err); + float data = (float)my_strntod(&my_charset_latin1,value,length,NULL,&err); float4store(buffer, data); break; } case MYSQL_TYPE_DOUBLE: { - double data= my_strntod(system_charset_info,value,length,NULL,&err); + double data= my_strntod(&my_charset_latin1,value,length,NULL,&err); float8store(buffer, data); break; } diff --git a/mysys/charset.c b/mysys/charset.c index 7baacd613b4..9b628ce0177 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -408,7 +408,6 @@ char *get_charsets_dir(char *buf) CHARSET_INFO *all_charsets[256]; CHARSET_INFO *default_charset_info = &my_charset_latin1; -CHARSET_INFO *system_charset_info = &my_charset_latin1; #define MY_ADD_CHARSET(x) all_charsets[(x)->number]=(x) diff --git a/mysys/default.c b/mysys/default.c index 06557f73d06..0ae409f1015 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -249,7 +249,7 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, { line++; /* Ignore comment and empty lines */ - for (ptr=buff ; my_isspace(system_charset_info,*ptr) ; ptr++ ) ; + for (ptr=buff ; my_isspace(&my_charset_latin1,*ptr) ; ptr++ ) ; if (*ptr == '#' || *ptr == ';' || !*ptr) continue; if (*ptr == '[') /* Group name */ @@ -262,7 +262,7 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, name,line); goto err; } - for ( ; my_isspace(system_charset_info,end[-1]) ; end--) ;/* Remove end space */ + for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ;/* Remove end space */ end[0]=0; read_values=find_type(ptr,group,3) > 0; continue; @@ -278,7 +278,7 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, continue; if (!(end=value=strchr(ptr,'='))) end=strend(ptr); /* Option without argument */ - for ( ; my_isspace(system_charset_info,end[-1]) ; end--) ; + for ( ; my_isspace(&my_charset_latin1,end[-1]) ; end--) ; if (!value) { if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3))) @@ -291,9 +291,9 @@ static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, { /* Remove pre- and end space */ char *value_end; - for (value++ ; my_isspace(system_charset_info,*value); value++) ; + for (value++ ; my_isspace(&my_charset_latin1,*value); value++) ; value_end=strend(value); - for ( ; my_isspace(system_charset_info,value_end[-1]) ; value_end--) ; + for ( ; my_isspace(&my_charset_latin1,value_end[-1]) ; value_end--) ; if (value_end < value) /* Empty string */ value_end=value; if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3 + diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index 8a7dfc7be09..bce08b9795b 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -267,7 +267,7 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args) /* Found one '%' */ } /* Skipp if max size is used (to be compatible with printf) */ - while (my_isdigit(system_charset_info, *fmt) || *fmt == '.' || *fmt == '-') + while (my_isdigit(&my_charset_latin1, *fmt) || *fmt == '.' || *fmt == '-') fmt++; if (*fmt == 's') /* String parameter */ { diff --git a/mysys/my_error.c b/mysys/my_error.c index cd41589f366..6fd346c89f7 100644 --- a/mysys/my_error.c +++ b/mysys/my_error.c @@ -69,7 +69,7 @@ int my_error(int nr,myf MyFlags, ...) else { /* Skipp if max size is used (to be compatible with printf) */ - while (my_isdigit(system_charset_info, *tpos) || *tpos == '.' || *tpos == '-') + while (my_isdigit(&my_charset_latin1, *tpos) || *tpos == '.' || *tpos == '-') tpos++; if (*tpos == 'l') /* Skipp 'l' argument */ tpos++; diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index adf131c5fd0..a08d28d8545 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -109,7 +109,7 @@ int my_setwd(const char *dir, myf MyFlags) uint drive,drives; pos++; /* Skipp FN_DEVCHAR */ - drive=(uint) (my_toupper(system_charset_info,dir[0])-'A'+1); + drive=(uint) (my_toupper(&my_charset_latin1,dir[0])-'A'+1); drives= (uint) -1; if ((pos-(byte*) dir) == 2 && drive > 0 && drive < 32) { diff --git a/mysys/my_init.c b/mysys/my_init.c index ec7cae46d53..fa1beaa3e35 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -52,7 +52,7 @@ my_bool my_init_done=0; static ulong atoi_octal(const char *str) { long int tmp; - while (*str && my_isspace(system_charset_info, *str)) + while (*str && my_isspace(&my_charset_latin1, *str)) str++; str2int(str, (*str == '0' ? 8 : 10), /* Octalt or decimalt */ diff --git a/mysys/typelib.c b/mysys/typelib.c index e524f903b5d..e32fad8742f 100644 --- a/mysys/typelib.c +++ b/mysys/typelib.c @@ -48,8 +48,8 @@ int find_type(my_string x, TYPELIB *typelib, uint full_name) for (pos=0 ; (j=typelib->type_names[pos]) ; pos++) { for (i=x ; - *i && my_toupper(system_charset_info,*i) == - my_toupper(system_charset_info,*j) ; i++, j++) ; + *i && my_toupper(&my_charset_latin1,*i) == + my_toupper(&my_charset_latin1,*j) ; i++, j++) ; if (! *j) { while (*i == ' ') diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 1a0366112f4..b6425003af3 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -28,6 +28,7 @@ #include #endif +CHARSET_INFO *system_charset_info= &my_charset_latin1; extern gptr sql_alloc(unsigned size); extern void sql_element_free(void *ptr); static uint32 diff --git a/tools/mysqlmanager.c b/tools/mysqlmanager.c index 4f2deeb0052..20fe2178005 100644 --- a/tools/mysqlmanager.c +++ b/tools/mysqlmanager.c @@ -89,6 +89,8 @@ #define MAX_LAUNCHER_MSG 256 #endif +static CHARSET_INFO *cs= &my_charset_latin1; + #define MAX_RETRY_COUNT 100 /* @@ -428,8 +430,8 @@ static int exec_line(struct manager_thd* thd,char* buf,char* buf_end) { char* p=buf; struct manager_cmd* cmd; - for (;pfatal=1; return 1; } - for (;phandler_func(thd,p,buf_end); } @@ -716,7 +718,7 @@ HANDLE_DECL(handle_query) int num_fields,i,ident_len; char* ident,*query; query=ident=args_start; - while (!my_isspace(system_charset_info,*query)) + while (!my_isspace(cs,*query)) query++; if (query == ident) { @@ -724,7 +726,7 @@ HANDLE_DECL(handle_query) goto err; } ident_len=(int)(query-ident); - while (querycmd_buf,p=thd->user,p_end=p+MAX_USER_NAME; bufuser, (uint)(p-thd->user)))) return 1; - for (;my_isspace(system_charset_info,*buf) && buf Date: Sun, 16 Mar 2003 14:40:41 +0200 Subject: [PATCH 180/267] row0mysql.c: Test if merging from 3.23 to 4.0 succeeds innobase/row/row0mysql.c: Test if merging from 3.23 to 4.0 succeeds --- innobase/row/row0mysql.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c index f0aa413a64c..ae2f3514f4d 100644 --- a/innobase/row/row0mysql.c +++ b/innobase/row/row0mysql.c @@ -6,7 +6,7 @@ Contains also create table and other data dictionary operations. Created 9/17/2000 Heikki Tuuri *******************************************************/ - + #include "row0mysql.h" #ifdef UNIV_NONINL From ed2bb40a9a87f51d724a56631459c77baf49e6b4 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 17:19:24 +0400 Subject: [PATCH 181/267] New function my_charset_same() BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + include/m_ctype.h | 1 + include/my_sys.h | 1 + mysys/charset.c | 4 ++++ sql/item_func.cc | 2 +- sql/item_strfunc.cc | 2 +- sql/sql_yacc.yy | 6 +++--- 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 148c96de0bc..754cca32249 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -65,6 +65,7 @@ monty@work.mysql.com mwagner@cash.mwagner.org mwagner@evoq.mwagner.org mwagner@work.mysql.com +mysql@home.(none) nick@mysql.com nick@nick.leippe.com papa@gbichot.local diff --git a/include/m_ctype.h b/include/m_ctype.h index 43338c1942d..8833b7df47e 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -199,6 +199,7 @@ extern CHARSET_INFO my_charset_latin1_de; extern CHARSET_INFO my_charset_sjis; extern CHARSET_INFO my_charset_tis620; extern CHARSET_INFO my_charset_ucs2; +extern CHARSET_INFO my_charset_ucse; extern CHARSET_INFO my_charset_ujis; extern CHARSET_INFO my_charset_utf8; extern CHARSET_INFO my_charset_win1250ch; diff --git a/include/my_sys.h b/include/my_sys.h index e53e2442983..7d754912823 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -215,6 +215,7 @@ extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, extern void free_charsets(void); extern char *list_charsets(myf want_flags); /* my_free() this string... */ extern char *get_charsets_dir(char *buf); +extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); /* statistics */ diff --git a/mysys/charset.c b/mysys/charset.c index 9b628ce0177..87fb7846553 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -33,6 +33,10 @@ - Setting server default character set */ +my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2) +{ + return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname)); +} static void set_max_sort_char(CHARSET_INFO *cs) { diff --git a/sql/item_func.cc b/sql/item_func.cc index 0361fd0db65..8fb97dc2873 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -136,7 +136,7 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) } else if ((*arg)->coercibility < coercibility) { - if (strcmp(charset()->csname,(*arg)->charset()->csname)) + if (!my_charset_same(charset(),(*arg)->charset())) { set_charset(&my_charset_bin); coercibility= COER_NOCOLL; diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index f049c13c974..80d85e565e7 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2216,7 +2216,7 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, return 1; } - if (strcmp(args[0]->charset()->csname,set_collation->csname)) + if (!my_charset_same(args[0]->charset(),set_collation)) { my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), set_collation->name,args[0]->charset()->csname); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index fac3315f5c9..7db398e7810 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1284,7 +1284,7 @@ attribute: | COMMENT_SYM text_literal { Lex->comment= $2; } | COLLATE_SYM collation_name { - if (Lex->charset && strcmp(Lex->charset->csname,$2->csname)) + if (Lex->charset && !my_charset_same(Lex->charset,$2)) { net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH, $2->name,Lex->charset->csname); @@ -4250,7 +4250,7 @@ option_value: CHARSET_INFO *cs= $2 ? $2 : thd->db_charset; CHARSET_INFO *cl= $3 ? $3 : cs; - if ((cl != cs) && strcmp(cs->csname,cl->csname)) + if (!my_charset_same(cs,cl)) { net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH, cl->name,cs->csname); @@ -4279,7 +4279,7 @@ option_value: YYABORT; } } - else if ((cl != cs) && strcmp(cs->csname,cl->csname)) + else if (!my_charset_same(cs,cl)) { net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH, cl->name,cs->csname); From 9681f4a8cd242e3828f211e0bed5235e70ee5f4e Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Mar 2003 16:28:30 +0200 Subject: [PATCH 182/267] Write binlog before commit when doing INSERT ... SELECT mysql-test/r/create.result: After merge fix sql/sql_insert.cc: Write binlog before commit sql/sql_update.cc: Added comment --- mysql-test/r/create.result | 7 +++++++ sql/sql_insert.cc | 14 ++++++++------ sql/sql_update.cc | 13 ++++++++++++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index c3083dbfb03..0cc98c38d49 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -58,6 +58,13 @@ a$1 $b c$ create table test_$1.test2$ (a int); drop table test_$1.test2$; drop database test_$1; +create table `` (a int); +Incorrect table name '' +drop table if exists ``; +Incorrect table name '' +create table t1 (`` int); +Incorrect column name '' +drop table if exists t1; create table t1 (a int auto_increment not null primary key, B CHAR(20)); insert into t1 (b) values ("hello"),("my"),("world"); create table t2 (key (b)) select * from t1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 9f1a0e93cb9..ace15771449 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1361,6 +1361,14 @@ bool select_insert::send_eof() if (!(error=table->file->extra(HA_EXTRA_NO_CACHE))) error=table->file->activate_all_index(thd); table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); + + /* Write to binlog before commiting transaction */ + if (mysql_bin_log.is_open()) + { + Query_log_event qinfo(thd, thd->query, thd->query_length, + table->file->has_transactions()); + mysql_bin_log.write(&qinfo); + } if ((error2=ha_autocommit_or_rollback(thd,error)) && ! error) error=error2; if (info.copied || info.deleted) @@ -1386,12 +1394,6 @@ bool select_insert::send_eof() thd->insert_id(last_insert_id); // For update log ::send_ok(&thd->net,info.copied,last_insert_id,buff); mysql_update_log.write(thd,thd->query,thd->query_length); - if (mysql_bin_log.is_open()) - { - Query_log_event qinfo(thd, thd->query, thd->query_length, - table->file->has_transactions()); - mysql_bin_log.write(&qinfo); - } return 0; } } diff --git a/sql/sql_update.cc b/sql/sql_update.cc index adb60adb7d6..d8842855093 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -618,7 +618,18 @@ bool multi_update::send_data(List ¬_used_values) for (cur_table= update_tables; cur_table ; cur_table= cur_table->next) { TABLE *table= cur_table->table; - /* Check if we are using outer join and we didn't find the row */ + /* + Check if we are using outer join and we didn't find the row + or if we have already updated this row in the previous call to this + function. + + The same row may be presented here several times in a join of type + UPDATE t1 FROM t1,t2 SET t1.a=t2.a + + In this case we will do the update for the first found row combination. + The join algorithm guarantees that we will not find the a row in + t1 several times. + */ if (table->status & (STATUS_NULL_ROW | STATUS_UPDATED)) continue; From 11bd5990630ed03a50ae8b3e586a91a39ca9136b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 10:47:08 +0400 Subject: [PATCH 183/267] sql_select.cc: binary comparing alway must be used, because sort_string() is executed for textual data. sql/sql_select.cc: binary comparing alway must be used, because sort_string() is executed for textual data. --- sql/sql_select.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3e20f21f567..f92e9804973 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -6710,8 +6710,7 @@ static int remove_dup_with_hash_index(THD *thd, TABLE *table, NullS)) DBUG_RETURN(1); - // BAR TODO: this must be fixed to use charset from "table" argument - if (hash_init(&hash, default_charset_info, (uint) file->records, 0, + if (hash_init(&hash, &my_charset_bin, (uint) file->records, 0, key_length,(hash_get_key) 0, 0, 0)) { my_free((char*) key_buffer,MYF(0)); From 3a407e58921ea1f0ce36e7d9b6bd1e7b723346dc Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 13:14:04 +0400 Subject: [PATCH 184/267] Preparing to client<->server autoconvert --- sql/field.cc | 2 +- sql/ha_berkeley.cc | 8 +-- sql/ha_innodb.cc | 2 +- sql/ha_myisam.cc | 8 +-- sql/item.cc | 2 +- sql/log_event.cc | 28 +++++----- sql/protocol.cc | 37 ++++++++----- sql/protocol.h | 8 +-- sql/repl_failsafe.cc | 8 +-- sql/slave.cc | 16 +++--- sql/sql_acl.cc | 6 +-- sql/sql_db.cc | 4 +- sql/sql_error.cc | 4 +- sql/sql_help.cc | 12 ++--- sql/sql_repl.cc | 4 +- sql/sql_select.cc | 2 +- sql/sql_show.cc | 123 ++++++++++++++++++++++--------------------- sql/sql_table.cc | 57 ++++++++++---------- 18 files changed, 173 insertions(+), 158 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 133d7a6c21a..0c17209003c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -204,7 +204,7 @@ bool Field::send_binary(Protocol *protocol) char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),charset()); val_str(&tmp,&tmp); - return protocol->store(tmp.ptr(), tmp.length()); + return protocol->store(tmp.ptr(), tmp.length(), tmp.charset()); } diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index cdb5a8c1219..dbed955c0a9 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -257,15 +257,15 @@ int berkeley_show_logs(Protocol *protocol) for (a = all_logs, f = free_logs; *a; ++a) { protocol->prepare_for_resend(); - protocol->store(*a); - protocol->store("BDB", 3); + protocol->store(*a, system_charset_info); + protocol->store("BDB", 3, system_charset_info); if (f && *f && strcmp(*a, *f) == 0) { f++; - protocol->store(SHOW_LOG_STATUS_FREE); + protocol->store(SHOW_LOG_STATUS_FREE, system_charset_info); } else - protocol->store(SHOW_LOG_STATUS_INUSE); + protocol->store(SHOW_LOG_STATUS_INUSE, system_charset_info); if (protocol->write()) { diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 31f9ba483a3..76d57f9b3bb 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -4123,7 +4123,7 @@ innodb_show_status( } protocol->prepare_for_resend(); - protocol->store(buf, strlen(buf)); + protocol->store(buf, strlen(buf), system_charset_info); ut_free(buf); if (protocol->write()) diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 7cd5927bd24..26268f5deaf 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -77,10 +77,10 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type, length=(uint) (strxmov(name, param->db_name,".",param->table_name,NullS) - name); protocol->prepare_for_resend(); - protocol->store(name, length); - protocol->store(param->op_name); - protocol->store(msg_type); - protocol->store(msgbuf, msg_length); + protocol->store(name, length, system_charset_info); + protocol->store(param->op_name, system_charset_info); + protocol->store(msg_type, system_charset_info); + protocol->store(msgbuf, msg_length, system_charset_info); if (protocol->write()) sql_print_error("Failed on my_net_write, writing to stderr instead: %s\n", msgbuf); diff --git a/sql/item.cc b/sql/item.cc index 3c6b85e933b..28fcabfe1b8 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1001,7 +1001,7 @@ bool Item::send(Protocol *protocol, String *buffer) { String *res; if ((res=val_str(buffer))) - result= protocol->store(res->ptr(),res->length()); + result= protocol->store(res->ptr(),res->length(),res->charset()); break; } case MYSQL_TYPE_TINY: diff --git a/sql/log_event.cc b/sql/log_event.cc index 12921eb0c01..a8e215d2b77 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -348,10 +348,10 @@ int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos) log_name = p + 1; protocol->prepare_for_resend(); - protocol->store(log_name); + protocol->store(log_name, system_charset_info); protocol->store((ulonglong) pos); event_type = get_type_str(); - protocol->store(event_type, strlen(event_type)); + protocol->store(event_type, strlen(event_type), system_charset_info); protocol->store((uint32) server_id); protocol->store((ulonglong) log_pos); pack_info(protocol); @@ -722,7 +722,7 @@ void Query_log_event::pack_info(Protocol *protocol) memcpy(pos, query, q_len); pos+= q_len; } - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -992,7 +992,7 @@ void Start_log_event::pack_info(Protocol *protocol) pos= strmov(pos, server_version); pos= strmov(pos, ", Binlog ver: "); pos=int10_to_str(binlog_version, pos, 10); - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); } #endif @@ -1191,7 +1191,7 @@ void Load_log_event::pack_info(Protocol *protocol) *pos++= ')'; } - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -1665,7 +1665,7 @@ void Rotate_log_event::pack_info(Protocol *protocol) b_pos=longlong10_to_str(pos, b_pos, 10); if (flags & LOG_EVENT_FORCED_ROTATE_F) b_pos= strmov(b_pos ,"; forced by master"); - protocol->store(buf, b_pos-buf); + protocol->store(buf, b_pos-buf, system_charset_info); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -1800,7 +1800,7 @@ void Intvar_log_event::pack_info(Protocol *protocol) pos= strmov(buf, get_var_type_name()); *(pos++)='='; pos= longlong10_to_str(val, pos, -10); - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); } #endif @@ -1911,7 +1911,7 @@ void Rand_log_event::pack_info(Protocol *protocol) pos= int10_to_str((long) seed1, pos, 10); pos= strmov(pos, ",rand_seed2="); pos= int10_to_str((long) seed2, pos, 10); - protocol->store(buf1, (uint) (pos-buf1)); + protocol->store(buf1, (uint) (pos-buf1), system_charset_info); } #endif @@ -2013,7 +2013,7 @@ void User_var_log_event::pack_info(Protocol* protocol) buf[0]= '@'; buf[1+name_len]= '='; memcpy(buf+1, name, name_len); - protocol->store(buf, event_len); + protocol->store(buf, event_len, system_charset_info); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif // !MYSQL_CLIENT @@ -2213,7 +2213,7 @@ void Slave_log_event::pack_info(Protocol *protocol) pos= strmov(pos, master_log); pos= strmov(pos, ",pos="); pos= longlong10_to_str(master_pos, pos, 10); - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); } #endif // !MYSQL_CLIENT @@ -2547,7 +2547,7 @@ void Create_file_log_event::pack_info(Protocol *protocol) pos= int10_to_str((long) file_id, pos, 10); pos= strmov(pos, ";block_len="); pos= int10_to_str((long) block_len, pos, 10); - protocol->store(buf, pos-buf); + protocol->store(buf, pos-buf, system_charset_info); } #endif @@ -2698,7 +2698,7 @@ void Append_block_log_event::pack_info(Protocol *protocol) length= (uint) my_sprintf(buf, (buf, ";file_id=%u;block_len=%u", file_id, block_len)); - protocol->store(buf, (int32) length); + protocol->store(buf, (int32) length, system_charset_info); } #endif @@ -2811,7 +2811,7 @@ void Delete_file_log_event::pack_info(Protocol *protocol) char buf[64]; uint length; length= (uint) my_sprintf(buf, (buf, ";file_id=%u", (uint) file_id)); - protocol->store(buf, (int32) length); + protocol->store(buf, (int32) length, system_charset_info); } #endif @@ -2910,7 +2910,7 @@ void Execute_load_log_event::pack_info(Protocol *protocol) char buf[64]; uint length; length= (uint) my_sprintf(buf, (buf, ";file_id=%u", (uint) file_id)); - protocol->store(buf, (int32) length); + protocol->store(buf, (int32) length, system_charset_info); } /***************************************************************************** diff --git a/sql/protocol.cc b/sql/protocol.cc index 454b8bae625..c7ce38eadac 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -528,18 +528,20 @@ bool Protocol::send_fields(List *list, uint flag) while ((item=it++)) { char *pos; + CHARSET_INFO *cs= system_charset_info; Send_field field; item->make_field(&field); prot.prepare_for_resend(); if (thd->client_capabilities & CLIENT_PROTOCOL_41) { - if (prot.store(field.db_name, (uint) strlen(field.db_name)) || - prot.store(field.table_name, (uint) strlen(field.table_name)) || + if (prot.store(field.db_name, (uint) strlen(field.db_name), cs) || + prot.store(field.table_name, (uint) strlen(field.table_name), cs) || prot.store(field.org_table_name, - (uint) strlen(field.org_table_name)) || - prot.store(field.col_name, (uint) strlen(field.col_name)) || - prot.store(field.org_col_name, (uint) strlen(field.org_col_name)) || + (uint) strlen(field.org_table_name), cs) || + prot.store(field.col_name, (uint) strlen(field.col_name), cs) || + prot.store(field.org_col_name, + (uint) strlen(field.org_col_name), cs) || packet->realloc(packet->length()+12)) goto err; /* Store fixed length fields */ @@ -556,8 +558,8 @@ bool Protocol::send_fields(List *list, uint flag) } else { - if (prot.store(field.table_name, (uint) strlen(field.table_name)) || - prot.store(field.col_name, (uint) strlen(field.col_name)) || + if (prot.store(field.table_name, (uint) strlen(field.table_name), cs) || + prot.store(field.col_name, (uint) strlen(field.col_name), cs) || packet->realloc(packet->length()+10)) goto err; pos= (char*) packet->ptr()+packet->length(); @@ -639,12 +641,12 @@ bool Protocol::write() 1 error */ -bool Protocol::store(const char *from) +bool Protocol::store(const char *from, CHARSET_INFO *cs) { if (!from) return store_null(); uint length= strlen(from); - return store(from, length); + return store(from, length, cs); } @@ -668,7 +670,7 @@ bool Protocol::store(I_List* str_list) } if ((len= tmp.length())) len--; // Remove last ',' - return store((char*) tmp.ptr(), len); + return store((char*) tmp.ptr(), len, tmp.charset()); } @@ -701,7 +703,7 @@ bool Protocol_simple::store_null() #endif -bool Protocol_simple::store(const char *from, uint length) +bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || @@ -712,7 +714,16 @@ bool Protocol_simple::store(const char *from, uint length) #endif if (convert) return convert_str(from, length); - return net_store_data(from, length); +#if 0 + if (cs != this->thd->charset()) + { + String tmp; + tmp.copy(from, length, cs, this->thd->charset()); + return net_store_data(tmp.ptr(), tmp.length()); + } + else +#endif + return net_store_data(from, length); } @@ -904,7 +915,7 @@ void Protocol_prep::prepare_for_resend() } -bool Protocol_prep::store(const char *from,uint length) +bool Protocol_prep::store(const char *from,uint length, CHARSET_INFO *cs) { #ifndef DEBUG_OFF DBUG_ASSERT(field_types == 0 || diff --git a/sql/protocol.h b/sql/protocol.h index f57652af670..e9df013e81c 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -52,7 +52,7 @@ public: bool send_fields(List *list, uint flag); bool send_records_num(List *list, ulonglong records); bool store(I_List *str_list); - bool store(const char *from); + bool store(const char *from, CHARSET_INFO *cs); String *storage_packet() { return packet; } inline void free() { packet->free(); } bool write(); @@ -75,7 +75,7 @@ public: virtual bool store_short(longlong from)=0; virtual bool store_long(longlong from)=0; virtual bool store_longlong(longlong from, bool unsigned_flag)=0; - virtual bool store(const char *from, uint length)=0; + virtual bool store(const char *from, uint length, CHARSET_INFO *cs)=0; virtual bool store(float from, uint32 decimals, String *buffer)=0; virtual bool store(double from, uint32 decimals, String *buffer)=0; virtual bool store(TIME *time)=0; @@ -98,7 +98,7 @@ public: virtual bool store_short(longlong from); virtual bool store_long(longlong from); virtual bool store_longlong(longlong from, bool unsigned_flag); - virtual bool store(const char *from, uint length); + virtual bool store(const char *from, uint length, CHARSET_INFO *cs); virtual bool store(TIME *time); virtual bool store_date(TIME *time); virtual bool store_time(TIME *time); @@ -122,7 +122,7 @@ public: virtual bool store_short(longlong from); virtual bool store_long(longlong from); virtual bool store_longlong(longlong from, bool unsigned_flag); - virtual bool store(const char *from,uint length); + virtual bool store(const char *from,uint length, CHARSET_INFO *cs); virtual bool store(TIME *time); virtual bool store_date(TIME *time); virtual bool store_time(TIME *time); diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 3991d9f21f1..7891ff92236 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -440,7 +440,7 @@ int show_new_master(THD* thd) if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(-1); protocol->prepare_for_resend(); - protocol->store(lex_mi->log_file_name); + protocol->store(lex_mi->log_file_name, system_charset_info); protocol->store((ulonglong) lex_mi->pos); if (protocol->write()) DBUG_RETURN(-1); @@ -610,11 +610,11 @@ int show_slave_hosts(THD* thd) SLAVE_INFO* si = (SLAVE_INFO*) hash_element(&slave_list, i); protocol->prepare_for_resend(); protocol->store((uint32) si->server_id); - protocol->store(si->host); + protocol->store(si->host, system_charset_info); if (opt_show_slave_auth_info) { - protocol->store(si->user); - protocol->store(si->password); + protocol->store(si->user, system_charset_info); + protocol->store(si->password, system_charset_info); } protocol->store((uint32) si->port); protocol->store((uint32) si->rpl_recovery_rank); diff --git a/sql/slave.cc b/sql/slave.cc index a5761f7b74e..86c7adc6a7f 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1608,22 +1608,22 @@ int show_master_info(THD* thd, MASTER_INFO* mi) pthread_mutex_lock(&mi->data_lock); pthread_mutex_lock(&mi->rli.data_lock); - protocol->store(mi->host); - protocol->store(mi->user); + protocol->store(mi->host, system_charset_info); + protocol->store(mi->user, system_charset_info); protocol->store((uint32) mi->port); protocol->store((uint32) mi->connect_retry); - protocol->store(mi->master_log_name); + protocol->store(mi->master_log_name, system_charset_info); protocol->store((ulonglong) mi->master_log_pos); protocol->store(mi->rli.relay_log_name + - dirname_length(mi->rli.relay_log_name)); + dirname_length(mi->rli.relay_log_name), system_charset_info); protocol->store((ulonglong) mi->rli.relay_log_pos); - protocol->store(mi->rli.master_log_name); - protocol->store(mi->slave_running ? "Yes":"No"); - protocol->store(mi->rli.slave_running ? "Yes":"No"); + protocol->store(mi->rli.master_log_name, system_charset_info); + protocol->store(mi->slave_running ? "Yes":"No", system_charset_info); + protocol->store(mi->rli.slave_running ? "Yes":"No", system_charset_info); protocol->store(&replicate_do_db); protocol->store(&replicate_ignore_db); protocol->store((uint32) mi->rli.last_slave_errno); - protocol->store(mi->rli.last_slave_error); + protocol->store(mi->rli.last_slave_error, system_charset_info); protocol->store((uint32) mi->rli.slave_skip_counter); protocol->store((ulonglong) mi->rli.master_log_pos); protocol->store((ulonglong) mi->rli.log_space_total); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index fe443f6c882..5f8f71e1bd4 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2954,7 +2954,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user) } } protocol->prepare_for_resend(); - protocol->store(global.ptr(),global.length()); + protocol->store(global.ptr(),global.length(),global.charset()); if (protocol->write()) { error=-1; @@ -3012,7 +3012,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user) if (want_access & GRANT_ACL) db.append(" WITH GRANT OPTION",18); protocol->prepare_for_resend(); - protocol->store(db.ptr(),db.length()); + protocol->store(db.ptr(),db.length(),db.charset()); if (protocol->write()) { error=-1; @@ -3100,7 +3100,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user) if (want_access & GRANT_ACL) global.append(" WITH GRANT OPTION",18); protocol->prepare_for_resend(); - protocol->store(global.ptr(),global.length()); + protocol->store(global.ptr(),global.length(),global.charset()); if (protocol->write()) { error= -1; diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 99763d717fe..03ccf88316c 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -671,7 +671,7 @@ int mysqld_show_create_db(THD *thd, char *dbname, DBUG_RETURN(1); protocol->prepare_for_resend(); - protocol->store(dbname, strlen(dbname)); + protocol->store(dbname, strlen(dbname), system_charset_info); to= strxmov(path, "CREATE DATABASE ", NullS); if (create_options & HA_LEX_CREATE_IF_NOT_EXISTS) to= strxmov(to,"/*!32312 IF NOT EXISTS*/ ", NullS); @@ -685,7 +685,7 @@ int mysqld_show_create_db(THD *thd, char *dbname, cl ? " COLLATE " : "", cl ? create.table_charset->name : "", " */",NullS); } - protocol->store(path, (uint) (to-path)); + protocol->store(path, (uint) (to-path), system_charset_info); if (protocol->write()) DBUG_RETURN(1); diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 5508be5167a..00c80a654cb 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -180,9 +180,9 @@ my_bool mysqld_show_warnings(THD *thd, ulong levels_to_show) } protocol->prepare_for_resend(); protocol->store(warning_level_names[err->level], - warning_level_length[err->level]); + warning_level_length[err->level], system_charset_info); protocol->store((uint32) err->code); - protocol->store(err->msg, strlen(err->msg)); + protocol->store(err->msg, strlen(err->msg), system_charset_info); if (protocol->write()) DBUG_RETURN(1); if (!--limit) diff --git a/sql/sql_help.cc b/sql/sql_help.cc index def36665fb5..36c7ef87b17 100644 --- a/sql/sql_help.cc +++ b/sql/sql_help.cc @@ -201,8 +201,8 @@ int send_variant_2_list(Protocol *protocol, List *names, while ((cur_name= it++)) { protocol->prepare_for_resend(); - protocol->store(cur_name); - protocol->store(cat); + protocol->store(cur_name, system_charset_info); + protocol->store(cat, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -317,10 +317,10 @@ int send_answer_1(Protocol *protocol, const char *s1, const char *s2, DBUG_RETURN(1); protocol->prepare_for_resend(); - protocol->store(s1); - protocol->store(s2); - protocol->store(s3); - protocol->store(s4); + protocol->store(s1, system_charset_info); + protocol->store(s2, system_charset_info); + protocol->store(s3, system_charset_info); + protocol->store(s4, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); DBUG_RETURN(0); diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index dfb4f8fd303..12c1a4b0ee8 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -1103,7 +1103,7 @@ int show_binlog_info(THD* thd) LOG_INFO li; mysql_bin_log.get_current_log(&li); int dir_len = dirname_length(li.log_file_name); - protocol->store(li.log_file_name + dir_len); + protocol->store(li.log_file_name + dir_len, system_charset_info); protocol->store((ulonglong) li.pos); protocol->store(&binlog_do_db); protocol->store(&binlog_ignore_db); @@ -1160,7 +1160,7 @@ int show_binlogs(THD* thd) protocol->prepare_for_resend(); int dir_len = dirname_length(fname); /* The -1 is for removing newline from fname */ - protocol->store(fname + dir_len, length-1-dir_len); + protocol->store(fname + dir_len, length-1-dir_len, system_charset_info); if (protocol->write()) goto err; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index f92e9804973..a78a8a9d613 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7687,7 +7687,7 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array, if (_db_on_ && !item_field->name) { char buff[256]; - String str(buff,sizeof(buff),default_charset_info); + String str(buff,sizeof(buff),&my_charset_bin); str.length(0); item->print(&str); item_field->name= sql_strmake(str.ptr(),str.length()); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 9c2280768da..d96d24c1613 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -85,7 +85,7 @@ mysqld_show_dbs(THD *thd,const char *wild) (grant_option && !check_grant_db(thd, file_name))) { protocol->prepare_for_resend(); - protocol->store(file_name); + protocol->store(file_name, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -120,8 +120,8 @@ int mysqld_show_open_tables(THD *thd,const char *wild) for (; open_list ; open_list=open_list->next) { protocol->prepare_for_resend(); - protocol->store(open_list->db); - protocol->store(open_list->table); + protocol->store(open_list->db, system_charset_info); + protocol->store(open_list->table, system_charset_info); protocol->store_tiny((longlong) open_list->in_use); protocol->store_tiny((longlong) open_list->locked); if (protocol->write()) @@ -166,7 +166,7 @@ int mysqld_show_tables(THD *thd,const char *db,const char *wild) while ((file_name=it++)) { protocol->prepare_for_resend(); - protocol->store(file_name); + protocol->store(file_name, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -225,14 +225,14 @@ int mysqld_show_table_types(THD *thd) for (types= sys_table_types; types->type; types++) { protocol->prepare_for_resend(); - protocol->store(types->type); + protocol->store(types->type, system_charset_info); const char *option_name= show_comp_option_name[(int) *types->value]; if (*types->value == SHOW_OPTION_YES && !my_strcasecmp(system_charset_info, default_type_name, types->type)) option_name= "DEFAULT"; - protocol->store(option_name); - protocol->store(types->comment); + protocol->store(option_name, system_charset_info); + protocol->store(types->comment, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -292,9 +292,9 @@ int mysqld_show_privileges(THD *thd) for (privilege= sys_privileges; privilege->privilege ; privilege++) { protocol->prepare_for_resend(); - protocol->store(privilege->privilege); - protocol->store(privilege->context); - protocol->store(privilege->comment); + protocol->store(privilege->privilege, system_charset_info); + protocol->store(privilege->context, system_charset_info); + protocol->store(privilege->comment, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -367,20 +367,20 @@ int mysqld_show_column_types(THD *thd) for (uint i=0; i < sizeof(sys_column_types)/sizeof(sys_column_types[0]); i++) { protocol->prepare_for_resend(); - protocol->store(sys_column_types[i].type); + protocol->store(sys_column_types[i].type, system_charset_info); protocol->store((ulonglong) sys_column_types[i].size); - protocol->store(sys_column_types[i].min_value); - protocol->store(sys_column_types[i].max_value); + protocol->store(sys_column_types[i].min_value, system_charset_info); + protocol->store(sys_column_types[i].max_value, system_charset_info); protocol->store_short((longlong) sys_column_types[i].precision); protocol->store_short((longlong) sys_column_types[i].scale); - protocol->store(sys_column_types[i].nullable); - protocol->store(sys_column_types[i].auto_increment); - protocol->store(sys_column_types[i].unsigned_attr); - protocol->store(sys_column_types[i].zerofill); - protocol->store(sys_column_types[i].searchable); - protocol->store(sys_column_types[i].case_sensitivity); - protocol->store(sys_column_types[i].default_value); - protocol->store(sys_column_types[i].comment); + protocol->store(sys_column_types[i].nullable, system_charset_info); + protocol->store(sys_column_types[i].auto_increment, system_charset_info); + protocol->store(sys_column_types[i].unsigned_attr, system_charset_info); + protocol->store(sys_column_types[i].zerofill, system_charset_info); + protocol->store(sys_column_types[i].searchable, system_charset_info); + protocol->store(sys_column_types[i].case_sensitivity, system_charset_info); + protocol->store(sys_column_types[i].default_value, system_charset_info); + protocol->store(sys_column_types[i].comment, system_charset_info); if (protocol->write()) DBUG_RETURN(-1); } @@ -524,7 +524,7 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) TABLE_LIST table_list; bzero((char*) &table_list,sizeof(table_list)); protocol->prepare_for_resend(); - protocol->store(file_name); + protocol->store(file_name, system_charset_info); table_list.db=(char*) db; table_list.real_name= table_list.alias= file_name; if (lower_case_table_names) @@ -534,7 +534,7 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) for (uint i=2 ; i < field_list.elements ; i++) protocol->store_null(); // Send error to Comment field - protocol->store(thd->net.last_error); + protocol->store(thd->net.last_error, system_charset_info); thd->net.last_error[0]=0; } else @@ -543,12 +543,12 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) const char *str; handler *file=table->file; file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_NO_LOCK); - protocol->store(file->table_type()); + protocol->store(file->table_type(), system_charset_info); str= ((table->db_options_in_use & HA_OPTION_COMPRESS_RECORD) ? "Compressed" : (table->db_options_in_use & HA_OPTION_PACK_RECORD) ? "Dynamic" : "Fixed"); - protocol->store(str); + protocol->store(str, system_charset_info); protocol->store((ulonglong) file->records); protocol->store((ulonglong) file->mean_rec_length); protocol->store((ulonglong) file->data_file_length); @@ -593,7 +593,7 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) protocol->store(&time); } str= (table->table_charset ? table->table_charset->name : "default"); - protocol->store(str); + protocol->store(str, system_charset_info); { char option_buff[350],*ptr; ptr=option_buff; @@ -631,11 +631,12 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) ptr=strmov(ptr,buff); } protocol->store(option_buff+1, - (ptr == option_buff ? 0 : (uint) (ptr-option_buff)-1)); + (ptr == option_buff ? 0 : (uint) (ptr-option_buff)-1) + , system_charset_info); } { char *comment=table->file->update_table_comment(table->comment); - protocol->store(comment); + protocol->store(comment, system_charset_info); if (comment != table->comment) my_free(comment,MYF(0)); } @@ -710,43 +711,43 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, { byte *pos; uint flags=field->flags; - String type(tmp,sizeof(tmp),current_thd->variables.thd_charset); + String type(tmp,sizeof(tmp), system_charset_info); uint col_access; bool null_default_value=0; protocol->prepare_for_resend(); - protocol->store(field->field_name); + protocol->store(field->field_name, system_charset_info); field->sql_type(type); - protocol->store(type.ptr(), type.length()); - protocol->store(field->charset()->name); + protocol->store(type.ptr(), type.length(), system_charset_info); + protocol->store(field->charset()->name, system_charset_info); pos=(byte*) ((flags & NOT_NULL_FLAG) && field->type() != FIELD_TYPE_TIMESTAMP ? "" : "YES"); - protocol->store((const char*) pos); + protocol->store((const char*) pos, system_charset_info); pos=(byte*) ((field->flags & PRI_KEY_FLAG) ? "PRI" : (field->flags & UNIQUE_KEY_FLAG) ? "UNI" : (field->flags & MULTIPLE_KEY_FLAG) ? "MUL":""); - protocol->store((char*) pos); + protocol->store((char*) pos, system_charset_info); if (field->type() == FIELD_TYPE_TIMESTAMP || field->unireg_check == Field::NEXT_NUMBER) null_default_value=1; if (!null_default_value && !field->is_null()) { // Not null by default - type.set(tmp,sizeof(tmp),&my_charset_bin); + type.set(tmp,sizeof(tmp),system_charset_info); field->val_str(&type,&type); - protocol->store(type.ptr(),type.length()); + protocol->store(type.ptr(),type.length(),type.charset()); } else if (field->maybe_null() || null_default_value) protocol->store_null(); // Null as default else - protocol->store("",0); // empty string + protocol->store("",0, system_charset_info); // empty string char *end=tmp; if (field->unireg_check == Field::NEXT_NUMBER) end=strmov(tmp,"auto_increment"); - protocol->store(tmp,(uint) (end-tmp)); + protocol->store(tmp,(uint) (end-tmp), system_charset_info); if (verbose) { @@ -761,8 +762,10 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, end=strmov(end,grant_types.type_names[bitnr]); } } - protocol->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1)); - protocol->store(field->comment.str, field->comment.length); + protocol->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1), + system_charset_info); + protocol->store(field->comment.str, field->comment.length, + system_charset_info); } if (protocol->write()) DBUG_RETURN(1); @@ -799,11 +802,11 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(1); protocol->prepare_for_resend(); - protocol->store(table->table_name); + protocol->store(table->table_name, system_charset_info); buffer.length(0); if (store_create_info(thd, table, &buffer)) DBUG_RETURN(-1); - protocol->store(buffer.ptr(), buffer.length()); + protocol->store(buffer.ptr(), buffer.length(), buffer.charset()); if (protocol->write()) DBUG_RETURN(1); send_eof(thd); @@ -884,16 +887,16 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) for (uint j=0 ; j < key_info->key_parts ; j++,key_part++) { protocol->prepare_for_resend(); - protocol->store(table->table_name); + protocol->store(table->table_name, system_charset_info); protocol->store_tiny((longlong) ((key_info->flags & HA_NOSAME) ? 0 :1)); - protocol->store(key_info->name); + protocol->store(key_info->name, system_charset_info); protocol->store_tiny((longlong) (j+1)); str=(key_part->field ? key_part->field->field_name : "?unknown field?"); - protocol->store(str); + protocol->store(str, system_charset_info); if (table->file->index_flags(i) & HA_READ_ORDER) protocol->store(((key_part->key_part_flag & HA_REVERSE_SORT) ? - "D" : "A"), 1); + "D" : "A"), 1, system_charset_info); else protocol->store_null(); /* purecov: inspected */ KEY *key=table->key_info+i; @@ -917,8 +920,8 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) /* Null flag */ uint flags= key_part->field ? key_part->field->flags : 0; char *pos=(char*) ((flags & NOT_NULL_FLAG) ? "" : "YES"); - protocol->store((const char*) pos); - protocol->store(table->file->index_type(i)); + protocol->store((const char*) pos, system_charset_info); + protocol->store(table->file->index_type(i), system_charset_info); /* Comment */ protocol->store("", 0); if (protocol->write()) @@ -1379,19 +1382,19 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) { protocol->prepare_for_resend(); protocol->store((ulonglong) thd_info->thread_id); - protocol->store(thd_info->user); - protocol->store(thd_info->host); - protocol->store(thd_info->db); + protocol->store(thd_info->user, system_charset_info); + protocol->store(thd_info->host, system_charset_info); + protocol->store(thd_info->db, system_charset_info); if (thd_info->proc_info) - protocol->store(thd_info->proc_info); + protocol->store(thd_info->proc_info, system_charset_info); else - protocol->store(command_name[thd_info->command]); + protocol->store(command_name[thd_info->command], system_charset_info); if (thd_info->start_time) protocol->store((uint32) (now - thd_info->start_time)); else protocol->store_null(); - protocol->store(thd_info->state_info); - protocol->store(thd_info->query); + protocol->store(thd_info->state_info, system_charset_info); + protocol->store(thd_info->query, system_charset_info); if (protocol->write()) break; /* purecov: inspected */ } @@ -1430,13 +1433,13 @@ int mysqld_show_charsets(THD *thd, const char *wild) wild_case_compare(system_charset_info,cs[0]->name,wild))) { protocol->prepare_for_resend(); - protocol->store(cs[0]->csname); - protocol->store(cs[0]->name); + protocol->store(cs[0]->csname, system_charset_info); + protocol->store(cs[0]->name, system_charset_info); protocol->store_short((longlong) cs[0]->number); flags[0]='\0'; if (cs[0]->state & MY_CS_PRIMARY) strcat(flags,"pri"); - protocol->store(flags); + protocol->store(flags, system_charset_info); protocol->store_tiny((longlong) cs[0]->strxfrm_multiply); protocol->store_tiny((longlong) cs[0]->mbmaxlen); if (protocol->write()) @@ -1472,7 +1475,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, variables->name,wild))) { protocol->prepare_for_resend(); - protocol->store(variables->name); + protocol->store(variables->name, system_charset_info); SHOW_TYPE show_type=variables->type; char *value=variables->value; const char *pos, *end; @@ -1718,7 +1721,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, default: break; } - if (protocol->store(pos, (uint32) (end - pos)) || + if (protocol->store(pos, (uint32) (end - pos), system_charset_info) || protocol->write()) goto err; /* purecov: inspected */ } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index a8428d4f3da..0033451a439 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1108,10 +1108,10 @@ static int send_check_errmsg(THD *thd, TABLE_LIST* table, { Protocol *protocol= thd->protocol; protocol->prepare_for_resend(); - protocol->store(table->alias); - protocol->store((char*) operator_name); - protocol->store("error", 5); - protocol->store(errmsg); + protocol->store(table->alias, system_charset_info); + protocol->store((char*) operator_name, system_charset_info); + protocol->store("error", 5, system_charset_info); + protocol->store(errmsg, system_charset_info); thd->net.last_error[0]=0; if (protocol->write()) return -1; @@ -1301,12 +1301,12 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, { const char *err_msg; protocol->prepare_for_resend(); - protocol->store(table_name); - protocol->store(operator_name); - protocol->store("error",5); + protocol->store(table_name, system_charset_info); + protocol->store(operator_name, system_charset_info); + protocol->store("error",5, system_charset_info); if (!(err_msg=thd->net.last_error)) err_msg=ER(ER_CHECK_NO_SUCH_TABLE); - protocol->store(err_msg); + protocol->store(err_msg, system_charset_info); thd->net.last_error[0]=0; if (protocol->write()) goto err; @@ -1316,11 +1316,11 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, { char buff[FN_REFLEN + MYSQL_ERRMSG_SIZE]; protocol->prepare_for_resend(); - protocol->store(table_name); - protocol->store(operator_name); - protocol->store("error", 5); + protocol->store(table_name, system_charset_info); + protocol->store(operator_name, system_charset_info); + protocol->store("error", 5, system_charset_info); sprintf(buff, ER(ER_OPEN_AS_READONLY), table_name); - protocol->store(buff); + protocol->store(buff, system_charset_info); close_thread_tables(thd); table->table=0; // For query cache if (protocol->write()) @@ -1355,8 +1355,8 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, thd->net.last_errno= 0; // these errors shouldn't get client #endif protocol->prepare_for_resend(); - protocol->store(table_name); - protocol->store(operator_name); + protocol->store(table_name, system_charset_info); + protocol->store(operator_name, system_charset_info); switch (result_code) { case HA_ADMIN_NOT_IMPLEMENTED: @@ -1364,40 +1364,41 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, char buf[ERRMSGSIZE+20]; uint length=my_snprintf(buf, ERRMSGSIZE, ER(ER_CHECK_NOT_IMPLEMENTED), operator_name); - protocol->store("error", 5); - protocol->store(buf, length); + protocol->store("error", 5, system_charset_info); + protocol->store(buf, length, system_charset_info); } break; case HA_ADMIN_OK: - protocol->store("status", 6); - protocol->store("OK",2); + protocol->store("status", 6, system_charset_info); + protocol->store("OK",2, system_charset_info); break; case HA_ADMIN_FAILED: - protocol->store("status", 6); - protocol->store("Operation failed",16); + protocol->store("status", 6, system_charset_info); + protocol->store("Operation failed",16, system_charset_info); break; case HA_ADMIN_ALREADY_DONE: - protocol->store("status", 6); - protocol->store("Table is already up to date", 27); + protocol->store("status", 6, system_charset_info); + protocol->store("Table is already up to date", 27, system_charset_info); break; case HA_ADMIN_CORRUPT: - protocol->store("error", 5); - protocol->store("Corrupt", 8); + protocol->store("error", 5, system_charset_info); + protocol->store("Corrupt", 8, system_charset_info); fatal_error=1; break; case HA_ADMIN_INVALID: - protocol->store("error", 5); - protocol->store("Invalid argument",16); + protocol->store("error", 5, system_charset_info); + protocol->store("Invalid argument",16, system_charset_info); break; default: // Probably HA_ADMIN_INTERNAL_ERROR - protocol->store("error", 5); - protocol->store("Unknown - internal error during operation", 41); + protocol->store("error", 5, system_charset_info); + protocol->store("Unknown - internal error during operation", 41 + , system_charset_info); fatal_error=1; break; } From 61ca875e7b14b5d91db1e6f07e4d13d3ba119a7a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 13:40:40 +0400 Subject: [PATCH 185/267] sql_string.cc: Copy as is if src or dst are binary sql/sql_string.cc: Copy as is if src or dst are binary --- sql/sql_string.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/sql_string.cc b/sql/sql_string.cc index b6425003af3..d796c53fb52 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -232,6 +232,10 @@ bool String::copy(const char *str,uint32 arg_length, CHARSET_INFO *cs) bool String::copy(const char *str, uint32 arg_length, CHARSET_INFO *from_cs, CHARSET_INFO *to_cs) { + if ((from_cs == &my_charset_bin) || (to_cs == &my_charset_bin)) + { + return copy(str, arg_length, &my_charset_bin); + } uint32 new_length= to_cs->mbmaxlen*arg_length; if (alloc(new_length)) return TRUE; From b0b315dce3d961e5b29830dfafdff6bc4e58aaa0 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 15:05:04 +0200 Subject: [PATCH 186/267] After merge fixes Don't create temporary objects with no table name myisam/mi_open.c: After merge fix mysql-test/r/analyse.result: After merge fix mysql-test/r/backup.result: After merge fix mysql-test/r/create.result: After merge fix mysql-test/r/delete.result: After merge fix mysql-test/r/func_like.result: After merge fix mysql-test/r/innodb.result: After merge fix mysql-test/r/rpl_loaddatalocal.result: After merge fix mysql-test/r/type_timestamp.result: After merge fix mysql-test/t/delete.test: Change to not use table 't' sql/sql_class.h: Remove usage of thd when creating 'Table_ident' Don't create temporary objects with no table name sql/sql_derived.cc: Indentation fix sql/sql_select.cc: After merge fix Fixed wrong return -> DBUG_RETURN() sql/sql_yacc.yy: Remove usage of thd when creating 'Table_ident' --- myisam/mi_open.c | 4 +-- mysql-test/r/analyse.result | 17 ++++++++++-- mysql-test/r/backup.result | 39 +++++++++++++++------------ mysql-test/r/create.result | 2 ++ mysql-test/r/delete.result | 8 +++--- mysql-test/r/func_like.result | 8 +++--- mysql-test/r/innodb.result | 3 +++ mysql-test/r/rpl_loaddatalocal.result | 4 +-- mysql-test/r/type_timestamp.result | 4 +-- mysql-test/t/delete.test | 8 +++--- sql/sql_class.h | 9 ++++--- sql/sql_derived.cc | 6 +++-- sql/sql_select.cc | 4 +-- sql/sql_yacc.yy | 5 ++-- 14 files changed, 75 insertions(+), 46 deletions(-) diff --git a/myisam/mi_open.c b/myisam/mi_open.c index 26c8e503c28..a2602abea5d 100644 --- a/myisam/mi_open.c +++ b/myisam/mi_open.c @@ -297,7 +297,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) for (i=0 ; i < keys ; i++) { disk_pos=mi_keydef_read(disk_pos, &share->keyinfo[i]); - disk_pos_assert(disk_pos + share->keyinfo[i].keysegs * MI_KEYSEG_SIZE, + disk_pos_assert(disk_pos + share->keyinfo[i].keysegs * HA_KEYSEG_SIZE, end_pos); if (share->keyinfo[i].key_alg == HA_KEY_ALG_RTREE) have_rtree=1; @@ -373,7 +373,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) { disk_pos=mi_uniquedef_read(disk_pos, &share->uniqueinfo[i]); disk_pos_assert(disk_pos + share->uniqueinfo[i].keysegs * - MI_KEYSEG_SIZE, end_pos); + HA_KEYSEG_SIZE, end_pos); share->uniqueinfo[i].seg=pos; for (j=0 ; j < share->uniqueinfo[i].keysegs; j++,pos++) { diff --git a/mysql-test/r/analyse.result b/mysql-test/r/analyse.result index 48882f42219..60764494417 100644 --- a/mysql-test/r/analyse.result +++ b/mysql-test/r/analyse.result @@ -1,6 +1,6 @@ drop table if exists t1,t2; -create table t1 (i int, j int); -insert into t1 values (1,2), (3,4), (5,6), (7,8); +create table t1 (i int, j int, empty_string char(10), bool char(1), d date); +insert into t1 values (1,2,"","Y","2002-03-03"), (3,4,"","N","2002-03-04"), (5,6,"","Y","2002-03-04"), (7,8,"","N","2002-03-05"); select count(*) from t1 procedure analyse(); Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype count(*) 4 4 1 1 0 0 4.0000 0.0000 ENUM('4') NOT NULL @@ -8,11 +8,24 @@ select * from t1 procedure analyse(); Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL +select * from t1 procedure analyse(2); +Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype +t1.i 1 7 1 1 0 0 4.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.j 2 8 1 1 0 0 5.0000 2.2361 TINYINT(1) UNSIGNED NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL create table t2 select * from t1 procedure analyse(); select * from t2; Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL t1.j 2 8 1 1 0 0 5.0000 2.2361 ENUM('2','4','6','8') NOT NULL +t1.empty_string 0 0 4 0 0.0000 NULL CHAR(0) NOT NULL +t1.bool N Y 1 1 0 0 1.0000 NULL ENUM('N','Y') NOT NULL +t1.d 2002-03-03 2002-03-05 10 10 0 0 10.0000 NULL ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL drop table t1,t2; EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(); id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/backup.result b/mysql-test/r/backup.result index e4f41517f94..e53c3c3eb55 100644 --- a/mysql-test/r/backup.result +++ b/mysql-test/r/backup.result @@ -1,20 +1,25 @@ set SQL_LOG_BIN=0; drop table if exists t1, t2, t3; -create table t1(n int); -backup table t1 to '../bogus'; +create table t4(n int); +backup table t4 to '../bogus'; Table Op Msg_type Msg_text -test.t1 backup error Failed copying .frm file: errno = X -test.t1 backup status Operation failed -backup table t1 to '../tmp'; +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed +backup table t4 to '../tmp'; Table Op Msg_type Msg_text -test.t1 backup status OK -drop table t1; -restore table t1 from '../tmp'; +test.t4 backup status OK +backup table t4 to '../tmp'; Table Op Msg_type Msg_text -test.t1 restore status OK -select count(*) from t1; +test.t4 backup error Failed copying .frm file (errno: X) +test.t4 backup status Operation failed +drop table t4; +restore table t4 from '../tmp'; +Table Op Msg_type Msg_text +test.t4 restore status OK +select count(*) from t4; count(*) 0 +create table t1(n int); insert into t1 values (23),(45),(67); backup table t1 to '../tmp'; Table Op Msg_type Msg_text @@ -35,9 +40,8 @@ create table t2(m int not null primary key); create table t3(k int not null primary key); insert into t2 values (123),(145),(167); insert into t3 values (223),(245),(267); -backup table t1,t2,t3 to '../tmp'; +backup table t2,t3 to '../tmp'; Table Op Msg_type Msg_text -test.t1 backup status OK test.t2 backup status OK test.t3 backup status OK drop table t1,t2,t3; @@ -61,13 +65,14 @@ k 223 245 267 -drop table t1,t2,t3; +drop table t1,t2,t3,t4; restore table t1 from '../tmp'; Table Op Msg_type Msg_text test.t1 restore status OK -lock tables t1 write; -backup table t1 to '../tmp'; +rename table t1 to t5; +lock tables t5 write; +backup table t5 to '../tmp'; unlock tables; Table Op Msg_type Msg_text -test.t1 backup status OK -drop table t1; +test.t5 backup status OK +drop table t5; diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index 2ec2759ad7a..e061a78304f 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -69,6 +69,8 @@ Incorrect table name '' create table t1 (`` int); Incorrect column name '' drop table if exists t1; +Warnings: +Note 1051 Unknown table 't1' create table t1 (a int auto_increment not null primary key, B CHAR(20)); insert into t1 (b) values ("hello"),("my"),("world"); create table t2 (key (b)) select * from t1; diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result index ee0c3ce1219..ae216f9b380 100644 --- a/mysql-test/r/delete.result +++ b/mysql-test/r/delete.result @@ -24,14 +24,14 @@ create table t1 (a bigint not null, primary key (a,a,a,a,a,a,a,a,a,a)); insert into t1 values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27); delete from t1 where a=27; drop table t1; -CREATE TABLE `t` ( +CREATE TABLE `t1` ( `i` int(10) NOT NULL default '0', `i2` int(10) NOT NULL default '0', PRIMARY KEY (`i`) -) TYPE=MyISAM CHARSET=latin1; -DELETE FROM t USING t WHERE post='1'; +); +DELETE FROM t1 USING t1 WHERE post='1'; Unknown column 'post' in 'where clause' -drop table if exists t; +drop table t1; CREATE TABLE t1 ( bool char(0) default NULL, not_null varchar(20) binary NOT NULL default '', diff --git a/mysql-test/r/func_like.result b/mysql-test/r/func_like.result index f923c16b2ac..f90e694f5f0 100644 --- a/mysql-test/r/func_like.result +++ b/mysql-test/r/func_like.result @@ -2,11 +2,11 @@ drop table if exists t1; create table t1 (a varchar(10), key(a)); insert into t1 values ("a"),("abc"),("abcd"),("hello"),("test"); explain select * from t1 where a like 'abc%'; -table type possible_keys key key_len ref rows Extra -t1 range a a 11 NULL 1 Using where; Using index +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 11 NULL 1 Using where; Using index explain select * from t1 where a like concat('abc','%'); -table type possible_keys key key_len ref rows Extra -t1 range a a 11 NULL 1 Using where; Using index +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 11 NULL 1 Using where; Using index select * from t1 where a like "abc%"; a abc diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 0021be10d85..fd80ef785ea 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1074,6 +1074,9 @@ select * from t2; id t1_id drop table t1,t2; DROP TABLE IF EXISTS t1,t2; +Warnings: +Note 1051 Unknown table 't1' +Note 1051 Unknown table 't2' CREATE TABLE t1(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB; CREATE TABLE t2(id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id) ) TYPE=INNODB; INSERT INTO t1 VALUES(1); diff --git a/mysql-test/r/rpl_loaddatalocal.result b/mysql-test/r/rpl_loaddatalocal.result index dc98b1b5bfb..b49ea842485 100644 --- a/mysql-test/r/rpl_loaddatalocal.result +++ b/mysql-test/r/rpl_loaddatalocal.result @@ -1,9 +1,9 @@ -slave stop; +stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; -slave start; +start slave; create table t1(a int); select * into outfile '../../var/master-data/rpl_loaddatalocal.select_outfile' from t1; truncate table t1; diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index 959c69ff6e7..0c75155146d 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -96,8 +96,8 @@ insert t1 values (0,0,0,0,0,0,0), "1997-12-31 23:47:59"); select * from t1; t2 t4 t6 t8 t10 t12 t14 -00 0000 000000 00000000 0000000000 000000000000 00000000000000 -97 9712 971231 19971231 9712312347 971231234759 19971231234759 +0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 +1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 1997-12-31 23:47:59 set new=1; select * from t1; t2 t4 t6 t8 t10 t12 t14 diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test index af047db04bd..91216ff9c3a 100644 --- a/mysql-test/t/delete.test +++ b/mysql-test/t/delete.test @@ -38,14 +38,14 @@ insert into t1 values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(2 delete from t1 where a=27; drop table t1; -CREATE TABLE `t` ( +CREATE TABLE `t1` ( `i` int(10) NOT NULL default '0', `i2` int(10) NOT NULL default '0', PRIMARY KEY (`i`) -) TYPE=MyISAM CHARSET=latin1; +); -- error 1054 -DELETE FROM t USING t WHERE post='1'; -drop table if exists t; +DELETE FROM t1 USING t1 WHERE post='1'; +drop table t1; # # CHAR(0) bug - not actually DELETE bug, but anyway... diff --git a/sql/sql_class.h b/sql/sql_class.h index 079c095b2f5..44082aa897e 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -680,6 +680,7 @@ public: { is_fatal_error= 1; net.report_error= 1; + DBUG_PRINT("error",("Fatal error set")); } inline CHARSET_INFO *charset() { return variables.thd_charset; } }; @@ -907,10 +908,11 @@ class Table_ident :public Sql_alloc LEX_STRING db; LEX_STRING table; SELECT_LEX_UNIT *sel; - inline Table_ident(LEX_STRING db_arg, LEX_STRING table_arg, bool force) + inline Table_ident(THD *thd, LEX_STRING db_arg, LEX_STRING table_arg, + bool force) :table(table_arg), sel((SELECT_LEX_UNIT *)0) { - if (!force && (current_thd->client_capabilities & CLIENT_NO_SCHEMA)) + if (!force && (thd->client_capabilities & CLIENT_NO_SCHEMA)) db.str=0; else db= db_arg; @@ -922,7 +924,8 @@ class Table_ident :public Sql_alloc } inline Table_ident(SELECT_LEX_UNIT *s) : sel(s) { - db.str=0; table.str=(char *)""; table.length=0; + /* We must have a table name here as this is used with add_table_to_list */ + db.str=0; table.str=(char *)"*"; table.length=1; } inline void change_db(char *db_name) { diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index f2cddeead2f..ca761140955 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -167,11 +167,13 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, (TABLE_LIST*) select_cursor->table_list.first, select_cursor->with_wild, select_cursor->item_list, select_cursor->where, - select_cursor->order_list.elements+select_cursor->group_list.elements, + (select_cursor->order_list.elements+ + select_cursor->group_list.elements), (ORDER *) select_cursor->order_list.first, (ORDER *) select_cursor->group_list.first, select_cursor->having, (ORDER*) NULL, - select_cursor->options | thd->options | SELECT_NO_UNLOCK, + (select_cursor->options | thd->options | + SELECT_NO_UNLOCK), derived_result, unit, select_cursor, 1); if (!res) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 50c666ab64e..987857fd61b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1275,7 +1275,7 @@ JOIN::cleanup(THD *thd) } } tmp_join->tmp_join= 0; - return tmp_join->cleanup(thd); + DBUG_RETURN(tmp_join->cleanup(thd)); } @@ -3812,7 +3812,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) } } if (should_fix_fields) - cond->fix_fields(current_thd,0); + cond->fix_fields(current_thd,0, &cond); if (!((Item_cond*) cond)->argument_list()->elements || *cond_value != Item::COND_OK) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 7db398e7810..fe420549a59 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3399,7 +3399,8 @@ table_wild_one: } | ident '.' ident opt_wild opt_table_alias { - if (!Select->add_table_to_list(YYTHD, new Table_ident($1, $3, 0), + if (!Select->add_table_to_list(YYTHD, + new Table_ident(YYTHD, $1, $3, 0), $5, TL_OPTION_UPDATING, Lex->lock_option)) YYABORT; @@ -3953,7 +3954,7 @@ field_ident: table_ident: ident { $$=new Table_ident($1); } - | ident '.' ident { $$=new Table_ident($1,$3,0);} + | ident '.' ident { $$=new Table_ident(YYTHD, $1,$3,0);} | '.' ident { $$=new Table_ident($2);} /* For Delphi */; From d2387b1ac7232e8f34f6a738250f448916bfd23c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 17:30:34 +0400 Subject: [PATCH 187/267] sql_show.cc: Bug fix 0 stayed for length here, now it is charset. sql/sql_show.cc: Bug fix --- sql/sql_show.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index d96d24c1613..5db7d2f1406 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -923,7 +923,7 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) protocol->store((const char*) pos, system_charset_info); protocol->store(table->file->index_type(i), system_charset_info); /* Comment */ - protocol->store("", 0); + protocol->store("", system_charset_info); if (protocol->write()) DBUG_RETURN(1); /* purecov: inspected */ } From 440cb76f8e77d7476d8f45ae45adf70a538345ac Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 15:50:56 +0200 Subject: [PATCH 188/267] Fixed a bug in --one-database. --- client/mysql.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/mysql.cc b/client/mysql.cc index da52fb54e7d..6c8b7c8eb7b 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -40,7 +40,7 @@ #include #include -const char *VER= "12.18"; +const char *VER= "12.19"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 @@ -766,6 +766,7 @@ static int get_options(int argc, char **argv) } if (argc == 1) { + skip_updates= 0; my_free(current_db, MYF(MY_ALLOW_ZERO_PTR)); current_db= my_strdup(*argv, MYF(MY_WME)); } From b1a78e2ae0dfe24d17e0a5a6cd763ba6d85ee810 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 19:06:14 +0200 Subject: [PATCH 189/267] Change dbug.h -> my_dbug.h (Portability fix) Ensure that \ is not allowed in filenames, even on Unix include/my_dbug.h: Rename: include/dbug.h -> include/my_dbug.h include/Makefile.am: Change dbug.h -> my_dbug.h include/my_global.h: Change dbug.h -> my_dbug.h libmysql/get_password.c: Change dbug.h -> my_dbug.h libmysqld/lib_vio.c: Change dbug.h -> my_dbug.h sql/table.cc: Ensure that \ is not allowed in filenames, even on Unix --- include/Makefile.am | 2 +- include/{dbug.h => my_dbug.h} | 0 include/my_global.h | 2 +- libmysql/get_password.c | 1 - libmysqld/lib_vio.c | 1 - sql/table.cc | 2 +- 6 files changed, 3 insertions(+), 5 deletions(-) rename include/{dbug.h => my_dbug.h} (100%) diff --git a/include/Makefile.am b/include/Makefile.am index cb6da7bbb3a..83cf4290d3d 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -16,7 +16,7 @@ # MA 02111-1307, USA BUILT_SOURCES = mysql_version.h m_ctype.h my_config.h -pkginclude_HEADERS = dbug.h m_string.h my_sys.h my_list.h \ +pkginclude_HEADERS = my_dbug.h m_string.h my_sys.h my_list.h \ mysql.h mysql_com.h mysqld_error.h mysql_embed.h \ my_semaphore.h my_pthread.h my_no_pthread.h raid.h \ errmsg.h my_global.h my_net.h my_alloc.h \ diff --git a/include/dbug.h b/include/my_dbug.h similarity index 100% rename from include/dbug.h rename to include/my_dbug.h diff --git a/include/my_global.h b/include/my_global.h index 49ca0e03f89..39b6cada0e3 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -392,7 +392,7 @@ typedef unsigned short ushort; #define DBUG_OFF #endif -#include +#include #define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/ #define ASCII_BITS_USED 8 /* Bit char used */ diff --git a/libmysql/get_password.c b/libmysql/get_password.c index 53eeb1080ce..e6221ea556e 100644 --- a/libmysql/get_password.c +++ b/libmysql/get_password.c @@ -23,7 +23,6 @@ #include "mysql.h" #include #include -#include #if defined(HAVE_BROKEN_GETPASS) && !defined(HAVE_GETPASSPHRASE) #undef HAVE_GETPASS diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c index 821923fe667..448c11f9abd 100644 --- a/libmysqld/lib_vio.c +++ b/libmysqld/lib_vio.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #ifndef __WIN__ diff --git a/sql/table.cc b/sql/table.cc index d1e2c86e5ab..a26ab89bd97 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1180,7 +1180,7 @@ bool check_table_name(const char *name, uint length) } } #endif - if (*name == '/' || *name == FN_LIBCHAR || *name == FN_EXTCHAR) + if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR) return 1; name++; } From 3ca97c63ba7dc4533b9b8b520263a6f6ee74efc8 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 21:52:03 +0400 Subject: [PATCH 190/267] ctype_collate.result: Automatic client-server charset recoding has been added mysql-test/r/ctype_collate.result: Automatic client-server charset recoding has been added --- mysql-test/r/ctype_collate.result | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index 21429709d93..a2ff8a606cb 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -545,21 +545,21 @@ Variable_name Value client_collation koi8r SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -koi8r koi8r 2 1 +latin1 latin1 2 1 SET COLLATION koi8r_bin; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation koi8r_bin SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -koi8r koi8r_bin 2 0 +latin1 latin1 2 1 SET COLLATION DEFAULT; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation koi8r SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -koi8r koi8r 2 1 +latin1 latin1 2 1 SET NAMES DEFAULT; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value From 84f0e1172981750a85bae8090548784f0aefa1e2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 21:56:34 +0400 Subject: [PATCH 191/267] mysql-test/t/ctype_many.test: Automatic client-server charset recoding has been added mysys/charset.c: Automatic client-server charset recoding has been added sql/item.cc: Automatic client-server charset recoding has been added sql/item.h: Automatic client-server charset recoding has been added sql/item_cmpfunc.cc: Automatic client-server charset recoding has been added sql/item_func.cc: Automatic client-server charset recoding has been added sql/item_strfunc.cc: Automatic client-server charset recoding has been added sql/mysqld.cc: Automatic client-server charset recoding has been added sql/protocol.cc: Automatic client-server charset recoding has been added sql/sql_string.cc: Automatic client-server charset recoding has been added sql/sql_yacc.yy: Automatic client-server charset recoding has been added strings/ctype-utf8.c: Automatic client-server charset recoding has been added --- mysql-test/t/ctype_many.test | 10 ++- mysys/charset.c | 2 +- sql/item.cc | 24 +++--- sql/item.h | 6 +- sql/item_cmpfunc.cc | 6 +- sql/item_func.cc | 6 +- sql/item_strfunc.cc | 55 +------------ sql/mysqld.cc | 1 - sql/protocol.cc | 17 ++-- sql/sql_string.cc | 2 +- sql/sql_yacc.yy | 147 +++++++++++++++++++++++++---------- strings/ctype-utf8.c | 4 + 12 files changed, 155 insertions(+), 125 deletions(-) diff --git a/mysql-test/t/ctype_many.test b/mysql-test/t/ctype_many.test index 1f9f9cf99cc..ddb7034be10 100644 --- a/mysql-test/t/ctype_many.test +++ b/mysql-test/t/ctype_many.test @@ -2,6 +2,8 @@ DROP TABLE IF EXISTS t1; --enable_warnings +SET NAMES latin1; + CREATE TABLE t1 ( comment CHAR(32) ASCII NOT NULL, koi8_ru_f CHAR(32) CHARACTER SET koi8r NOT NULL @@ -135,10 +137,12 @@ INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r' INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'à','CYR CAPIT YU'); INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ñ','CYR CAPIT YA'); -SELECT CONVERT(koi8_ru_f USING utf8),MIN(comment),COUNT(*) FROM t1 GROUP BY 1; +SET NAMES utf8; +SELECT koi8_ru_f,MIN(comment),COUNT(*) FROM t1 GROUP BY 1; ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL; UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8); +SET NAMES koi8r; SELECT * FROM t1; ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL; @@ -161,6 +165,7 @@ FROM t1 t11,t1 t12 WHERE t11.koi8_ru_f=CONVERT(t12.utf8_f USING koi8r) ORDER BY t12.utf8_f,t11.comment,t12.comment; +SET NAMES utf8; ALTER TABLE t1 ADD ucs2_f CHAR(32) CHARACTER SET ucs2; ALTER TABLE t1 CHANGE ucs2_f ucs2_f CHAR(32) UNICODE NOT NULL; @@ -193,5 +198,8 @@ UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE 'GRE%'; UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE 'ARM%'; UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=''; UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=''; +SELECT * FROM t1; +SET NAMES 'binary'; +SELECT * FROM t1; SELECT min(comment),count(*) FROM t1 GROUP BY ucs2_f; DROP TABLE t1; diff --git a/mysys/charset.c b/mysys/charset.c index 87fb7846553..0b2fd514019 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -324,7 +324,7 @@ static int add_collation(CHARSET_INFO *cs) if (cs->primary_number == cs->number) cs->state |= MY_CS_PRIMARY; - if (cs->primary_number == cs->number) + if (cs->binary_number == cs->number) cs->state |= MY_CS_BINSORT; if (!(all_charsets[cs->number]->state & MY_CS_COMPILED)) diff --git a/sql/item.cc b/sql/item.cc index 28fcabfe1b8..6dbe026515d 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -90,19 +90,23 @@ bool Item::check_cols(uint c) return 0; } -void Item::set_name(const char *str,uint length) +void Item::set_name(const char *str,uint length, CHARSET_INFO *cs) { if (!length) - name= (char*) str; // Used by AS - else - { - while (length && !my_isgraph(system_charset_info,*str)) - { // Fix problem with yacc - length--; - str++; - } - name=sql_strmake(str,min(length,MAX_FIELD_WIDTH)); + length= str ? strlen(str) : 0; + while (length && !my_isgraph(cs,*str)) + { // Fix problem with yacc + length--; + str++; } + if (!my_charset_same(cs, system_charset_info)) + { + String tmp; + tmp.copy(str, length, cs, system_charset_info); + name=sql_strmake(tmp.ptr(),min(tmp.length(),MAX_FIELD_WIDTH)); + } + else + name=sql_strmake(str,min(length,MAX_FIELD_WIDTH)); } /* diff --git a/sql/item.h b/sql/item.h index 7b31f03f6ac..2bb22d47083 100644 --- a/sql/item.h +++ b/sql/item.h @@ -63,7 +63,7 @@ public: */ Item(THD *thd, Item &item); virtual ~Item() { name=0; } /*lint -e1509 */ - void set_name(const char *str,uint length=0); + void set_name(const char *str,uint length, CHARSET_INFO *cs); void init_make_field(Send_field *tmp_field,enum enum_field_types type); virtual void make_field(Send_field *field); virtual bool fix_fields(THD *, struct st_table_list *, Item **); @@ -359,7 +359,7 @@ public: str_value.set(str,length,cs); coercibility= coer; max_length=length; - name=(char*) str_value.ptr(); + set_name(str, length, cs); decimals=NOT_FIXED_DEC; } Item_string(const char *name_par, const char *str, uint length, @@ -368,7 +368,7 @@ public: str_value.set(str,length,cs); coercibility= coer; max_length=length; - name=(char*) name_par; + set_name(name_par,0,cs); decimals=NOT_FIXED_DEC; } ~Item_string() {} diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 301e5b4454f..998b38513a9 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -124,10 +124,10 @@ void Item_bool_func2::fix_length_and_dec() } } } - set_cmp_func(); /* QQ: COERCIBILITY */ - cmp_charset= (args[0]->binary() || args[1]->binary()) ? - &my_charset_bin : args[0]->charset(); + cmp_charset= (args[0]->binary() || args[1]->binary()) ? + &my_charset_bin : args[0]->charset(); + set_cmp_func(); } diff --git a/sql/item_func.cc b/sql/item_func.cc index 8fb97dc2873..2099a5a4ccf 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2641,7 +2641,7 @@ Item *get_system_var(enum_var_type var_type, LEX_STRING name) pos=strmov(pos,"global."); memcpy(pos, var->name, var->name_length+1); // set_name() will allocate the name - item->set_name(buff,(uint) (pos-buff)+var->name_length); + item->set_name(buff,(uint) (pos-buff)+var->name_length, system_charset_info); return item; } @@ -2656,9 +2656,9 @@ Item *get_system_var(enum_var_type var_type, const char *var_name, uint length, var= find_sys_var(var_name, length); DBUG_ASSERT(var != 0); if (!(item=var->item(thd, var_type))) - return 0; // Impossible + return 0; // Impossible thd->lex.uncacheable(); - item->set_name(item_name); // Will use original name + item->set_name(item_name, 0, system_charset_info); // Will use original name return item; } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 80d85e565e7..f68a0dc9e73 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2015,65 +2015,14 @@ String *Item_func_conv::val_str(String *str) String *Item_func_conv_charset::val_str(String *str) { - my_wc_t wc; - int cnvres; - const uchar *s, *se; - uchar *d, *d0, *de; - uint32 dmaxlen; String *arg= args[0]->val_str(str); - CHARSET_INFO *from,*to; - if (!arg) { null_value=1; return 0; } - null_value=0; - - from=arg->charset(); - to=conv_charset; - - s=(const uchar*)arg->ptr(); - se=s+arg->length(); - - dmaxlen=arg->length()*to->mbmaxlen+1; - str->alloc(dmaxlen); - d0=d=(unsigned char*)str->ptr(); - de=d+dmaxlen; - - while (1) - { - cnvres=from->mb_wc(from,&wc,s,se); - if (cnvres>0) - { - s+=cnvres; - } - else if (cnvres==MY_CS_ILSEQ) - { - s++; - wc='?'; - } - else - break; - -outp: - cnvres=to->wc_mb(to,wc,d,de); - if (cnvres>0) - { - d+=cnvres; - } - else if (cnvres==MY_CS_ILUNI && wc!='?') - { - wc='?'; - goto outp; - } - else - break; - }; - - str->length((uint32) (d-d0)); - str->set_charset(to); - return str; + null_value= str->copy(arg->ptr(),arg->length(),arg->charset(),conv_charset); + return null_value ? 0 : str; } void Item_func_conv_charset::fix_length_and_dec() diff --git a/sql/mysqld.cc b/sql/mysqld.cc index e01af4de543..7f9c39e7e8f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2084,7 +2084,6 @@ static int init_common_variables(const char *conf_file_name, int argc, #endif if (!(default_charset_info= get_charset_by_name(sys_charset.value, MYF(MY_WME)))) return 1; - system_charset_info= default_charset_info; charsets_list= list_charsets(MYF(MY_CS_COMPILED | MY_CS_CONFIG)); if (use_temp_pool && bitmap_init(&temp_pool,1024,1)) diff --git a/sql/protocol.cc b/sql/protocol.cc index c7ce38eadac..9fb32daf57f 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -714,7 +714,6 @@ bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs) #endif if (convert) return convert_str(from, length); -#if 0 if (cs != this->thd->charset()) { String tmp; @@ -722,7 +721,6 @@ bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs) return net_store_data(tmp.ptr(), tmp.length()); } else -#endif return net_store_data(from, length); } @@ -813,11 +811,18 @@ bool Protocol_simple::store(Field *field) field_pos++; #endif char buff[MAX_FIELD_WIDTH]; - String tmp(buff,sizeof(buff), &my_charset_bin); - field->val_str(&tmp,&tmp); + String tmp1(buff,sizeof(buff), &my_charset_bin); + field->val_str(&tmp1,&tmp1); if (convert) - return convert_str(tmp.ptr(), tmp.length()); - return net_store_data(tmp.ptr(), tmp.length()); + return convert_str(tmp1.ptr(), tmp1.length()); + if (field->charset() != this->thd->charset()) + { + String tmp; + tmp.copy(tmp1.ptr(), tmp1.length(), tmp1.charset(), this->thd->charset()); + return net_store_data(tmp.ptr(), tmp.length()); + } + else + return net_store_data(tmp1.ptr(), tmp1.length()); } diff --git a/sql/sql_string.cc b/sql/sql_string.cc index d796c53fb52..ae3875834f0 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -28,7 +28,7 @@ #include #endif -CHARSET_INFO *system_charset_info= &my_charset_latin1; +CHARSET_INFO *system_charset_info= &my_charset_utf8; extern gptr sql_alloc(unsigned size); extern void sql_element_free(void *ptr); static uint32 diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 7db398e7810..a526b8d4e06 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -558,7 +558,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %type IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident ident_or_text - UNDERSCORE_CHARSET + UNDERSCORE_CHARSET IDENT_sys TEXT_STRING_sys TEXT_STRING_db %type opt_table_alias @@ -772,22 +772,22 @@ master_defs: | master_defs ',' master_def; master_def: - MASTER_HOST_SYM EQ TEXT_STRING + MASTER_HOST_SYM EQ TEXT_STRING_sys { Lex->mi.host = $3.str; } | - MASTER_USER_SYM EQ TEXT_STRING + MASTER_USER_SYM EQ TEXT_STRING_sys { Lex->mi.user = $3.str; } | - MASTER_PASSWORD_SYM EQ TEXT_STRING + MASTER_PASSWORD_SYM EQ TEXT_STRING_sys { Lex->mi.password = $3.str; } | - MASTER_LOG_FILE_SYM EQ TEXT_STRING + MASTER_LOG_FILE_SYM EQ TEXT_STRING_sys { Lex->mi.log_file_name = $3.str; } @@ -807,7 +807,7 @@ master_def: Lex->mi.connect_retry = $3; } | - RELAY_LOG_FILE_SYM EQ TEXT_STRING + RELAY_LOG_FILE_SYM EQ TEXT_STRING_sys { Lex->mi.relay_log_name = $3.str; } @@ -877,14 +877,14 @@ create: lex->name=$4.str; lex->create_info.options=$3; } - | CREATE udf_func_type UDF_SYM IDENT + | CREATE udf_func_type UDF_SYM IDENT_sys { LEX *lex=Lex; lex->sql_command = SQLCOM_CREATE_FUNCTION; lex->udf.name = $4; lex->udf.type= $2; } - UDF_RETURNS_SYM udf_type UDF_SONAME_SYM TEXT_STRING + UDF_RETURNS_SYM udf_type UDF_SONAME_SYM TEXT_STRING_sys { LEX *lex=Lex; lex->udf.returns=(Item_result) $7; @@ -966,8 +966,8 @@ create_table_option: | MAX_ROWS opt_equal ulonglong_num { Lex->create_info.max_rows= $3; Lex->create_info.used_fields|= HA_CREATE_USED_MAX_ROWS;} | MIN_ROWS opt_equal ulonglong_num { Lex->create_info.min_rows= $3; Lex->create_info.used_fields|= HA_CREATE_USED_MIN_ROWS;} | AVG_ROW_LENGTH opt_equal ULONG_NUM { Lex->create_info.avg_row_length=$3; Lex->create_info.used_fields|= HA_CREATE_USED_AVG_ROW_LENGTH;} - | PASSWORD opt_equal TEXT_STRING { Lex->create_info.password=$3.str; } - | COMMENT_SYM opt_equal TEXT_STRING { Lex->create_info.comment=$3.str; } + | PASSWORD opt_equal TEXT_STRING_sys { Lex->create_info.password=$3.str; } + | COMMENT_SYM opt_equal TEXT_STRING_sys { Lex->create_info.comment=$3.str; } | AUTO_INC opt_equal ulonglong_num { Lex->create_info.auto_increment_value=$3; Lex->create_info.used_fields|= HA_CREATE_USED_AUTO;} | PACK_KEYS_SYM opt_equal ULONG_NUM { Lex->create_info.table_options|= $3 ? HA_OPTION_PACK_KEYS : HA_OPTION_NO_PACK_KEYS; Lex->create_info.used_fields|= HA_CREATE_USED_PACK_KEYS;} | PACK_KEYS_SYM opt_equal DEFAULT { Lex->create_info.table_options&= ~(HA_OPTION_PACK_KEYS | HA_OPTION_NO_PACK_KEYS); Lex->create_info.used_fields|= HA_CREATE_USED_PACK_KEYS;} @@ -1001,8 +1001,9 @@ create_table_option: Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; } | INSERT_METHOD opt_equal merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;} - | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING { Lex->create_info.data_file_name= $4.str; } - | INDEX DIRECTORY_SYM opt_equal TEXT_STRING { Lex->create_info.index_file_name= $4.str; }; + | DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys + { Lex->create_info.data_file_name= $4.str; } + | INDEX DIRECTORY_SYM opt_equal TEXT_STRING_sys { Lex->create_info.index_file_name= $4.str; }; table_types: ISAM_SYM { $$= DB_TYPE_ISAM; } @@ -1637,7 +1638,7 @@ restore: { Lex->sql_command = SQLCOM_RESTORE_TABLE; } - table_list FROM TEXT_STRING + table_list FROM TEXT_STRING_sys { Lex->backup_dir = $6.str; }; @@ -1647,7 +1648,7 @@ backup: { Lex->sql_command = SQLCOM_BACKUP_TABLE; } - table_list TO_SYM TEXT_STRING + table_list TO_SYM TEXT_STRING_sys { Lex->backup_dir = $6.str; }; @@ -1897,9 +1898,9 @@ select_item: if (add_item_to_list(YYTHD, $2)) YYABORT; if ($4.str) - $2->set_name($4.str); + $2->set_name($4.str,$4.length,system_charset_info); else if (!$2->name) - $2->set_name($1,(uint) ($3 - $1)); + $2->set_name($1,(uint) ($3 - $1), YYTHD->charset()); }; remember_name: @@ -1913,11 +1914,12 @@ select_item2: | expr { $$=$1; }; select_alias: - { $$.str=0;} - | AS ident { $$=$2; } - | AS TEXT_STRING { $$=$2; } - | ident { $$=$1; } - | TEXT_STRING { $$=$1; }; + /* empty */ { $$.str=0;} + | AS ident { $$=$2; } + | AS TEXT_STRING_sys { $$=$2; } + | ident { $$=$1; } + | TEXT_STRING_sys { $$=$1; } + ; optional_braces: /* empty */ {} @@ -2219,9 +2221,9 @@ simple_expr: Lex->uncacheable();; } | ENCRYPT '(' expr ',' expr ')' { $$= new Item_func_encrypt($3,$5); } - | DECODE_SYM '(' expr ',' TEXT_STRING ')' + | DECODE_SYM '(' expr ',' TEXT_STRING_db ')' { $$= new Item_func_decode($3,$5.str); } - | ENCODE_SYM '(' expr ',' TEXT_STRING ')' + | ENCODE_SYM '(' expr ',' TEXT_STRING_db ')' { $$= new Item_func_encode($3,$5.str); } | DES_DECRYPT_SYM '(' expr ')' { $$= new Item_func_des_decrypt($3); } @@ -2818,8 +2820,8 @@ having_clause: ; opt_escape: - ESCAPE_SYM TEXT_STRING { $$= $2.str; } - | /* empty */ { $$= (char*) "\\"; }; + ESCAPE_SYM TEXT_STRING_db { $$= $2.str; } + | /* empty */ { $$= (char*) "\\"; }; /* @@ -3015,7 +3017,7 @@ procedure_item: if (add_proc_to_list(lex->thd, $2)) YYABORT; if (!$2->name) - $2->set_name($1,(uint) ((char*) lex->tok_end - $1)); + $2->set_name($1,(uint) ((char*) lex->tok_end - $1), YYTHD->charset()); } ; @@ -3044,7 +3046,7 @@ select_var_ident: '@' ident_or_text ; into: - INTO OUTFILE TEXT_STRING + INTO OUTFILE TEXT_STRING_sys { LEX *lex=Lex; if (!lex->describe) @@ -3056,7 +3058,7 @@ into: } } opt_field_term opt_line_term - | INTO DUMPFILE TEXT_STRING + | INTO DUMPFILE TEXT_STRING_sys { LEX *lex=Lex; if (!lex->describe) @@ -3118,7 +3120,7 @@ drop: lex->drop_if_exists=$3; lex->name=$4.str; } - | DROP UDF_SYM IDENT + | DROP UDF_SYM IDENT_sys { LEX *lex=Lex; lex->sql_command = SQLCOM_DROP_FUNCTION; @@ -3478,7 +3480,7 @@ show_param: YYABORT; } | NEW_SYM MASTER_SYM FOR_SYM SLAVE WITH MASTER_LOG_FILE_SYM EQ - TEXT_STRING AND MASTER_LOG_POS_SYM EQ ulonglong_num + TEXT_STRING_sys AND MASTER_LOG_POS_SYM EQ ulonglong_num AND MASTER_SERVER_ID_SYM EQ ULONG_NUM { @@ -3593,7 +3595,7 @@ from_or_in: binlog_in: /* empty */ { Lex->mi.log_file_name = 0; } - | IN_SYM TEXT_STRING { Lex->mi.log_file_name = $2.str; }; + | IN_SYM TEXT_STRING_sys { Lex->mi.log_file_name = $2.str; }; binlog_from: /* empty */ { Lex->mi.pos = 4; /* skip magic number */ } @@ -3696,7 +3698,7 @@ purge_options: ; purge_option: - TO_SYM TEXT_STRING + TO_SYM TEXT_STRING_sys { Lex->sql_command = SQLCOM_PURGE; Lex->to_log = $2.str; @@ -3740,7 +3742,7 @@ use: USE_SYM ident /* import, export of files */ -load: LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING +load: LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING_sys { LEX *lex=Lex; lex->sql_command= SQLCOM_LOAD; @@ -3824,17 +3826,21 @@ opt_ignore_lines: /* Common definitions */ text_literal: - TEXT_STRING - { $$ = new Item_string($1.str,$1.length, - YYTHD->variables.thd_charset); } + TEXT_STRING_db + { + THD *thd= YYTHD; + CHARSET_INFO *cs= my_charset_same(thd->charset(),thd->db_charset) ? + thd->charset() : thd->db_charset; + $$ = new Item_string($1.str,$1.length,cs); + } | UNDERSCORE_CHARSET TEXT_STRING { $$ = new Item_string($2.str,$2.length,Lex->charset,Item::COER_IMPLICIT); } - | text_literal TEXT_STRING + | text_literal TEXT_STRING_db { ((Item_string*) $1)->append($2.str,$2.length); }; text_string: - TEXT_STRING - { $$= new String($1.str,$1.length,YYTHD->variables.thd_charset); } + TEXT_STRING_db + { $$= new String($1.str,$1.length,YYTHD->db_charset); } | HEX_NUM { Item *tmp = new Item_varbinary($1.str,$1.length); @@ -3957,8 +3963,63 @@ table_ident: | '.' ident { $$=new Table_ident($2);} /* For Delphi */; +IDENT_sys: + IDENT + { + THD *thd= YYTHD; + if (my_charset_same(thd->charset(),system_charset_info)) + { + $$=$1; + } + else + { + String ident; + ident.copy($1.str,$1.length,thd->charset(),system_charset_info); + $$.str= thd->strmake(ident.ptr(),ident.length()); + $$.length= ident.length(); + } + } + ; + +TEXT_STRING_sys: + TEXT_STRING + { + THD *thd= YYTHD; + if (my_charset_same(thd->charset(),system_charset_info)) + { + $$=$1; + } + else + { + String ident; + ident.copy($1.str,$1.length,thd->charset(),system_charset_info); + $$.str= thd->strmake(ident.ptr(),ident.length()); + $$.length= ident.length(); + } + } + ; + +TEXT_STRING_db: + TEXT_STRING + { + THD *thd= YYTHD; + if (my_charset_same(thd->charset(),thd->db_charset)) + { + $$=$1; + } + else + { + String ident; + ident.copy($1.str,$1.length,thd->charset(),thd->db_charset); + $$.str= thd->strmake(ident.ptr(),ident.length()); + $$.length= ident.length(); + } + } + ; + + ident: - IDENT { $$=$1; } + IDENT_sys { $$=$1; } | keyword { LEX *lex= Lex; @@ -3970,9 +4031,9 @@ ident: ; ident_or_text: - ident { $$=$1;} - | TEXT_STRING { $$=$1;} - | LEX_HOSTNAME { $$=$1;}; + ident { $$=$1;} + | TEXT_STRING_sys { $$=$1;} + | LEX_HOSTNAME { $$=$1;}; user: ident_or_text diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 2db00e64c72..897e2846659 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -27,6 +27,10 @@ #define EILSEQ ENOENT #endif +#ifndef HAVE_CHARSET_utf8 +#define HAVE_CHARSET_utf8 +#endif + #ifdef HAVE_CHARSET_utf8 #define HAVE_UNIDATA #endif From ac4547236720ac0da80e322dadf83393cb431064 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 22:00:03 +0400 Subject: [PATCH 192/267] .del-ctype_many.result~9b541c4def2b5afb: Delete: mysql-test/r/ctype_many.result I could not commit it, bk told it can't apply binary delta for textual file. BitKeeper/deleted/.del-ctype_many.result~9b541c4def2b5afb: Delete: mysql-test/r/ctype_many.result --- mysql-test/r/ctype_many.result | 1399 -------------------------------- 1 file changed, 1399 deletions(-) delete mode 100644 mysql-test/r/ctype_many.result diff --git a/mysql-test/r/ctype_many.result b/mysql-test/r/ctype_many.result deleted file mode 100644 index 0bbb0073420..00000000000 --- a/mysql-test/r/ctype_many.result +++ /dev/null @@ -1,1399 +0,0 @@ -DROP TABLE IF EXISTS t1; -CREATE TABLE t1 ( -comment CHAR(32) ASCII NOT NULL, -koi8_ru_f CHAR(32) CHARACTER SET koi8r NOT NULL -) CHARSET=latin5; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `comment` char(32) character set latin1 NOT NULL default '', - `koi8_ru_f` char(32) character set koi8r NOT NULL default '' -) TYPE=MyISAM CHARSET=latin5 -ALTER TABLE t1 CHANGE comment comment CHAR(32) CHARACTER SET latin2 NOT NULL; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `comment` char(32) character set latin2 NOT NULL default '', - `koi8_ru_f` char(32) character set koi8r NOT NULL default '' -) TYPE=MyISAM CHARSET=latin5 -ALTER TABLE t1 ADD latin5_f CHAR(32) NOT NULL; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `comment` char(32) character set latin2 NOT NULL default '', - `koi8_ru_f` char(32) character set koi8r NOT NULL default '', - `latin5_f` char(32) NOT NULL default '' -) TYPE=MyISAM CHARSET=latin5 -ALTER TABLE t1 CHARSET=latin2; -ALTER TABLE t1 ADD latin2_f CHAR(32) NOT NULL; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `comment` char(32) NOT NULL default '', - `koi8_ru_f` char(32) character set koi8r NOT NULL default '', - `latin5_f` char(32) character set latin5 NOT NULL default '', - `latin2_f` char(32) NOT NULL default '' -) TYPE=MyISAM CHARSET=latin2 -ALTER TABLE t1 DROP latin2_f, DROP latin5_f; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `comment` char(32) NOT NULL default '', - `koi8_ru_f` char(32) character set koi8r NOT NULL default '' -) TYPE=MyISAM CHARSET=latin2 -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('a','LAT SMALL A'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('b','LAT SMALL B'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('c','LAT SMALL C'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('d','LAT SMALL D'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('e','LAT SMALL E'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('f','LAT SMALL F'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('g','LAT SMALL G'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('h','LAT SMALL H'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('i','LAT SMALL I'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('j','LAT SMALL J'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('k','LAT SMALL K'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('l','LAT SMALL L'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('m','LAT SMALL M'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('n','LAT SMALL N'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('o','LAT SMALL O'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('p','LAT SMALL P'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('q','LAT SMALL Q'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('r','LAT SMALL R'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('s','LAT SMALL S'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('t','LAT SMALL T'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('u','LAT SMALL U'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('v','LAT SMALL V'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('w','LAT SMALL W'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('x','LAT SMALL X'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('y','LAT SMALL Y'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('z','LAT SMALL Z'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('A','LAT CAPIT A'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('B','LAT CAPIT B'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('C','LAT CAPIT C'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('D','LAT CAPIT D'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('E','LAT CAPIT E'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('F','LAT CAPIT F'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('G','LAT CAPIT G'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('H','LAT CAPIT H'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('I','LAT CAPIT I'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('J','LAT CAPIT J'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('K','LAT CAPIT K'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('L','LAT CAPIT L'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('M','LAT CAPIT M'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('N','LAT CAPIT N'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('O','LAT CAPIT O'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('P','LAT CAPIT P'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Q','LAT CAPIT Q'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('R','LAT CAPIT R'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('S','LAT CAPIT S'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('T','LAT CAPIT T'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('U','LAT CAPIT U'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('V','LAT CAPIT V'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('W','LAT CAPIT W'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('X','LAT CAPIT X'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Y','LAT CAPIT Y'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Z','LAT CAPIT Z'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Á','CYR SMALL A'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Â','CYR SMALL BE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'×','CYR SMALL VE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ç','CYR SMALL GE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ä','CYR SMALL DE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Å','CYR SMALL IE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'£','CYR SMALL IO'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ö','CYR SMALL ZHE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ú','CYR SMALL ZE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'É','CYR SMALL I'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ë','CYR SMALL KA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ì','CYR SMALL EL'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Í','CYR SMALL EM'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Î','CYR SMALL EN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ï','CYR SMALL O'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ð','CYR SMALL PE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ò','CYR SMALL ER'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ó','CYR SMALL ES'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ô','CYR SMALL TE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Õ','CYR SMALL U'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Æ','CYR SMALL EF'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'È','CYR SMALL HA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ã','CYR SMALL TSE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Þ','CYR SMALL CHE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Û','CYR SMALL SHA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ý','CYR SMALL SCHA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ß','CYR SMALL HARD SIGN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ù','CYR SMALL YERU'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ø','CYR SMALL SOFT SIGN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ü','CYR SMALL E'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'À','CYR SMALL YU'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ñ','CYR SMALL YA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'á','CYR CAPIT A'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'â','CYR CAPIT BE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'÷','CYR CAPIT VE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ç','CYR CAPIT GE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ä','CYR CAPIT DE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'å','CYR CAPIT IE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'³','CYR CAPIT IO'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ö','CYR CAPIT ZHE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ú','CYR CAPIT ZE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'é','CYR CAPIT I'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ë','CYR CAPIT KA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ì','CYR CAPIT EL'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'í','CYR CAPIT EM'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'î','CYR CAPIT EN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ï','CYR CAPIT O'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ð','CYR CAPIT PE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ò','CYR CAPIT ER'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ó','CYR CAPIT ES'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ô','CYR CAPIT TE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'õ','CYR CAPIT U'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'æ','CYR CAPIT EF'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'è','CYR CAPIT HA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ã','CYR CAPIT TSE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'þ','CYR CAPIT CHE'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'û','CYR CAPIT SHA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ý','CYR CAPIT SCHA'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ÿ','CYR CAPIT HARD SIGN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ù','CYR CAPIT YERU'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ø','CYR CAPIT SOFT SIGN'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ü','CYR CAPIT E'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'à','CYR CAPIT YU'); -INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ñ','CYR CAPIT YA'); -SELECT CONVERT(koi8_ru_f USING utf8),MIN(comment),COUNT(*) FROM t1 GROUP BY 1; -CONVERT(koi8_ru_f USING utf8) MIN(comment) COUNT(*) -a LAT CAPIT A 2 -b LAT CAPIT B 2 -c LAT CAPIT C 2 -d LAT CAPIT D 2 -e LAT CAPIT E 2 -f LAT CAPIT F 2 -g LAT CAPIT G 2 -h LAT CAPIT H 2 -i LAT CAPIT I 2 -j LAT CAPIT J 2 -k LAT CAPIT K 2 -l LAT CAPIT L 2 -m LAT CAPIT M 2 -n LAT CAPIT N 2 -o LAT CAPIT O 2 -p LAT CAPIT P 2 -q LAT CAPIT Q 2 -r LAT CAPIT R 2 -s LAT CAPIT S 2 -t LAT CAPIT T 2 -u LAT CAPIT U 2 -v LAT CAPIT V 2 -w LAT CAPIT W 2 -x LAT CAPIT X 2 -y LAT CAPIT Y 2 -z LAT CAPIT Z 2 -а CYR CAPIT A 2 -б CYR CAPIT BE 2 -в CYR CAPIT VE 2 -г CYR CAPIT GE 2 -д CYR CAPIT DE 2 -е CYR CAPIT IE 4 -ж CYR CAPIT ZHE 2 -з CYR CAPIT ZE 2 -и CYR CAPIT I 2 -к CYR CAPIT KA 2 -л CYR CAPIT EL 2 -м CYR CAPIT EM 2 -н CYR CAPIT EN 2 -о CYR CAPIT O 2 -п CYR CAPIT PE 2 -Ñ€ CYR CAPIT ER 2 -Ñ CYR CAPIT ES 2 -Ñ‚ CYR CAPIT TE 2 -у CYR CAPIT U 2 -Ñ„ CYR CAPIT EF 2 -Ñ… CYR CAPIT HA 2 -ц CYR CAPIT TSE 2 -ч CYR CAPIT CHE 2 -ш CYR CAPIT SHA 2 -щ CYR CAPIT SCHA 2 -ÑŠ CYR CAPIT HARD SIGN 2 -Ñ‹ CYR CAPIT YERU 2 -ÑŒ CYR CAPIT SOFT SIGN 2 -Ñ CYR CAPIT E 2 -ÑŽ CYR CAPIT YU 2 -Ñ CYR CAPIT YA 2 -ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL; -UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8); -SELECT * FROM t1; -comment koi8_ru_f utf8_f -LAT SMALL A a a -LAT SMALL B b b -LAT SMALL C c c -LAT SMALL D d d -LAT SMALL E e e -LAT SMALL F f f -LAT SMALL G g g -LAT SMALL H h h -LAT SMALL I i i -LAT SMALL J j j -LAT SMALL K k k -LAT SMALL L l l -LAT SMALL M m m -LAT SMALL N n n -LAT SMALL O o o -LAT SMALL P p p -LAT SMALL Q q q -LAT SMALL R r r -LAT SMALL S s s -LAT SMALL T t t -LAT SMALL U u u -LAT SMALL V v v -LAT SMALL W w w -LAT SMALL X x x -LAT SMALL Y y y -LAT SMALL Z z z -LAT CAPIT A A A -LAT CAPIT B B B -LAT CAPIT C C C -LAT CAPIT D D D -LAT CAPIT E E E -LAT CAPIT F F F -LAT CAPIT G G G -LAT CAPIT H H H -LAT CAPIT I I I -LAT CAPIT J J J -LAT CAPIT K K K -LAT CAPIT L L L -LAT CAPIT M M M -LAT CAPIT N N N -LAT CAPIT O O O -LAT CAPIT P P P -LAT CAPIT Q Q Q -LAT CAPIT R R R -LAT CAPIT S S S -LAT CAPIT T T T -LAT CAPIT U U U -LAT CAPIT V V V -LAT CAPIT W W W -LAT CAPIT X X X -LAT CAPIT Y Y Y -LAT CAPIT Z Z Z -CYR SMALL A Á а -CYR SMALL BE  б -CYR SMALL VE × Ð² -CYR SMALL GE Ç Ð³ -CYR SMALL DE Ä Ð´ -CYR SMALL IE Šе -CYR SMALL IO £ Ñ‘ -CYR SMALL ZHE Ö Ð¶ -CYR SMALL ZE Ú Ð· -CYR SMALL I É Ð¸ -CYR SMALL KA Ë Ðº -CYR SMALL EL Ì Ð» -CYR SMALL EM Í Ð¼ -CYR SMALL EN Πн -CYR SMALL O Ï Ð¾ -CYR SMALL PE Рп -CYR SMALL ER Ò Ñ€ -CYR SMALL ES Ó Ñ -CYR SMALL TE Ô Ñ‚ -CYR SMALL U Õ Ñƒ -CYR SMALL EF Æ Ñ„ -CYR SMALL HA È Ñ… -CYR SMALL TSE à ц -CYR SMALL CHE Þ Ñ‡ -CYR SMALL SHA Û Ñˆ -CYR SMALL SCHA Ý Ñ‰ -CYR SMALL HARD SIGN ß ÑŠ -CYR SMALL YERU Ù Ñ‹ -CYR SMALL SOFT SIGN Ø ÑŒ -CYR SMALL E Ü Ñ -CYR SMALL YU À ÑŽ -CYR SMALL YA Ñ Ñ -CYR CAPIT A á Ð -CYR CAPIT BE â Б -CYR CAPIT VE ÷ Ð’ -CYR CAPIT GE ç Г -CYR CAPIT DE ä Д -CYR CAPIT IE å Е -CYR CAPIT IO ³ Ð -CYR CAPIT ZHE ö Ж -CYR CAPIT ZE ú З -CYR CAPIT I é И -CYR CAPIT KA ë К -CYR CAPIT EL ì Л -CYR CAPIT EM í М -CYR CAPIT EN î Ð -CYR CAPIT O ï О -CYR CAPIT PE ð П -CYR CAPIT ER ò Р -CYR CAPIT ES ó С -CYR CAPIT TE ô Т -CYR CAPIT U õ У -CYR CAPIT EF æ Ф -CYR CAPIT HA è Ð¥ -CYR CAPIT TSE ã Ц -CYR CAPIT CHE þ Ч -CYR CAPIT SHA û Ш -CYR CAPIT SCHA ý Щ -CYR CAPIT HARD SIGN ÿ Ъ -CYR CAPIT YERU ù Ы -CYR CAPIT SOFT SIGN ø Ь -CYR CAPIT E ü Э -CYR CAPIT YU à Ю -CYR CAPIT YA ñ Я -ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL; -UPDATE t1 SET bin_f=koi8_ru_f; -SELECT COUNT(DISTINCT bin_f),COUNT(DISTINCT koi8_ru_f),COUNT(DISTINCT utf8_f) FROM t1; -COUNT(DISTINCT bin_f) COUNT(DISTINCT koi8_ru_f) COUNT(DISTINCT utf8_f) -116 58 57 -SELECT koi8_ru_f,MIN(comment) FROM t1 GROUP BY 1; -koi8_ru_f MIN(comment) -a LAT CAPIT A -b LAT CAPIT B -c LAT CAPIT C -d LAT CAPIT D -e LAT CAPIT E -f LAT CAPIT F -g LAT CAPIT G -h LAT CAPIT H -i LAT CAPIT I -j LAT CAPIT J -k LAT CAPIT K -l LAT CAPIT L -m LAT CAPIT M -n LAT CAPIT N -o LAT CAPIT O -p LAT CAPIT P -q LAT CAPIT Q -r LAT CAPIT R -s LAT CAPIT S -t LAT CAPIT T -u LAT CAPIT U -v LAT CAPIT V -w LAT CAPIT W -x LAT CAPIT X -y LAT CAPIT Y -z LAT CAPIT Z -Á CYR CAPIT A - CYR CAPIT BE -× CYR CAPIT VE -Ç CYR CAPIT GE -Ä CYR CAPIT DE -Å CYR CAPIT IE -£ CYR CAPIT IO -Ö CYR CAPIT ZHE -Ú CYR CAPIT ZE -É CYR CAPIT I -Ë CYR CAPIT KA -Ì CYR CAPIT EL -Í CYR CAPIT EM -Î CYR CAPIT EN -Ï CYR CAPIT O -Ð CYR CAPIT PE -Ò CYR CAPIT ER -Ó CYR CAPIT ES -Ô CYR CAPIT TE -Õ CYR CAPIT U -Æ CYR CAPIT EF -È CYR CAPIT HA -à CYR CAPIT TSE -Þ CYR CAPIT CHE -Û CYR CAPIT SHA -Ý CYR CAPIT SCHA -ß CYR CAPIT HARD SIGN -Ù CYR CAPIT YERU -Ø CYR CAPIT SOFT SIGN -Ü CYR CAPIT E -À CYR CAPIT YU -Ñ CYR CAPIT YA -SELECT utf8_f,MIN(comment) FROM t1 GROUP BY 1; -utf8_f MIN(comment) -a LAT CAPIT A -b LAT CAPIT B -c LAT CAPIT C -d LAT CAPIT D -e LAT CAPIT E -f LAT CAPIT F -g LAT CAPIT G -h LAT CAPIT H -i LAT CAPIT I -j LAT CAPIT J -k LAT CAPIT K -l LAT CAPIT L -m LAT CAPIT M -n LAT CAPIT N -o LAT CAPIT O -p LAT CAPIT P -q LAT CAPIT Q -r LAT CAPIT R -s LAT CAPIT S -t LAT CAPIT T -u LAT CAPIT U -v LAT CAPIT V -w LAT CAPIT W -x LAT CAPIT X -y LAT CAPIT Y -z LAT CAPIT Z -а CYR CAPIT A -б CYR CAPIT BE -в CYR CAPIT VE -г CYR CAPIT GE -д CYR CAPIT DE -е CYR CAPIT IE -ж CYR CAPIT ZHE -з CYR CAPIT ZE -и CYR CAPIT I -к CYR CAPIT KA -л CYR CAPIT EL -м CYR CAPIT EM -н CYR CAPIT EN -о CYR CAPIT O -п CYR CAPIT PE -Ñ€ CYR CAPIT ER -Ñ CYR CAPIT ES -Ñ‚ CYR CAPIT TE -у CYR CAPIT U -Ñ„ CYR CAPIT EF -Ñ… CYR CAPIT HA -ц CYR CAPIT TSE -ч CYR CAPIT CHE -ш CYR CAPIT SHA -щ CYR CAPIT SCHA -ÑŠ CYR CAPIT HARD SIGN -Ñ‹ CYR CAPIT YERU -ÑŒ CYR CAPIT SOFT SIGN -Ñ CYR CAPIT E -ÑŽ CYR CAPIT YU -Ñ CYR CAPIT YA -SELECT DISTINCT koi8_ru_f FROM t1; -koi8_ru_f -a -b -c -d -e -f -g -h -i -j -k -l -m -n -o -p -q -r -s -t -u -v -w -x -y -z -Á - -× -Ç -Ä -Å -£ -Ö -Ú -É -Ë -Ì -Í -Î -Ï -Ð -Ò -Ó -Ô -Õ -Æ -È -à -Þ -Û -Ý -ß -Ù -Ø -Ü -À -Ñ -SELECT DISTINCT utf8_f FROM t1; -utf8_f -a -b -c -d -e -f -g -h -i -j -k -l -m -n -o -p -q -r -s -t -u -v -w -x -y -z -а -б -в -г -д -е -ж -з -и -к -л -м -н -о -п -Ñ€ -Ñ -Ñ‚ -у -Ñ„ -Ñ… -ц -ч -ш -щ -ÑŠ -Ñ‹ -ÑŒ -Ñ -ÑŽ -Ñ -SELECT lower(koi8_ru_f) FROM t1 ORDER BY 1 DESC; -lower(koi8_ru_f) -Ñ -Ñ -À -À -Ü -Ü -Ø -Ø -Ù -Ù -ß -ß -Ý -Ý -Û -Û -Þ -Þ -à -à -È -È -Æ -Æ -Õ -Õ -Ô -Ô -Ó -Ó -Ò -Ò -Ð -Ð -Ï -Ï -Î -Î -Í -Í -Ì -Ì -Ë -Ë -É -É -Ú -Ú -Ö -Ö -£ -£ -Å -Å -Ä -Ä -Ç -Ç -× -× - - -Á -Á -z -z -y -y -x -x -w -w -v -v -u -u -t -t -s -s -r -r -q -q -p -p -o -o -n -n -m -m -l -l -k -k -j -j -i -i -h -h -g -g -f -f -e -e -d -d -c -c -b -b -a -a -SELECT lower(utf8_f) FROM t1 ORDER BY 1 DESC; -lower(utf8_f) -Ñ -Ñ -ÑŽ -ÑŽ -Ñ -Ñ -ÑŒ -ÑŒ -Ñ‹ -Ñ‹ -ÑŠ -ÑŠ -щ -щ -ш -ш -ч -ч -ц -ц -Ñ… -Ñ… -Ñ„ -Ñ„ -у -у -Ñ‚ -Ñ‚ -Ñ -Ñ -Ñ€ -Ñ€ -п -п -о -о -н -н -м -м -л -л -к -к -и -и -з -з -ж -ж -е -Ñ‘ -е -Ñ‘ -д -д -г -г -в -в -б -б -а -а -z -z -y -y -x -x -w -w -v -v -u -u -t -t -s -s -r -r -q -q -p -p -o -o -n -n -m -m -l -l -k -k -j -j -i -i -h -h -g -g -f -f -e -e -d -d -c -c -b -b -a -a -SELECT t11.comment,t12.comment -FROM t1 t11,t1 t12 WHERE CONVERT(t11.koi8_ru_f USING utf8)=t12.utf8_f -ORDER BY t11.koi8_ru_f,t11.comment,t12.comment; -comment comment -LAT CAPIT A LAT CAPIT A -LAT CAPIT A LAT SMALL A -LAT SMALL A LAT CAPIT A -LAT SMALL A LAT SMALL A -LAT CAPIT B LAT CAPIT B -LAT CAPIT B LAT SMALL B -LAT SMALL B LAT CAPIT B -LAT SMALL B LAT SMALL B -LAT CAPIT C LAT CAPIT C -LAT CAPIT C LAT SMALL C -LAT SMALL C LAT CAPIT C -LAT SMALL C LAT SMALL C -LAT CAPIT D LAT CAPIT D -LAT CAPIT D LAT SMALL D -LAT SMALL D LAT CAPIT D -LAT SMALL D LAT SMALL D -LAT CAPIT E LAT CAPIT E -LAT CAPIT E LAT SMALL E -LAT SMALL E LAT CAPIT E -LAT SMALL E LAT SMALL E -LAT CAPIT F LAT CAPIT F -LAT CAPIT F LAT SMALL F -LAT SMALL F LAT CAPIT F -LAT SMALL F LAT SMALL F -LAT CAPIT G LAT CAPIT G -LAT CAPIT G LAT SMALL G -LAT SMALL G LAT CAPIT G -LAT SMALL G LAT SMALL G -LAT CAPIT H LAT CAPIT H -LAT CAPIT H LAT SMALL H -LAT SMALL H LAT CAPIT H -LAT SMALL H LAT SMALL H -LAT CAPIT I LAT CAPIT I -LAT CAPIT I LAT SMALL I -LAT SMALL I LAT CAPIT I -LAT SMALL I LAT SMALL I -LAT CAPIT J LAT CAPIT J -LAT CAPIT J LAT SMALL J -LAT SMALL J LAT CAPIT J -LAT SMALL J LAT SMALL J -LAT CAPIT K LAT CAPIT K -LAT CAPIT K LAT SMALL K -LAT SMALL K LAT CAPIT K -LAT SMALL K LAT SMALL K -LAT CAPIT L LAT CAPIT L -LAT CAPIT L LAT SMALL L -LAT SMALL L LAT CAPIT L -LAT SMALL L LAT SMALL L -LAT CAPIT M LAT CAPIT M -LAT CAPIT M LAT SMALL M -LAT SMALL M LAT CAPIT M -LAT SMALL M LAT SMALL M -LAT CAPIT N LAT CAPIT N -LAT CAPIT N LAT SMALL N -LAT SMALL N LAT CAPIT N -LAT SMALL N LAT SMALL N -LAT CAPIT O LAT CAPIT O -LAT CAPIT O LAT SMALL O -LAT SMALL O LAT CAPIT O -LAT SMALL O LAT SMALL O -LAT CAPIT P LAT CAPIT P -LAT CAPIT P LAT SMALL P -LAT SMALL P LAT CAPIT P -LAT SMALL P LAT SMALL P -LAT CAPIT Q LAT CAPIT Q -LAT CAPIT Q LAT SMALL Q -LAT SMALL Q LAT CAPIT Q -LAT SMALL Q LAT SMALL Q -LAT CAPIT R LAT CAPIT R -LAT CAPIT R LAT SMALL R -LAT SMALL R LAT CAPIT R -LAT SMALL R LAT SMALL R -LAT CAPIT S LAT CAPIT S -LAT CAPIT S LAT SMALL S -LAT SMALL S LAT CAPIT S -LAT SMALL S LAT SMALL S -LAT CAPIT T LAT CAPIT T -LAT CAPIT T LAT SMALL T -LAT SMALL T LAT CAPIT T -LAT SMALL T LAT SMALL T -LAT CAPIT U LAT CAPIT U -LAT CAPIT U LAT SMALL U -LAT SMALL U LAT CAPIT U -LAT SMALL U LAT SMALL U -LAT CAPIT V LAT CAPIT V -LAT CAPIT V LAT SMALL V -LAT SMALL V LAT CAPIT V -LAT SMALL V LAT SMALL V -LAT CAPIT W LAT CAPIT W -LAT CAPIT W LAT SMALL W -LAT SMALL W LAT CAPIT W -LAT SMALL W LAT SMALL W -LAT CAPIT X LAT CAPIT X -LAT CAPIT X LAT SMALL X -LAT SMALL X LAT CAPIT X -LAT SMALL X LAT SMALL X -LAT CAPIT Y LAT CAPIT Y -LAT CAPIT Y LAT SMALL Y -LAT SMALL Y LAT CAPIT Y -LAT SMALL Y LAT SMALL Y -LAT CAPIT Z LAT CAPIT Z -LAT CAPIT Z LAT SMALL Z -LAT SMALL Z LAT CAPIT Z -LAT SMALL Z LAT SMALL Z -CYR CAPIT A CYR CAPIT A -CYR CAPIT A CYR SMALL A -CYR SMALL A CYR CAPIT A -CYR SMALL A CYR SMALL A -CYR CAPIT BE CYR CAPIT BE -CYR CAPIT BE CYR SMALL BE -CYR SMALL BE CYR CAPIT BE -CYR SMALL BE CYR SMALL BE -CYR CAPIT VE CYR CAPIT VE -CYR CAPIT VE CYR SMALL VE -CYR SMALL VE CYR CAPIT VE -CYR SMALL VE CYR SMALL VE -CYR CAPIT GE CYR CAPIT GE -CYR CAPIT GE CYR SMALL GE -CYR SMALL GE CYR CAPIT GE -CYR SMALL GE CYR SMALL GE -CYR CAPIT DE CYR CAPIT DE -CYR CAPIT DE CYR SMALL DE -CYR SMALL DE CYR CAPIT DE -CYR SMALL DE CYR SMALL DE -CYR CAPIT IE CYR CAPIT IE -CYR CAPIT IE CYR CAPIT IO -CYR CAPIT IE CYR SMALL IE -CYR CAPIT IE CYR SMALL IO -CYR SMALL IE CYR CAPIT IE -CYR SMALL IE CYR CAPIT IO -CYR SMALL IE CYR SMALL IE -CYR SMALL IE CYR SMALL IO -CYR CAPIT IO CYR CAPIT IE -CYR CAPIT IO CYR CAPIT IO -CYR CAPIT IO CYR SMALL IE -CYR CAPIT IO CYR SMALL IO -CYR SMALL IO CYR CAPIT IE -CYR SMALL IO CYR CAPIT IO -CYR SMALL IO CYR SMALL IE -CYR SMALL IO CYR SMALL IO -CYR CAPIT ZHE CYR CAPIT ZHE -CYR CAPIT ZHE CYR SMALL ZHE -CYR SMALL ZHE CYR CAPIT ZHE -CYR SMALL ZHE CYR SMALL ZHE -CYR CAPIT ZE CYR CAPIT ZE -CYR CAPIT ZE CYR SMALL ZE -CYR SMALL ZE CYR CAPIT ZE -CYR SMALL ZE CYR SMALL ZE -CYR CAPIT I CYR CAPIT I -CYR CAPIT I CYR SMALL I -CYR SMALL I CYR CAPIT I -CYR SMALL I CYR SMALL I -CYR CAPIT KA CYR CAPIT KA -CYR CAPIT KA CYR SMALL KA -CYR SMALL KA CYR CAPIT KA -CYR SMALL KA CYR SMALL KA -CYR CAPIT EL CYR CAPIT EL -CYR CAPIT EL CYR SMALL EL -CYR SMALL EL CYR CAPIT EL -CYR SMALL EL CYR SMALL EL -CYR CAPIT EM CYR CAPIT EM -CYR CAPIT EM CYR SMALL EM -CYR SMALL EM CYR CAPIT EM -CYR SMALL EM CYR SMALL EM -CYR CAPIT EN CYR CAPIT EN -CYR CAPIT EN CYR SMALL EN -CYR SMALL EN CYR CAPIT EN -CYR SMALL EN CYR SMALL EN -CYR CAPIT O CYR CAPIT O -CYR CAPIT O CYR SMALL O -CYR SMALL O CYR CAPIT O -CYR SMALL O CYR SMALL O -CYR CAPIT PE CYR CAPIT PE -CYR CAPIT PE CYR SMALL PE -CYR SMALL PE CYR CAPIT PE -CYR SMALL PE CYR SMALL PE -CYR CAPIT ER CYR CAPIT ER -CYR CAPIT ER CYR SMALL ER -CYR SMALL ER CYR CAPIT ER -CYR SMALL ER CYR SMALL ER -CYR CAPIT ES CYR CAPIT ES -CYR CAPIT ES CYR SMALL ES -CYR SMALL ES CYR CAPIT ES -CYR SMALL ES CYR SMALL ES -CYR CAPIT TE CYR CAPIT TE -CYR CAPIT TE CYR SMALL TE -CYR SMALL TE CYR CAPIT TE -CYR SMALL TE CYR SMALL TE -CYR CAPIT U CYR CAPIT U -CYR CAPIT U CYR SMALL U -CYR SMALL U CYR CAPIT U -CYR SMALL U CYR SMALL U -CYR CAPIT EF CYR CAPIT EF -CYR CAPIT EF CYR SMALL EF -CYR SMALL EF CYR CAPIT EF -CYR SMALL EF CYR SMALL EF -CYR CAPIT HA CYR CAPIT HA -CYR CAPIT HA CYR SMALL HA -CYR SMALL HA CYR CAPIT HA -CYR SMALL HA CYR SMALL HA -CYR CAPIT TSE CYR CAPIT TSE -CYR CAPIT TSE CYR SMALL TSE -CYR SMALL TSE CYR CAPIT TSE -CYR SMALL TSE CYR SMALL TSE -CYR CAPIT CHE CYR CAPIT CHE -CYR CAPIT CHE CYR SMALL CHE -CYR SMALL CHE CYR CAPIT CHE -CYR SMALL CHE CYR SMALL CHE -CYR CAPIT SHA CYR CAPIT SHA -CYR CAPIT SHA CYR SMALL SHA -CYR SMALL SHA CYR CAPIT SHA -CYR SMALL SHA CYR SMALL SHA -CYR CAPIT SCHA CYR CAPIT SCHA -CYR CAPIT SCHA CYR SMALL SCHA -CYR SMALL SCHA CYR CAPIT SCHA -CYR SMALL SCHA CYR SMALL SCHA -CYR CAPIT HARD SIGN CYR CAPIT HARD SIGN -CYR CAPIT HARD SIGN CYR SMALL HARD SIGN -CYR SMALL HARD SIGN CYR CAPIT HARD SIGN -CYR SMALL HARD SIGN CYR SMALL HARD SIGN -CYR CAPIT YERU CYR CAPIT YERU -CYR CAPIT YERU CYR SMALL YERU -CYR SMALL YERU CYR CAPIT YERU -CYR SMALL YERU CYR SMALL YERU -CYR CAPIT SOFT SIGN CYR CAPIT SOFT SIGN -CYR CAPIT SOFT SIGN CYR SMALL SOFT SIGN -CYR SMALL SOFT SIGN CYR CAPIT SOFT SIGN -CYR SMALL SOFT SIGN CYR SMALL SOFT SIGN -CYR CAPIT E CYR CAPIT E -CYR CAPIT E CYR SMALL E -CYR SMALL E CYR CAPIT E -CYR SMALL E CYR SMALL E -CYR CAPIT YU CYR CAPIT YU -CYR CAPIT YU CYR SMALL YU -CYR SMALL YU CYR CAPIT YU -CYR SMALL YU CYR SMALL YU -CYR CAPIT YA CYR CAPIT YA -CYR CAPIT YA CYR SMALL YA -CYR SMALL YA CYR CAPIT YA -CYR SMALL YA CYR SMALL YA -SELECT t11.comment,t12.comment -FROM t1 t11,t1 t12 -WHERE t11.koi8_ru_f=CONVERT(t12.utf8_f USING koi8r) -ORDER BY t12.utf8_f,t11.comment,t12.comment; -comment comment -LAT CAPIT A LAT CAPIT A -LAT CAPIT A LAT SMALL A -LAT SMALL A LAT CAPIT A -LAT SMALL A LAT SMALL A -LAT CAPIT B LAT CAPIT B -LAT CAPIT B LAT SMALL B -LAT SMALL B LAT CAPIT B -LAT SMALL B LAT SMALL B -LAT CAPIT C LAT CAPIT C -LAT CAPIT C LAT SMALL C -LAT SMALL C LAT CAPIT C -LAT SMALL C LAT SMALL C -LAT CAPIT D LAT CAPIT D -LAT CAPIT D LAT SMALL D -LAT SMALL D LAT CAPIT D -LAT SMALL D LAT SMALL D -LAT CAPIT E LAT CAPIT E -LAT CAPIT E LAT SMALL E -LAT SMALL E LAT CAPIT E -LAT SMALL E LAT SMALL E -LAT CAPIT F LAT CAPIT F -LAT CAPIT F LAT SMALL F -LAT SMALL F LAT CAPIT F -LAT SMALL F LAT SMALL F -LAT CAPIT G LAT CAPIT G -LAT CAPIT G LAT SMALL G -LAT SMALL G LAT CAPIT G -LAT SMALL G LAT SMALL G -LAT CAPIT H LAT CAPIT H -LAT CAPIT H LAT SMALL H -LAT SMALL H LAT CAPIT H -LAT SMALL H LAT SMALL H -LAT CAPIT I LAT CAPIT I -LAT CAPIT I LAT SMALL I -LAT SMALL I LAT CAPIT I -LAT SMALL I LAT SMALL I -LAT CAPIT J LAT CAPIT J -LAT CAPIT J LAT SMALL J -LAT SMALL J LAT CAPIT J -LAT SMALL J LAT SMALL J -LAT CAPIT K LAT CAPIT K -LAT CAPIT K LAT SMALL K -LAT SMALL K LAT CAPIT K -LAT SMALL K LAT SMALL K -LAT CAPIT L LAT CAPIT L -LAT CAPIT L LAT SMALL L -LAT SMALL L LAT CAPIT L -LAT SMALL L LAT SMALL L -LAT CAPIT M LAT CAPIT M -LAT CAPIT M LAT SMALL M -LAT SMALL M LAT CAPIT M -LAT SMALL M LAT SMALL M -LAT CAPIT N LAT CAPIT N -LAT CAPIT N LAT SMALL N -LAT SMALL N LAT CAPIT N -LAT SMALL N LAT SMALL N -LAT CAPIT O LAT CAPIT O -LAT CAPIT O LAT SMALL O -LAT SMALL O LAT CAPIT O -LAT SMALL O LAT SMALL O -LAT CAPIT P LAT CAPIT P -LAT CAPIT P LAT SMALL P -LAT SMALL P LAT CAPIT P -LAT SMALL P LAT SMALL P -LAT CAPIT Q LAT CAPIT Q -LAT CAPIT Q LAT SMALL Q -LAT SMALL Q LAT CAPIT Q -LAT SMALL Q LAT SMALL Q -LAT CAPIT R LAT CAPIT R -LAT CAPIT R LAT SMALL R -LAT SMALL R LAT CAPIT R -LAT SMALL R LAT SMALL R -LAT CAPIT S LAT CAPIT S -LAT CAPIT S LAT SMALL S -LAT SMALL S LAT CAPIT S -LAT SMALL S LAT SMALL S -LAT CAPIT T LAT CAPIT T -LAT CAPIT T LAT SMALL T -LAT SMALL T LAT CAPIT T -LAT SMALL T LAT SMALL T -LAT CAPIT U LAT CAPIT U -LAT CAPIT U LAT SMALL U -LAT SMALL U LAT CAPIT U -LAT SMALL U LAT SMALL U -LAT CAPIT V LAT CAPIT V -LAT CAPIT V LAT SMALL V -LAT SMALL V LAT CAPIT V -LAT SMALL V LAT SMALL V -LAT CAPIT W LAT CAPIT W -LAT CAPIT W LAT SMALL W -LAT SMALL W LAT CAPIT W -LAT SMALL W LAT SMALL W -LAT CAPIT X LAT CAPIT X -LAT CAPIT X LAT SMALL X -LAT SMALL X LAT CAPIT X -LAT SMALL X LAT SMALL X -LAT CAPIT Y LAT CAPIT Y -LAT CAPIT Y LAT SMALL Y -LAT SMALL Y LAT CAPIT Y -LAT SMALL Y LAT SMALL Y -LAT CAPIT Z LAT CAPIT Z -LAT CAPIT Z LAT SMALL Z -LAT SMALL Z LAT CAPIT Z -LAT SMALL Z LAT SMALL Z -CYR CAPIT A CYR CAPIT A -CYR CAPIT A CYR SMALL A -CYR SMALL A CYR CAPIT A -CYR SMALL A CYR SMALL A -CYR CAPIT BE CYR CAPIT BE -CYR CAPIT BE CYR SMALL BE -CYR SMALL BE CYR CAPIT BE -CYR SMALL BE CYR SMALL BE -CYR CAPIT VE CYR CAPIT VE -CYR CAPIT VE CYR SMALL VE -CYR SMALL VE CYR CAPIT VE -CYR SMALL VE CYR SMALL VE -CYR CAPIT GE CYR CAPIT GE -CYR CAPIT GE CYR SMALL GE -CYR SMALL GE CYR CAPIT GE -CYR SMALL GE CYR SMALL GE -CYR CAPIT DE CYR CAPIT DE -CYR CAPIT DE CYR SMALL DE -CYR SMALL DE CYR CAPIT DE -CYR SMALL DE CYR SMALL DE -CYR CAPIT IE CYR CAPIT IE -CYR CAPIT IE CYR SMALL IE -CYR CAPIT IO CYR CAPIT IO -CYR CAPIT IO CYR SMALL IO -CYR SMALL IE CYR CAPIT IE -CYR SMALL IE CYR SMALL IE -CYR SMALL IO CYR CAPIT IO -CYR SMALL IO CYR SMALL IO -CYR CAPIT ZHE CYR CAPIT ZHE -CYR CAPIT ZHE CYR SMALL ZHE -CYR SMALL ZHE CYR CAPIT ZHE -CYR SMALL ZHE CYR SMALL ZHE -CYR CAPIT ZE CYR CAPIT ZE -CYR CAPIT ZE CYR SMALL ZE -CYR SMALL ZE CYR CAPIT ZE -CYR SMALL ZE CYR SMALL ZE -CYR CAPIT I CYR CAPIT I -CYR CAPIT I CYR SMALL I -CYR SMALL I CYR CAPIT I -CYR SMALL I CYR SMALL I -CYR CAPIT KA CYR CAPIT KA -CYR CAPIT KA CYR SMALL KA -CYR SMALL KA CYR CAPIT KA -CYR SMALL KA CYR SMALL KA -CYR CAPIT EL CYR CAPIT EL -CYR CAPIT EL CYR SMALL EL -CYR SMALL EL CYR CAPIT EL -CYR SMALL EL CYR SMALL EL -CYR CAPIT EM CYR CAPIT EM -CYR CAPIT EM CYR SMALL EM -CYR SMALL EM CYR CAPIT EM -CYR SMALL EM CYR SMALL EM -CYR CAPIT EN CYR CAPIT EN -CYR CAPIT EN CYR SMALL EN -CYR SMALL EN CYR CAPIT EN -CYR SMALL EN CYR SMALL EN -CYR CAPIT O CYR CAPIT O -CYR CAPIT O CYR SMALL O -CYR SMALL O CYR CAPIT O -CYR SMALL O CYR SMALL O -CYR CAPIT PE CYR CAPIT PE -CYR CAPIT PE CYR SMALL PE -CYR SMALL PE CYR CAPIT PE -CYR SMALL PE CYR SMALL PE -CYR CAPIT ER CYR CAPIT ER -CYR CAPIT ER CYR SMALL ER -CYR SMALL ER CYR CAPIT ER -CYR SMALL ER CYR SMALL ER -CYR CAPIT ES CYR CAPIT ES -CYR CAPIT ES CYR SMALL ES -CYR SMALL ES CYR CAPIT ES -CYR SMALL ES CYR SMALL ES -CYR CAPIT TE CYR CAPIT TE -CYR CAPIT TE CYR SMALL TE -CYR SMALL TE CYR CAPIT TE -CYR SMALL TE CYR SMALL TE -CYR CAPIT U CYR CAPIT U -CYR CAPIT U CYR SMALL U -CYR SMALL U CYR CAPIT U -CYR SMALL U CYR SMALL U -CYR CAPIT EF CYR CAPIT EF -CYR CAPIT EF CYR SMALL EF -CYR SMALL EF CYR CAPIT EF -CYR SMALL EF CYR SMALL EF -CYR CAPIT HA CYR CAPIT HA -CYR CAPIT HA CYR SMALL HA -CYR SMALL HA CYR CAPIT HA -CYR SMALL HA CYR SMALL HA -CYR CAPIT TSE CYR CAPIT TSE -CYR CAPIT TSE CYR SMALL TSE -CYR SMALL TSE CYR CAPIT TSE -CYR SMALL TSE CYR SMALL TSE -CYR CAPIT CHE CYR CAPIT CHE -CYR CAPIT CHE CYR SMALL CHE -CYR SMALL CHE CYR CAPIT CHE -CYR SMALL CHE CYR SMALL CHE -CYR CAPIT SHA CYR CAPIT SHA -CYR CAPIT SHA CYR SMALL SHA -CYR SMALL SHA CYR CAPIT SHA -CYR SMALL SHA CYR SMALL SHA -CYR CAPIT SCHA CYR CAPIT SCHA -CYR CAPIT SCHA CYR SMALL SCHA -CYR SMALL SCHA CYR CAPIT SCHA -CYR SMALL SCHA CYR SMALL SCHA -CYR CAPIT HARD SIGN CYR CAPIT HARD SIGN -CYR CAPIT HARD SIGN CYR SMALL HARD SIGN -CYR SMALL HARD SIGN CYR CAPIT HARD SIGN -CYR SMALL HARD SIGN CYR SMALL HARD SIGN -CYR CAPIT YERU CYR CAPIT YERU -CYR CAPIT YERU CYR SMALL YERU -CYR SMALL YERU CYR CAPIT YERU -CYR SMALL YERU CYR SMALL YERU -CYR CAPIT SOFT SIGN CYR CAPIT SOFT SIGN -CYR CAPIT SOFT SIGN CYR SMALL SOFT SIGN -CYR SMALL SOFT SIGN CYR CAPIT SOFT SIGN -CYR SMALL SOFT SIGN CYR SMALL SOFT SIGN -CYR CAPIT E CYR CAPIT E -CYR CAPIT E CYR SMALL E -CYR SMALL E CYR CAPIT E -CYR SMALL E CYR SMALL E -CYR CAPIT YU CYR CAPIT YU -CYR CAPIT YU CYR SMALL YU -CYR SMALL YU CYR CAPIT YU -CYR SMALL YU CYR SMALL YU -CYR CAPIT YA CYR CAPIT YA -CYR CAPIT YA CYR SMALL YA -CYR SMALL YA CYR CAPIT YA -CYR SMALL YA CYR SMALL YA -ALTER TABLE t1 ADD ucs2_f CHAR(32) CHARACTER SET ucs2; -ALTER TABLE t1 CHANGE ucs2_f ucs2_f CHAR(32) UNICODE NOT NULL; -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0391,'GREEK CAPIT ALPHA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0392,'GREEK CAPIT BETA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0393,'GREEK CAPIT GAMMA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0394,'GREEK CAPIT DELTA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0395,'GREEK CAPIT EPSILON'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B1,'GREEK SMALL ALPHA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B2,'GREEK SMALL BETA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B3,'GREEK SMALL GAMMA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B4,'GREEK SMALL DELTA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B5,'GREEK SMALL EPSILON'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0531,'ARMENIAN CAPIT AYB'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0532,'ARMENIAN CAPIT BEN'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0533,'ARMENIAN CAPIT GIM'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0534,'ARMENIAN CAPIT DA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0535,'ARMENIAN CAPIT ECH'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0536,'ARMENIAN CAPIT ZA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0561,'ARMENIAN SMALL YAB'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0562,'ARMENIAN SMALL BEN'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0563,'ARMENIAN SMALL GIM'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0564,'ARMENIAN SMALL DA'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0565,'ARMENIAN SMALL ECH'); -INSERT INTO t1 (ucs2_f,comment) VALUES (0x0566,'ARMENIAN SMALL ZA'); -ALTER TABLE t1 ADD armscii8_f CHAR(32) CHARACTER SET armscii8 NOT NULL; -ALTER TABLE t1 ADD greek_f CHAR(32) CHARACTER SET greek NOT NULL; -UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE 'GRE%'; -UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE 'ARM%'; -UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=''; -UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=''; -SELECT min(comment),count(*) FROM t1 GROUP BY ucs2_f; -min(comment) count(*) -LAT CAPIT A 2 -LAT CAPIT B 2 -LAT CAPIT C 2 -LAT CAPIT D 2 -LAT CAPIT E 2 -LAT CAPIT F 2 -LAT CAPIT G 2 -LAT CAPIT H 2 -LAT CAPIT I 2 -LAT CAPIT J 2 -LAT CAPIT K 2 -LAT CAPIT L 2 -LAT CAPIT M 2 -LAT CAPIT N 2 -LAT CAPIT O 2 -LAT CAPIT P 2 -LAT CAPIT Q 2 -LAT CAPIT R 2 -LAT CAPIT S 2 -LAT CAPIT T 2 -LAT CAPIT U 2 -LAT CAPIT V 2 -LAT CAPIT W 2 -LAT CAPIT X 2 -LAT CAPIT Y 2 -LAT CAPIT Z 2 -GREEK CAPIT ALPHA 2 -GREEK CAPIT BETA 2 -GREEK CAPIT GAMMA 2 -GREEK CAPIT DELTA 2 -GREEK CAPIT EPSILON 2 -CYR CAPIT A 2 -CYR CAPIT BE 2 -CYR CAPIT VE 2 -CYR CAPIT GE 2 -CYR CAPIT DE 2 -CYR CAPIT IE 4 -CYR CAPIT ZHE 2 -CYR CAPIT ZE 2 -CYR CAPIT I 2 -CYR CAPIT KA 2 -CYR CAPIT EL 2 -CYR CAPIT EM 2 -CYR CAPIT EN 2 -CYR CAPIT O 2 -CYR CAPIT PE 2 -CYR CAPIT ER 2 -CYR CAPIT ES 2 -CYR CAPIT TE 2 -CYR CAPIT U 2 -CYR CAPIT EF 2 -CYR CAPIT HA 2 -CYR CAPIT TSE 2 -CYR CAPIT CHE 2 -CYR CAPIT SHA 2 -CYR CAPIT SCHA 2 -CYR CAPIT HARD SIGN 2 -CYR CAPIT YERU 2 -CYR CAPIT SOFT SIGN 2 -CYR CAPIT E 2 -CYR CAPIT YU 2 -CYR CAPIT YA 2 -ARMENIAN CAPIT AYB 2 -ARMENIAN CAPIT BEN 2 -ARMENIAN CAPIT GIM 2 -ARMENIAN CAPIT DA 2 -ARMENIAN CAPIT ECH 2 -ARMENIAN CAPIT ZA 2 -DROP TABLE t1; From 89fee820fccf4d57f99738a10a8473519e0e718f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 22:01:57 +0400 Subject: [PATCH 193/267] ctype_many.result: new file As far as bk could not apply delta, I removed it. Now I'm adding the new version into the tree again. --- mysql-test/r/ctype_many.result | 1685 ++++++++++++++++++++++++++++++++ 1 file changed, 1685 insertions(+) create mode 100644 mysql-test/r/ctype_many.result diff --git a/mysql-test/r/ctype_many.result b/mysql-test/r/ctype_many.result new file mode 100644 index 00000000000..096ddf8188b --- /dev/null +++ b/mysql-test/r/ctype_many.result @@ -0,0 +1,1685 @@ +DROP TABLE IF EXISTS t1; +SET NAMES latin1; +CREATE TABLE t1 ( +comment CHAR(32) ASCII NOT NULL, +koi8_ru_f CHAR(32) CHARACTER SET koi8r NOT NULL +) CHARSET=latin5; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `comment` char(32) character set latin1 NOT NULL default '', + `koi8_ru_f` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin5 +ALTER TABLE t1 CHANGE comment comment CHAR(32) CHARACTER SET latin2 NOT NULL; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `comment` char(32) character set latin2 NOT NULL default '', + `koi8_ru_f` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin5 +ALTER TABLE t1 ADD latin5_f CHAR(32) NOT NULL; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `comment` char(32) character set latin2 NOT NULL default '', + `koi8_ru_f` char(32) character set koi8r NOT NULL default '', + `latin5_f` char(32) NOT NULL default '' +) TYPE=MyISAM CHARSET=latin5 +ALTER TABLE t1 CHARSET=latin2; +ALTER TABLE t1 ADD latin2_f CHAR(32) NOT NULL; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `comment` char(32) NOT NULL default '', + `koi8_ru_f` char(32) character set koi8r NOT NULL default '', + `latin5_f` char(32) character set latin5 NOT NULL default '', + `latin2_f` char(32) NOT NULL default '' +) TYPE=MyISAM CHARSET=latin2 +ALTER TABLE t1 DROP latin2_f, DROP latin5_f; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `comment` char(32) NOT NULL default '', + `koi8_ru_f` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin2 +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('a','LAT SMALL A'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('b','LAT SMALL B'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('c','LAT SMALL C'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('d','LAT SMALL D'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('e','LAT SMALL E'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('f','LAT SMALL F'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('g','LAT SMALL G'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('h','LAT SMALL H'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('i','LAT SMALL I'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('j','LAT SMALL J'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('k','LAT SMALL K'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('l','LAT SMALL L'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('m','LAT SMALL M'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('n','LAT SMALL N'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('o','LAT SMALL O'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('p','LAT SMALL P'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('q','LAT SMALL Q'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('r','LAT SMALL R'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('s','LAT SMALL S'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('t','LAT SMALL T'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('u','LAT SMALL U'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('v','LAT SMALL V'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('w','LAT SMALL W'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('x','LAT SMALL X'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('y','LAT SMALL Y'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('z','LAT SMALL Z'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('A','LAT CAPIT A'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('B','LAT CAPIT B'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('C','LAT CAPIT C'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('D','LAT CAPIT D'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('E','LAT CAPIT E'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('F','LAT CAPIT F'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('G','LAT CAPIT G'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('H','LAT CAPIT H'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('I','LAT CAPIT I'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('J','LAT CAPIT J'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('K','LAT CAPIT K'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('L','LAT CAPIT L'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('M','LAT CAPIT M'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('N','LAT CAPIT N'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('O','LAT CAPIT O'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('P','LAT CAPIT P'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Q','LAT CAPIT Q'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('R','LAT CAPIT R'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('S','LAT CAPIT S'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('T','LAT CAPIT T'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('U','LAT CAPIT U'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('V','LAT CAPIT V'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('W','LAT CAPIT W'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('X','LAT CAPIT X'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Y','LAT CAPIT Y'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES ('Z','LAT CAPIT Z'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Á','CYR SMALL A'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Â','CYR SMALL BE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'×','CYR SMALL VE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ç','CYR SMALL GE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ä','CYR SMALL DE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Å','CYR SMALL IE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'£','CYR SMALL IO'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ö','CYR SMALL ZHE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ú','CYR SMALL ZE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'É','CYR SMALL I'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ë','CYR SMALL KA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ì','CYR SMALL EL'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Í','CYR SMALL EM'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Î','CYR SMALL EN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ï','CYR SMALL O'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ð','CYR SMALL PE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ò','CYR SMALL ER'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ó','CYR SMALL ES'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ô','CYR SMALL TE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Õ','CYR SMALL U'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Æ','CYR SMALL EF'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'È','CYR SMALL HA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ã','CYR SMALL TSE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Þ','CYR SMALL CHE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Û','CYR SMALL SHA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ý','CYR SMALL SCHA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ß','CYR SMALL HARD SIGN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ù','CYR SMALL YERU'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ø','CYR SMALL SOFT SIGN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ü','CYR SMALL E'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'À','CYR SMALL YU'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'Ñ','CYR SMALL YA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'á','CYR CAPIT A'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'â','CYR CAPIT BE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'÷','CYR CAPIT VE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ç','CYR CAPIT GE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ä','CYR CAPIT DE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'å','CYR CAPIT IE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'³','CYR CAPIT IO'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ö','CYR CAPIT ZHE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ú','CYR CAPIT ZE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'é','CYR CAPIT I'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ë','CYR CAPIT KA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ì','CYR CAPIT EL'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'í','CYR CAPIT EM'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'î','CYR CAPIT EN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ï','CYR CAPIT O'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ð','CYR CAPIT PE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ò','CYR CAPIT ER'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ó','CYR CAPIT ES'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ô','CYR CAPIT TE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'õ','CYR CAPIT U'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'æ','CYR CAPIT EF'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'è','CYR CAPIT HA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ã','CYR CAPIT TSE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'þ','CYR CAPIT CHE'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'û','CYR CAPIT SHA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ý','CYR CAPIT SCHA'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ÿ','CYR CAPIT HARD SIGN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ù','CYR CAPIT YERU'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ø','CYR CAPIT SOFT SIGN'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ü','CYR CAPIT E'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'à','CYR CAPIT YU'); +INSERT INTO t1 (koi8_ru_f,comment) VALUES (_koi8r'ñ','CYR CAPIT YA'); +SET NAMES utf8; +SELECT koi8_ru_f,MIN(comment),COUNT(*) FROM t1 GROUP BY 1; +koi8_ru_f MIN(comment) COUNT(*) +a LAT CAPIT A 2 +b LAT CAPIT B 2 +c LAT CAPIT C 2 +d LAT CAPIT D 2 +e LAT CAPIT E 2 +f LAT CAPIT F 2 +g LAT CAPIT G 2 +h LAT CAPIT H 2 +i LAT CAPIT I 2 +j LAT CAPIT J 2 +k LAT CAPIT K 2 +l LAT CAPIT L 2 +m LAT CAPIT M 2 +n LAT CAPIT N 2 +o LAT CAPIT O 2 +p LAT CAPIT P 2 +q LAT CAPIT Q 2 +r LAT CAPIT R 2 +s LAT CAPIT S 2 +t LAT CAPIT T 2 +u LAT CAPIT U 2 +v LAT CAPIT V 2 +w LAT CAPIT W 2 +x LAT CAPIT X 2 +y LAT CAPIT Y 2 +z LAT CAPIT Z 2 +а CYR CAPIT A 2 +б CYR CAPIT BE 2 +в CYR CAPIT VE 2 +г CYR CAPIT GE 2 +д CYR CAPIT DE 2 +е CYR CAPIT IE 2 +Ñ‘ CYR CAPIT IO 2 +ж CYR CAPIT ZHE 2 +з CYR CAPIT ZE 2 +и CYR CAPIT I 2 +к CYR CAPIT KA 2 +л CYR CAPIT EL 2 +м CYR CAPIT EM 2 +н CYR CAPIT EN 2 +о CYR CAPIT O 2 +п CYR CAPIT PE 2 +Ñ€ CYR CAPIT ER 2 +Ñ CYR CAPIT ES 2 +Ñ‚ CYR CAPIT TE 2 +у CYR CAPIT U 2 +Ñ„ CYR CAPIT EF 2 +Ñ… CYR CAPIT HA 2 +ц CYR CAPIT TSE 2 +ч CYR CAPIT CHE 2 +ш CYR CAPIT SHA 2 +щ CYR CAPIT SCHA 2 +ÑŠ CYR CAPIT HARD SIGN 2 +Ñ‹ CYR CAPIT YERU 2 +ÑŒ CYR CAPIT SOFT SIGN 2 +Ñ CYR CAPIT E 2 +ÑŽ CYR CAPIT YU 2 +Ñ CYR CAPIT YA 2 +ALTER TABLE t1 ADD utf8_f CHAR(32) CHARACTER SET utf8 NOT NULL; +UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8); +SET NAMES koi8r; +SELECT * FROM t1; +comment koi8_ru_f utf8_f +LAT SMALL A a a +LAT SMALL B b b +LAT SMALL C c c +LAT SMALL D d d +LAT SMALL E e e +LAT SMALL F f f +LAT SMALL G g g +LAT SMALL H h h +LAT SMALL I i i +LAT SMALL J j j +LAT SMALL K k k +LAT SMALL L l l +LAT SMALL M m m +LAT SMALL N n n +LAT SMALL O o o +LAT SMALL P p p +LAT SMALL Q q q +LAT SMALL R r r +LAT SMALL S s s +LAT SMALL T t t +LAT SMALL U u u +LAT SMALL V v v +LAT SMALL W w w +LAT SMALL X x x +LAT SMALL Y y y +LAT SMALL Z z z +LAT CAPIT A A A +LAT CAPIT B B B +LAT CAPIT C C C +LAT CAPIT D D D +LAT CAPIT E E E +LAT CAPIT F F F +LAT CAPIT G G G +LAT CAPIT H H H +LAT CAPIT I I I +LAT CAPIT J J J +LAT CAPIT K K K +LAT CAPIT L L L +LAT CAPIT M M M +LAT CAPIT N N N +LAT CAPIT O O O +LAT CAPIT P P P +LAT CAPIT Q Q Q +LAT CAPIT R R R +LAT CAPIT S S S +LAT CAPIT T T T +LAT CAPIT U U U +LAT CAPIT V V V +LAT CAPIT W W W +LAT CAPIT X X X +LAT CAPIT Y Y Y +LAT CAPIT Z Z Z +CYR SMALL A Á Á +CYR SMALL BE   +CYR SMALL VE × × +CYR SMALL GE Ç Ç +CYR SMALL DE Ä Ä +CYR SMALL IE Å Å +CYR SMALL IO £ £ +CYR SMALL ZHE Ö Ö +CYR SMALL ZE Ú Ú +CYR SMALL I É É +CYR SMALL KA Ë Ë +CYR SMALL EL Ì Ì +CYR SMALL EM Í Í +CYR SMALL EN Î Î +CYR SMALL O Ï Ï +CYR SMALL PE Ð Ð +CYR SMALL ER Ò Ò +CYR SMALL ES Ó Ó +CYR SMALL TE Ô Ô +CYR SMALL U Õ Õ +CYR SMALL EF Æ Æ +CYR SMALL HA È È +CYR SMALL TSE à à +CYR SMALL CHE Þ Þ +CYR SMALL SHA Û Û +CYR SMALL SCHA Ý Ý +CYR SMALL HARD SIGN ß ß +CYR SMALL YERU Ù Ù +CYR SMALL SOFT SIGN Ø Ø +CYR SMALL E Ü Ü +CYR SMALL YU À À +CYR SMALL YA Ñ Ñ +CYR CAPIT A á á +CYR CAPIT BE â â +CYR CAPIT VE ÷ ÷ +CYR CAPIT GE ç ç +CYR CAPIT DE ä ä +CYR CAPIT IE å å +CYR CAPIT IO ³ ³ +CYR CAPIT ZHE ö ö +CYR CAPIT ZE ú ú +CYR CAPIT I é é +CYR CAPIT KA ë ë +CYR CAPIT EL ì ì +CYR CAPIT EM í í +CYR CAPIT EN î î +CYR CAPIT O ï ï +CYR CAPIT PE ð ð +CYR CAPIT ER ò ò +CYR CAPIT ES ó ó +CYR CAPIT TE ô ô +CYR CAPIT U õ õ +CYR CAPIT EF æ æ +CYR CAPIT HA è è +CYR CAPIT TSE ã ã +CYR CAPIT CHE þ þ +CYR CAPIT SHA û û +CYR CAPIT SCHA ý ý +CYR CAPIT HARD SIGN ÿ ÿ +CYR CAPIT YERU ù ù +CYR CAPIT SOFT SIGN ø ø +CYR CAPIT E ü ü +CYR CAPIT YU à à +CYR CAPIT YA ñ ñ +ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL; +UPDATE t1 SET bin_f=koi8_ru_f; +SELECT COUNT(DISTINCT bin_f),COUNT(DISTINCT koi8_ru_f),COUNT(DISTINCT utf8_f) FROM t1; +COUNT(DISTINCT bin_f) COUNT(DISTINCT koi8_ru_f) COUNT(DISTINCT utf8_f) +116 58 57 +SELECT koi8_ru_f,MIN(comment) FROM t1 GROUP BY 1; +koi8_ru_f MIN(comment) +a LAT CAPIT A +b LAT CAPIT B +c LAT CAPIT C +d LAT CAPIT D +e LAT CAPIT E +f LAT CAPIT F +g LAT CAPIT G +h LAT CAPIT H +i LAT CAPIT I +j LAT CAPIT J +k LAT CAPIT K +l LAT CAPIT L +m LAT CAPIT M +n LAT CAPIT N +o LAT CAPIT O +p LAT CAPIT P +q LAT CAPIT Q +r LAT CAPIT R +s LAT CAPIT S +t LAT CAPIT T +u LAT CAPIT U +v LAT CAPIT V +w LAT CAPIT W +x LAT CAPIT X +y LAT CAPIT Y +z LAT CAPIT Z +Á CYR CAPIT A + CYR CAPIT BE +× CYR CAPIT VE +Ç CYR CAPIT GE +Ä CYR CAPIT DE +Å CYR CAPIT IE +£ CYR CAPIT IO +Ö CYR CAPIT ZHE +Ú CYR CAPIT ZE +É CYR CAPIT I +Ë CYR CAPIT KA +Ì CYR CAPIT EL +Í CYR CAPIT EM +Î CYR CAPIT EN +Ï CYR CAPIT O +Ð CYR CAPIT PE +Ò CYR CAPIT ER +Ó CYR CAPIT ES +Ô CYR CAPIT TE +Õ CYR CAPIT U +Æ CYR CAPIT EF +È CYR CAPIT HA +à CYR CAPIT TSE +Þ CYR CAPIT CHE +Û CYR CAPIT SHA +Ý CYR CAPIT SCHA +ß CYR CAPIT HARD SIGN +Ù CYR CAPIT YERU +Ø CYR CAPIT SOFT SIGN +Ü CYR CAPIT E +À CYR CAPIT YU +Ñ CYR CAPIT YA +SELECT utf8_f,MIN(comment) FROM t1 GROUP BY 1; +utf8_f MIN(comment) +a LAT CAPIT A +b LAT CAPIT B +c LAT CAPIT C +d LAT CAPIT D +e LAT CAPIT E +f LAT CAPIT F +g LAT CAPIT G +h LAT CAPIT H +i LAT CAPIT I +j LAT CAPIT J +k LAT CAPIT K +l LAT CAPIT L +m LAT CAPIT M +n LAT CAPIT N +o LAT CAPIT O +p LAT CAPIT P +q LAT CAPIT Q +r LAT CAPIT R +s LAT CAPIT S +t LAT CAPIT T +u LAT CAPIT U +v LAT CAPIT V +w LAT CAPIT W +x LAT CAPIT X +y LAT CAPIT Y +z LAT CAPIT Z +Á CYR CAPIT A + CYR CAPIT BE +× CYR CAPIT VE +Ç CYR CAPIT GE +Ä CYR CAPIT DE +Å CYR CAPIT IE +Ö CYR CAPIT ZHE +Ú CYR CAPIT ZE +É CYR CAPIT I +Ë CYR CAPIT KA +Ì CYR CAPIT EL +Í CYR CAPIT EM +Î CYR CAPIT EN +Ï CYR CAPIT O +Ð CYR CAPIT PE +Ò CYR CAPIT ER +Ó CYR CAPIT ES +Ô CYR CAPIT TE +Õ CYR CAPIT U +Æ CYR CAPIT EF +È CYR CAPIT HA +à CYR CAPIT TSE +Þ CYR CAPIT CHE +Û CYR CAPIT SHA +Ý CYR CAPIT SCHA +ß CYR CAPIT HARD SIGN +Ù CYR CAPIT YERU +Ø CYR CAPIT SOFT SIGN +Ü CYR CAPIT E +À CYR CAPIT YU +Ñ CYR CAPIT YA +SELECT DISTINCT koi8_ru_f FROM t1; +koi8_ru_f +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +Á + +× +Ç +Ä +Å +£ +Ö +Ú +É +Ë +Ì +Í +Î +Ï +Ð +Ò +Ó +Ô +Õ +Æ +È +à +Þ +Û +Ý +ß +Ù +Ø +Ü +À +Ñ +SELECT DISTINCT utf8_f FROM t1; +utf8_f +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +Á + +× +Ç +Ä +Å +Ö +Ú +É +Ë +Ì +Í +Î +Ï +Ð +Ò +Ó +Ô +Õ +Æ +È +à +Þ +Û +Ý +ß +Ù +Ø +Ü +À +Ñ +SELECT lower(koi8_ru_f) FROM t1 ORDER BY 1 DESC; +lower(koi8_ru_f) +Ñ +Ñ +À +À +Ü +Ü +Ø +Ø +Ù +Ù +ß +ß +Ý +Ý +Û +Û +Þ +Þ +à +à +È +È +Æ +Æ +Õ +Õ +Ô +Ô +Ó +Ó +Ò +Ò +Ð +Ð +Ï +Ï +Î +Î +Í +Í +Ì +Ì +Ë +Ë +É +É +Ú +Ú +Ö +Ö +£ +£ +Å +Å +Ä +Ä +Ç +Ç +× +× + + +Á +Á +z +z +y +y +x +x +w +w +v +v +u +u +t +t +s +s +r +r +q +q +p +p +o +o +n +n +m +m +l +l +k +k +j +j +i +i +h +h +g +g +f +f +e +e +d +d +c +c +b +b +a +a +SELECT lower(utf8_f) FROM t1 ORDER BY 1 DESC; +lower(utf8_f) +Ñ +Ñ +À +À +Ü +Ü +Ø +Ø +Ù +Ù +ß +ß +Ý +Ý +Û +Û +Þ +Þ +à +à +È +È +Æ +Æ +Õ +Õ +Ô +Ô +Ó +Ó +Ò +Ò +Ð +Ð +Ï +Ï +Î +Î +Í +Í +Ì +Ì +Ë +Ë +É +É +Ú +Ú +Ö +Ö +Å +£ +Å +£ +Ä +Ä +Ç +Ç +× +× + + +Á +Á +z +z +y +y +x +x +w +w +v +v +u +u +t +t +s +s +r +r +q +q +p +p +o +o +n +n +m +m +l +l +k +k +j +j +i +i +h +h +g +g +f +f +e +e +d +d +c +c +b +b +a +a +SELECT t11.comment,t12.comment +FROM t1 t11,t1 t12 WHERE CONVERT(t11.koi8_ru_f USING utf8)=t12.utf8_f +ORDER BY t11.koi8_ru_f,t11.comment,t12.comment; +comment comment +LAT CAPIT A LAT CAPIT A +LAT CAPIT A LAT SMALL A +LAT SMALL A LAT CAPIT A +LAT SMALL A LAT SMALL A +LAT CAPIT B LAT CAPIT B +LAT CAPIT B LAT SMALL B +LAT SMALL B LAT CAPIT B +LAT SMALL B LAT SMALL B +LAT CAPIT C LAT CAPIT C +LAT CAPIT C LAT SMALL C +LAT SMALL C LAT CAPIT C +LAT SMALL C LAT SMALL C +LAT CAPIT D LAT CAPIT D +LAT CAPIT D LAT SMALL D +LAT SMALL D LAT CAPIT D +LAT SMALL D LAT SMALL D +LAT CAPIT E LAT CAPIT E +LAT CAPIT E LAT SMALL E +LAT SMALL E LAT CAPIT E +LAT SMALL E LAT SMALL E +LAT CAPIT F LAT CAPIT F +LAT CAPIT F LAT SMALL F +LAT SMALL F LAT CAPIT F +LAT SMALL F LAT SMALL F +LAT CAPIT G LAT CAPIT G +LAT CAPIT G LAT SMALL G +LAT SMALL G LAT CAPIT G +LAT SMALL G LAT SMALL G +LAT CAPIT H LAT CAPIT H +LAT CAPIT H LAT SMALL H +LAT SMALL H LAT CAPIT H +LAT SMALL H LAT SMALL H +LAT CAPIT I LAT CAPIT I +LAT CAPIT I LAT SMALL I +LAT SMALL I LAT CAPIT I +LAT SMALL I LAT SMALL I +LAT CAPIT J LAT CAPIT J +LAT CAPIT J LAT SMALL J +LAT SMALL J LAT CAPIT J +LAT SMALL J LAT SMALL J +LAT CAPIT K LAT CAPIT K +LAT CAPIT K LAT SMALL K +LAT SMALL K LAT CAPIT K +LAT SMALL K LAT SMALL K +LAT CAPIT L LAT CAPIT L +LAT CAPIT L LAT SMALL L +LAT SMALL L LAT CAPIT L +LAT SMALL L LAT SMALL L +LAT CAPIT M LAT CAPIT M +LAT CAPIT M LAT SMALL M +LAT SMALL M LAT CAPIT M +LAT SMALL M LAT SMALL M +LAT CAPIT N LAT CAPIT N +LAT CAPIT N LAT SMALL N +LAT SMALL N LAT CAPIT N +LAT SMALL N LAT SMALL N +LAT CAPIT O LAT CAPIT O +LAT CAPIT O LAT SMALL O +LAT SMALL O LAT CAPIT O +LAT SMALL O LAT SMALL O +LAT CAPIT P LAT CAPIT P +LAT CAPIT P LAT SMALL P +LAT SMALL P LAT CAPIT P +LAT SMALL P LAT SMALL P +LAT CAPIT Q LAT CAPIT Q +LAT CAPIT Q LAT SMALL Q +LAT SMALL Q LAT CAPIT Q +LAT SMALL Q LAT SMALL Q +LAT CAPIT R LAT CAPIT R +LAT CAPIT R LAT SMALL R +LAT SMALL R LAT CAPIT R +LAT SMALL R LAT SMALL R +LAT CAPIT S LAT CAPIT S +LAT CAPIT S LAT SMALL S +LAT SMALL S LAT CAPIT S +LAT SMALL S LAT SMALL S +LAT CAPIT T LAT CAPIT T +LAT CAPIT T LAT SMALL T +LAT SMALL T LAT CAPIT T +LAT SMALL T LAT SMALL T +LAT CAPIT U LAT CAPIT U +LAT CAPIT U LAT SMALL U +LAT SMALL U LAT CAPIT U +LAT SMALL U LAT SMALL U +LAT CAPIT V LAT CAPIT V +LAT CAPIT V LAT SMALL V +LAT SMALL V LAT CAPIT V +LAT SMALL V LAT SMALL V +LAT CAPIT W LAT CAPIT W +LAT CAPIT W LAT SMALL W +LAT SMALL W LAT CAPIT W +LAT SMALL W LAT SMALL W +LAT CAPIT X LAT CAPIT X +LAT CAPIT X LAT SMALL X +LAT SMALL X LAT CAPIT X +LAT SMALL X LAT SMALL X +LAT CAPIT Y LAT CAPIT Y +LAT CAPIT Y LAT SMALL Y +LAT SMALL Y LAT CAPIT Y +LAT SMALL Y LAT SMALL Y +LAT CAPIT Z LAT CAPIT Z +LAT CAPIT Z LAT SMALL Z +LAT SMALL Z LAT CAPIT Z +LAT SMALL Z LAT SMALL Z +CYR CAPIT A CYR CAPIT A +CYR CAPIT A CYR SMALL A +CYR SMALL A CYR CAPIT A +CYR SMALL A CYR SMALL A +CYR CAPIT BE CYR CAPIT BE +CYR CAPIT BE CYR SMALL BE +CYR SMALL BE CYR CAPIT BE +CYR SMALL BE CYR SMALL BE +CYR CAPIT VE CYR CAPIT VE +CYR CAPIT VE CYR SMALL VE +CYR SMALL VE CYR CAPIT VE +CYR SMALL VE CYR SMALL VE +CYR CAPIT GE CYR CAPIT GE +CYR CAPIT GE CYR SMALL GE +CYR SMALL GE CYR CAPIT GE +CYR SMALL GE CYR SMALL GE +CYR CAPIT DE CYR CAPIT DE +CYR CAPIT DE CYR SMALL DE +CYR SMALL DE CYR CAPIT DE +CYR SMALL DE CYR SMALL DE +CYR CAPIT IE CYR CAPIT IE +CYR CAPIT IE CYR CAPIT IO +CYR CAPIT IE CYR SMALL IE +CYR CAPIT IE CYR SMALL IO +CYR SMALL IE CYR CAPIT IE +CYR SMALL IE CYR CAPIT IO +CYR SMALL IE CYR SMALL IE +CYR SMALL IE CYR SMALL IO +CYR CAPIT IO CYR CAPIT IE +CYR CAPIT IO CYR CAPIT IO +CYR CAPIT IO CYR SMALL IE +CYR CAPIT IO CYR SMALL IO +CYR SMALL IO CYR CAPIT IE +CYR SMALL IO CYR CAPIT IO +CYR SMALL IO CYR SMALL IE +CYR SMALL IO CYR SMALL IO +CYR CAPIT ZHE CYR CAPIT ZHE +CYR CAPIT ZHE CYR SMALL ZHE +CYR SMALL ZHE CYR CAPIT ZHE +CYR SMALL ZHE CYR SMALL ZHE +CYR CAPIT ZE CYR CAPIT ZE +CYR CAPIT ZE CYR SMALL ZE +CYR SMALL ZE CYR CAPIT ZE +CYR SMALL ZE CYR SMALL ZE +CYR CAPIT I CYR CAPIT I +CYR CAPIT I CYR SMALL I +CYR SMALL I CYR CAPIT I +CYR SMALL I CYR SMALL I +CYR CAPIT KA CYR CAPIT KA +CYR CAPIT KA CYR SMALL KA +CYR SMALL KA CYR CAPIT KA +CYR SMALL KA CYR SMALL KA +CYR CAPIT EL CYR CAPIT EL +CYR CAPIT EL CYR SMALL EL +CYR SMALL EL CYR CAPIT EL +CYR SMALL EL CYR SMALL EL +CYR CAPIT EM CYR CAPIT EM +CYR CAPIT EM CYR SMALL EM +CYR SMALL EM CYR CAPIT EM +CYR SMALL EM CYR SMALL EM +CYR CAPIT EN CYR CAPIT EN +CYR CAPIT EN CYR SMALL EN +CYR SMALL EN CYR CAPIT EN +CYR SMALL EN CYR SMALL EN +CYR CAPIT O CYR CAPIT O +CYR CAPIT O CYR SMALL O +CYR SMALL O CYR CAPIT O +CYR SMALL O CYR SMALL O +CYR CAPIT PE CYR CAPIT PE +CYR CAPIT PE CYR SMALL PE +CYR SMALL PE CYR CAPIT PE +CYR SMALL PE CYR SMALL PE +CYR CAPIT ER CYR CAPIT ER +CYR CAPIT ER CYR SMALL ER +CYR SMALL ER CYR CAPIT ER +CYR SMALL ER CYR SMALL ER +CYR CAPIT ES CYR CAPIT ES +CYR CAPIT ES CYR SMALL ES +CYR SMALL ES CYR CAPIT ES +CYR SMALL ES CYR SMALL ES +CYR CAPIT TE CYR CAPIT TE +CYR CAPIT TE CYR SMALL TE +CYR SMALL TE CYR CAPIT TE +CYR SMALL TE CYR SMALL TE +CYR CAPIT U CYR CAPIT U +CYR CAPIT U CYR SMALL U +CYR SMALL U CYR CAPIT U +CYR SMALL U CYR SMALL U +CYR CAPIT EF CYR CAPIT EF +CYR CAPIT EF CYR SMALL EF +CYR SMALL EF CYR CAPIT EF +CYR SMALL EF CYR SMALL EF +CYR CAPIT HA CYR CAPIT HA +CYR CAPIT HA CYR SMALL HA +CYR SMALL HA CYR CAPIT HA +CYR SMALL HA CYR SMALL HA +CYR CAPIT TSE CYR CAPIT TSE +CYR CAPIT TSE CYR SMALL TSE +CYR SMALL TSE CYR CAPIT TSE +CYR SMALL TSE CYR SMALL TSE +CYR CAPIT CHE CYR CAPIT CHE +CYR CAPIT CHE CYR SMALL CHE +CYR SMALL CHE CYR CAPIT CHE +CYR SMALL CHE CYR SMALL CHE +CYR CAPIT SHA CYR CAPIT SHA +CYR CAPIT SHA CYR SMALL SHA +CYR SMALL SHA CYR CAPIT SHA +CYR SMALL SHA CYR SMALL SHA +CYR CAPIT SCHA CYR CAPIT SCHA +CYR CAPIT SCHA CYR SMALL SCHA +CYR SMALL SCHA CYR CAPIT SCHA +CYR SMALL SCHA CYR SMALL SCHA +CYR CAPIT HARD SIGN CYR CAPIT HARD SIGN +CYR CAPIT HARD SIGN CYR SMALL HARD SIGN +CYR SMALL HARD SIGN CYR CAPIT HARD SIGN +CYR SMALL HARD SIGN CYR SMALL HARD SIGN +CYR CAPIT YERU CYR CAPIT YERU +CYR CAPIT YERU CYR SMALL YERU +CYR SMALL YERU CYR CAPIT YERU +CYR SMALL YERU CYR SMALL YERU +CYR CAPIT SOFT SIGN CYR CAPIT SOFT SIGN +CYR CAPIT SOFT SIGN CYR SMALL SOFT SIGN +CYR SMALL SOFT SIGN CYR CAPIT SOFT SIGN +CYR SMALL SOFT SIGN CYR SMALL SOFT SIGN +CYR CAPIT E CYR CAPIT E +CYR CAPIT E CYR SMALL E +CYR SMALL E CYR CAPIT E +CYR SMALL E CYR SMALL E +CYR CAPIT YU CYR CAPIT YU +CYR CAPIT YU CYR SMALL YU +CYR SMALL YU CYR CAPIT YU +CYR SMALL YU CYR SMALL YU +CYR CAPIT YA CYR CAPIT YA +CYR CAPIT YA CYR SMALL YA +CYR SMALL YA CYR CAPIT YA +CYR SMALL YA CYR SMALL YA +SELECT t11.comment,t12.comment +FROM t1 t11,t1 t12 +WHERE t11.koi8_ru_f=CONVERT(t12.utf8_f USING koi8r) +ORDER BY t12.utf8_f,t11.comment,t12.comment; +comment comment +LAT CAPIT A LAT CAPIT A +LAT CAPIT A LAT SMALL A +LAT SMALL A LAT CAPIT A +LAT SMALL A LAT SMALL A +LAT CAPIT B LAT CAPIT B +LAT CAPIT B LAT SMALL B +LAT SMALL B LAT CAPIT B +LAT SMALL B LAT SMALL B +LAT CAPIT C LAT CAPIT C +LAT CAPIT C LAT SMALL C +LAT SMALL C LAT CAPIT C +LAT SMALL C LAT SMALL C +LAT CAPIT D LAT CAPIT D +LAT CAPIT D LAT SMALL D +LAT SMALL D LAT CAPIT D +LAT SMALL D LAT SMALL D +LAT CAPIT E LAT CAPIT E +LAT CAPIT E LAT SMALL E +LAT SMALL E LAT CAPIT E +LAT SMALL E LAT SMALL E +LAT CAPIT F LAT CAPIT F +LAT CAPIT F LAT SMALL F +LAT SMALL F LAT CAPIT F +LAT SMALL F LAT SMALL F +LAT CAPIT G LAT CAPIT G +LAT CAPIT G LAT SMALL G +LAT SMALL G LAT CAPIT G +LAT SMALL G LAT SMALL G +LAT CAPIT H LAT CAPIT H +LAT CAPIT H LAT SMALL H +LAT SMALL H LAT CAPIT H +LAT SMALL H LAT SMALL H +LAT CAPIT I LAT CAPIT I +LAT CAPIT I LAT SMALL I +LAT SMALL I LAT CAPIT I +LAT SMALL I LAT SMALL I +LAT CAPIT J LAT CAPIT J +LAT CAPIT J LAT SMALL J +LAT SMALL J LAT CAPIT J +LAT SMALL J LAT SMALL J +LAT CAPIT K LAT CAPIT K +LAT CAPIT K LAT SMALL K +LAT SMALL K LAT CAPIT K +LAT SMALL K LAT SMALL K +LAT CAPIT L LAT CAPIT L +LAT CAPIT L LAT SMALL L +LAT SMALL L LAT CAPIT L +LAT SMALL L LAT SMALL L +LAT CAPIT M LAT CAPIT M +LAT CAPIT M LAT SMALL M +LAT SMALL M LAT CAPIT M +LAT SMALL M LAT SMALL M +LAT CAPIT N LAT CAPIT N +LAT CAPIT N LAT SMALL N +LAT SMALL N LAT CAPIT N +LAT SMALL N LAT SMALL N +LAT CAPIT O LAT CAPIT O +LAT CAPIT O LAT SMALL O +LAT SMALL O LAT CAPIT O +LAT SMALL O LAT SMALL O +LAT CAPIT P LAT CAPIT P +LAT CAPIT P LAT SMALL P +LAT SMALL P LAT CAPIT P +LAT SMALL P LAT SMALL P +LAT CAPIT Q LAT CAPIT Q +LAT CAPIT Q LAT SMALL Q +LAT SMALL Q LAT CAPIT Q +LAT SMALL Q LAT SMALL Q +LAT CAPIT R LAT CAPIT R +LAT CAPIT R LAT SMALL R +LAT SMALL R LAT CAPIT R +LAT SMALL R LAT SMALL R +LAT CAPIT S LAT CAPIT S +LAT CAPIT S LAT SMALL S +LAT SMALL S LAT CAPIT S +LAT SMALL S LAT SMALL S +LAT CAPIT T LAT CAPIT T +LAT CAPIT T LAT SMALL T +LAT SMALL T LAT CAPIT T +LAT SMALL T LAT SMALL T +LAT CAPIT U LAT CAPIT U +LAT CAPIT U LAT SMALL U +LAT SMALL U LAT CAPIT U +LAT SMALL U LAT SMALL U +LAT CAPIT V LAT CAPIT V +LAT CAPIT V LAT SMALL V +LAT SMALL V LAT CAPIT V +LAT SMALL V LAT SMALL V +LAT CAPIT W LAT CAPIT W +LAT CAPIT W LAT SMALL W +LAT SMALL W LAT CAPIT W +LAT SMALL W LAT SMALL W +LAT CAPIT X LAT CAPIT X +LAT CAPIT X LAT SMALL X +LAT SMALL X LAT CAPIT X +LAT SMALL X LAT SMALL X +LAT CAPIT Y LAT CAPIT Y +LAT CAPIT Y LAT SMALL Y +LAT SMALL Y LAT CAPIT Y +LAT SMALL Y LAT SMALL Y +LAT CAPIT Z LAT CAPIT Z +LAT CAPIT Z LAT SMALL Z +LAT SMALL Z LAT CAPIT Z +LAT SMALL Z LAT SMALL Z +CYR CAPIT A CYR CAPIT A +CYR CAPIT A CYR SMALL A +CYR SMALL A CYR CAPIT A +CYR SMALL A CYR SMALL A +CYR CAPIT BE CYR CAPIT BE +CYR CAPIT BE CYR SMALL BE +CYR SMALL BE CYR CAPIT BE +CYR SMALL BE CYR SMALL BE +CYR CAPIT VE CYR CAPIT VE +CYR CAPIT VE CYR SMALL VE +CYR SMALL VE CYR CAPIT VE +CYR SMALL VE CYR SMALL VE +CYR CAPIT GE CYR CAPIT GE +CYR CAPIT GE CYR SMALL GE +CYR SMALL GE CYR CAPIT GE +CYR SMALL GE CYR SMALL GE +CYR CAPIT DE CYR CAPIT DE +CYR CAPIT DE CYR SMALL DE +CYR SMALL DE CYR CAPIT DE +CYR SMALL DE CYR SMALL DE +CYR CAPIT IE CYR CAPIT IE +CYR CAPIT IE CYR SMALL IE +CYR CAPIT IO CYR CAPIT IO +CYR CAPIT IO CYR SMALL IO +CYR SMALL IE CYR CAPIT IE +CYR SMALL IE CYR SMALL IE +CYR SMALL IO CYR CAPIT IO +CYR SMALL IO CYR SMALL IO +CYR CAPIT ZHE CYR CAPIT ZHE +CYR CAPIT ZHE CYR SMALL ZHE +CYR SMALL ZHE CYR CAPIT ZHE +CYR SMALL ZHE CYR SMALL ZHE +CYR CAPIT ZE CYR CAPIT ZE +CYR CAPIT ZE CYR SMALL ZE +CYR SMALL ZE CYR CAPIT ZE +CYR SMALL ZE CYR SMALL ZE +CYR CAPIT I CYR CAPIT I +CYR CAPIT I CYR SMALL I +CYR SMALL I CYR CAPIT I +CYR SMALL I CYR SMALL I +CYR CAPIT KA CYR CAPIT KA +CYR CAPIT KA CYR SMALL KA +CYR SMALL KA CYR CAPIT KA +CYR SMALL KA CYR SMALL KA +CYR CAPIT EL CYR CAPIT EL +CYR CAPIT EL CYR SMALL EL +CYR SMALL EL CYR CAPIT EL +CYR SMALL EL CYR SMALL EL +CYR CAPIT EM CYR CAPIT EM +CYR CAPIT EM CYR SMALL EM +CYR SMALL EM CYR CAPIT EM +CYR SMALL EM CYR SMALL EM +CYR CAPIT EN CYR CAPIT EN +CYR CAPIT EN CYR SMALL EN +CYR SMALL EN CYR CAPIT EN +CYR SMALL EN CYR SMALL EN +CYR CAPIT O CYR CAPIT O +CYR CAPIT O CYR SMALL O +CYR SMALL O CYR CAPIT O +CYR SMALL O CYR SMALL O +CYR CAPIT PE CYR CAPIT PE +CYR CAPIT PE CYR SMALL PE +CYR SMALL PE CYR CAPIT PE +CYR SMALL PE CYR SMALL PE +CYR CAPIT ER CYR CAPIT ER +CYR CAPIT ER CYR SMALL ER +CYR SMALL ER CYR CAPIT ER +CYR SMALL ER CYR SMALL ER +CYR CAPIT ES CYR CAPIT ES +CYR CAPIT ES CYR SMALL ES +CYR SMALL ES CYR CAPIT ES +CYR SMALL ES CYR SMALL ES +CYR CAPIT TE CYR CAPIT TE +CYR CAPIT TE CYR SMALL TE +CYR SMALL TE CYR CAPIT TE +CYR SMALL TE CYR SMALL TE +CYR CAPIT U CYR CAPIT U +CYR CAPIT U CYR SMALL U +CYR SMALL U CYR CAPIT U +CYR SMALL U CYR SMALL U +CYR CAPIT EF CYR CAPIT EF +CYR CAPIT EF CYR SMALL EF +CYR SMALL EF CYR CAPIT EF +CYR SMALL EF CYR SMALL EF +CYR CAPIT HA CYR CAPIT HA +CYR CAPIT HA CYR SMALL HA +CYR SMALL HA CYR CAPIT HA +CYR SMALL HA CYR SMALL HA +CYR CAPIT TSE CYR CAPIT TSE +CYR CAPIT TSE CYR SMALL TSE +CYR SMALL TSE CYR CAPIT TSE +CYR SMALL TSE CYR SMALL TSE +CYR CAPIT CHE CYR CAPIT CHE +CYR CAPIT CHE CYR SMALL CHE +CYR SMALL CHE CYR CAPIT CHE +CYR SMALL CHE CYR SMALL CHE +CYR CAPIT SHA CYR CAPIT SHA +CYR CAPIT SHA CYR SMALL SHA +CYR SMALL SHA CYR CAPIT SHA +CYR SMALL SHA CYR SMALL SHA +CYR CAPIT SCHA CYR CAPIT SCHA +CYR CAPIT SCHA CYR SMALL SCHA +CYR SMALL SCHA CYR CAPIT SCHA +CYR SMALL SCHA CYR SMALL SCHA +CYR CAPIT HARD SIGN CYR CAPIT HARD SIGN +CYR CAPIT HARD SIGN CYR SMALL HARD SIGN +CYR SMALL HARD SIGN CYR CAPIT HARD SIGN +CYR SMALL HARD SIGN CYR SMALL HARD SIGN +CYR CAPIT YERU CYR CAPIT YERU +CYR CAPIT YERU CYR SMALL YERU +CYR SMALL YERU CYR CAPIT YERU +CYR SMALL YERU CYR SMALL YERU +CYR CAPIT SOFT SIGN CYR CAPIT SOFT SIGN +CYR CAPIT SOFT SIGN CYR SMALL SOFT SIGN +CYR SMALL SOFT SIGN CYR CAPIT SOFT SIGN +CYR SMALL SOFT SIGN CYR SMALL SOFT SIGN +CYR CAPIT E CYR CAPIT E +CYR CAPIT E CYR SMALL E +CYR SMALL E CYR CAPIT E +CYR SMALL E CYR SMALL E +CYR CAPIT YU CYR CAPIT YU +CYR CAPIT YU CYR SMALL YU +CYR SMALL YU CYR CAPIT YU +CYR SMALL YU CYR SMALL YU +CYR CAPIT YA CYR CAPIT YA +CYR CAPIT YA CYR SMALL YA +CYR SMALL YA CYR CAPIT YA +CYR SMALL YA CYR SMALL YA +SET NAMES utf8; +ALTER TABLE t1 ADD ucs2_f CHAR(32) CHARACTER SET ucs2; +ALTER TABLE t1 CHANGE ucs2_f ucs2_f CHAR(32) UNICODE NOT NULL; +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0391,'GREEK CAPIT ALPHA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0392,'GREEK CAPIT BETA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0393,'GREEK CAPIT GAMMA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0394,'GREEK CAPIT DELTA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0395,'GREEK CAPIT EPSILON'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B1,'GREEK SMALL ALPHA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B2,'GREEK SMALL BETA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B3,'GREEK SMALL GAMMA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B4,'GREEK SMALL DELTA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x03B5,'GREEK SMALL EPSILON'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0531,'ARMENIAN CAPIT AYB'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0532,'ARMENIAN CAPIT BEN'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0533,'ARMENIAN CAPIT GIM'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0534,'ARMENIAN CAPIT DA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0535,'ARMENIAN CAPIT ECH'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0536,'ARMENIAN CAPIT ZA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0561,'ARMENIAN SMALL YAB'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0562,'ARMENIAN SMALL BEN'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0563,'ARMENIAN SMALL GIM'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0564,'ARMENIAN SMALL DA'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0565,'ARMENIAN SMALL ECH'); +INSERT INTO t1 (ucs2_f,comment) VALUES (0x0566,'ARMENIAN SMALL ZA'); +ALTER TABLE t1 ADD armscii8_f CHAR(32) CHARACTER SET armscii8 NOT NULL; +ALTER TABLE t1 ADD greek_f CHAR(32) CHARACTER SET greek NOT NULL; +UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE 'GRE%'; +UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE 'ARM%'; +UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=''; +UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=''; +SELECT * FROM t1; +comment koi8_ru_f utf8_f bin_f ucs2_f armscii8_f greek_f +LAT SMALL A a a a a +LAT SMALL B b b b b +LAT SMALL C c c c c +LAT SMALL D d d d d +LAT SMALL E e e e e +LAT SMALL F f f f f +LAT SMALL G g g g g +LAT SMALL H h h h h +LAT SMALL I i i i i +LAT SMALL J j j j j +LAT SMALL K k k k k +LAT SMALL L l l l l +LAT SMALL M m m m m +LAT SMALL N n n n n +LAT SMALL O o o o o +LAT SMALL P p p p p +LAT SMALL Q q q q q +LAT SMALL R r r r r +LAT SMALL S s s s s +LAT SMALL T t t t t +LAT SMALL U u u u u +LAT SMALL V v v v v +LAT SMALL W w w w w +LAT SMALL X x x x x +LAT SMALL Y y y y y +LAT SMALL Z z z z z +LAT CAPIT A A A A A +LAT CAPIT B B B B B +LAT CAPIT C C C C C +LAT CAPIT D D D D D +LAT CAPIT E E E E E +LAT CAPIT F F F F F +LAT CAPIT G G G G G +LAT CAPIT H H H H H +LAT CAPIT I I I I I +LAT CAPIT J J J J J +LAT CAPIT K K K K K +LAT CAPIT L L L L L +LAT CAPIT M M M M M +LAT CAPIT N N N N N +LAT CAPIT O O O O O +LAT CAPIT P P P P P +LAT CAPIT Q Q Q Q Q +LAT CAPIT R R R R R +LAT CAPIT S S S S S +LAT CAPIT T T T T T +LAT CAPIT U U U U U +LAT CAPIT V V V V V +LAT CAPIT W W W W W +LAT CAPIT X X X X X +LAT CAPIT Y Y Y Y Y +LAT CAPIT Z Z Z Z Z +CYR SMALL A а а Á а +CYR SMALL BE б б  б +CYR SMALL VE в в × Ð² +CYR SMALL GE г г Ç Ð³ +CYR SMALL DE д д Ä Ð´ +CYR SMALL IE е е Šе +CYR SMALL IO Ñ‘ Ñ‘ £ Ñ‘ +CYR SMALL ZHE ж ж Ö Ð¶ +CYR SMALL ZE з з Ú Ð· +CYR SMALL I и и É Ð¸ +CYR SMALL KA к к Ë Ðº +CYR SMALL EL л л Ì Ð» +CYR SMALL EM м м Í Ð¼ +CYR SMALL EN н н Πн +CYR SMALL O о о Ï Ð¾ +CYR SMALL PE п п Рп +CYR SMALL ER Ñ€ Ñ€ Ò Ñ€ +CYR SMALL ES Ñ Ñ Ó Ñ +CYR SMALL TE Ñ‚ Ñ‚ Ô Ñ‚ +CYR SMALL U у у Õ Ñƒ +CYR SMALL EF Ñ„ Ñ„ Æ Ñ„ +CYR SMALL HA Ñ… Ñ… È Ñ… +CYR SMALL TSE ц ц à ц +CYR SMALL CHE ч ч Þ Ñ‡ +CYR SMALL SHA ш ш Û Ñˆ +CYR SMALL SCHA щ щ Ý Ñ‰ +CYR SMALL HARD SIGN ÑŠ ÑŠ ß ÑŠ +CYR SMALL YERU Ñ‹ Ñ‹ Ù Ñ‹ +CYR SMALL SOFT SIGN ÑŒ ÑŒ Ø ÑŒ +CYR SMALL E Ñ Ñ Ü Ñ +CYR SMALL YU ÑŽ ÑŽ À ÑŽ +CYR SMALL YA Ñ Ñ Ñ Ñ +CYR CAPIT A Ð Ð á Ð +CYR CAPIT BE Б Б â Б +CYR CAPIT VE Ð’ Ð’ ÷ Ð’ +CYR CAPIT GE Г Г ç Г +CYR CAPIT DE Д Д ä Д +CYR CAPIT IE Е Е å Е +CYR CAPIT IO Ð Ð ³ Ð +CYR CAPIT ZHE Ж Ж ö Ж +CYR CAPIT ZE З З ú З +CYR CAPIT I И И é И +CYR CAPIT KA К К ë К +CYR CAPIT EL Л Л ì Л +CYR CAPIT EM М М í М +CYR CAPIT EN Ð Ð î Ð +CYR CAPIT O О О ï О +CYR CAPIT PE П П ð П +CYR CAPIT ER Р Р ò +CYR CAPIT ES С С ó С +CYR CAPIT TE Т Т ô Т +CYR CAPIT U У У õ У +CYR CAPIT EF Ф Ф æ Ф +CYR CAPIT HA Ð¥ Ð¥ è Ð¥ +CYR CAPIT TSE Ц Ц ã Ц +CYR CAPIT CHE Ч Ч þ Ч +CYR CAPIT SHA Ш Ш û Ш +CYR CAPIT SCHA Щ Щ ý Щ +CYR CAPIT HARD SIGN Ъ Ъ ÿ Ъ +CYR CAPIT YERU Ы Ы ù Ы +CYR CAPIT SOFT SIGN Ь Ь ø Ь +CYR CAPIT E Э Э ü Э +CYR CAPIT YU Ю Ю à Ю +CYR CAPIT YA Я Я ñ Я +GREEK CAPIT ALPHA Α Α Α +GREEK CAPIT BETA Î’ Î’ Î’ +GREEK CAPIT GAMMA Γ Γ Γ +GREEK CAPIT DELTA Δ Δ Δ +GREEK CAPIT EPSILON Ε Ε Ε +GREEK SMALL ALPHA α α α +GREEK SMALL BETA β β β +GREEK SMALL GAMMA γ γ γ +GREEK SMALL DELTA δ δ δ +GREEK SMALL EPSILON ε ε ε +ARMENIAN CAPIT AYB Ô± Ô± Ô± +ARMENIAN CAPIT BEN Ô² Ô² Ô² +ARMENIAN CAPIT GIM Ô³ Ô³ Ô³ +ARMENIAN CAPIT DA Ô´ Ô´ Ô´ +ARMENIAN CAPIT ECH Ôµ Ôµ Ôµ +ARMENIAN CAPIT ZA Ô¶ Ô¶ Ô¶ +ARMENIAN SMALL YAB Õ¡ Õ¡ Õ¡ +ARMENIAN SMALL BEN Õ¢ Õ¢ Õ¢ +ARMENIAN SMALL GIM Õ£ Õ£ Õ£ +ARMENIAN SMALL DA Õ¤ Õ¤ Õ¤ +ARMENIAN SMALL ECH Õ¥ Õ¥ Õ¥ +ARMENIAN SMALL ZA Õ¦ Õ¦ Õ¦ +SET NAMES 'binary'; +SELECT * FROM t1; +comment koi8_ru_f utf8_f bin_f ucs2_f armscii8_f greek_f +LAT SMALL A a a a a +LAT SMALL B b b b b +LAT SMALL C c c c c +LAT SMALL D d d d d +LAT SMALL E e e e e +LAT SMALL F f f f f +LAT SMALL G g g g g +LAT SMALL H h h h h +LAT SMALL I i i i i +LAT SMALL J j j j j +LAT SMALL K k k k k +LAT SMALL L l l l l +LAT SMALL M m m m m +LAT SMALL N n n n n +LAT SMALL O o o o o +LAT SMALL P p p p p +LAT SMALL Q q q q q +LAT SMALL R r r r r +LAT SMALL S s s s s +LAT SMALL T t t t t +LAT SMALL U u u u u +LAT SMALL V v v v v +LAT SMALL W w w w w +LAT SMALL X x x x x +LAT SMALL Y y y y y +LAT SMALL Z z z z z +LAT CAPIT A A A A A +LAT CAPIT B B B B B +LAT CAPIT C C C C C +LAT CAPIT D D D D D +LAT CAPIT E E E E E +LAT CAPIT F F F F F +LAT CAPIT G G G G G +LAT CAPIT H H H H H +LAT CAPIT I I I I I +LAT CAPIT J J J J J +LAT CAPIT K K K K K +LAT CAPIT L L L L L +LAT CAPIT M M M M M +LAT CAPIT N N N N N +LAT CAPIT O O O O O +LAT CAPIT P P P P P +LAT CAPIT Q Q Q Q Q +LAT CAPIT R R R R R +LAT CAPIT S S S S S +LAT CAPIT T T T T T +LAT CAPIT U U U U U +LAT CAPIT V V V V V +LAT CAPIT W W W W W +LAT CAPIT X X X X X +LAT CAPIT Y Y Y Y Y +LAT CAPIT Z Z Z Z Z +CYR SMALL A Á а Á 0 +CYR SMALL BE  б  1 +CYR SMALL VE × Ð² × 2 +CYR SMALL GE Ç Ð³ Ç 3 +CYR SMALL DE Ä Ð´ Ä 4 +CYR SMALL IE Šе Å 5 +CYR SMALL IO £ Ñ‘ £ Q +CYR SMALL ZHE Ö Ð¶ Ö 6 +CYR SMALL ZE Ú Ð· Ú 7 +CYR SMALL I É Ð¸ É 8 +CYR SMALL KA Ë Ðº Ë : +CYR SMALL EL Ì Ð» Ì ; +CYR SMALL EM Í Ð¼ Í < +CYR SMALL EN Πн Î = +CYR SMALL O Ï Ð¾ Ï > +CYR SMALL PE Рп Ð ? +CYR SMALL ER Ò Ñ€ Ò @ +CYR SMALL ES Ó Ñ Ó A +CYR SMALL TE Ô Ñ‚ Ô B +CYR SMALL U Õ Ñƒ Õ C +CYR SMALL EF Æ Ñ„ Æ D +CYR SMALL HA È Ñ… È E +CYR SMALL TSE à ц à F +CYR SMALL CHE Þ Ñ‡ Þ G +CYR SMALL SHA Û Ñˆ Û H +CYR SMALL SCHA Ý Ñ‰ Ý I +CYR SMALL HARD SIGN ß ÑŠ ß J +CYR SMALL YERU Ù Ñ‹ Ù K +CYR SMALL SOFT SIGN Ø ÑŒ Ø L +CYR SMALL E Ü Ñ Ü M +CYR SMALL YU À ÑŽ À N +CYR SMALL YA Ñ Ñ Ñ O +CYR CAPIT A á Ð á  +CYR CAPIT BE â Б â  +CYR CAPIT VE ÷ Ð’ ÷  +CYR CAPIT GE ç Г ç  +CYR CAPIT DE ä Д ä  +CYR CAPIT IE å Е å  +CYR CAPIT IO ³ Ð ³  +CYR CAPIT ZHE ö Ж ö  +CYR CAPIT ZE ú З ú  +CYR CAPIT I é И é  +CYR CAPIT KA ë К ë  +CYR CAPIT EL ì Л ì  +CYR CAPIT EM í М í  +CYR CAPIT EN î Ð î  +CYR CAPIT O ï О ï  +CYR CAPIT PE ð П ð  +CYR CAPIT ER ò Р ò  +CYR CAPIT ES ó С ó ! +CYR CAPIT TE ô Т ô " +CYR CAPIT U õ У õ # +CYR CAPIT EF æ Ф æ $ +CYR CAPIT HA è Ð¥ è % +CYR CAPIT TSE ã Ц ã & +CYR CAPIT CHE þ Ч þ ' +CYR CAPIT SHA û Ш û ( +CYR CAPIT SCHA ý Щ ý ) +CYR CAPIT HARD SIGN ÿ Ъ ÿ * +CYR CAPIT YERU ù Ы ù + +CYR CAPIT SOFT SIGN ø Ь ø , +CYR CAPIT E ü Э ü - +CYR CAPIT YU à Ю à . +CYR CAPIT YA ñ Я ñ / +GREEK CAPIT ALPHA Α ‘ Á +GREEK CAPIT BETA Î’ ’  +GREEK CAPIT GAMMA Γ “ à +GREEK CAPIT DELTA Δ ” Ä +GREEK CAPIT EPSILON Ε • Å +GREEK SMALL ALPHA α ± á +GREEK SMALL BETA β ² â +GREEK SMALL GAMMA γ ³ ã +GREEK SMALL DELTA δ ´ ä +GREEK SMALL EPSILON ε µ å +ARMENIAN CAPIT AYB Ô± 1 ² +ARMENIAN CAPIT BEN Ô² 2 ´ +ARMENIAN CAPIT GIM Ô³ 3 ¶ +ARMENIAN CAPIT DA Ô´ 4 ¸ +ARMENIAN CAPIT ECH Ôµ 5 º +ARMENIAN CAPIT ZA Ô¶ 6 ¼ +ARMENIAN SMALL YAB Õ¡ a ³ +ARMENIAN SMALL BEN Õ¢ b µ +ARMENIAN SMALL GIM Õ£ c · +ARMENIAN SMALL DA Õ¤ d ¹ +ARMENIAN SMALL ECH Õ¥ e » +ARMENIAN SMALL ZA Õ¦ f ½ +SELECT min(comment),count(*) FROM t1 GROUP BY ucs2_f; +min(comment) count(*) +LAT CAPIT A 2 +LAT CAPIT B 2 +LAT CAPIT C 2 +LAT CAPIT D 2 +LAT CAPIT E 2 +LAT CAPIT F 2 +LAT CAPIT G 2 +LAT CAPIT H 2 +LAT CAPIT I 2 +LAT CAPIT J 2 +LAT CAPIT K 2 +LAT CAPIT L 2 +LAT CAPIT M 2 +LAT CAPIT N 2 +LAT CAPIT O 2 +LAT CAPIT P 2 +LAT CAPIT Q 2 +LAT CAPIT R 2 +LAT CAPIT S 2 +LAT CAPIT T 2 +LAT CAPIT U 2 +LAT CAPIT V 2 +LAT CAPIT W 2 +LAT CAPIT X 2 +LAT CAPIT Y 2 +LAT CAPIT Z 2 +GREEK CAPIT ALPHA 2 +GREEK CAPIT BETA 2 +GREEK CAPIT GAMMA 2 +GREEK CAPIT DELTA 2 +GREEK CAPIT EPSILON 2 +CYR CAPIT A 2 +CYR CAPIT BE 2 +CYR CAPIT VE 2 +CYR CAPIT GE 2 +CYR CAPIT DE 2 +CYR CAPIT IE 4 +CYR CAPIT ZHE 2 +CYR CAPIT ZE 2 +CYR CAPIT I 2 +CYR CAPIT KA 2 +CYR CAPIT EL 2 +CYR CAPIT EM 2 +CYR CAPIT EN 2 +CYR CAPIT O 2 +CYR CAPIT PE 2 +CYR CAPIT ER 2 +CYR CAPIT ES 2 +CYR CAPIT TE 2 +CYR CAPIT U 2 +CYR CAPIT EF 2 +CYR CAPIT HA 2 +CYR CAPIT TSE 2 +CYR CAPIT CHE 2 +CYR CAPIT SHA 2 +CYR CAPIT SCHA 2 +CYR CAPIT HARD SIGN 2 +CYR CAPIT YERU 2 +CYR CAPIT SOFT SIGN 2 +CYR CAPIT E 2 +CYR CAPIT YU 2 +CYR CAPIT YA 2 +ARMENIAN CAPIT AYB 2 +ARMENIAN CAPIT BEN 2 +ARMENIAN CAPIT GIM 2 +ARMENIAN CAPIT DA 2 +ARMENIAN CAPIT ECH 2 +ARMENIAN CAPIT ZA 2 +DROP TABLE t1; From 40c0b2c6c8b730dec9900c3829b7babf0a5b4772 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Mar 2003 22:51:56 +0100 Subject: [PATCH 194/267] New variable rli->ignore_log_space_limit to resolve a deadlock between I/O and SQL threads in replication when relay_log_space is too small. This fixes bug #79. sql/log.cc: New variable rli->ignore_log_space_limit to resolve a deadlock between I/O and SQL threads in replication when relay_log_space is too small. sql/slave.cc: New variable rli->ignore_log_space_limit to resolve a deadlock between I/O and SQL threads in replication when relay_log_space is too small. sql/slave.h: New variable rli->ignore_log_space_limit to resolve a deadlock between I/O and SQL threads in replication when relay_log_space is too small. sql/sql_repl.cc: New variable rli->ignore_log_space_limit to resolve a deadlock between I/O and SQL threads in replication when relay_log_space is too small. --- mysql-test/r/rpl_relayspace.result | 13 ++++++ mysql-test/t/rpl_relayspace-slave.opt | 1 + mysql-test/t/rpl_relayspace.test | 33 +++++++++++++++ sql/log.cc | 2 + sql/slave.cc | 60 +++++++++++++++++++++++---- sql/slave.h | 7 ++++ sql/sql_repl.cc | 8 ++-- 7 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 mysql-test/r/rpl_relayspace.result create mode 100644 mysql-test/t/rpl_relayspace-slave.opt create mode 100644 mysql-test/t/rpl_relayspace.test diff --git a/mysql-test/r/rpl_relayspace.result b/mysql-test/r/rpl_relayspace.result new file mode 100644 index 00000000000..5e552ef7400 --- /dev/null +++ b/mysql-test/r/rpl_relayspace.result @@ -0,0 +1,13 @@ +slave stop; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +slave start; +stop slave; +create table t1 (a int); +reset slave; +start slave; +select master_pos_wait('master-bin.001',5000,45)=-1; +master_pos_wait('master-bin.001',5000,45)=-1 +0 diff --git a/mysql-test/t/rpl_relayspace-slave.opt b/mysql-test/t/rpl_relayspace-slave.opt new file mode 100644 index 00000000000..9365a2a0a26 --- /dev/null +++ b/mysql-test/t/rpl_relayspace-slave.opt @@ -0,0 +1 @@ + -O relay_log_space_limit=1024 \ No newline at end of file diff --git a/mysql-test/t/rpl_relayspace.test b/mysql-test/t/rpl_relayspace.test new file mode 100644 index 00000000000..8d4f01339c7 --- /dev/null +++ b/mysql-test/t/rpl_relayspace.test @@ -0,0 +1,33 @@ +# The slave is started with relay_log_space_limit=1024 bytes, +# to force the deadlock + +source include/master-slave.inc; +connection slave; +stop slave; +connection master; +create table t1 (a int); +let $1=200; +disable_query_log; +while ($1) +{ +# eval means expand $ expressions + eval insert into t1 values( $1 ); + dec $1; +} +# This will generate one 10kB master's binlog +enable_query_log; +save_master_pos; +connection slave; +reset slave; +start slave; +# The I/O thread stops filling the relay log when +# it's 1kB. And the SQL thread cannot purge this relay log +# as purge is done only when the SQL thread switches to another +# relay log, which does not exist here. +# So we should have a deadlock. +# if it is not resolved automatically we'll detect +# it with master_pos_wait that waits for farther than 1kB; +# it will timeout after 45 seconds; +# also the slave will probably not cooperate to shutdown +# (as 2 threads are locked) +select master_pos_wait('master-bin.001',5000,45)=-1; diff --git a/sql/log.cc b/sql/log.cc index 27864e19c03..9befcaefb01 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -645,6 +645,8 @@ int MYSQL_LOG::purge_first_log(struct st_relay_log_info* rli) */ pthread_mutex_lock(&rli->log_space_lock); rli->log_space_total -= rli->relay_log_pos; + //tell the I/O thread to take the relay_log_space_limit into account + rli->ignore_log_space_limit= 0; pthread_mutex_unlock(&rli->log_space_lock); pthread_cond_broadcast(&rli->log_space_cond); diff --git a/sql/slave.cc b/sql/slave.cc index 5ddea7501e4..771317f9431 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -238,7 +238,7 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log, if (log) // If not first log { if (strcmp(log, rli->linfo.log_file_name)) - rli->skip_log_purge=1; // Different name; Don't purge + rli->skip_log_purge= 1; // Different name; Don't purge if (rli->relay_log.find_log_pos(&rli->linfo, log, 1)) { *errmsg="Could not find target log during relay log initialization"; @@ -273,6 +273,12 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log, my_b_seek(rli->cur_log,(off_t)pos); err: + /* + If we don't purge, we can't honour relay_log_space_limit ; + silently discard it + */ + if (rli->skip_log_purge) + rli->log_space_limit= 0; pthread_cond_broadcast(&rli->data_cond); if (need_data_lock) pthread_mutex_unlock(&rli->data_lock); @@ -1312,7 +1318,8 @@ static bool wait_for_relay_log_space(RELAY_LOG_INFO* rli) save_proc_info = thd->proc_info; thd->proc_info = "Waiting for relay log space to free"; while (rli->log_space_limit < rli->log_space_total && - !(slave_killed=io_slave_killed(thd,mi))) + !(slave_killed=io_slave_killed(thd,mi)) && + !rli->ignore_log_space_limit) { pthread_cond_wait(&rli->log_space_cond, &rli->log_space_lock); } @@ -1588,7 +1595,7 @@ bool flush_master_info(MASTER_INFO* mi) st_relay_log_info::st_relay_log_info() :info_fd(-1), cur_log_fd(-1), master_log_pos(0), save_temporary_tables(0), - cur_log_old_open_count(0), log_space_total(0), + cur_log_old_open_count(0), log_space_total(0), ignore_log_space_limit(0), slave_skip_counter(0), abort_pos_wait(0), slave_run_id(0), sql_thd(0), last_slave_errno(0), inited(0), abort_slave(0), slave_running(0), skip_log_purge(0), @@ -2296,7 +2303,8 @@ reconnect done to recover from failed read"); } flush_master_info(mi); if (mi->rli.log_space_limit && mi->rli.log_space_limit < - mi->rli.log_space_total) + mi->rli.log_space_total && + !mi->rli.ignore_log_space_limit) if (wait_for_relay_log_space(&mi->rli)) { sql_print_error("Slave I/O thread aborted while waiting for relay \ @@ -2408,6 +2416,10 @@ slave_begin: pthread_cond_broadcast(&rli->start_cond); // This should always be set to 0 when the slave thread is started rli->pending = 0; + + //tell the I/O thread to take relay_log_space_limit into account from now on + rli->ignore_log_space_limit= 0; + if (init_relay_log_pos(rli, rli->relay_log_name, rli->relay_log_pos, @@ -3086,11 +3098,41 @@ Log_event* next_event(RELAY_LOG_INFO* rli) update. If we do not, show slave status will block */ pthread_mutex_unlock(&rli->data_lock); - /* Note that wait_for_update unlocks lock_log ! */ - rli->relay_log.wait_for_update(rli->sql_thd); - - // re-acquire data lock since we released it earlier - pthread_mutex_lock(&rli->data_lock); + + /* + Possible deadlock : + - the I/O thread has reached log_space_limit + - the SQL thread has read all relay logs, but cannot purge for some + reason: + * it has already purged all logs except the current one + * there are other logs than the current one but they're involved in + a transaction that finishes in the current one (or is not finished) + Solution : + Wake up the possibly waiting I/O thread, and set a boolean asking + the I/O thread to temporarily ignore the log_space_limit + constraint, because we do not want the I/O thread to block because of + space (it's ok if it blocks for any other reason (e.g. because the + master does not send anything). Then the I/O thread stops waiting + and reads more events. + The SQL thread decides when the I/O thread should take log_space_limit + into account again : ignore_log_space_limit is reset to 0 + in purge_first_log (when the SQL thread purges the just-read relay + log), and also when the SQL thread starts. We should also reset + ignore_log_space_limit to 0 when the user does RESET SLAVE, but in + fact, no need as RESET SLAVE requires that the slave + be stopped, and when the SQL thread is later restarted + ignore_log_space_limit will be reset to 0. + */ + pthread_mutex_lock(&rli->log_space_lock); + // prevent the I/O thread from blocking next times + rli->ignore_log_space_limit= 1; + // If the I/O thread is blocked, unblock it + pthread_cond_broadcast(&rli->log_space_cond); + pthread_mutex_unlock(&rli->log_space_lock); + // Note that wait_for_update unlocks lock_log ! + rli->relay_log.wait_for_update(rli->sql_thd); + // re-acquire data lock since we released it earlier + pthread_mutex_lock(&rli->data_lock); continue; } /* diff --git a/sql/slave.h b/sql/slave.h index fe0f0b045f3..8832302056d 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -137,7 +137,14 @@ typedef struct st_relay_log_info offset. pending stored the extra offset to be added to the position. */ ulonglong relay_log_pos, pending; + + /* + Handling of the relay_log_space_limit optional constraint. + ignore_log_space_limit is used to resolve a deadlock between I/O and SQL + threads, it makes the I/O thread temporarily forget about the constraint + */ ulonglong log_space_limit,log_space_total; + bool ignore_log_space_limit; /* InnoDB internally stores the master log position it has processed diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 5e90bbf1b0f..d670c673b4a 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -858,22 +858,21 @@ int change_master(THD* thd, MASTER_INFO* mi) if (lex_mi->relay_log_name) { - need_relay_log_purge = 0; - mi->rli.skip_log_purge=1; + need_relay_log_purge= 0; strmake(mi->rli.relay_log_name,lex_mi->relay_log_name, sizeof(mi->rli.relay_log_name)-1); } if (lex_mi->relay_log_pos) { - need_relay_log_purge=0; + need_relay_log_purge= 0; mi->rli.relay_log_pos=lex_mi->relay_log_pos; } flush_master_info(mi); if (need_relay_log_purge) { - mi->rli.skip_log_purge=0; + mi->rli.skip_log_purge= 0; thd->proc_info="purging old relay logs"; if (purge_relay_logs(&mi->rli, thd, 0 /* not only reset, but also reinit */, @@ -887,6 +886,7 @@ int change_master(THD* thd, MASTER_INFO* mi) else { const char* msg; + mi->rli.skip_log_purge= 1; /* Relay log is already initialized */ if (init_relay_log_pos(&mi->rli, mi->rli.relay_log_name, From cf97cbd1db762c443aa3c1412f3e788559aaa5dd Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 02:51:16 +0200 Subject: [PATCH 195/267] Fix of 'halloween bug' with UPDATE of InnoDB tables. mysql-test/r/innodb.result: Test of 'halloween bug' mysql-test/t/innodb.test: Test of 'halloween bug' strings/strto.c: Portability fix --- mysql-test/r/innodb.result | 10 ++++++++++ mysql-test/t/innodb.test | 11 +++++++++++ sql/key.cc | 8 ++++++++ strings/strto.c | 2 ++ 4 files changed, 31 insertions(+) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 0930e3aa5fd..06663e36007 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -501,3 +501,13 @@ table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 Field Type Null Key Default Extra testint int(11) 1 +a b +1 1 +102 2 +103 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index a962f120d4e..0362ec69ebf 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -537,3 +537,14 @@ drop table t1; create table t1 (testint int not null default 1) type=innodb; desc t1; drop table t1; + +# +# Check update with conflicting key +# + +CREATE TABLE t1 (a int not null primary key, b int not null, unique (b)) type=innodb; +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +# We need the a < 1000 test here to quard against the halloween problems +UPDATE t1 set a=a+100 where b between 2 and 3 and a < 1000; +SELECT * from t1; +drop table t1; diff --git a/sql/key.cc b/sql/key.cc index f2488ab74cb..9f5379487c3 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -269,5 +269,13 @@ bool check_if_key_used(TABLE *table, uint idx, List &fields) return 1; } } + + /* + If table handler has primary key as part of the index, check that primary + key is not updated + */ + if (idx != table->primary_key && table->primary_key < MAX_KEY && + (table->file->option_flag() & HA_PRIMARY_KEY_IN_READ_INDEX)) + return check_if_key_used(table, table->primary_key, fields); return 0; } diff --git a/strings/strto.c b/strings/strto.c index d3392c794e9..54ff2214f60 100644 --- a/strings/strto.c +++ b/strings/strto.c @@ -36,6 +36,8 @@ it can be compiled with the UNSIGNED and/or LONGLONG flag set */ +#define strtoll glob_strtoll /* Fix for True64 */ + #include #include "m_string.h" #include "m_ctype.h" From 53bb7b6801d19a275933b4ec8308823699c30fbd Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 03:16:12 +0200 Subject: [PATCH 196/267] Test of range optimizer in InnoDB sql/ha_myisam.cc: Added function comment --- mysql-test/r/innodb.result | 33 ++++++++++++++++++++++++++++++++- mysql-test/t/innodb.test | 34 +++++++++++++++++++++++++++++++++- sql/ha_myisam.cc | 30 ++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index caf3e10be80..bbabe0a04d6 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1,4 +1,4 @@ -drop table if exists t1,t2; +drop table if exists t1,t2,t3; create table t1 (id int unsigned not null auto_increment, code tinyint unsigned not null, name char(20) not null, primary key (id), key (code), unique (name)) type=innodb; insert into t1 (code, name) values (1, 'Tim'), (1, 'Monty'), (2, 'David'), (2, 'Erik'), (3, 'Sasha'), (3, 'Jeremy'), (4, 'Matt'); select id, code, name from t1 order by id; @@ -1091,3 +1091,34 @@ SELECT * from t1; id 3 DROP TABLE t1,t2; +set autocommit=0; +CREATE TABLE t1 (id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(id)) TYPE=InnoDB; +CREATE TABLE t2 (id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(id)) TYPE=InnoDB; +CREATE TABLE t3 (id1 CHAR(15) NOT NULL, id2 CHAR(15) NOT NULL, PRIMARY KEY(id1, id2)) TYPE=InnoDB; +INSERT INTO t3 VALUES("my-test-1", "my-test-2"); +COMMIT; +INSERT INTO t1 VALUES("this-key", "will disappear"); +INSERT INTO t2 VALUES("this-key", "will also disappear"); +DELETE FROM t3 WHERE id1="my-test-1"; +SELECT * FROM t1; +id value +this-key will disappear +SELECT * FROM t2; +id value +this-key will also disappear +SELECT * FROM t3; +id1 id2 +ROLLBACK; +SELECT * FROM t1; +id value +SELECT * FROM t2; +id value +SELECT * FROM t3; +id1 id2 +my-test-1 my-test-2 +SELECT * FROM t3 WHERE id1="my-test-1" LOCK IN SHARE MODE; +id1 id2 +my-test-1 my-test-2 +COMMIT; +set autocommit=1; +DROP TABLE t1,t2,t3; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 556822ab51d..2fcde863b9c 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -4,7 +4,7 @@ # Small basic test with ignore # -drop table if exists t1,t2; +drop table if exists t1,t2,t3; create table t1 (id int unsigned not null auto_increment, code tinyint unsigned not null, name char(20) not null, primary key (id), key (code), unique (name)) type=innodb; insert into t1 (code, name) values (1, 'Tim'), (1, 'Monty'), (2, 'David'), (2, 'Erik'), (3, 'Sasha'), (3, 'Jeremy'), (4, 'Matt'); @@ -726,3 +726,35 @@ SELECT * from t1; UPDATE t1,t2 SET t1.id=t1.id+1 where t1.id!=t2.id; SELECT * from t1; DROP TABLE t1,t2; + +# +# Test of range_optimizer +# + +set autocommit=0; + +CREATE TABLE t1 (id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(id)) TYPE=InnoDB; + +CREATE TABLE t2 (id CHAR(15) NOT NULL, value CHAR(40) NOT NULL, PRIMARY KEY(id)) TYPE=InnoDB; + +CREATE TABLE t3 (id1 CHAR(15) NOT NULL, id2 CHAR(15) NOT NULL, PRIMARY KEY(id1, id2)) TYPE=InnoDB; + +INSERT INTO t3 VALUES("my-test-1", "my-test-2"); +COMMIT; + +INSERT INTO t1 VALUES("this-key", "will disappear"); +INSERT INTO t2 VALUES("this-key", "will also disappear"); +DELETE FROM t3 WHERE id1="my-test-1"; + +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; +ROLLBACK; + +SELECT * FROM t1; +SELECT * FROM t2; +SELECT * FROM t3; +SELECT * FROM t3 WHERE id1="my-test-1" LOCK IN SHARE MODE; +COMMIT; +set autocommit=1; +DROP TABLE t1,t2,t3; diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 6933b47449b..fd1a115ddff 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -1242,6 +1242,35 @@ longlong ha_myisam::get_auto_increment() } +/* + Find out how many rows there is in the given range + + SYNOPSIS + records_in_range() + inx Index to use + start_key Start of range. Null pointer if from first key + start_key_len Length of start key + start_search_flag Flag if start key should be included or not + end_key End of range. Null pointer if to last key + end_key_len Length of end key + end_search_flag Flag if start key should be included or not + + NOTES + start_search_flag can have one of the following values: + HA_READ_KEY_EXACT Include the key in the range + HA_READ_AFTER_KEY Don't include key in range + + end_search_flag can have one of the following values: + HA_READ_BEFORE_KEY Don't include key in range + HA_READ_AFTER_KEY Include all 'end_key' values in the range + + RETURN + HA_POS_ERROR Something is wrong with the index tree. + 0 There is no matching keys in the given range + number > 0 There is approximately 'number' matching rows in + the range. +*/ + ha_rows ha_myisam::records_in_range(int inx, const byte *start_key,uint start_key_len, enum ha_rkey_function start_search_flag, @@ -1256,6 +1285,7 @@ ha_rows ha_myisam::records_in_range(int inx, end_search_flag); } + int ha_myisam::ft_read(byte * buf) { int error; From 1159272c28c83e4915beb67c296103a06875d198 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 10:02:57 +0400 Subject: [PATCH 197/267] sql_yacc.yy: SET NAMES BINARY now works sql/sql_yacc.yy: SET NAMES BINARY now works --- sql/sql_yacc.yy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index a526b8d4e06..76df8ba54b2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1311,7 +1311,9 @@ charset_name: net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str); YYABORT; } - }; + } + | BINARY { $$= &my_charset_bin; } + ; charset_name_or_default: charset_name { $$=$1; } From 2dae38c71357665601f9eb8bc4186fa9be6d4dee Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 11:34:19 +0400 Subject: [PATCH 198/267] Replication were broken because of automatic charset conversion. As a fix, my_charset_bin is now used in master-slave packets instead of system_charset_info. --- sql/log_event.cc | 28 ++++++++++++++-------------- sql/repl_failsafe.cc | 8 ++++---- sql/slave.cc | 16 ++++++++-------- sql/sql_repl.cc | 12 ++++++------ 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index a8e215d2b77..3a1dbb6485e 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -348,10 +348,10 @@ int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos) log_name = p + 1; protocol->prepare_for_resend(); - protocol->store(log_name, system_charset_info); + protocol->store(log_name, &my_charset_bin); protocol->store((ulonglong) pos); event_type = get_type_str(); - protocol->store(event_type, strlen(event_type), system_charset_info); + protocol->store(event_type, strlen(event_type), &my_charset_bin); protocol->store((uint32) server_id); protocol->store((ulonglong) log_pos); pack_info(protocol); @@ -722,7 +722,7 @@ void Query_log_event::pack_info(Protocol *protocol) memcpy(pos, query, q_len); pos+= q_len; } - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -992,7 +992,7 @@ void Start_log_event::pack_info(Protocol *protocol) pos= strmov(pos, server_version); pos= strmov(pos, ", Binlog ver: "); pos=int10_to_str(binlog_version, pos, 10); - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); } #endif @@ -1191,7 +1191,7 @@ void Load_log_event::pack_info(Protocol *protocol) *pos++= ')'; } - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -1665,7 +1665,7 @@ void Rotate_log_event::pack_info(Protocol *protocol) b_pos=longlong10_to_str(pos, b_pos, 10); if (flags & LOG_EVENT_FORCED_ROTATE_F) b_pos= strmov(b_pos ,"; forced by master"); - protocol->store(buf, b_pos-buf, system_charset_info); + protocol->store(buf, b_pos-buf, &my_charset_bin); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif @@ -1800,7 +1800,7 @@ void Intvar_log_event::pack_info(Protocol *protocol) pos= strmov(buf, get_var_type_name()); *(pos++)='='; pos= longlong10_to_str(val, pos, -10); - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); } #endif @@ -1911,7 +1911,7 @@ void Rand_log_event::pack_info(Protocol *protocol) pos= int10_to_str((long) seed1, pos, 10); pos= strmov(pos, ",rand_seed2="); pos= int10_to_str((long) seed2, pos, 10); - protocol->store(buf1, (uint) (pos-buf1), system_charset_info); + protocol->store(buf1, (uint) (pos-buf1), &my_charset_bin); } #endif @@ -2013,7 +2013,7 @@ void User_var_log_event::pack_info(Protocol* protocol) buf[0]= '@'; buf[1+name_len]= '='; memcpy(buf+1, name, name_len); - protocol->store(buf, event_len, system_charset_info); + protocol->store(buf, event_len, &my_charset_bin); my_free(buf, MYF(MY_ALLOW_ZERO_PTR)); } #endif // !MYSQL_CLIENT @@ -2213,7 +2213,7 @@ void Slave_log_event::pack_info(Protocol *protocol) pos= strmov(pos, master_log); pos= strmov(pos, ",pos="); pos= longlong10_to_str(master_pos, pos, 10); - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); } #endif // !MYSQL_CLIENT @@ -2547,7 +2547,7 @@ void Create_file_log_event::pack_info(Protocol *protocol) pos= int10_to_str((long) file_id, pos, 10); pos= strmov(pos, ";block_len="); pos= int10_to_str((long) block_len, pos, 10); - protocol->store(buf, pos-buf, system_charset_info); + protocol->store(buf, pos-buf, &my_charset_bin); } #endif @@ -2698,7 +2698,7 @@ void Append_block_log_event::pack_info(Protocol *protocol) length= (uint) my_sprintf(buf, (buf, ";file_id=%u;block_len=%u", file_id, block_len)); - protocol->store(buf, (int32) length, system_charset_info); + protocol->store(buf, (int32) length, &my_charset_bin); } #endif @@ -2811,7 +2811,7 @@ void Delete_file_log_event::pack_info(Protocol *protocol) char buf[64]; uint length; length= (uint) my_sprintf(buf, (buf, ";file_id=%u", (uint) file_id)); - protocol->store(buf, (int32) length, system_charset_info); + protocol->store(buf, (int32) length, &my_charset_bin); } #endif @@ -2910,7 +2910,7 @@ void Execute_load_log_event::pack_info(Protocol *protocol) char buf[64]; uint length; length= (uint) my_sprintf(buf, (buf, ";file_id=%u", (uint) file_id)); - protocol->store(buf, (int32) length, system_charset_info); + protocol->store(buf, (int32) length, &my_charset_bin); } /***************************************************************************** diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 7891ff92236..413ccb7fde2 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -440,7 +440,7 @@ int show_new_master(THD* thd) if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(-1); protocol->prepare_for_resend(); - protocol->store(lex_mi->log_file_name, system_charset_info); + protocol->store(lex_mi->log_file_name, &my_charset_bin); protocol->store((ulonglong) lex_mi->pos); if (protocol->write()) DBUG_RETURN(-1); @@ -610,11 +610,11 @@ int show_slave_hosts(THD* thd) SLAVE_INFO* si = (SLAVE_INFO*) hash_element(&slave_list, i); protocol->prepare_for_resend(); protocol->store((uint32) si->server_id); - protocol->store(si->host, system_charset_info); + protocol->store(si->host, &my_charset_bin); if (opt_show_slave_auth_info) { - protocol->store(si->user, system_charset_info); - protocol->store(si->password, system_charset_info); + protocol->store(si->user, &my_charset_bin); + protocol->store(si->password, &my_charset_bin); } protocol->store((uint32) si->port); protocol->store((uint32) si->rpl_recovery_rank); diff --git a/sql/slave.cc b/sql/slave.cc index 86c7adc6a7f..b06895b1779 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1608,22 +1608,22 @@ int show_master_info(THD* thd, MASTER_INFO* mi) pthread_mutex_lock(&mi->data_lock); pthread_mutex_lock(&mi->rli.data_lock); - protocol->store(mi->host, system_charset_info); - protocol->store(mi->user, system_charset_info); + protocol->store(mi->host, &my_charset_bin); + protocol->store(mi->user, &my_charset_bin); protocol->store((uint32) mi->port); protocol->store((uint32) mi->connect_retry); - protocol->store(mi->master_log_name, system_charset_info); + protocol->store(mi->master_log_name, &my_charset_bin); protocol->store((ulonglong) mi->master_log_pos); protocol->store(mi->rli.relay_log_name + - dirname_length(mi->rli.relay_log_name), system_charset_info); + dirname_length(mi->rli.relay_log_name), &my_charset_bin); protocol->store((ulonglong) mi->rli.relay_log_pos); - protocol->store(mi->rli.master_log_name, system_charset_info); - protocol->store(mi->slave_running ? "Yes":"No", system_charset_info); - protocol->store(mi->rli.slave_running ? "Yes":"No", system_charset_info); + protocol->store(mi->rli.master_log_name, &my_charset_bin); + protocol->store(mi->slave_running ? "Yes":"No", &my_charset_bin); + protocol->store(mi->rli.slave_running ? "Yes":"No", &my_charset_bin); protocol->store(&replicate_do_db); protocol->store(&replicate_ignore_db); protocol->store((uint32) mi->rli.last_slave_errno); - protocol->store(mi->rli.last_slave_error, system_charset_info); + protocol->store(mi->rli.last_slave_error, &my_charset_bin); protocol->store((uint32) mi->rli.slave_skip_counter); protocol->store((ulonglong) mi->rli.master_log_pos); protocol->store((ulonglong) mi->rli.log_space_total); diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 12c1a4b0ee8..fd6c9060079 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -384,7 +384,7 @@ impossible position"; We need to start a packet with something other than 255 to distiquish it from error */ - packet->set("\0", 1, system_charset_info); + packet->set("\0", 1, &my_charset_bin); // if we are at the start of the log if (pos == BIN_LOG_HEADER_SIZE) @@ -395,7 +395,7 @@ impossible position"; my_errno= ER_MASTER_FATAL_ERROR_READING_BINLOG; goto err; } - packet->set("\0", 1, system_charset_info); + packet->set("\0", 1, &my_charset_bin); } while (!net->error && net->vio != 0 && !thd->killed) @@ -430,7 +430,7 @@ impossible position"; goto err; } } - packet->set("\0", 1, system_charset_info); + packet->set("\0", 1, &my_charset_bin); } /* TODO: now that we are logging the offset, check to make sure @@ -550,7 +550,7 @@ Increase max_allowed_packet on master"; goto err; } } - packet->set("\0", 1, system_charset_info); + packet->set("\0", 1, &my_charset_bin); /* No need to net_flush because we will get to flush later when we hit EOF pretty quick @@ -1103,7 +1103,7 @@ int show_binlog_info(THD* thd) LOG_INFO li; mysql_bin_log.get_current_log(&li); int dir_len = dirname_length(li.log_file_name); - protocol->store(li.log_file_name + dir_len, system_charset_info); + protocol->store(li.log_file_name + dir_len, &my_charset_bin); protocol->store((ulonglong) li.pos); protocol->store(&binlog_do_db); protocol->store(&binlog_ignore_db); @@ -1160,7 +1160,7 @@ int show_binlogs(THD* thd) protocol->prepare_for_resend(); int dir_len = dirname_length(fname); /* The -1 is for removing newline from fname */ - protocol->store(fname + dir_len, length-1-dir_len, system_charset_info); + protocol->store(fname + dir_len, length-1-dir_len, &my_charset_bin); if (protocol->write()) goto err; } From 71aa1f6d56130ff37912d7182e9f1039133f9347 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 10:00:29 +0100 Subject: [PATCH 199/267] - updated version number (4.0.12 -> 4.0.13) - tagged ChangeSet 1.1671 as mysql-4.0.12 configure.in: - updated version number (4.0.12 -> 4.0.13) --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index dd6aa80d617..aea415a13c4 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! -AM_INIT_AUTOMAKE(mysql, 4.0.12) +AM_INIT_AUTOMAKE(mysql, 4.0.13) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 From aa08887f7b724d8fc07d2d807d4b0b364ac937a7 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 11:17:48 +0200 Subject: [PATCH 200/267] Fixes to avoid errors from valgrind Fixed problem with 'wrong packet number' in union include/my_global.h: Fix for valgrind mysql-test/t/rpl_rotate_logs.test: Fix to avoid timeing problem sql/item.h: Indentation change sql/set_var.cc: Fix to avoid reference to uninitialized memory sql/sql_select.cc: More DBUG_PRINT messages Fixed problem with 'wrong packet number' in union (tmp_join.error was not correctly reset) sql/sql_union.cc: Simple code cleanup strings/ctype-simple.c: Fix for valgrind --- include/my_global.h | 6 ++++ mysql-test/t/rpl_rotate_logs.test | 1 + sql/item.h | 2 +- sql/set_var.cc | 2 +- sql/sql_select.cc | 46 ++++++++++++++++++++++--------- sql/sql_union.cc | 10 ++----- strings/ctype-simple.c | 10 +++++++ 7 files changed, 55 insertions(+), 22 deletions(-) diff --git a/include/my_global.h b/include/my_global.h index 64bfefa16f3..30785d6a9b6 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -870,7 +870,13 @@ typedef char bool; /* Ordinary boolean values 0 1 */ ((uint32) (uchar) (A)[0]))) #define sint4korr(A) (*((long *) (A))) #define uint2korr(A) (*((uint16 *) (A))) +#ifdef HAVE_purify +#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ + (((uint32) ((uchar) (A)[1])) << 8) +\ + (((uint32) ((uchar) (A)[2])) << 16)) +#else #define uint3korr(A) (long) (*((unsigned long *) (A)) & 0xFFFFFF) +#endif #define uint4korr(A) (*((unsigned long *) (A))) #define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test index 0852eb584d5..8ad5109d2c6 100644 --- a/mysql-test/t/rpl_rotate_logs.test +++ b/mysql-test/t/rpl_rotate_logs.test @@ -91,6 +91,7 @@ sync_slave_with_master; connection master; purge master logs to 'master-bin.000002'; show binary logs; +--sleep 1; purge logs before now(); show binary logs; insert into t2 values (65); diff --git a/sql/item.h b/sql/item.h index 8e1f4a38237..d7ca9bf855a 100644 --- a/sql/item.h +++ b/sql/item.h @@ -527,7 +527,7 @@ public: enum Item_result result_type () const { return (*ref)->result_type(); } enum_field_types field_type() const { return (*ref)->field_type(); } table_map used_tables() const { return (*ref)->used_tables(); } - void set_result_field(Field *field) { result_field= field; } + void set_result_field(Field *field) { result_field= field; } bool is_result_field() { return 1; } void save_in_result_field(bool no_conversions) { diff --git a/sql/set_var.cc b/sql/set_var.cc index b6e10cbc5b1..4189543e70e 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1100,7 +1100,7 @@ byte *sys_var_thd_sql_mode::value_ptr(THD *thd, enum_var_type type) } if (tmp.length()) tmp.length(tmp.length() - 1); - return (byte*) thd->strdup(tmp.c_ptr()); + return (byte*) thd->strmake(tmp.ptr(), tmp.length()); } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 6f3dfeb3558..0126b900b9a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -449,6 +449,7 @@ JOIN::optimize() // quick abort delete procedure; error= thd->is_fatal_error ? -1 : 1; + DBUG_PRINT("error",("Error from optimize_cond")); DBUG_RETURN(error); } @@ -456,6 +457,7 @@ JOIN::optimize() (!unit->select_limit_cnt && !(select_options & OPTION_FOUND_ROWS))) { /* Impossible cond */ zero_result_cause= "Impossible WHERE"; + error= 0; DBUG_RETURN(0); } @@ -468,16 +470,18 @@ JOIN::optimize() if (res < 0) { zero_result_cause= "No matching min/max row"; + error=0; DBUG_RETURN(0); } zero_result_cause= "Select tables optimized away"; tables_list= 0; // All tables resolved } } - if (!tables_list) + { + error= 0; DBUG_RETURN(0); - + } error= -1; // Error is sent to client sort_by_table= get_sort_by_table(order, group_list, tables_list); @@ -485,18 +489,24 @@ JOIN::optimize() thd->proc_info= "statistics"; if (make_join_statistics(this, tables_list, conds, &keyuse) || thd->is_fatal_error) + { + DBUG_PRINT("error",("Error: make_join_statistics() failed")); DBUG_RETURN(1); + } thd->proc_info= "preparing"; if (result->initialize_tables(this)) { - DBUG_RETURN(1); // error = -1 + DBUG_PRINT("error",("Error: initialize_tables() failed")); + DBUG_RETURN(1); // error == -1 } if (const_table_map != found_const_table_map && !(select_options & SELECT_DESCRIBE)) { zero_result_cause= "no matching row in const table"; + DBUG_PRINT("error",("Error: %s", zero_result_cause)); select_options= 0; //TODO why option in return_zero_rows was droped + error= 0; DBUG_RETURN(0); } if (!(thd->options & OPTION_BIG_SELECTS) && @@ -535,13 +545,14 @@ JOIN::optimize() if (error) { /* purecov: inspected */ error= -1; /* purecov: inspected */ + DBUG_PRINT("error",("Error: make_select() failed")); DBUG_RETURN(1); } if (make_join_select(this, select, conds)) { zero_result_cause= "Impossible WHERE noticed after reading const tables"; - DBUG_RETURN(0); + DBUG_RETURN(0); // error == 0 } error= -1; /* if goto err */ @@ -705,8 +716,10 @@ JOIN::optimize() } if (select_options & SELECT_DESCRIBE) + { + error= 0; DBUG_RETURN(0); - + } tmp_having= having; having= 0; @@ -806,10 +819,12 @@ JOIN::optimize() { if (!(tmp_join= (JOIN*)thd->alloc(sizeof(JOIN)))) DBUG_RETURN(-1); + error= 0; // Ensure that tmp_join.error= 0 restore_tmp(); } } + error= 0; DBUG_RETURN(0); } @@ -875,9 +890,9 @@ void JOIN::exec() { int tmp_error; - DBUG_ENTER("JOIN::exec"); + error= 0; if (procedure) { if (procedure->change_columns(fields_list) || @@ -887,7 +902,6 @@ JOIN::exec() if (!tables_list) { // Only test of functions - error=0; if (select_options & SELECT_DESCRIBE) select_describe(this, false, false, false, (zero_result_cause?zero_result_cause:"No tables used")); @@ -914,8 +928,6 @@ JOIN::exec() if (zero_result_cause) { - error=0; - (void) return_zero_rows(this, result, tables_list, fields_list, tmp_table_param.sum_func_count != 0 && !group_list, @@ -940,7 +952,6 @@ JOIN::exec() select_describe(this, need_tmp, order != 0 && !skip_sort_order, select_distinct); - error=0; DBUG_VOID_RETURN; } @@ -1252,6 +1263,7 @@ JOIN::exec() DBUG_VOID_RETURN; } + /* Clean up join. Return error that hold JOIN. */ @@ -1278,7 +1290,6 @@ JOIN::cleanup(THD *thd) DBUG_RETURN(tmp_join->cleanup(thd)); } - lock=0; // It's faster to unlock later join_free(this, 1); if (exec_tmp_table1) @@ -1297,6 +1308,7 @@ JOIN::cleanup(THD *thd) DBUG_RETURN(error); } + int mysql_select(THD *thd, Item ***rref_pointer_array, TABLE_LIST *tables, uint wild_num, List &fields, @@ -4929,17 +4941,25 @@ do_select(JOIN *join,List *fields,TABLE *table,Procedure *procedure) int tmp; if ((tmp=table->file->extra(HA_EXTRA_NO_CACHE))) { - my_errno=tmp; + DBUG_PRINT("error",("extra(HA_EXTRA_NO_CACHE) failed")); + my_errno= tmp; error= -1; } if ((tmp=table->file->index_end())) { - my_errno=tmp; + DBUG_PRINT("error",("index_end() failed")); + my_errno= tmp; error= -1; } if (error == -1) table->file->print_error(my_errno,MYF(0)); } +#ifndef DBUG_OFF + if (error) + { + DBUG_PRINT("error",("Error: do_select() failed")); + } +#endif DBUG_RETURN(error || join->thd->net.report_error); } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 607f3007d1d..5f7a1e44bde 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -241,11 +241,13 @@ err: DBUG_RETURN(-1); } + int st_select_lex_unit::exec() { DBUG_ENTER("st_select_lex_unit::exec"); SELECT_LEX_NODE *lex_select_save= thd->lex.current_select; SELECT_LEX *select_cursor=first_select_in_union(), *last_select; + LINT_INIT(last_select); if (executed && !(dependent || uncacheable)) DBUG_RETURN(0); @@ -321,14 +323,9 @@ int st_select_lex_unit::exec() thd->lex.current_select = select_cursor; res =-1; { -#if 0 - List ftfunc_list; - ftfunc_list.empty(); -#else List empty_list; empty_list.empty(); thd->lex.select_lex.ftfunc_list= &empty_list; -#endif if (!thd->is_fatal_error) // Check if EOM { @@ -360,9 +357,8 @@ int st_select_lex_unit::exec() int st_select_lex_unit::cleanup() { - DBUG_ENTER("st_select_lex_unit::cleanup"); - int error= 0; + DBUG_ENTER("st_select_lex_unit::cleanup"); if (union_result) { diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index 5fb62d3056f..3bca6c6b54f 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -732,7 +732,17 @@ double my_strntod_8bit(CHARSET_INFO *cs __attribute__((unused)), double result; errno= 0; /* Safety */ + + /* + The following define is to avoid warnings from valgrind as str[length] + may not be defined (which is not fatal in real life) + */ + +#ifdef HAVE_purify + if (length == INT_MAX32) +#else if (length == INT_MAX32 || str[length] == 0) +#endif result= strtod(str, end); else { From 18d3292bb7cd47db17207f8cdbf74e925b34e74b Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 13:42:45 +0400 Subject: [PATCH 201/267] SHOW CREATE TABLE didn't display field names in the proper charset mysys/charset.c: Clear all fields at the end of previous charset --- mysql-test/r/ctype_recoding.result | 43 ++++++++++++++++++++++++++++++ mysql-test/t/ctype_recoding.test | 28 +++++++++++++++++++ mysys/charset.c | 2 ++ sql/sql_show.cc | 4 +-- sql/sql_string.cc | 28 +++++++++++++++++++ sql/sql_string.h | 1 + 6 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 mysql-test/r/ctype_recoding.result create mode 100644 mysql-test/t/ctype_recoding.test diff --git a/mysql-test/r/ctype_recoding.result b/mysql-test/r/ctype_recoding.result new file mode 100644 index 00000000000..3422595c71f --- /dev/null +++ b/mysql-test/r/ctype_recoding.result @@ -0,0 +1,43 @@ +SET NAMES koi8r; +DROP TABLE IF EXISTS ÔÁÂÌÉÃÁ; +CREATE TABLE ÔÁÂÌÉÃÁ +( +ÐÏÌÅ CHAR(32) CHARACTER SET koi8r NOT NULL +); +SHOW TABLES; +Tables_in_test +ÔÁÂÌÉÃÁ +SHOW CREATE TABLE ÔÁÂÌÉÃÁ; +Table Create Table +ÔÁÂÌÉÃÁ CREATE TABLE `ÔÁÂÌÉÃÁ` ( + `ÐÏÌÅ` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin1 +SHOW FIELDS FROM ÔÁÂÌÉÃÁ; +Field Type Collation Null Key Default Extra +ÐÏÌÅ char(32) character set koi8r koi8r +SET NAMES cp1251; +SHOW TABLES; +Tables_in_test +òàáëèöà +SHOW CREATE TABLE òàáëèöà; +Table Create Table +òàáëèöà CREATE TABLE `òàáëèöà` ( + `ïîëå` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin1 +SHOW FIELDS FROM òàáëèöà; +Field Type Collation Null Key Default Extra +ïîëå char(32) character set koi8r koi8r +SET NAMES utf8; +SHOW TABLES; +Tables_in_test +таблица +SHOW CREATE TABLE таблица; +Table Create Table +таблица CREATE TABLE `таблица` ( + `поле` char(32) character set koi8r NOT NULL default '' +) TYPE=MyISAM CHARSET=latin1 +SHOW FIELDS FROM таблица; +Field Type Collation Null Key Default Extra +поле char(32) character set koi8r koi8r +SET NAMES koi8r; +DROP TABLE ÔÁÂÌÉÃÁ; diff --git a/mysql-test/t/ctype_recoding.test b/mysql-test/t/ctype_recoding.test new file mode 100644 index 00000000000..c0b7139c791 --- /dev/null +++ b/mysql-test/t/ctype_recoding.test @@ -0,0 +1,28 @@ +SET NAMES koi8r; + +--disable_warnings +DROP TABLE IF EXISTS ÔÁÂÌÉÃÁ; +--enable_warnings + +CREATE TABLE ÔÁÂÌÉÃÁ +( + ÐÏÌÅ CHAR(32) CHARACTER SET koi8r NOT NULL +); + +SHOW TABLES; +SHOW CREATE TABLE ÔÁÂÌÉÃÁ; +SHOW FIELDS FROM ÔÁÂÌÉÃÁ; + +SET NAMES cp1251; +SHOW TABLES; +SHOW CREATE TABLE òàáëèöà; +SHOW FIELDS FROM òàáëèöà; + + +SET NAMES utf8; +SHOW TABLES; +SHOW CREATE TABLE таблица; +SHOW FIELDS FROM таблица; + +SET NAMES koi8r; +DROP TABLE ÔÁÂÌÉÃÁ; diff --git a/mysys/charset.c b/mysys/charset.c index 0b2fd514019..ce44353b065 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -341,6 +341,8 @@ static int add_collation(CHARSET_INFO *cs) all_charsets[cs->number]->state |= cs->state; } cs->number= 0; + cs->primary_number= 0; + cs->binary_number= 0; cs->name= NULL; cs->state= 0; cs->sort_order= NULL; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 5db7d2f1406..00df2c44fd6 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1014,12 +1014,12 @@ append_identifier(THD *thd, String *packet, const char *name) if (thd->options & OPTION_QUOTE_SHOW_CREATE) { packet->append(&qtype, 1); - packet->append(name); + packet->append(name, 0, system_charset_info); packet->append(&qtype, 1); } else { - packet->append(name); + packet->append(name, 0, system_charset_info); } } diff --git a/sql/sql_string.cc b/sql/sql_string.cc index ae3875834f0..54a76319be7 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -338,6 +338,34 @@ bool String::append(const char *s,uint32 arg_length) } +/* + Append a string in the given charset to the string + with character set recoding +*/ + + +bool String::append(const char *s,uint32 arg_length, CHARSET_INFO *cs) +{ + if (!arg_length) // Default argument + if (!(arg_length= (uint32) strlen(s))) + return FALSE; + if (str_charset->mbmaxlen > 1) + { + uint32 add_length=arg_length * str_charset->mbmaxlen; + if (realloc(str_length+ add_length)) + return TRUE; + str_length+= copy_and_convert(Ptr+str_length, add_length, str_charset, + s, arg_length, cs); + return FALSE; + } + if (realloc(str_length+arg_length)) + return TRUE; + memcpy(Ptr+str_length,s,arg_length); + str_length+=arg_length; + return FALSE; +} + + #ifdef TO_BE_REMOVED bool String::append(FILE* file, uint32 arg_length, myf my_flags) { diff --git a/sql/sql_string.h b/sql/sql_string.h index 8e0705844ad..469574ca2e4 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -181,6 +181,7 @@ public: CHARSET_INFO *csto); bool append(const String &s); bool append(const char *s,uint32 arg_length=0); + bool append(const char *s,uint32 arg_length, CHARSET_INFO *cs); bool append(IO_CACHE* file, uint32 arg_length); int strstr(const String &search,uint32 offset=0); // Returns offset to substring or -1 int strstr_case(const String &s,uint32 offset=0); From 3ccd93c704556d9496b643e580dca8a9fcd2f4d4 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 15:30:32 +0400 Subject: [PATCH 202/267] SRID support. GeomertyFromWKB() function. SRID() function. ::store() methods for Field_geom. Code cleanup. myisam/sp_key.c: SRID support. mysql-test/r/gis.result: We should use GeometryFromWKB(). mysql-test/t/gis.test: We should use GeometryFromWKB(). sql/field.cc: SRID support. ::store() methods for Field_geom. Code cleanup. sql/field.h: SRID support. ::store() methods for Field_geom. Code cleanup. sql/item_cmpfunc.cc: SRID support. Code cleanup. sql/item_create.cc: Code cleanup. sql/item_create.h: Code cleanup. sql/item_func.cc: SRID support. Code cleanup. sql/item_func.h: SRID support. sql/item_strfunc.cc: SRID support. GeometryFromWKB() function. Code cleanup. sql/item_strfunc.h: SRID support. GeometryFromWKB() function. Code cleanup. sql/lex.h: GeometryFromWKB() function. SRID() function. sql/spatial.cc: Code cleanup. sql/spatial.h: Code cleanup. sql/sql_yacc.yy: Fix for xxxFromText() functions. GeometryFromWKB() function. --- myisam/sp_key.c | 2 +- mysql-test/r/gis.result | 12 +-- mysql-test/t/gis.test | 12 +-- sql/field.cc | 89 +++++++++++------- sql/field.h | 10 ++- sql/item_cmpfunc.cc | 33 +++---- sql/item_create.cc | 78 ++++++++-------- sql/item_create.h | 64 ++++++------- sql/item_func.cc | 120 ++++++++++++++----------- sql/item_func.h | 11 +++ sql/item_strfunc.cc | 195 ++++++++++++++++++++++++++-------------- sql/item_strfunc.h | 16 +++- sql/lex.h | 5 +- sql/spatial.cc | 18 ++-- sql/spatial.h | 1 - sql/sql_yacc.yy | 21 +++-- 16 files changed, 415 insertions(+), 272 deletions(-) diff --git a/myisam/sp_key.c b/myisam/sp_key.c index 82c2b1f8510..f0b53b541b8 100644 --- a/myisam/sp_key.c +++ b/myisam/sp_key.c @@ -47,7 +47,7 @@ uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, dlen = _mi_calc_blob_length(keyseg->bit_start, pos); memcpy_fixed(&dptr, pos + keyseg->bit_start, sizeof(char*)); - sp_mbr_from_wkb(dptr, dlen, SPDIMS, mbr); + sp_mbr_from_wkb(dptr + 4, dlen - 4, SPDIMS, mbr); /* SRID */ for (i = 0, keyseg = keyinfo->seg; keyseg->type; keyseg++, i++) { diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index 25c3d14212b..9118fa8cfed 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -15,26 +15,26 @@ INSERT INTO pt VALUES INSERT INTO ls VALUES (105, LineFromText('LINESTRING(0 0,0 10,10 0)')), (106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')), -(107, LineString(Point(10, 10), Point(40, 10))); +(107, GeometryFromWKB(LineString(Point(10, 10), Point(40, 10)))); INSERT INTO p VALUES (108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')), (109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')), -(110, Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))); +(110, GeometryFromWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))))); INSERT INTO mpt VALUES (111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')), (112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')), -(113, MultiPoint(Point(3, 6), Point(4, 10))); +(113, GeometryFromWKB(MultiPoint(Point(3, 6), Point(4, 10)))); INSERT INTO mls VALUES (114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')), (115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')), -(116, MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))); +(116, GeometryFromWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))))); INSERT INTO mp VALUES (117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), (118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), -(119, MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))); +(119, GeometryFromWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))); INSERT INTO gc VALUES (120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), -(121, GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))); +(121, GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))); INSERT into geo SELECT * FROM pt; INSERT into geo SELECT * FROM ls; INSERT into geo SELECT * FROM p; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 35bb682f732..f4b6138c86f 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -24,32 +24,32 @@ INSERT INTO pt VALUES INSERT INTO ls VALUES (105, LineFromText('LINESTRING(0 0,0 10,10 0)')), (106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')), -(107, LineString(Point(10, 10), Point(40, 10))); +(107, GeometryFromWKB(LineString(Point(10, 10), Point(40, 10)))); INSERT INTO p VALUES (108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')), (109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')), -(110, Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))); +(110, GeometryFromWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))))); INSERT INTO mpt VALUES (111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')), (112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')), -(113, MultiPoint(Point(3, 6), Point(4, 10))); +(113, GeometryFromWKB(MultiPoint(Point(3, 6), Point(4, 10)))); INSERT INTO mls VALUES (114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')), (115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')), -(116, MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))); +(116, GeometryFromWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))))); INSERT INTO mp VALUES (117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), (118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), -(119, MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))); +(119, GeometryFromWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))); INSERT INTO gc VALUES (120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), -(121, GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))); +(121, GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))); INSERT into geo SELECT * FROM pt; INSERT into geo SELECT * FROM ls; diff --git a/sql/field.cc b/sql/field.cc index 0c17209003c..b5ed7885af5 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4525,7 +4525,7 @@ void Field_blob::get_key_image(char *buff,uint length, MBR mbr; Geometry gobj; - gobj.create_from_wkb(blob,blob_length); + gobj.create_from_wkb(blob + SRID_SIZE, blob_length - SRID_SIZE); gobj.get_mbr(&mbr); float8store(buff, mbr.xmin); float8store(buff+8, mbr.xmax); @@ -4555,35 +4555,6 @@ void Field_blob::set_key_image(char *buff,uint length, CHARSET_INFO *cs) } -void Field_geom::get_key_image(char *buff,uint length,CHARSET_INFO *cs, - imagetype type) -{ - length-=HA_KEY_BLOB_LENGTH; - ulong blob_length=get_length(ptr); - char *blob; - get_ptr(&blob); - - MBR mbr; - Geometry gobj; - gobj.create_from_wkb(blob,blob_length); - gobj.get_mbr(&mbr); - float8store(buff, mbr.xmin); - float8store(buff+8, mbr.xmax); - float8store(buff+16, mbr.ymin); - float8store(buff+24, mbr.ymax); - return; -} - -void Field_geom::set_key_image(char *buff,uint length,CHARSET_INFO *cs) -{ - Field_blob::set_key_image(buff, length, cs); -} - -void Field_geom::sql_type(String &res) const -{ - res.set("geometry", 8, &my_charset_latin1); -} - int Field_blob::key_cmp(const byte *key_ptr, uint max_key_length) { char *blob1; @@ -4776,6 +4747,64 @@ uint Field_blob::max_packed_col_length(uint max_length) return (max_length > 255 ? 2 : 1)+max_length; } + +void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, + imagetype type) +{ + length-= HA_KEY_BLOB_LENGTH; + ulong blob_length= get_length(ptr); + char *blob; + get_ptr(&blob); + + MBR mbr; + Geometry gobj; + gobj.create_from_wkb(blob + SRID_SIZE, blob_length - SRID_SIZE); + gobj.get_mbr(&mbr); + float8store(buff, mbr.xmin); + float8store(buff + 8, mbr.xmax); + float8store(buff + 16, mbr.ymin); + float8store(buff + 24, mbr.ymax); + return; +} + + +void Field_geom::set_key_image(char *buff, uint length, CHARSET_INFO *cs) +{ + Field_blob::set_key_image(buff, length, cs); +} + +void Field_geom::sql_type(String &res) const +{ + res.set("geometry", 8, &my_charset_latin1); +} + + +int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs) +{ + if (!length) + { + bzero(ptr, Field_blob::pack_length()); + } + else + { + // Should check given WKB + if (length < 4 + 1 + 4 + 8 + 8) // SRID + WKB_HEADER + X + Y + return 1; + uint32 wkb_type= uint4korr(from + 5); + if (wkb_type < 1 || wkb_type > 7) + return 1; + Field_blob::store_length(length); + if (table->copy_blobs || length <= MAX_FIELD_WIDTH) + { // Must make a copy + value.copy(from, length, cs); + from= value.ptr(); + } + bmove(ptr + packlength, (char*) &from, sizeof(char*)); + } + return 0; +} + + /**************************************************************************** ** enum type. ** This is a string which only can have a selection of different values. diff --git a/sql/field.h b/sql/field.h index 37d194ac372..e14fa06f86a 100644 --- a/sql/field.h +++ b/sql/field.h @@ -843,9 +843,10 @@ public: class Field_blob :public Field_str { + bool geom_flag; +protected: uint packlength; String value; // For temporaries - bool geom_flag; public: Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, @@ -855,7 +856,7 @@ public: struct st_table *table_arg, CHARSET_INFO *cs) :Field_str((char*) 0,len_arg, maybe_null_arg ? (uchar*) "": 0,0, NONE, field_name_arg, table_arg, cs), - packlength(3), geom_flag(true) + geom_flag(true), packlength(3) { flags|= BLOB_FLAG; } @@ -940,8 +941,11 @@ public: :Field_blob(len_arg, maybe_null_arg, field_name_arg, table_arg, &my_charset_bin) {} enum ha_base_keytype key_type() const { return HA_KEYTYPE_VARBINARY; } - enum_field_types type() const { return FIELD_TYPE_GEOMETRY;} + enum_field_types type() const { return FIELD_TYPE_GEOMETRY; } void sql_type(String &str) const; + int store(const char *to, uint length, CHARSET_INFO *charset); + int store(double nr) { return 1; } + int store(longlong nr) { return 1; } void get_key_image(char *buff,uint length, CHARSET_INFO *cs,imagetype type); void set_key_image(char *buff,uint length, CHARSET_INFO *cs); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 998b38513a9..1ae16827e0b 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2200,17 +2200,19 @@ longlong Item_cond_xor::val_int() longlong Item_func_spatial_rel::val_int() { - String *res1=args[0]->val_str(&tmp_value1); - String *res2=args[1]->val_str(&tmp_value2); + String *res1= args[0]->val_str(&tmp_value1); + String *res2= args[1]->val_str(&tmp_value2); Geometry g1, g2; - MBR mbr1,mbr2; + MBR mbr1, mbr2; - if ((null_value=(args[0]->null_value || - args[1]->null_value || - g1.create_from_wkb(res1->ptr(),res1->length()) || - g2.create_from_wkb(res2->ptr(),res2->length()) || - g1.get_mbr(&mbr1) || - g2.get_mbr(&mbr2)))) + if ((null_value= (args[0]->null_value || + args[1]->null_value || + g1.create_from_wkb(res1->ptr() + SRID_SIZE, + res1->length() - SRID_SIZE) || + g2.create_from_wkb(res2->ptr() + SRID_SIZE, + res2->length() - SRID_SIZE) || + g1.get_mbr(&mbr1) || + g2.get_mbr(&mbr2)))) return 0; switch (spatial_rel) @@ -2260,15 +2262,16 @@ longlong Item_func_issimple::val_int() longlong Item_func_isclosed::val_int() { String tmp; - String *wkb=args[0]->val_str(&tmp); + String *swkb= args[0]->val_str(&tmp); Geometry geom; int isclosed; - null_value= (!wkb || - args[0]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,is_closed) || - geom.is_closed(&isclosed)); + null_value= (!swkb || + args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom,is_closed) || + geom.is_closed(&isclosed)); return (longlong) isclosed; } diff --git a/sql/item_create.cc b/sql/item_create.cc index d90c708fc0f..eff0c8ab137 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -480,157 +480,157 @@ Item *create_func_quote(Item* a) return new Item_func_quote(a); } -Item *create_func_geometry_from_text(Item* a) -{ - return new Item_func_geometry_from_text(a); -} - -Item *create_func_as_text(Item* a) +Item *create_func_as_text(Item *a) { return new Item_func_as_text(a); } -Item *create_func_startpoint(Item* a) +Item *create_func_srid(Item *a) +{ + return new Item_func_srid(a); +} + +Item *create_func_startpoint(Item *a) { return new Item_func_spatial_decomp(a, Item_func::SP_STARTPOINT); } -Item *create_func_endpoint(Item* a) +Item *create_func_endpoint(Item *a) { return new Item_func_spatial_decomp(a, Item_func::SP_ENDPOINT); } -Item *create_func_exteriorring(Item* a) +Item *create_func_exteriorring(Item *a) { return new Item_func_spatial_decomp(a, Item_func::SP_EXTERIORRING); } -Item *create_func_pointn(Item* a, Item* b) +Item *create_func_pointn(Item *a, Item *b) { - return new Item_func_spatial_decomp_n(a,b,Item_func::SP_POINTN); + return new Item_func_spatial_decomp_n(a, b, Item_func::SP_POINTN); } -Item *create_func_interiorringn(Item* a, Item* b) +Item *create_func_interiorringn(Item *a, Item *b) { - return new Item_func_spatial_decomp_n(a,b,Item_func::SP_INTERIORRINGN); + return new Item_func_spatial_decomp_n(a, b, Item_func::SP_INTERIORRINGN); } -Item *create_func_geometryn(Item* a, Item* b) +Item *create_func_geometryn(Item *a, Item *b) { - return new Item_func_spatial_decomp_n(a,b,Item_func::SP_GEOMETRYN); + return new Item_func_spatial_decomp_n(a, b, Item_func::SP_GEOMETRYN); } -Item *create_func_centroid(Item* a) +Item *create_func_centroid(Item *a) { return new Item_func_centroid(a); } -Item *create_func_envelope(Item* a) +Item *create_func_envelope(Item *a) { return new Item_func_envelope(a); } -Item *create_func_equals(Item* a, Item* b) +Item *create_func_equals(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_EQUALS_FUNC); } -Item *create_func_disjoint(Item* a, Item* b) +Item *create_func_disjoint(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_DISJOINT_FUNC); } -Item *create_func_intersects(Item* a, Item* b) +Item *create_func_intersects(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_INTERSECTS_FUNC); } -Item *create_func_touches(Item* a, Item* b) +Item *create_func_touches(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_TOUCHES_FUNC); } -Item *create_func_crosses(Item* a, Item* b) +Item *create_func_crosses(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_CROSSES_FUNC); } -Item *create_func_within(Item* a, Item* b) +Item *create_func_within(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_WITHIN_FUNC); } -Item *create_func_contains(Item* a, Item* b) +Item *create_func_contains(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_CONTAINS_FUNC); } -Item *create_func_overlaps(Item* a, Item* b) +Item *create_func_overlaps(Item *a, Item *b) { return new Item_func_spatial_rel(a, b, Item_func::SP_OVERLAPS_FUNC); } -Item *create_func_isempty(Item* a) +Item *create_func_isempty(Item *a) { return new Item_func_isempty(a); } -Item *create_func_issimple(Item* a) +Item *create_func_issimple(Item *a) { return new Item_func_issimple(a); } -Item *create_func_isclosed(Item* a) +Item *create_func_isclosed(Item *a) { return new Item_func_isclosed(a); } -Item *create_func_geometry_type(Item* a) +Item *create_func_geometry_type(Item *a) { return new Item_func_geometry_type(a); } -Item *create_func_dimension(Item* a) +Item *create_func_dimension(Item *a) { return new Item_func_dimension(a); } -Item *create_func_x(Item* a) +Item *create_func_x(Item *a) { return new Item_func_x(a); } -Item *create_func_y(Item* a) +Item *create_func_y(Item *a) { return new Item_func_y(a); } -Item *create_func_numpoints(Item* a) +Item *create_func_numpoints(Item *a) { return new Item_func_numpoints(a); } -Item *create_func_numinteriorring(Item* a) +Item *create_func_numinteriorring(Item *a) { return new Item_func_numinteriorring(a); } -Item *create_func_numgeometries(Item* a) +Item *create_func_numgeometries(Item *a) { return new Item_func_numgeometries(a); } -Item *create_func_area(Item* a) +Item *create_func_area(Item *a) { return new Item_func_area(a); } -Item *create_func_glength(Item* a) +Item *create_func_glength(Item *a) { return new Item_func_glength(a); } -Item *create_func_point(Item* a, Item* b) +Item *create_func_point(Item *a, Item *b) { - return new Item_func_point(a,b); + return new Item_func_point(a, b); } diff --git a/sql/item_create.h b/sql/item_create.h index 135bd6b02c4..14812c47cdc 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -102,40 +102,40 @@ Item *create_load_file(Item* a); Item *create_func_is_free_lock(Item* a); Item *create_func_quote(Item* a); -Item *create_func_geometry_from_text(Item* a); -Item *create_func_as_text(Item* a); -Item *create_func_startpoint(Item* a); -Item *create_func_endpoint(Item* a); -Item *create_func_exteriorring(Item* a); -Item *create_func_centroid(Item* a); -Item *create_func_envelope(Item* a); -Item *create_func_pointn(Item* a, Item* b); -Item *create_func_interiorringn(Item* a, Item* b); -Item *create_func_geometryn(Item* a, Item* b); +Item *create_func_geometry_from_text(Item *a); +Item *create_func_as_text(Item *a); +Item *create_func_srid(Item *a); +Item *create_func_startpoint(Item *a); +Item *create_func_endpoint(Item *a); +Item *create_func_exteriorring(Item *a); +Item *create_func_centroid(Item *a); +Item *create_func_envelope(Item *a); +Item *create_func_pointn(Item *a, Item *b); +Item *create_func_interiorringn(Item *a, Item *b); +Item *create_func_geometryn(Item *a, Item *b); -Item *create_func_equals(Item* a, Item* b); -Item *create_func_disjoint(Item* a, Item* b); -Item *create_func_intersects(Item* a, Item* b); -Item *create_func_touches(Item* a, Item* b); -Item *create_func_crosses(Item* a, Item* b); -Item *create_func_within(Item* a, Item* b); -Item *create_func_contains(Item* a, Item* b); -Item *create_func_overlaps(Item* a, Item* b); +Item *create_func_equals(Item *a, Item *b); +Item *create_func_disjoint(Item *a, Item *b); +Item *create_func_intersects(Item *a, Item *b); +Item *create_func_touches(Item *a, Item *b); +Item *create_func_crosses(Item *a, Item *b); +Item *create_func_within(Item *a, Item *b); +Item *create_func_contains(Item *a, Item *b); +Item *create_func_overlaps(Item *a, Item *b); -Item *create_func_isempty(Item* a); -Item *create_func_issimple(Item* a); -Item *create_func_isclosed(Item* a); +Item *create_func_isempty(Item *a); +Item *create_func_issimple(Item *a); +Item *create_func_isclosed(Item *a); -Item *create_func_geometry_type(Item* a); -Item *create_func_dimension(Item* a); -Item *create_func_x(Item* a); -Item *create_func_y(Item* a); -Item *create_func_area(Item* a); -Item *create_func_glength(Item* a); +Item *create_func_geometry_type(Item *a); +Item *create_func_dimension(Item *a); +Item *create_func_x(Item *a); +Item *create_func_y(Item *a); +Item *create_func_area(Item *a); +Item *create_func_glength(Item *a); -Item *create_func_numpoints(Item* a); -Item *create_func_numinteriorring(Item* a); -Item *create_func_numgeometries(Item* a); - -Item *create_func_point(Item* a,Item* b); +Item *create_func_numpoints(Item *a); +Item *create_func_numinteriorring(Item *a); +Item *create_func_numgeometries(Item *a); +Item *create_func_point(Item *a, Item *b); diff --git a/sql/item_func.cc b/sql/item_func.cc index 2099a5a4ccf..6bd61a4e1e2 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -2706,115 +2706,129 @@ longlong Item_func_is_free_lock::val_int() longlong Item_func_dimension::val_int() { uint32 dim; - String *wkb=args[0]->val_str(&value); + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - args[0]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - geom.dimension(&dim)); - + null_value= (!swkb || + args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + geom.dimension(&dim)); return (longlong) dim; } longlong Item_func_numinteriorring::val_int() { uint32 num; - String *wkb=args[0]->val_str(&value); + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,num_interior_ring) || + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, num_interior_ring) || geom.num_interior_ring(&num)); - return (longlong) num; } longlong Item_func_numgeometries::val_int() { - uint32 num=0; - String *wkb=args[0]->val_str(&value); + uint32 num= 0; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,num_geometries) || - geom.num_geometries(&num)); - + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, num_geometries) || + geom.num_geometries(&num)); return (longlong) num; } longlong Item_func_numpoints::val_int() { - uint32 num=0; - String *wkb=args[0]->val_str(&value); + uint32 num; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - args[0]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,num_points) || - geom.num_points(&num)); - + null_value= (!swkb || + args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, num_points) || + geom.num_points(&num)); return (longlong) num; } double Item_func_x::val() { - double res=0; - String *wkb=args[0]->val_str(&value); + double res; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,get_x) || - geom.get_x(&res)); - + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, get_x) || + geom.get_x(&res)); return res; } double Item_func_y::val() { - double res=0; - String *wkb=args[0]->val_str(&value); + double res; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,get_y) || - geom.get_y(&res)); - + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, get_y) || + geom.get_y(&res)); return res; } double Item_func_area::val() { - double res=0; - String *wkb=args[0]->val_str(&value); + double res; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,area) || - geom.area(&res)); - + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, area) || + geom.area(&res)); return res; } double Item_func_glength::val() { - double res=0; - String *wkb=args[0]->val_str(&value); + double res; + String *swkb= args[0]->val_str(&value); Geometry geom; - null_value= (!wkb || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,length) || - geom.length(&res)); + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, length) || + geom.length(&res)); return res; } + + +longlong Item_func_srid::val_int() +{ + String *swkb= args[0]->val_str(&value); + Geometry geom; + + null_value= (!swkb || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE)); + uint32 res= uint4korr(swkb->ptr()); + return (longlong) res; +} diff --git a/sql/item_func.h b/sql/item_func.h index 860ddbbbadf..772b90fd38e 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1112,6 +1112,17 @@ public: }; +class Item_func_srid: public Item_int_func +{ + String value; +public: + Item_func_srid(Item *a): Item_int_func(a) {} + longlong val_int(); + const char *func_name() const { return "srid"; } + void fix_length_and_dec() { max_length= 10; } +}; + + class Item_func_match_nl :public Item_func_match { public: diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index f68a0dc9e73..320a4258a49 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2509,10 +2509,19 @@ String *Item_func_geometry_from_text::val_str(String *str) { Geometry geom; String arg_val; - String *wkt = args[0]->val_str(&arg_val); + String *wkt= args[0]->val_str(&arg_val); GTextReadStream trs(wkt->ptr(), wkt->length()); + uint32 srid; + if ((arg_count == 2) && !args[1]->null_value) + srid= args[1]->val_int(); + else + srid= 0; + + if (str->reserve(SRID_SIZE, 512)) + return 0; str->length(0); + str->q_append(srid); if ((null_value=(args[0]->null_value || geom.create_from_wkt(&trs, str, 0)))) return 0; return str; @@ -2525,19 +2534,51 @@ void Item_func_geometry_from_text::fix_length_and_dec() } +String *Item_func_geometry_from_wkb::val_str(String *str) +{ + String arg_val; + String *wkb= args[0]->val_str(&arg_val); + Geometry geom; + uint32 srid; + + if ((arg_count == 2) && !args[1]->null_value) + srid= args[1]->val_int(); + else + srid= 0; + + if (str->reserve(SRID_SIZE, 512)) + return 0; + str->length(0); + str->q_append(srid); + if ((null_value= (args[0]->null_value || + geom.create_from_wkb(wkb->ptr(), wkb->length())))) + return 0; + + str->append(*wkb); + return str; +} + + +void Item_func_geometry_from_wkb::fix_length_and_dec() +{ + max_length=MAX_BLOB_WIDTH; +} + + String *Item_func_as_text::val_str(String *str) { String arg_val; - String *wkt = args[0]->val_str(&arg_val); + String *swkb= args[0]->val_str(&arg_val); Geometry geom; - if ((null_value=(args[0]->null_value || - geom.create_from_wkb(wkt->ptr(),wkt->length())))) + if ((null_value= (args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE)))) return 0; str->length(0); - if ((null_value=geom.as_wkt(str))) + if ((null_value= geom.as_wkt(str))) return 0; return str; @@ -2550,11 +2591,12 @@ void Item_func_as_text::fix_length_and_dec() String *Item_func_geometry_type::val_str(String *str) { - String *wkt = args[0]->val_str(str); + String *swkb= args[0]->val_str(str); Geometry geom; - if ((null_value=(args[0]->null_value || - geom.create_from_wkb(wkt->ptr(),wkt->length())))) + if ((null_value= (args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE)))) return 0; str->copy(geom.get_class_info()->m_name, strlen(geom.get_class_info()->m_name), @@ -2565,14 +2607,19 @@ String *Item_func_geometry_type::val_str(String *str) String *Item_func_envelope::val_str(String *str) { - String *res = args[0]->val_str(str); + String *res= args[0]->val_str(str); Geometry geom; - if ((null_value = args[0]->null_value || - geom.create_from_wkb(res->ptr(),res->length()))) + if ((null_value= args[0]->null_value || + geom.create_from_wkb(res->ptr() + SRID_SIZE, + res->length() - SRID_SIZE))) return 0; + uint32 srid= uint4korr(res->ptr()); + if (res->reserve(SRID_SIZE, 512)) + return 0; res->length(0); + res->q_append(srid); return (null_value= geom.envelope(res)) ? 0 : res; } @@ -2580,15 +2627,22 @@ String *Item_func_envelope::val_str(String *str) String *Item_func_centroid::val_str(String *str) { String arg_val; - String *wkb = args[0]->val_str(&arg_val); + String *swkb= args[0]->val_str(&arg_val); Geometry geom; - null_value = args[0]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length()) || - !GEOM_METHOD_PRESENT(geom,centroid) || - geom.centroid(str); + if ((null_value= args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE) || + !GEOM_METHOD_PRESENT(geom, centroid))) + return 0; - return null_value ? 0: str; + if (str->reserve(SRID_SIZE, 512)) + return 0; + str->length(0); + uint32 srid= uint4korr(swkb->ptr()); + str->q_append(srid); + + return (null_value= geom.centroid(str)) ? 0 : str; } @@ -2599,15 +2653,20 @@ String *Item_func_centroid::val_str(String *str) String *Item_func_spatial_decomp::val_str(String *str) { String arg_val; - String *wkb = args[0]->val_str(&arg_val); + String *swkb= args[0]->val_str(&arg_val); Geometry geom; - if ((null_value = (args[0]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length())))) + if ((null_value= (args[0]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE)))) return 0; - null_value=1; + null_value= 1; + if (str->reserve(SRID_SIZE, 512)) + return 0; str->length(0); + uint32 srid= uint4korr(swkb->ptr()); + str->q_append(srid); switch(decomp_func) { case SP_STARTPOINT: @@ -2628,7 +2687,7 @@ String *Item_func_spatial_decomp::val_str(String *str) default: goto ret; } - null_value=0; + null_value= 0; ret: return null_value ? 0 : str; @@ -2638,28 +2697,30 @@ ret: String *Item_func_spatial_decomp_n::val_str(String *str) { String arg_val; - String *wkb = args[0]->val_str(&arg_val); - long n = (long) args[1]->val_int(); + String *swkb= args[0]->val_str(&arg_val); + long n= (long) args[1]->val_int(); Geometry geom; - if ((null_value = (args[0]->null_value || - args[1]->null_value || - geom.create_from_wkb(wkb->ptr(),wkb->length()) ))) + if ((null_value= (args[0]->null_value || args[1]->null_value || + geom.create_from_wkb(swkb->ptr() + SRID_SIZE, + swkb->length() - SRID_SIZE)))) return 0; - null_value=1; - + null_value= 1; + if (str->reserve(SRID_SIZE, 512)) + return 0; + str->length(0); + uint32 srid= uint4korr(swkb->ptr()); + str->q_append(srid); switch(decomp_func_n) { case SP_POINTN: - if (!GEOM_METHOD_PRESENT(geom,point_n) || - geom.point_n(n,str)) + if (!GEOM_METHOD_PRESENT(geom,point_n) || geom.point_n(n,str)) goto ret; break; case SP_GEOMETRYN: - if (!GEOM_METHOD_PRESENT(geom,geometry_n) || - geom.geometry_n(n,str)) + if (!GEOM_METHOD_PRESENT(geom,geometry_n) || geom.geometry_n(n,str)) goto ret; break; @@ -2672,7 +2733,7 @@ String *Item_func_spatial_decomp_n::val_str(String *str) default: goto ret; } - null_value=0; + null_value= 0; ret: return null_value ? 0 : str; @@ -2695,9 +2756,9 @@ String *Item_func_point::val_str(String *str) double x= args[0]->val(); double y= args[1]->val(); - if ( (null_value = (args[0]->null_value || - args[1]->null_value || - str->realloc(1+4+8+8)))) + if ( (null_value= (args[0]->null_value || + args[1]->null_value || + str->realloc(1 + 4 + 8 + 8)))) return 0; str->length(0); @@ -2724,19 +2785,19 @@ String *Item_func_spatial_collection::val_str(String *str) String arg_value; uint i; - null_value=1; + null_value= 1; str->length(0); - if (str->reserve(9,512)) + if (str->reserve(1 + 4 + 4, 512)) return 0; - str->q_append((char)Geometry::wkbNDR); - str->q_append((uint32)coll_type); - str->q_append((uint32)arg_count); + str->q_append((char) Geometry::wkbNDR); + str->q_append((uint32) coll_type); + str->q_append((uint32) arg_count); - for (i = 0; i < arg_count; ++i) + for (i= 0; i < arg_count; ++i) { - String *res = args[i]->val_str(&arg_value); + String *res= args[i]->val_str(&arg_value); if (args[i]->null_value) goto ret; @@ -2747,16 +2808,16 @@ String *Item_func_spatial_collection::val_str(String *str) any checkings for item types, so just copy them into target collection */ - if ((null_value=(str->reserve(res->length(),512)))) + if ((null_value= str->reserve(res->length(), 512))) goto ret; - str->q_append(res->ptr(),res->length()); + str->q_append(res->ptr(), res->length()); } else { enum Geometry::wkbType wkb_type; uint32 len=res->length(); - const char *data=res->ptr()+1; + const char *data= res->ptr() + 1; /* In the case of named collection we must to @@ -2767,8 +2828,8 @@ String *Item_func_spatial_collection::val_str(String *str) if (len < 5) goto ret; wkb_type= (Geometry::wkbType) uint4korr(data); - data+=4; - len-=5; + data+= 4; + len-= 5; if (wkb_type != item_type) goto ret; @@ -2779,17 +2840,17 @@ String *Item_func_spatial_collection::val_str(String *str) if (len < WKB_HEADER_SIZE) goto ret; - data-=WKB_HEADER_SIZE; - len+=WKB_HEADER_SIZE; - if (str->reserve(len,512)) + data-= WKB_HEADER_SIZE; + len+= WKB_HEADER_SIZE; + if (str->reserve(len, 512)) goto ret; - str->q_append(data,len); + str->q_append(data, len); break; case Geometry::wkbLineString: - if (str->reserve(POINT_DATA_SIZE,512)) + if (str->reserve(POINT_DATA_SIZE, 512)) goto ret; - str->q_append(data,POINT_DATA_SIZE); + str->q_append(data, POINT_DATA_SIZE); break; case Geometry::wkbPolygon: @@ -2800,25 +2861,25 @@ String *Item_func_spatial_collection::val_str(String *str) if (len < 4 + 2 * POINT_DATA_SIZE) goto ret; - uint32 llen=len; - const char *ldata=data; + uint32 llen= len; + const char *ldata= data; - n_points=uint4korr(data); - data+=4; - float8get(x1,data); - data+=8; - float8get(y1,data); - data+=8; + n_points= uint4korr(data); + data+= 4; + float8get(x1, data); + data+= 8; + float8get(y1, data); + data+= 8; - data+=(n_points-2) * POINT_DATA_SIZE; + data+= (n_points - 2) * POINT_DATA_SIZE; - float8get(x2,data); - float8get(y2,data+8); + float8get(x2, data); + float8get(y2, data + 8); if ((x1 != x2) || (y1 != y2)) goto ret; - if (str->reserve(llen,512)) + if (str->reserve(llen, 512)) goto ret; str->q_append(ldata, llen); } diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 8bfa4317698..726008716c5 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -632,15 +632,28 @@ public: Spatial functions ********************************************************/ +#define SRID_SIZE sizeof(uint32) + class Item_func_geometry_from_text :public Item_str_func { public: Item_func_geometry_from_text(Item *a) :Item_str_func(a) {} + Item_func_geometry_from_text(Item *a, Item *srid) :Item_str_func(a, srid) {} const char *func_name() const { return "geometryfromtext"; } String *val_str(String *); void fix_length_and_dec(); }; +class Item_func_geometry_from_wkb: public Item_str_func +{ +public: + Item_func_geometry_from_wkb(Item *a) :Item_str_func(a) {} + Item_func_geometry_from_wkb(Item *a, Item *srid) :Item_str_func(a, srid) {} + const char *func_name() const { return "geometryfromwkb"; } + String *val_str(String *); + void fix_length_and_dec(); +}; + class Item_func_as_text :public Item_str_func { public: @@ -683,7 +696,8 @@ public: class Item_func_point :public Item_str_func { public: - Item_func_point(Item *a,Item *b) :Item_str_func(a,b) {} + Item_func_point(Item *a, Item *b) :Item_str_func(a, b) {} + Item_func_point(Item *a, Item *b, Item *srid) :Item_str_func(a, b, srid) {} const char *func_name() const { return "point"; } String *val_str(String *); void fix_length_and_dec(){max_length=MAX_BLOB_WIDTH;} diff --git a/sql/lex.h b/sql/lex.h index 80f84628d27..9c50ab0119b 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -495,7 +495,9 @@ static SYMBOL sql_functions[] = { { "GEOMCOLLFROMTEXT", SYM(GEOMCOLLFROMTEXT),0,0}, { "GEOMFROMTEXT", SYM(GEOMFROMTEXT),0,0}, { "GEOMETRYFROMTEXT", SYM(GEOMFROMTEXT),0,0}, - { "GLENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_glength)}, + { "GEOMFROMWKB", SYM(GEOMFROMWKB),0,0}, + { "GEOMETRYFROMWKB", SYM(GEOMFROMWKB),0,0}, + { "GLENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_glength)}, { "GREATEST", SYM(GREATEST_SYM),0,0}, { "GROUP_UNIQUE_USERS", SYM(GROUP_UNIQUE_USERS),0,0}, { "HEX", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_hex)}, @@ -578,6 +580,7 @@ static SYMBOL sql_functions[] = { { "SOUNDEX", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_soundex)}, { "SPACE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_space)}, { "SQRT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sqrt)}, + { "SRID", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_srid)}, { "STARTPOINT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_startpoint)}, { "STD", SYM(STD_SYM),0,0}, { "STDDEV", SYM(STD_SYM),0,0}, diff --git a/sql/spatial.cc b/sql/spatial.cc index 3345c2756e7..df28733782f 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -78,17 +78,17 @@ int Geometry::create_from_wkb(const char *data, uint32 data_len) { uint32 geom_type; - if (data_len < 1+4) + if (data_len < 1 + 4) return 1; - data += sizeof(char); - + data++; //FIXME: check byte ordering - geom_type = uint4korr(data); - data += 4; - m_vmt = find_class(geom_type); - if (!m_vmt) return -1; - m_data = data; - m_data_end = data + data_len; + geom_type= uint4korr(data); + data+= 4; + m_vmt= find_class(geom_type); + if (!m_vmt) + return -1; + m_data= data; + m_data_end= data + data_len; return 0; } diff --git a/sql/spatial.h b/sql/spatial.h index 15e4f7353ed..d9c14afbe30 100644 --- a/sql/spatial.h +++ b/sql/spatial.h @@ -225,7 +225,6 @@ public: wkbNDR = 1 /* Little Endian */ }; - class GClassInfo { public: diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 76df8ba54b2..7749aea0040 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -458,6 +458,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token FROM_UNIXTIME %token GEOMCOLLFROMTEXT %token GEOMFROMTEXT +%token GEOMFROMWKB %token GEOMETRYCOLLECTION %token GROUP_UNIQUE_USERS %token HOUR_MINUTE_SYM @@ -2256,7 +2257,11 @@ simple_expr: | GEOMFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | GEOMFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } + | GEOMFROMWKB '(' expr ')' + { $$= new Item_func_geometry_from_wkb($3); } + | GEOMFROMWKB '(' expr ',' expr ')' + { $$= new Item_func_geometry_from_wkb($3, $5); } | GEOMETRYCOLLECTION '(' expr_list ')' { $$= new Item_func_spatial_collection(* $3, Geometry::wkbGeometryCollection, @@ -2302,7 +2307,7 @@ simple_expr: | GEOMCOLLFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | GEOMCOLLFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | GREATEST_SYM '(' expr ',' expr_list ')' { $5->push_front($3); $$= new Item_func_max(*$5); } | LEAST_SYM '(' expr ',' expr_list ')' @@ -2314,7 +2319,7 @@ simple_expr: | LINEFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | LINEFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | MASTER_POS_WAIT '(' expr ',' expr ')' { $$= new Item_master_pos_wait($3, $5); @@ -2337,15 +2342,15 @@ simple_expr: | MLINEFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | MLINEFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | MPOINTFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | MPOINTFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | MPOLYFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | MPOLYFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | MULTIPOINT '(' expr_list ')' { $$= new Item_func_spatial_collection(* $3, Geometry::wkbMultiPoint, Geometry::wkbPoint); } @@ -2365,11 +2370,11 @@ simple_expr: | POINTFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | POINTFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | POLYFROMTEXT '(' expr ')' { $$= new Item_func_geometry_from_text($3); } | POLYFROMTEXT '(' expr ',' expr ')' - { $$= new Item_func_geometry_from_text($3); } + { $$= new Item_func_geometry_from_text($3, $5); } | POLYGON '(' expr_list ')' { $$= new Item_func_spatial_collection(* $3, Geometry::wkbPolygon, Geometry::wkbLineString); } From 3f6a00d1ace444f9e264404ecd1a43bb56f7e0b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 17:01:32 +0400 Subject: [PATCH 203/267] CONVERT class was removed --- libmysqld/lib_sql.cc | 2 + mysql-test/r/query_cache.result | 2 +- mysql-test/r/variables.result | 20 ++++----- mysql-test/t/variables.test | 12 +++--- sql/convert.cc | 3 ++ sql/log.cc | 2 + sql/log_event.cc | 4 +- sql/protocol.cc | 15 ------- sql/protocol.h | 4 -- sql/set_var.cc | 74 ++++++++++++--------------------- sql/set_var.h | 18 -------- sql/sql_cache.cc | 14 ++----- sql/sql_class.h | 27 ------------ sql/sql_db.cc | 1 - sql/sql_lex.cc | 12 +----- sql/sql_lex.h | 1 - sql/sql_show.cc | 4 +- sql/sql_yacc.yy | 10 ++++- 18 files changed, 68 insertions(+), 157 deletions(-) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 68a7b940220..12647a32713 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -504,6 +504,7 @@ bool Protocol::net_store_data(const char *from, uint length) return false; } +#if 0 /* The same as Protocol::net_store_data but does the converstion */ bool Protocol::convert_str(const char *from, uint length) @@ -519,3 +520,4 @@ bool Protocol::convert_str(const char *from, uint length) return false; } +#endif diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 30a0cd01c51..00d79ec0b6e 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -377,7 +377,7 @@ a set CHARACTER SET cp1251_koi8; select * from t1; a -À +? set CHARACTER SET DEFAULT; show status like "Qcache_queries_in_cache"; Variable_name Value diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index b66d75e2b3a..822fab5ae47 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -156,17 +156,17 @@ show variables like 'net_buffer_length'; Variable_name Value net_buffer_length 1048576 set GLOBAL character set cp1251_koi8; -show global variables like "convert_character_set"; +show global variables like "client_collation"; Variable_name Value -convert_character_set cp1251_koi8 +client_collation cp1251 set character set cp1251_koi8; -show variables like "convert_character_set"; +show variables like "client_collation"; Variable_name Value -convert_character_set cp1251_koi8 +client_collation cp1251 set global character set default, session character set default; -show variables like "convert_character_set"; +show variables like "client_collation"; Variable_name Value -convert_character_set cp1251_koi8 +client_collation latin1 select @@timestamp>0; @@timestamp>0 1 @@ -193,12 +193,12 @@ set SESSION query_cache_size=10000; Variable 'query_cache_size' is a GLOBAL variable and should be set with SET GLOBAL set GLOBAL table_type=DEFAULT; Variable 'table_type' doesn't have a default value -set convert_character_set=UNKNOWN_CHARACTER_SET; +set client_collation=UNKNOWN_CHARACTER_SET; Unknown character set: 'UNKNOWN_CHARACTER_SET' set character set unknown; Unknown character set: 'unknown' set character set 0; -Wrong argument type to variable 'convert_character_set' +Wrong argument type to variable 'client_collation' set global autocommit=1; Variable 'autocommit' is a LOCAL variable and can't be used with SET GLOBAL select @@global.timestamp; @@ -218,8 +218,8 @@ select @@autocommit, @@big_tables; 1 1 set global binlog_cache_size=100; set bulk_insert_buffer_size=100; -set convert_character_set=cp1251_koi8; -set convert_character_set=default; +set character set cp1251_koi8; +set character set default; set @@global.concurrent_insert=1; set global connect_timeout=100; select @@delay_key_write; diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 39aa5a20a71..4bde54f868a 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -92,11 +92,11 @@ set net_buffer_length=2000000000; show variables like 'net_buffer_length'; set GLOBAL character set cp1251_koi8; -show global variables like "convert_character_set"; +show global variables like "client_collation"; set character set cp1251_koi8; -show variables like "convert_character_set"; +show variables like "client_collation"; set global character set default, session character set default; -show variables like "convert_character_set"; +show variables like "client_collation"; select @@timestamp>0; set @@rand_seed1=10000000,@@rand_seed2=1000000; @@ -123,7 +123,7 @@ set SESSION query_cache_size=10000; --error 1230 set GLOBAL table_type=DEFAULT; --error 1115 -set convert_character_set=UNKNOWN_CHARACTER_SET; +set client_collation=UNKNOWN_CHARACTER_SET; --error 1115 set character set unknown; --error 1232 @@ -148,8 +148,8 @@ set big_tables=1; select @@autocommit, @@big_tables; set global binlog_cache_size=100; set bulk_insert_buffer_size=100; -set convert_character_set=cp1251_koi8; -set convert_character_set=default; +set character set cp1251_koi8; +set character set default; set @@global.concurrent_insert=1; set global connect_timeout=100; select @@delay_key_write; diff --git a/sql/convert.cc b/sql/convert.cc index 84003af3922..bfdf49bf42d 100644 --- a/sql/convert.cc +++ b/sql/convert.cc @@ -14,6 +14,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#if 0 /* ** Convert tables between different character sets @@ -460,3 +461,5 @@ bool CONVERT::store(String *packet,const char *from,uint length) packet->length((uint) (store_dest(to, from, length)-packet->ptr())); return 0; } + +#endif diff --git a/sql/log.cc b/sql/log.cc index 170e976e643..e70facd64df 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1194,6 +1194,7 @@ bool MYSQL_LOG::write(Log_event* event_info) goto err; } } +#if 0 if (thd->variables.convert_set) { char buf[256], *p; @@ -1204,6 +1205,7 @@ bool MYSQL_LOG::write(Log_event* event_info) if (e.write(file)) goto err; } +#endif } event_info->set_log_pos(this); if (event_info->write(file) || diff --git a/sql/log_event.cc b/sql/log_event.cc index 3a1dbb6485e..378c0639d54 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -943,7 +943,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli) VOID(pthread_mutex_lock(&LOCK_thread_count)); thd->db = thd->query = 0; VOID(pthread_mutex_unlock(&LOCK_thread_count)); - thd->variables.convert_set = 0; + //thd->variables.convert_set = 0; close_thread_tables(thd); free_root(&thd->mem_root,0); return 1; @@ -954,7 +954,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli) thd->query= 0; // just to be sure VOID(pthread_mutex_unlock(&LOCK_thread_count)); // assume no convert for next query unless set explictly - thd->variables.convert_set = 0; + //thd->variables.convert_set = 0; close_thread_tables(thd); if (thd->query_error || thd->is_fatal_error) diff --git a/sql/protocol.cc b/sql/protocol.cc index 9fb32daf57f..af8f966a4b6 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -43,11 +43,6 @@ bool Protocol::net_store_data(const char *from, uint length) packet->length((uint) (to+length-packet->ptr())); return 0; } - -inline bool Protocol::convert_str(const char *from, uint length) -{ - return convert->store(packet, from, length); -} #endif @@ -472,7 +467,6 @@ char *net_store_data(char *to,longlong from) void Protocol::init(THD *thd_arg) { thd=thd_arg; - convert=thd->variables.convert_set; packet= &thd->packet; #ifndef DEBUG_OFF field_types= 0; @@ -487,15 +481,12 @@ void Protocol::init(THD *thd_arg) send_fields() THD Thread data object list List of items to send to client - convert object used to convertation to another character set flag Bit mask with the following functions: 1 send number of rows 2 send default values DESCRIPTION Sum fields has table name empty and field_name. - Uses send_fields_convert() and send_fields() depending on - if we have an active character set convert or not. RETURN VALUES 0 ok @@ -712,8 +703,6 @@ bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs) field_types[field_pos] <= MYSQL_TYPE_GEOMETRY)); field_pos++; #endif - if (convert) - return convert_str(from, length); if (cs != this->thd->charset()) { String tmp; @@ -813,8 +802,6 @@ bool Protocol_simple::store(Field *field) char buff[MAX_FIELD_WIDTH]; String tmp1(buff,sizeof(buff), &my_charset_bin); field->val_str(&tmp1,&tmp1); - if (convert) - return convert_str(tmp1.ptr(), tmp1.length()); if (field->charset() != this->thd->charset()) { String tmp; @@ -929,8 +916,6 @@ bool Protocol_prep::store(const char *from,uint length, CHARSET_INFO *cs) field_types[field_pos] <= MYSQL_TYPE_GEOMETRY)); #endif field_pos++; - if (convert) - return convert_str(from, length); return net_store_data(from, length); } diff --git a/sql/protocol.h b/sql/protocol.h index e9df013e81c..71ad5c1302b 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -20,7 +20,6 @@ #define PACKET_BUFFET_EXTRA_ALLOC 1024 -class CONVERT; class i_string; class THD; #ifdef EMBEDDED_LIBRARY @@ -37,15 +36,12 @@ protected: #endif uint field_count; bool net_store_data(const char *from, uint length); - bool convert_str(const char *from, uint length); #ifdef EMBEDDED_LIBRARY char **next_field; MYSQL_FIELD *next_mysql_field; MEM_ROOT *alloc; #endif public: - CONVERT *convert; - Protocol() {} Protocol(THD *thd) { init(thd); } void init(THD* thd); diff --git a/sql/set_var.cc b/sql/set_var.cc index 0b85f50e0ef..a51a2e7204a 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -105,7 +105,6 @@ sys_var_str sys_charset("character_set", sys_update_charset, sys_set_default_charset); sys_var_client_collation sys_client_collation("client_collation"); -sys_var_thd_conv_charset sys_convert_charset("convert_character_set"); sys_var_bool_ptr sys_concurrent_insert("concurrent_insert", &myisam_concurrent_insert); sys_var_long_ptr sys_connect_timeout("connect_timeout", @@ -337,7 +336,6 @@ sys_var *sys_variables[]= &sys_client_collation, &sys_concurrent_insert, &sys_connect_timeout, - &sys_convert_charset, &sys_default_week_format, &sys_delay_key_write, &sys_delayed_insert_limit, @@ -445,7 +443,6 @@ struct show_var_st init_vars[]= { {sys_client_collation.name, (char*) &sys_client_collation, SHOW_SYS}, {sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS}, {sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS}, - {sys_convert_charset.name, (char*) &sys_convert_charset, SHOW_SYS}, {"datadir", mysql_real_data_home, SHOW_CHAR}, {"default_week_format", (char*) &sys_default_week_format, SHOW_SYS}, {sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS}, @@ -1131,56 +1128,38 @@ byte *sys_var_thd_bit::value_ptr(THD *thd, enum_var_type type) } -bool sys_var_thd_conv_charset::check(THD *thd, set_var *var) +typedef struct old_names_map_st { + const char *old_name; + const char *new_name; +} my_old_conv; + +static my_old_conv old_conv[]= { - CONVERT *tmp; - char buff[80]; - String str(buff,sizeof(buff), system_charset_info), *res; + { "cp1251_koi8" , "cp1251" }, + { "cp1250_latin2" , "cp1250" }, + { "kam_latin2" , "keybcs2" }, + { "mac_latin2" , "MacRoman" }, + { "macce_latin2" , "MacCE" }, + { "pc2_latin2" , "pclatin2" }, + { "vga_latin2" , "pclatin1" }, + { "koi8_cp1251" , "koi8r" }, + { "win1251ukr_koi8_ukr" , "win1251ukr" }, + { "koi8_ukr_win1251ukr" , "koi8u" }, + { NULL , NULL } +}; - if (!var->value) // Default value - { - var->save_result.convert= (var->type != OPT_GLOBAL ? - global_system_variables.convert_set - : (CONVERT*) 0); - return 0; - } - if (!(res=var->value->val_str(&str))) - res= &empty_string; - - if (!(tmp=get_convert_set(res->c_ptr()))) - { - my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr()); - return 1; - } - var->save_result.convert=tmp; // Save for update - return 0; -} - - -bool sys_var_thd_conv_charset::update(THD *thd, set_var *var) +static CHARSET_INFO *get_old_charset_by_name(const char *name) { - if (var->type == OPT_GLOBAL) - global_system_variables.convert_set= var->save_result.convert; - else + my_old_conv *c; + + for (c= old_conv; c->old_name; c++) { - thd->lex.convert_set= thd->variables.convert_set= - var->save_result.convert; - thd->protocol_simple.init(thd); - thd->protocol_prep.init(thd); + if (!my_strcasecmp(&my_charset_latin1,name,c->old_name)) + return get_charset_by_name(c->new_name,MYF(0)); } - return 0; + return NULL; } - -byte *sys_var_thd_conv_charset::value_ptr(THD *thd, enum_var_type type) -{ - CONVERT *conv= ((type == OPT_GLOBAL) ? - global_system_variables.convert_set : - thd->variables.convert_set); - return conv ? (byte*) conv->name : (byte*) ""; -} - - bool sys_var_client_collation::check(THD *thd, set_var *var) { CHARSET_INFO *tmp; @@ -1198,7 +1177,8 @@ bool sys_var_client_collation::check(THD *thd, set_var *var) if (!(res=var->value->val_str(&str))) res= &empty_string; - if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0)))) + if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0))) && + !(tmp=get_old_charset_by_name(res->c_ptr()))) { my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr()); return 1; diff --git a/sql/set_var.h b/sql/set_var.h index b84e0b888e2..d91b6796d20 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -406,23 +406,6 @@ public: }; -class sys_var_thd_conv_charset :public sys_var_thd -{ -public: - sys_var_thd_conv_charset(const char *name_arg) - :sys_var_thd(name_arg) - {} - bool check(THD *thd, set_var *var); - bool update(THD *thd, set_var *var); - SHOW_TYPE type() { return SHOW_CHAR; } - byte *value_ptr(THD *thd, enum_var_type type); - bool check_update_type(Item_result type) - { - return type != STRING_RESULT; /* Only accept strings */ - } - bool check_default(enum_var_type type) { return 0; } -}; - class sys_var_client_collation :public sys_var_thd { public: @@ -490,7 +473,6 @@ public: union { CHARSET_INFO *charset; - CONVERT *convert; ulong ulong_value; } save_result; diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 90fd61ebeb7..bd6d7f83c95 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -778,11 +778,8 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used) most significant bit - CLIENT_LONG_FLAG, other - charset number (0 no charset convertion) */ - if (thd->variables.convert_set != 0) - { - flags|= (byte) thd->variables.convert_set->number(); - DBUG_ASSERT(thd->variables.convert_set->number() < 128); - } + flags|= (byte) thd->charset()->number; + DBUG_ASSERT(thd->charset()->number < 128); tot_length=thd->query_length+thd->db_length+2; thd->query[tot_length-1] = (char) flags; @@ -935,11 +932,8 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) Other - charset number (0 no charset convertion) */ flags = (thd->client_capabilities & CLIENT_LONG_FLAG ? 0x80 : 0); - if (thd->variables.convert_set != 0) - { - flags |= (byte) thd->variables.convert_set->number(); - DBUG_ASSERT(thd->variables.convert_set->number() < 128); - } + flags |= (byte) thd->charset()->number; + DBUG_ASSERT(thd->charset()->number < 128); sql[tot_length-1] = (char) flags; query_block = (Query_cache_block *) hash_search(&queries, (byte*) sql, tot_length); diff --git a/sql/sql_class.h b/sql/sql_class.h index dbf9f0d13d6..d2ceb2e6139 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -172,32 +172,6 @@ public: /* character conversion tables */ -class CONVERT; -CONVERT *get_convert_set(const char *name_ptr); - -class CONVERT -{ - const uchar *from_map,*to_map; - void convert_array(const uchar *mapping,uchar *buff,uint length); -public: - const char *name; - uint numb; - CONVERT(const char *name_par,uchar *from_par,uchar *to_par, uint number) - :from_map(from_par),to_map(to_par),name(name_par),numb(number) {} - friend CONVERT *get_convert_set(const char *name_ptr); - inline void convert(char *a,uint length) - { - convert_array(from_map, (uchar*) a,length); - } - char *store_dest(char *to, const char *from, uint length) - { - for (const char *end=from+length ; from != end ; from++) - *to++= to_map[(uchar) *from]; - return to; - } - bool store(String *, const char *,uint); - inline uint number() { return numb; } -}; typedef struct st_copy_info { ha_rows records; @@ -400,7 +374,6 @@ struct system_variables my_bool log_warnings; my_bool low_priority_updates; - CONVERT *convert_set; CHARSET_INFO *thd_charset; }; diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 03ccf88316c..ffa5416eaf5 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -615,7 +615,6 @@ int mysqld_show_create_db(THD *thd, char *dbname, uint db_access; bool found_libchar; HA_CREATE_INFO create; - CONVERT *convert=thd->variables.convert_set; uint create_options = create_info ? create_info->options : 0; Protocol *protocol=thd->protocol; DBUG_ENTER("mysql_show_create_db"); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 378aa380a3c..da67f5646fc 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -107,6 +107,7 @@ void lex_free(void) LEX *lex_start(THD *thd, uchar *buf,uint length) { LEX *lex= &thd->lex; + lex->thd= thd; lex->next_state=MY_LEX_START; lex->end_of_query=(lex->ptr=buf)+length; lex->yylineno = 1; @@ -117,7 +118,6 @@ LEX *lex_start(THD *thd, uchar *buf,uint length) lex->select_lex.ftfunc_list_alloc.empty(); lex->select_lex.ftfunc_list= &lex->select_lex.ftfunc_list_alloc; lex->current_select= &lex->select_lex; - lex->convert_set= (lex->thd= thd)->variables.convert_set; lex->thd_charset= lex->thd->variables.thd_charset; lex->yacc_yyss=lex->yacc_yyvs=0; lex->ignore_space=test(thd->variables.sql_mode & MODE_IGNORE_SPACE); @@ -520,8 +520,6 @@ int yylex(void *arg, void *yythd) yySkip(); // next state does a unget } yylval->lex_str=get_token(lex,length); - if (lex->convert_set) - lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); /* Note: "SELECT _bla AS 'alias'" @@ -621,8 +619,6 @@ int yylex(void *arg, void *yythd) case MY_LEX_FOUND_IDENT: // Complete ident yylval->lex_str=get_token(lex,yyLength()); - if (lex->convert_set) - lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(IDENT); case MY_LEX_USER_VARIABLE_DELIMITER: @@ -670,8 +666,6 @@ int yylex(void *arg, void *yythd) else yylval->lex_str=get_token(lex,yyLength()); } - if (lex->convert_set) - lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); if (c == delim) yySkip(); // Skip end ` return(IDENT); @@ -802,8 +796,6 @@ int yylex(void *arg, void *yythd) break; } yylval->lex_str.length=lex->yytoklen; - if (lex->convert_set) - lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(TEXT_STRING); case MY_LEX_COMMENT: // Comment @@ -940,8 +932,6 @@ int yylex(void *arg, void *yythd) return(tokval); // Was keyword } yylval->lex_str=get_token(lex,length); - if (lex->convert_set) - lex->convert_set->convert((char*) yylval->lex_str.str,lex->yytoklen); return(IDENT); } } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 7c45e9e5619..d8045dcc556 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -448,7 +448,6 @@ typedef struct st_lex TYPELIB *interval; create_field *last_field; Item *default_value, *comment; - CONVERT *convert_set; CHARSET_INFO *thd_charset; LEX_USER *grant_user; gptr yacc_yyss,yacc_yyvs; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 00df2c44fd6..9f26c8a12ad 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -979,8 +979,8 @@ mysqld_dump_create_info(THD *thd, TABLE *table, int fd) if (store_create_info(thd, table, packet)) DBUG_RETURN(-1); - if (protocol->convert) - protocol->convert->convert((char*) packet->ptr(), packet->length()); + //if (protocol->convert) + // protocol->convert->convert((char*) packet->ptr(), packet->length()); if (fd < 0) { if (protocol->write()) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 7749aea0040..d7971cb7c08 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4306,9 +4306,15 @@ option_value: } | charset opt_equal set_expr_or_default { - LEX *lex=Lex; + THD *thd= YYTHD; + LEX *lex= &thd->lex; + if (!$3) + { + CHARSET_INFO *cl= thd->db_charset; + $3= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1); + } lex->var_list.push_back(new set_var(lex->option_type, - find_sys_var("convert_character_set"), + find_sys_var("client_collation"), $3)); } | NAMES_SYM charset_name_or_default opt_collate From fe8ea234c9c8cd29f487f839d9ec875043bc25ce Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 17:01:38 +0400 Subject: [PATCH 204/267] Should use GeometryFromWKB(). --- mysql-test/r/gis-rtree.result | 506 ++++++++++++++-------------------- mysql-test/t/gis-rtree.test | 11 +- 2 files changed, 206 insertions(+), 311 deletions(-) diff --git a/mysql-test/r/gis-rtree.result b/mysql-test/r/gis-rtree.result index a1d3455d9a7..173a065adc2 100644 --- a/mysql-test/r/gis-rtree.result +++ b/mysql-test/r/gis-rtree.result @@ -165,12 +165,10 @@ INSERT INTO t1 (g) VALUES (GeomFromText('LineString(1 1, 299 299)')); SELECT count(*) FROM t1; count(*) 150 -EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, -GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range g g 32 NULL 4 Using where -SELECT fid, AsText(g) FROM t1 WHERE Within(g, -GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); fid AsText(g) 1 LINESTRING(150 150,150 150) 11 LINESTRING(140 140,160 160) @@ -188,206 +186,106 @@ CREATE TABLE t2 ( fid INT NOT NULL AUTO_INCREMENT PRIMARY KEY, g GEOMETRY NOT NULL ) TYPE=MyISAM; -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 10 * 10 - 9), -Point(10 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 9 * 10 - 9), -Point(10 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 8 * 10 - 9), -Point(10 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 7 * 10 - 9), -Point(10 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 6 * 10 - 9), -Point(10 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 5 * 10 - 9), -Point(10 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 4 * 10 - 9), -Point(10 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 3 * 10 - 9), -Point(10 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 2 * 10 - 9), -Point(10 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(10 * 10 - 9, 1 * 10 - 9), -Point(10 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 10 * 10 - 9), -Point(9 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 9 * 10 - 9), -Point(9 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 8 * 10 - 9), -Point(9 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 7 * 10 - 9), -Point(9 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 6 * 10 - 9), -Point(9 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 5 * 10 - 9), -Point(9 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 4 * 10 - 9), -Point(9 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 3 * 10 - 9), -Point(9 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 2 * 10 - 9), -Point(9 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(9 * 10 - 9, 1 * 10 - 9), -Point(9 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 10 * 10 - 9), -Point(8 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 9 * 10 - 9), -Point(8 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 8 * 10 - 9), -Point(8 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 7 * 10 - 9), -Point(8 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 6 * 10 - 9), -Point(8 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 5 * 10 - 9), -Point(8 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 4 * 10 - 9), -Point(8 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 3 * 10 - 9), -Point(8 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 2 * 10 - 9), -Point(8 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(8 * 10 - 9, 1 * 10 - 9), -Point(8 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 10 * 10 - 9), -Point(7 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 9 * 10 - 9), -Point(7 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 8 * 10 - 9), -Point(7 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 7 * 10 - 9), -Point(7 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 6 * 10 - 9), -Point(7 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 5 * 10 - 9), -Point(7 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 4 * 10 - 9), -Point(7 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 3 * 10 - 9), -Point(7 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 2 * 10 - 9), -Point(7 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(7 * 10 - 9, 1 * 10 - 9), -Point(7 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 10 * 10 - 9), -Point(6 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 9 * 10 - 9), -Point(6 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 8 * 10 - 9), -Point(6 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 7 * 10 - 9), -Point(6 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 6 * 10 - 9), -Point(6 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 5 * 10 - 9), -Point(6 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 4 * 10 - 9), -Point(6 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 3 * 10 - 9), -Point(6 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 2 * 10 - 9), -Point(6 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(6 * 10 - 9, 1 * 10 - 9), -Point(6 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 10 * 10 - 9), -Point(5 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 9 * 10 - 9), -Point(5 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 8 * 10 - 9), -Point(5 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 7 * 10 - 9), -Point(5 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 6 * 10 - 9), -Point(5 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 5 * 10 - 9), -Point(5 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 4 * 10 - 9), -Point(5 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 3 * 10 - 9), -Point(5 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 2 * 10 - 9), -Point(5 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(5 * 10 - 9, 1 * 10 - 9), -Point(5 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 10 * 10 - 9), -Point(4 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 9 * 10 - 9), -Point(4 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 8 * 10 - 9), -Point(4 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 7 * 10 - 9), -Point(4 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 6 * 10 - 9), -Point(4 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 5 * 10 - 9), -Point(4 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 4 * 10 - 9), -Point(4 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 3 * 10 - 9), -Point(4 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 2 * 10 - 9), -Point(4 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(4 * 10 - 9, 1 * 10 - 9), -Point(4 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 10 * 10 - 9), -Point(3 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 9 * 10 - 9), -Point(3 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 8 * 10 - 9), -Point(3 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 7 * 10 - 9), -Point(3 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 6 * 10 - 9), -Point(3 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 5 * 10 - 9), -Point(3 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 4 * 10 - 9), -Point(3 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 3 * 10 - 9), -Point(3 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 2 * 10 - 9), -Point(3 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(3 * 10 - 9, 1 * 10 - 9), -Point(3 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 10 * 10 - 9), -Point(2 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 9 * 10 - 9), -Point(2 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 8 * 10 - 9), -Point(2 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 7 * 10 - 9), -Point(2 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 6 * 10 - 9), -Point(2 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 5 * 10 - 9), -Point(2 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 4 * 10 - 9), -Point(2 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 3 * 10 - 9), -Point(2 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 2 * 10 - 9), -Point(2 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(2 * 10 - 9, 1 * 10 - 9), -Point(2 * 10, 1 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 10 * 10 - 9), -Point(1 * 10, 10 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 9 * 10 - 9), -Point(1 * 10, 9 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 8 * 10 - 9), -Point(1 * 10, 8 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 7 * 10 - 9), -Point(1 * 10, 7 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 6 * 10 - 9), -Point(1 * 10, 6 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 5 * 10 - 9), -Point(1 * 10, 5 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 4 * 10 - 9), -Point(1 * 10, 4 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 3 * 10 - 9), -Point(1 * 10, 3 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 2 * 10 - 9), -Point(1 * 10, 2 * 10))); -INSERT INTO t2 (g) VALUES (LineString(Point(1 * 10 - 9, 1 * 10 - 9), -Point(1 * 10, 1 * 10))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 10 * 10 - 9), Point(10 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 9 * 10 - 9), Point(10 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 8 * 10 - 9), Point(10 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 7 * 10 - 9), Point(10 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 6 * 10 - 9), Point(10 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 5 * 10 - 9), Point(10 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 4 * 10 - 9), Point(10 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 3 * 10 - 9), Point(10 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 2 * 10 - 9), Point(10 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(10 * 10 - 9, 1 * 10 - 9), Point(10 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 10 * 10 - 9), Point(9 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 9 * 10 - 9), Point(9 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 8 * 10 - 9), Point(9 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 7 * 10 - 9), Point(9 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 6 * 10 - 9), Point(9 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 5 * 10 - 9), Point(9 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 4 * 10 - 9), Point(9 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 3 * 10 - 9), Point(9 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 2 * 10 - 9), Point(9 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(9 * 10 - 9, 1 * 10 - 9), Point(9 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 10 * 10 - 9), Point(8 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 9 * 10 - 9), Point(8 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 8 * 10 - 9), Point(8 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 7 * 10 - 9), Point(8 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 6 * 10 - 9), Point(8 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 5 * 10 - 9), Point(8 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 4 * 10 - 9), Point(8 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 3 * 10 - 9), Point(8 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 2 * 10 - 9), Point(8 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(8 * 10 - 9, 1 * 10 - 9), Point(8 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 10 * 10 - 9), Point(7 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 9 * 10 - 9), Point(7 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 8 * 10 - 9), Point(7 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 7 * 10 - 9), Point(7 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 6 * 10 - 9), Point(7 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 5 * 10 - 9), Point(7 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 4 * 10 - 9), Point(7 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 3 * 10 - 9), Point(7 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 2 * 10 - 9), Point(7 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(7 * 10 - 9, 1 * 10 - 9), Point(7 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 10 * 10 - 9), Point(6 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 9 * 10 - 9), Point(6 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 8 * 10 - 9), Point(6 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 7 * 10 - 9), Point(6 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 6 * 10 - 9), Point(6 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 5 * 10 - 9), Point(6 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 4 * 10 - 9), Point(6 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 3 * 10 - 9), Point(6 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 2 * 10 - 9), Point(6 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(6 * 10 - 9, 1 * 10 - 9), Point(6 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 10 * 10 - 9), Point(5 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 9 * 10 - 9), Point(5 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 8 * 10 - 9), Point(5 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 7 * 10 - 9), Point(5 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 6 * 10 - 9), Point(5 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 5 * 10 - 9), Point(5 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 4 * 10 - 9), Point(5 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 3 * 10 - 9), Point(5 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 2 * 10 - 9), Point(5 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(5 * 10 - 9, 1 * 10 - 9), Point(5 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 10 * 10 - 9), Point(4 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 9 * 10 - 9), Point(4 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 8 * 10 - 9), Point(4 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 7 * 10 - 9), Point(4 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 6 * 10 - 9), Point(4 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 5 * 10 - 9), Point(4 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 4 * 10 - 9), Point(4 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 3 * 10 - 9), Point(4 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 2 * 10 - 9), Point(4 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(4 * 10 - 9, 1 * 10 - 9), Point(4 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 10 * 10 - 9), Point(3 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 9 * 10 - 9), Point(3 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 8 * 10 - 9), Point(3 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 7 * 10 - 9), Point(3 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 6 * 10 - 9), Point(3 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 5 * 10 - 9), Point(3 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 4 * 10 - 9), Point(3 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 3 * 10 - 9), Point(3 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 2 * 10 - 9), Point(3 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(3 * 10 - 9, 1 * 10 - 9), Point(3 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 10 * 10 - 9), Point(2 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 9 * 10 - 9), Point(2 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 8 * 10 - 9), Point(2 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 7 * 10 - 9), Point(2 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 6 * 10 - 9), Point(2 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 5 * 10 - 9), Point(2 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 4 * 10 - 9), Point(2 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 3 * 10 - 9), Point(2 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 2 * 10 - 9), Point(2 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(2 * 10 - 9, 1 * 10 - 9), Point(2 * 10, 1 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 10 * 10 - 9), Point(1 * 10, 10 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 9 * 10 - 9), Point(1 * 10, 9 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 8 * 10 - 9), Point(1 * 10, 8 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 7 * 10 - 9), Point(1 * 10, 7 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 6 * 10 - 9), Point(1 * 10, 6 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 5 * 10 - 9), Point(1 * 10, 5 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 4 * 10 - 9), Point(1 * 10, 4 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 3 * 10 - 9), Point(1 * 10, 3 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 2 * 10 - 9), Point(1 * 10, 2 * 10)))); +INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point(1 * 10 - 9, 1 * 10 - 9), Point(1 * 10, 1 * 10)))); ALTER TABLE t2 ADD SPATIAL KEY(g); SHOW CREATE TABLE t2; Table Create Table @@ -411,403 +309,403 @@ fid AsText(g) 55 LINESTRING(41 51,50 60) 56 LINESTRING(41 41,50 50) 46 LINESTRING(51 41,60 50) -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 10 * 10 - 9), Point(10 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 10 * 10 - 9), Point(10 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 99 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 9 * 10 - 9), Point(10 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 9 * 10 - 9), Point(10 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 98 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 8 * 10 - 9), Point(10 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 8 * 10 - 9), Point(10 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 97 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 7 * 10 - 9), Point(10 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 7 * 10 - 9), Point(10 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 96 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 6 * 10 - 9), Point(10 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 6 * 10 - 9), Point(10 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 95 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 5 * 10 - 9), Point(10 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 5 * 10 - 9), Point(10 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 94 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 4 * 10 - 9), Point(10 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 4 * 10 - 9), Point(10 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 93 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 3 * 10 - 9), Point(10 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 3 * 10 - 9), Point(10 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 92 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 2 * 10 - 9), Point(10 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 2 * 10 - 9), Point(10 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 91 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(10 * 10 - 9, 1 * 10 - 9), Point(10 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(10 * 10 - 9, 1 * 10 - 9), Point(10 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 90 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 10 * 10 - 9), Point(9 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 10 * 10 - 9), Point(9 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 89 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 9 * 10 - 9), Point(9 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 9 * 10 - 9), Point(9 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 88 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 8 * 10 - 9), Point(9 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 8 * 10 - 9), Point(9 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 87 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 7 * 10 - 9), Point(9 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 7 * 10 - 9), Point(9 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 86 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 6 * 10 - 9), Point(9 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 6 * 10 - 9), Point(9 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 85 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 5 * 10 - 9), Point(9 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 5 * 10 - 9), Point(9 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 84 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 4 * 10 - 9), Point(9 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 4 * 10 - 9), Point(9 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 83 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 3 * 10 - 9), Point(9 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 3 * 10 - 9), Point(9 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 82 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 2 * 10 - 9), Point(9 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 2 * 10 - 9), Point(9 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 81 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(9 * 10 - 9, 1 * 10 - 9), Point(9 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(9 * 10 - 9, 1 * 10 - 9), Point(9 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 80 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 10 * 10 - 9), Point(8 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 10 * 10 - 9), Point(8 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 79 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 9 * 10 - 9), Point(8 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 9 * 10 - 9), Point(8 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 78 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 8 * 10 - 9), Point(8 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 8 * 10 - 9), Point(8 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 77 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 7 * 10 - 9), Point(8 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 7 * 10 - 9), Point(8 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 76 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 6 * 10 - 9), Point(8 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 6 * 10 - 9), Point(8 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 75 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 5 * 10 - 9), Point(8 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 5 * 10 - 9), Point(8 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 74 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 4 * 10 - 9), Point(8 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 4 * 10 - 9), Point(8 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 73 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 3 * 10 - 9), Point(8 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 3 * 10 - 9), Point(8 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 72 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 2 * 10 - 9), Point(8 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 2 * 10 - 9), Point(8 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 71 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(8 * 10 - 9, 1 * 10 - 9), Point(8 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(8 * 10 - 9, 1 * 10 - 9), Point(8 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 70 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 10 * 10 - 9), Point(7 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 10 * 10 - 9), Point(7 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 69 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 9 * 10 - 9), Point(7 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 9 * 10 - 9), Point(7 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 68 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 8 * 10 - 9), Point(7 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 8 * 10 - 9), Point(7 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 67 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 7 * 10 - 9), Point(7 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 7 * 10 - 9), Point(7 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 66 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 6 * 10 - 9), Point(7 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 6 * 10 - 9), Point(7 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 65 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 5 * 10 - 9), Point(7 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 5 * 10 - 9), Point(7 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 64 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 4 * 10 - 9), Point(7 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 4 * 10 - 9), Point(7 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 63 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 3 * 10 - 9), Point(7 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 3 * 10 - 9), Point(7 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 62 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 2 * 10 - 9), Point(7 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 2 * 10 - 9), Point(7 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 61 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(7 * 10 - 9, 1 * 10 - 9), Point(7 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(7 * 10 - 9, 1 * 10 - 9), Point(7 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 60 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 10 * 10 - 9), Point(6 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 10 * 10 - 9), Point(6 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 59 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 9 * 10 - 9), Point(6 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 9 * 10 - 9), Point(6 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 58 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 8 * 10 - 9), Point(6 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 8 * 10 - 9), Point(6 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 57 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 7 * 10 - 9), Point(6 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 7 * 10 - 9), Point(6 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 56 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 6 * 10 - 9), Point(6 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 6 * 10 - 9), Point(6 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 55 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 5 * 10 - 9), Point(6 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 5 * 10 - 9), Point(6 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 54 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 4 * 10 - 9), Point(6 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 4 * 10 - 9), Point(6 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 53 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 3 * 10 - 9), Point(6 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 3 * 10 - 9), Point(6 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 52 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 2 * 10 - 9), Point(6 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 2 * 10 - 9), Point(6 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 51 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(6 * 10 - 9, 1 * 10 - 9), Point(6 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(6 * 10 - 9, 1 * 10 - 9), Point(6 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 50 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 10 * 10 - 9), Point(5 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 10 * 10 - 9), Point(5 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 49 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 9 * 10 - 9), Point(5 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 9 * 10 - 9), Point(5 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 48 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 8 * 10 - 9), Point(5 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 8 * 10 - 9), Point(5 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 47 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 7 * 10 - 9), Point(5 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 7 * 10 - 9), Point(5 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 46 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 6 * 10 - 9), Point(5 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 6 * 10 - 9), Point(5 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 45 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 5 * 10 - 9), Point(5 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 5 * 10 - 9), Point(5 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 44 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 4 * 10 - 9), Point(5 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 4 * 10 - 9), Point(5 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 43 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 3 * 10 - 9), Point(5 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 3 * 10 - 9), Point(5 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 42 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 2 * 10 - 9), Point(5 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 2 * 10 - 9), Point(5 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 41 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(5 * 10 - 9, 1 * 10 - 9), Point(5 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(5 * 10 - 9, 1 * 10 - 9), Point(5 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 40 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 10 * 10 - 9), Point(4 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 10 * 10 - 9), Point(4 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 39 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 9 * 10 - 9), Point(4 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 9 * 10 - 9), Point(4 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 38 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 8 * 10 - 9), Point(4 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 8 * 10 - 9), Point(4 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 37 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 7 * 10 - 9), Point(4 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 7 * 10 - 9), Point(4 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 36 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 6 * 10 - 9), Point(4 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 6 * 10 - 9), Point(4 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 35 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 5 * 10 - 9), Point(4 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 5 * 10 - 9), Point(4 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 34 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 4 * 10 - 9), Point(4 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 4 * 10 - 9), Point(4 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 33 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 3 * 10 - 9), Point(4 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 3 * 10 - 9), Point(4 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 32 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 2 * 10 - 9), Point(4 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 2 * 10 - 9), Point(4 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 31 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(4 * 10 - 9, 1 * 10 - 9), Point(4 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(4 * 10 - 9, 1 * 10 - 9), Point(4 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 30 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 10 * 10 - 9), Point(3 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 10 * 10 - 9), Point(3 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 29 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 9 * 10 - 9), Point(3 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 9 * 10 - 9), Point(3 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 28 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 8 * 10 - 9), Point(3 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 8 * 10 - 9), Point(3 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 27 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 7 * 10 - 9), Point(3 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 7 * 10 - 9), Point(3 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 26 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 6 * 10 - 9), Point(3 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 6 * 10 - 9), Point(3 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 25 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 5 * 10 - 9), Point(3 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 5 * 10 - 9), Point(3 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 24 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 4 * 10 - 9), Point(3 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 4 * 10 - 9), Point(3 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 23 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 3 * 10 - 9), Point(3 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 3 * 10 - 9), Point(3 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 22 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 2 * 10 - 9), Point(3 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 2 * 10 - 9), Point(3 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 21 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(3 * 10 - 9, 1 * 10 - 9), Point(3 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(3 * 10 - 9, 1 * 10 - 9), Point(3 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 20 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 10 * 10 - 9), Point(2 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 10 * 10 - 9), Point(2 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 19 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 9 * 10 - 9), Point(2 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 9 * 10 - 9), Point(2 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 18 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 8 * 10 - 9), Point(2 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 8 * 10 - 9), Point(2 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 17 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 7 * 10 - 9), Point(2 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 7 * 10 - 9), Point(2 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 16 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 6 * 10 - 9), Point(2 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 6 * 10 - 9), Point(2 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 15 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 5 * 10 - 9), Point(2 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 5 * 10 - 9), Point(2 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 14 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 4 * 10 - 9), Point(2 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 4 * 10 - 9), Point(2 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 13 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 3 * 10 - 9), Point(2 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 3 * 10 - 9), Point(2 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 12 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 2 * 10 - 9), Point(2 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 2 * 10 - 9), Point(2 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 11 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(2 * 10 - 9, 1 * 10 - 9), Point(2 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(2 * 10 - 9, 1 * 10 - 9), Point(2 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 10 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 10 * 10 - 9), Point(1 * 10, 10 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 10 * 10 - 9), Point(1 * 10, 10 * 10))))); SELECT count(*) FROM t2; count(*) 9 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 9 * 10 - 9), Point(1 * 10, 9 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 9 * 10 - 9), Point(1 * 10, 9 * 10))))); SELECT count(*) FROM t2; count(*) 8 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 8 * 10 - 9), Point(1 * 10, 8 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 8 * 10 - 9), Point(1 * 10, 8 * 10))))); SELECT count(*) FROM t2; count(*) 7 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 7 * 10 - 9), Point(1 * 10, 7 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 7 * 10 - 9), Point(1 * 10, 7 * 10))))); SELECT count(*) FROM t2; count(*) 6 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 6 * 10 - 9), Point(1 * 10, 6 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 6 * 10 - 9), Point(1 * 10, 6 * 10))))); SELECT count(*) FROM t2; count(*) 5 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 5 * 10 - 9), Point(1 * 10, 5 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 5 * 10 - 9), Point(1 * 10, 5 * 10))))); SELECT count(*) FROM t2; count(*) 4 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 4 * 10 - 9), Point(1 * 10, 4 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 4 * 10 - 9), Point(1 * 10, 4 * 10))))); SELECT count(*) FROM t2; count(*) 3 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 3 * 10 - 9), Point(1 * 10, 3 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 3 * 10 - 9), Point(1 * 10, 3 * 10))))); SELECT count(*) FROM t2; count(*) 2 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 2 * 10 - 9), Point(1 * 10, 2 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 2 * 10 - 9), Point(1 * 10, 2 * 10))))); SELECT count(*) FROM t2; count(*) 1 -DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point(1 * 10 - 9, 1 * 10 - 9), Point(1 * 10, 1 * 10)))); +DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point(1 * 10 - 9, 1 * 10 - 9), Point(1 * 10, 1 * 10))))); SELECT count(*) FROM t2; count(*) 0 diff --git a/mysql-test/t/gis-rtree.test b/mysql-test/t/gis-rtree.test index 86fd5723e5a..0368ddb41cb 100644 --- a/mysql-test/t/gis-rtree.test +++ b/mysql-test/t/gis-rtree.test @@ -23,10 +23,8 @@ while ($1) } SELECT count(*) FROM t1; -EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, - GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); -SELECT fid, AsText(g) FROM t1 WHERE Within(g, - GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +EXPLAIN SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); +SELECT fid, AsText(g) FROM t1 WHERE Within(g, GeomFromText('Polygon((140 140,160 140,160 160,140 160,140 140))')); DROP TABLE t1; @@ -41,8 +39,7 @@ while ($1) let $2=10; while ($2) { - eval INSERT INTO t2 (g) VALUES (LineString(Point($1 * 10 - 9, $2 * 10 - 9), - Point($1 * 10, $2 * 10))); + eval INSERT INTO t2 (g) VALUES (GeometryFromWKB(LineString(Point($1 * 10 - 9, $2 * 10 - 9), Point($1 * 10, $2 * 10)))); dec $2; } dec $1; @@ -62,7 +59,7 @@ while ($1) let $2=10; while ($2) { - eval DELETE FROM t2 WHERE Within(g, Envelope(LineString(Point($1 * 10 - 9, $2 * 10 - 9), Point($1 * 10, $2 * 10)))); + eval DELETE FROM t2 WHERE Within(g, Envelope(GeometryFromWKB(LineString(Point($1 * 10 - 9, $2 * 10 - 9), Point($1 * 10, $2 * 10))))); SELECT count(*) FROM t2; dec $2; } From f04be0b9c5621b95c6e0f4d8b113ca919201fc08 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2003 22:14:02 +0100 Subject: [PATCH 205/267] - renamed "rnd" to "my_rnd" as the name was too generic (and is an exported symbol in libmysqlclient) (thanks to Dennis Haney for the initial patch) - cleanup: removed client/password.c (not used at all) and libmysql/password.c (should rather be a symlink to sql/password.c instead) - applied HPUX11 portability fix for char_val declaration to sql/password.c (taken from libmysql/password.c) BitKeeper/deleted/.del-password.c~c036d4f8b3280843: Delete: client/password.c BitKeeper/deleted/.del-password.c~76f30876e68eddb4: Delete: libmysql/password.c include/mysql_com.h: - replaced "rnd" with "my_rnd" libmysql/Makefile.am: - removed dead piece of code ($qs was not defined) - symlink password.c from the sql directory libmysqld/Makefile.am: - use password.c from the sql directory instead sql/item_func.cc: - replaced "rnd" with "my_rnd" sql/mysqld.cc: - replaced "rnd" with "my_rnd" sql/password.c: - replaced "rnd" with "my_rnd" sql/sql_class.cc: - replaced "rnd" with "my_rnd" sql/sql_crypt.cc: - replaced "rnd" with "my_rnd" --- client/password.c | 191 ------------------------------------------ include/mysql_com.h | 2 +- libmysql/Makefile.am | 8 +- libmysql/password.c | 191 ------------------------------------------ libmysqld/Makefile.am | 4 +- sql/item_func.cc | 2 +- sql/mysqld.cc | 2 +- sql/password.c | 12 +-- sql/sql_class.cc | 2 +- sql/sql_crypt.cc | 6 +- 10 files changed, 18 insertions(+), 402 deletions(-) delete mode 100644 client/password.c delete mode 100644 libmysql/password.c diff --git a/client/password.c b/client/password.c deleted file mode 100644 index 9b154603b98..00000000000 --- a/client/password.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* password checking routines */ -/***************************************************************************** - The main idea is that no password are sent between client & server on - connection and that no password are saved in mysql in a decodable form. - - On connection a random string is generated and sent to the client. - The client generates a new string with a random generator inited with - the hash values from the password and the sent string. - This 'check' string is sent to the server where it is compared with - a string generated from the stored hash_value of the password and the - random string. - - The password is saved (in user.password) by using the PASSWORD() function in - mysql. - - Example: - update user set password=PASSWORD("hello") where user="test" - This saves a hashed number as a string in the password field. -*****************************************************************************/ - -#include -#include -#include -#include "mysql.h" - - -void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2) -{ /* For mysql 3.21.# */ -#ifdef HAVE_purify - bzero((char*) rand_st,sizeof(*rand_st)); /* Avoid UMC varnings */ -#endif - rand_st->max_value= 0x3FFFFFFFL; - rand_st->max_value_dbl=(double) rand_st->max_value; - rand_st->seed1=seed1%rand_st->max_value ; - rand_st->seed2=seed2%rand_st->max_value; -} - -static void old_randominit(struct rand_struct *rand_st,ulong seed1) -{ /* For mysql 3.20.# */ - rand_st->max_value= 0x01FFFFFFL; - rand_st->max_value_dbl=(double) rand_st->max_value; - seed1%=rand_st->max_value; - rand_st->seed1=seed1 ; rand_st->seed2=seed1/2; -} - -double rnd(struct rand_struct *rand_st) -{ - rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value; - rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value; - return (((double) rand_st->seed1)/rand_st->max_value_dbl); -} - -void hash_password(ulong *result, const char *password) -{ - register ulong nr=1345345333L, add=7, nr2=0x12345671L; - ulong tmp; - for (; *password ; password++) - { - if (*password == ' ' || *password == '\t') - continue; /* skipp space in password */ - tmp= (ulong) (uchar) *password; - nr^= (((nr & 63)+add)*tmp)+ (nr << 8); - nr2+=(nr2 << 8) ^ nr; - add+=tmp; - } - result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */; - result[1]=nr2 & (((ulong) 1L << 31) -1L); - return; -} - -void make_scrambled_password(char *to,const char *password) -{ - ulong hash_res[2]; - hash_password(hash_res,password); - sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); -} - -static inline uint char_val(char X) -{ - return (uint) (X >= '0' && X <= '9' ? X-'0' : - X >= 'A' && X <= 'Z' ? X-'A'+10 : - X-'a'+10); -} - -/* -** This code assumes that len(password) is divideable with 8 and that -** res is big enough (2 in mysql) -*/ - -void get_salt_from_password(ulong *res,const char *password) -{ - res[0]=res[1]=0; - if (password) - { - while (*password) - { - ulong val=0; - uint i; - for (i=0 ; i < 8 ; i++) - val=(val << 4)+char_val(*password++); - *res++=val; - } - } - return; -} - -void make_password_from_salt(char *to, ulong *hash_res) -{ - sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); -} - - -/* - * Genererate a new message based on message and password - * The same thing is done in client and server and the results are checked. - */ - -char *scramble(char *to,const char *message,const char *password, - my_bool old_ver) -{ - struct rand_struct rand_st; - ulong hash_pass[2],hash_message[2]; - if (password && password[0]) - { - char *to_start=to; - hash_password(hash_pass,password); - hash_password(hash_message,message); - if (old_ver) - old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]); - else - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - while (*message++) - *to++= (char) (floor(rnd(&rand_st)*31)+64); - if (!old_ver) - { /* Make it harder to break */ - char extra=(char) (floor(rnd(&rand_st)*31)); - while (to_start != to) - *(to_start++)^=extra; - } - } - *to=0; - return to; -} - - -my_bool check_scramble(const char *scrambled, const char *message, - ulong *hash_pass, my_bool old_ver) -{ - struct rand_struct rand_st; - ulong hash_message[2]; - char buff[16],*to,extra; /* Big enough for check */ - const char *pos; - - hash_password(hash_message,message); - if (old_ver) - old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]); - else - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - to=buff; - for (pos=scrambled ; *pos ; pos++) - *to++=(char) (floor(rnd(&rand_st)*31)+64); - if (old_ver) - extra=0; - else - extra=(char) (floor(rnd(&rand_st)*31)); - to=buff; - while (*scrambled) - { - if (*scrambled++ != (char) (*to++ ^ extra)) - return 1; /* Wrong password */ - } - return 0; -} diff --git a/include/mysql_com.h b/include/mysql_com.h index 963c1212794..945372563b0 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -228,7 +228,7 @@ extern unsigned long net_buffer_length; void randominit(struct rand_struct *,unsigned long seed1, unsigned long seed2); -double rnd(struct rand_struct *); +double my_rnd(struct rand_struct *); void make_scrambled_password(char *to,const char *password); void get_salt_from_password(unsigned long *res,const char *password); void make_password_from_salt(char *to, unsigned long *hash_res); diff --git a/libmysql/Makefile.am b/libmysql/Makefile.am index fac544ba44d..c767771c93f 100644 --- a/libmysql/Makefile.am +++ b/libmysql/Makefile.am @@ -53,10 +53,6 @@ link_sources: rm -f $(srcdir)/$$f; \ @LN_CP_F@ ../strings/$$f $(srcdir)/$$f; \ done; \ - for f in $$qs; do \ - rm -f $(srcdir)/$$f; \ - @LN_CP_F@ $(srcdir)/../sql/$$f $(srcdir)/$$f; \ - done; \ for f in $$ds; do \ rm -f $(srcdir)/$$f; \ @LN_CP_F@ $(srcdir)/../dbug/$$f $(srcdir)/$$f; \ @@ -66,7 +62,9 @@ link_sources: @LN_CP_F@ $(srcdir)/../mysys/$$f $(srcdir)/$$f; \ done; \ rm -f $(srcdir)/net.c; \ - @LN_CP_F@ $(srcdir)/../sql/net_serv.cc $(srcdir)/net.c + @LN_CP_F@ $(srcdir)/../sql/net_serv.cc $(srcdir)/net.c ; \ + rm -f $(srcdir)/password.c; \ + @LN_CP_F@ $(srcdir)/../sql/password.c $(srcdir)/password.c # This part requires GNUmake # diff --git a/libmysql/password.c b/libmysql/password.c deleted file mode 100644 index 1c2c5589215..00000000000 --- a/libmysql/password.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* password checking routines */ -/***************************************************************************** - The main idea is that no password are sent between client & server on - connection and that no password are saved in mysql in a decodable form. - - On connection a random string is generated and sent to the client. - The client generates a new string with a random generator inited with - the hash values from the password and the sent string. - This 'check' string is sent to the server where it is compared with - a string generated from the stored hash_value of the password and the - random string. - - The password is saved (in user.password) by using the PASSWORD() function in - mysql. - - Example: - update user set password=PASSWORD("hello") where user="test" - This saves a hashed number as a string in the password field. -*****************************************************************************/ - -#include -#include -#include -#include "mysql.h" - - -void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2) -{ /* For mysql 3.21.# */ -#ifdef HAVE_purify - bzero((char*) rand_st,sizeof(*rand_st)); /* Avoid UMC varnings */ -#endif - rand_st->max_value= 0x3FFFFFFFL; - rand_st->max_value_dbl=(double) rand_st->max_value; - rand_st->seed1=seed1%rand_st->max_value ; - rand_st->seed2=seed2%rand_st->max_value; -} - -static void old_randominit(struct rand_struct *rand_st,ulong seed1) -{ /* For mysql 3.20.# */ - rand_st->max_value= 0x01FFFFFFL; - rand_st->max_value_dbl=(double) rand_st->max_value; - seed1%=rand_st->max_value; - rand_st->seed1=seed1 ; rand_st->seed2=seed1/2; -} - -double rnd(struct rand_struct *rand_st) -{ - rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value; - rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value; - return (((double) rand_st->seed1)/rand_st->max_value_dbl); -} - -void hash_password(ulong *result, const char *password) -{ - register ulong nr=1345345333L, add=7, nr2=0x12345671L; - ulong tmp; - for (; *password ; password++) - { - if (*password == ' ' || *password == '\t') - continue; /* skipp space in password */ - tmp= (ulong) (uchar) *password; - nr^= (((nr & 63)+add)*tmp)+ (nr << 8); - nr2+=(nr2 << 8) ^ nr; - add+=tmp; - } - result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */; - result[1]=nr2 & (((ulong) 1L << 31) -1L); - return; -} - -void make_scrambled_password(char *to,const char *password) -{ - ulong hash_res[2]; - hash_password(hash_res,password); - sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); -} - -static inline unsigned int char_val(char X) -{ - return (uint) (X >= '0' && X <= '9' ? X-'0' : - X >= 'A' && X <= 'Z' ? X-'A'+10 : - X-'a'+10); -} - -/* -** This code assumes that len(password) is divideable with 8 and that -** res is big enough (2 in mysql) -*/ - -void get_salt_from_password(ulong *res,const char *password) -{ - res[0]=res[1]=0; - if (password) - { - while (*password) - { - ulong val=0; - uint i; - for (i=0 ; i < 8 ; i++) - val=(val << 4)+char_val(*password++); - *res++=val; - } - } - return; -} - -void make_password_from_salt(char *to, ulong *hash_res) -{ - sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); -} - - -/* - * Genererate a new message based on message and password - * The same thing is done in client and server and the results are checked. - */ - -char *scramble(char *to,const char *message,const char *password, - my_bool old_ver) -{ - struct rand_struct rand_st; - ulong hash_pass[2],hash_message[2]; - if (password && password[0]) - { - char *to_start=to; - hash_password(hash_pass,password); - hash_password(hash_message,message); - if (old_ver) - old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]); - else - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - while (*message++) - *to++= (char) (floor(rnd(&rand_st)*31)+64); - if (!old_ver) - { /* Make it harder to break */ - char extra=(char) (floor(rnd(&rand_st)*31)); - while (to_start != to) - *(to_start++)^=extra; - } - } - *to=0; - return to; -} - - -my_bool check_scramble(const char *scrambled, const char *message, - ulong *hash_pass, my_bool old_ver) -{ - struct rand_struct rand_st; - ulong hash_message[2]; - char buff[16],*to,extra; /* Big enough for check */ - const char *pos; - - hash_password(hash_message,message); - if (old_ver) - old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]); - else - randominit(&rand_st,hash_pass[0] ^ hash_message[0], - hash_pass[1] ^ hash_message[1]); - to=buff; - for (pos=scrambled ; *pos ; pos++) - *to++=(char) (floor(rnd(&rand_st)*31)+64); - if (old_ver) - extra=0; - else - extra=(char) (floor(rnd(&rand_st)*31)); - to=buff; - while (*scrambled) - { - if (*scrambled++ != (char) (*to++ ^ extra)) - return 1; /* Wrong password */ - } - return 0; -} diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 7bd9127a7f0..d831d2a7a5a 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -33,14 +33,14 @@ noinst_LIBRARIES = libmysqld_int.a pkglib_LIBRARIES = libmysqld.a SUBDIRS = . examples libmysqld_sources= libmysqld.c lib_sql.cc -libmysqlsources = errmsg.c get_password.c password.c +libmysqlsources = errmsg.c get_password.c noinst_HEADERS = embedded_priv.h sqlsources = convert.cc derror.cc field.cc field_conv.cc filesort.cc \ ha_innodb.cc ha_berkeley.cc ha_heap.cc ha_isam.cc ha_isammrg.cc \ ha_myisam.cc ha_myisammrg.cc handler.cc sql_handler.cc \ - hostname.cc init.cc \ + hostname.cc init.cc password.c \ item.cc item_buff.cc item_cmpfunc.cc item_create.cc \ item_func.cc item_strfunc.cc item_sum.cc item_timefunc.cc \ item_uniq.cc key.cc lock.cc log.cc log_event.cc mf_iocache.cc\ diff --git a/sql/item_func.cc b/sql/item_func.cc index d5b7869cbcb..b6a64155ab5 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -736,7 +736,7 @@ void Item_func_rand::fix_length_and_dec() double Item_func_rand::val() { - return rnd(rand); + return my_rnd(rand); } longlong Item_func_sign::val_int() diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 75e2599ce6b..e22d9b1dc67 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2668,7 +2668,7 @@ static void create_new_thread(THD *thd) max_used_connections=thread_count-delayed_insert_threads; thd->thread_id=thread_id++; for (uint i=0; i < 8 ; i++) // Generate password teststring - thd->scramble[i]= (char) (rnd(&sql_rand)*94+33); + thd->scramble[i]= (char) (my_rnd(&sql_rand)*94+33); thd->scramble[8]=0; thd->real_id=pthread_self(); // Keep purify happy diff --git a/sql/password.c b/sql/password.c index 318c8e84db3..575e837ceb8 100644 --- a/sql/password.c +++ b/sql/password.c @@ -59,7 +59,7 @@ static void old_randominit(struct rand_struct *rand_st,ulong seed1) rand_st->seed1=seed1 ; rand_st->seed2=seed1/2; } -double rnd(struct rand_struct *rand_st) +double my_rnd(struct rand_struct *rand_st) { rand_st->seed1=(rand_st->seed1*3+rand_st->seed2) % rand_st->max_value; rand_st->seed2=(rand_st->seed1+rand_st->seed2+33) % rand_st->max_value; @@ -91,7 +91,7 @@ void make_scrambled_password(char *to,const char *password) sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); } -inline uint char_val(char X) +static inline unsigned int char_val(char X) { return (uint) (X >= '0' && X <= '9' ? X-'0' : X >= 'A' && X <= 'Z' ? X-'A'+10 : @@ -147,10 +147,10 @@ char *scramble(char *to,const char *message,const char *password, randominit(&rand_st,hash_pass[0] ^ hash_message[0], hash_pass[1] ^ hash_message[1]); while (*message++) - *to++= (char) (floor(rnd(&rand_st)*31)+64); + *to++= (char) (floor(my_rnd(&rand_st)*31)+64); if (!old_ver) { /* Make it harder to break */ - char extra=(char) (floor(rnd(&rand_st)*31)); + char extra=(char) (floor(my_rnd(&rand_st)*31)); while (to_start != to) *(to_start++)^=extra; } @@ -176,11 +176,11 @@ my_bool check_scramble(const char *scrambled, const char *message, hash_pass[1] ^ hash_message[1]); to=buff; for (pos=scrambled ; *pos ; pos++) - *to++=(char) (floor(rnd(&rand_st)*31)+64); + *to++=(char) (floor(my_rnd(&rand_st)*31)+64); if (old_ver) extra=0; else - extra=(char) (floor(rnd(&rand_st)*31)); + extra=(char) (floor(my_rnd(&rand_st)*31)); to=buff; while (*scrambled) { diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 5cec1ba7a81..dc687e483e8 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -156,7 +156,7 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0), */ { pthread_mutex_lock(&LOCK_thread_count); - ulong tmp=(ulong) (rnd(&sql_rand) * 0xffffffff); /* make all bits random */ + ulong tmp=(ulong) (my_rnd(&sql_rand) * 0xffffffff); /* make all bits random */ pthread_mutex_unlock(&LOCK_thread_count); randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id); } diff --git a/sql/sql_crypt.cc b/sql/sql_crypt.cc index f2e4a8934be..930ecfffef7 100644 --- a/sql/sql_crypt.cc +++ b/sql/sql_crypt.cc @@ -46,7 +46,7 @@ void SQL_CRYPT::crypt_init(ulong *rand_nr) for (i=0 ; i<= 255 ; i++) { - int idx= (uint) (rnd(&rand)*255.0); + int idx= (uint) (my_rnd(&rand)*255.0); char a= decode_buff[idx]; decode_buff[idx]= decode_buff[i]; decode_buff[+i]=a; @@ -62,7 +62,7 @@ void SQL_CRYPT::encode(char *str,uint length) { for (uint i=0; i < length; i++) { - shift^=(uint) (rnd(&rand)*255.0); + shift^=(uint) (my_rnd(&rand)*255.0); uint idx= (uint) (uchar) str[0]; *str++ = (char) ((uchar) encode_buff[idx] ^ shift); shift^= idx; @@ -74,7 +74,7 @@ void SQL_CRYPT::decode(char *str,uint length) { for (uint i=0; i < length; i++) { - shift^=(uint) (rnd(&rand)*255.0); + shift^=(uint) (my_rnd(&rand)*255.0); uint idx= (uint) ((unsigned char) str[0] ^ shift); *str = decode_buff[idx]; shift^= (uint) (uchar) *str++; From f45236de394523115dfd160a00a42072b6536fc0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 00:45:44 +0200 Subject: [PATCH 206/267] Allow optimzation of multi-table-update also for InnoDB tables MEMORY is alias for HEAP for CREATE TABLE ... TYPE=HEAP Fixed bug in multi-table-update where a row could be updated several times mysql-test/r/heap.result: Test of CREATE TABLE ... type=MEMORY mysql-test/r/innodb.result: Added multi-update-test mysql-test/r/multi_update.result: Added multi-update-test mysql-test/t/heap.test: Test of CREATE TABLE ... type=MEMORY mysql-test/t/innodb.test: Added multi-update-test mysql-test/t/multi_update.test: Added multi-update-test sql/ha_innodb.h: Allow optimzation of multi-table-update also for InnoDB tables sql/handler.h: Allow optimzation of multi-update also for InnoDB tables sql/key.cc: After merge fix sql/lex.h: MEMORY is alias for HEAP sql/sql_test.cc: Fixed wrong printf sql/sql_update.cc: Fixed bug in multi-table-update where a row could be updated several times sql/sql_yacc.yy: MEMORY is alias for HEAP --- mysql-test/r/heap.result | 2 +- mysql-test/r/innodb.result | 79 +++++++++++++++++ mysql-test/r/multi_update.result | 64 ++++++++++++++ mysql-test/t/heap.test | 2 +- mysql-test/t/innodb.test | 28 ++++++ mysql-test/t/multi_update.test | 28 ++++++ sql/ha_innodb.h | 3 +- sql/handler.h | 1 - sql/key.cc | 2 +- sql/lex.h | 1 + sql/sql_test.cc | 2 +- sql/sql_update.cc | 146 ++++++++++++++++++++++--------- sql/sql_yacc.yy | 3 + 13 files changed, 313 insertions(+), 48 deletions(-) diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index 73642d7f751..d8905085e34 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -23,7 +23,7 @@ a b 4 6 alter table t1 add c int not null, add key (c,a); drop table t1; -create table t1 (a int not null,b int not null, primary key (a)) type=heap comment="testing heaps"; +create table t1 (a int not null,b int not null, primary key (a)) type=memory comment="testing heaps"; insert into t1 values(1,1),(2,2),(3,3),(4,4); delete from t1 where a > 0; select * from t1; diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index bbabe0a04d6..48db5412da7 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -1122,3 +1122,82 @@ my-test-1 my-test-2 COMMIT; set autocommit=1; DROP TABLE t1,t2,t3; +CREATE TABLE t1 (a int not null primary key, b int not null, unique (b)) type=innodb; +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +UPDATE t1 set a=a+100 where b between 2 and 3 and a < 1000; +SELECT * from t1; +a b +1 1 +102 2 +103 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +drop table t1; +CREATE TABLE t1 (a int not null primary key, b int not null, key (b)) type=innodb; +CREATE TABLE t2 (a int not null primary key, b int not null, key (b)) type=innodb; +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +update t1,t2 set t1.a=t1.a+100; +select * from t1; +a b +101 1 +102 2 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +update t1,t2 set t1.a=t1.a+100 where t1.a=101; +select * from t1; +a b +201 1 +102 2 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +update t1,t2 set t1.b=t1.b+10 where t1.b=2; +select * from t1; +a b +201 1 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +102 12 +update t1,t2 set t1.b=t1.b+2,t2.b=t1.b where t1.b between 3 and 5; +select * from t1; +a b +201 1 +103 5 +104 6 +106 6 +105 7 +107 7 +108 8 +109 9 +102 12 +select * from t2; +a b +1 5 +2 5 +3 5 +4 5 +5 5 +6 5 +7 5 +8 5 +9 5 +drop table t1,t2; diff --git a/mysql-test/r/multi_update.result b/mysql-test/r/multi_update.result index fe028a4cb95..0f3644f15bc 100644 --- a/mysql-test/r/multi_update.result +++ b/mysql-test/r/multi_update.result @@ -246,3 +246,67 @@ INSERT INTO t3 VALUES (1,'jedan'),(2,'dva'); update t1,t2 set t1.naziv="aaaa" where t1.broj=t2.broj; update t1,t2,t3 set t1.naziv="bbbb", t2.naziv="aaaa" where t1.broj=t2.broj and t2.broj=t3.broj; drop table if exists t1,t2,t3; +CREATE TABLE t1 (a int not null primary key, b int not null, key (b)); +CREATE TABLE t2 (a int not null primary key, b int not null, key (b)); +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +update t1,t2 set t1.a=t1.a+100; +select * from t1; +a b +101 1 +102 2 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +update t1,t2 set t1.a=t1.a+100 where t1.a=101; +select * from t1; +a b +201 1 +102 2 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +update t1,t2 set t1.b=t1.b+10 where t1.b=2; +select * from t1; +a b +201 1 +102 12 +103 3 +104 4 +105 5 +106 6 +107 7 +108 8 +109 9 +update t1,t2 set t1.b=t1.b+2,t2.b=t1.b where t1.b between 3 and 5; +select * from t1; +a b +201 1 +102 12 +103 5 +104 6 +105 7 +106 6 +107 7 +108 8 +109 9 +select * from t2; +a b +1 3 +2 3 +3 3 +4 3 +5 3 +6 3 +7 3 +8 3 +9 3 +drop table t1,t2; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index ef7e3239a96..d1e647ae182 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -17,7 +17,7 @@ select * from t1; alter table t1 add c int not null, add key (c,a); drop table t1; -create table t1 (a int not null,b int not null, primary key (a)) type=heap comment="testing heaps"; +create table t1 (a int not null,b int not null, primary key (a)) type=memory comment="testing heaps"; insert into t1 values(1,1),(2,2),(3,3),(4,4); delete from t1 where a > 0; select * from t1; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 320047b68fa..2f7285e7898 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -769,3 +769,31 @@ INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); UPDATE t1 set a=a+100 where b between 2 and 3 and a < 1000; SELECT * from t1; drop table t1; + +# +# Test multi update with different join methods +# + +CREATE TABLE t1 (a int not null primary key, b int not null, key (b)) type=innodb; +CREATE TABLE t2 (a int not null primary key, b int not null, key (b)) type=innodb; +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); + +# Full join, without key +update t1,t2 set t1.a=t1.a+100; +select * from t1; + +# unique key +update t1,t2 set t1.a=t1.a+100 where t1.a=101; +select * from t1; + +# ref key +update t1,t2 set t1.b=t1.b+10 where t1.b=2; +select * from t1; + +# Range key (in t1) +update t1,t2 set t1.b=t1.b+2,t2.b=t1.b where t1.b between 3 and 5; +select * from t1; +select * from t2; + +drop table t1,t2; diff --git a/mysql-test/t/multi_update.test b/mysql-test/t/multi_update.test index 088b355a17c..d5543f69bd5 100644 --- a/mysql-test/t/multi_update.test +++ b/mysql-test/t/multi_update.test @@ -224,3 +224,31 @@ INSERT INTO t3 VALUES (1,'jedan'),(2,'dva'); update t1,t2 set t1.naziv="aaaa" where t1.broj=t2.broj; update t1,t2,t3 set t1.naziv="bbbb", t2.naziv="aaaa" where t1.broj=t2.broj and t2.broj=t3.broj; drop table if exists t1,t2,t3; + +# +# Test multi update with different join methods +# + +CREATE TABLE t1 (a int not null primary key, b int not null, key (b)); +CREATE TABLE t2 (a int not null primary key, b int not null, key (b)); +INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); +INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9); + +# Full join, without key +update t1,t2 set t1.a=t1.a+100; +select * from t1; + +# unique key +update t1,t2 set t1.a=t1.a+100 where t1.a=101; +select * from t1; + +# ref key +update t1,t2 set t1.b=t1.b+10 where t1.b=2; +select * from t1; + +# Range key (in t1) +update t1,t2 set t1.b=t1.b+2,t2.b=t1.b where t1.b between 3 and 5; +select * from t1; +select * from t2; + +drop table t1,t2; diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h index 94154d9f05f..8031fa0aa29 100644 --- a/sql/ha_innodb.h +++ b/sql/ha_innodb.h @@ -82,8 +82,7 @@ class ha_innobase: public handler HA_PRIMARY_KEY_IN_READ_INDEX | HA_DROP_BEFORE_CREATE | HA_NO_PREFIX_CHAR_KEYS | - HA_TABLE_SCAN_ON_INDEX | - HA_NOT_MULTI_UPDATE), + HA_TABLE_SCAN_ON_INDEX), last_dup_key((uint) -1), start_of_scan(0) { diff --git a/sql/handler.h b/sql/handler.h index 81724bd3abe..8f1d00f64b5 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -67,7 +67,6 @@ #define HA_CAN_FULLTEXT (HA_NO_PREFIX_CHAR_KEYS*2) #define HA_CAN_SQL_HANDLER (HA_CAN_FULLTEXT*2) #define HA_NO_AUTO_INCREMENT (HA_CAN_SQL_HANDLER*2) -#define HA_NOT_MULTI_UPDATE (HA_NO_AUTO_INCREMENT*2) /* Next record gives next record according last record read (even diff --git a/sql/key.cc b/sql/key.cc index 8520dee215e..809c5a164b9 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -275,7 +275,7 @@ bool check_if_key_used(TABLE *table, uint idx, List &fields) key is not updated */ if (idx != table->primary_key && table->primary_key < MAX_KEY && - (table->file->option_flag() & HA_PRIMARY_KEY_IN_READ_INDEX)) + (table->file->table_flags() & HA_PRIMARY_KEY_IN_READ_INDEX)) return check_if_key_used(table, table->primary_key, fields); return 0; } diff --git a/sql/lex.h b/sql/lex.h index a9e44e034d0..d9a84dd25b4 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -240,6 +240,7 @@ static SYMBOL symbols[] = { { "MEDIUMINT", SYM(MEDIUMINT),0,0}, { "MERGE", SYM(MERGE_SYM),0,0}, { "MEDIUM", SYM(MEDIUM_SYM),0,0}, + { "MEMORY", SYM(MEMORY_SYM),0,0}, { "MIDDLEINT", SYM(MEDIUMINT),0,0}, /* For powerbuilder */ { "MIN_ROWS", SYM(MIN_ROWS),0,0}, { "MINUTE", SYM(MINUTE_SYM),0,0}, diff --git a/sql/sql_test.cc b/sql/sql_test.cc index b226bc1300a..6816bb62047 100644 --- a/sql/sql_test.cc +++ b/sql/sql_test.cc @@ -131,7 +131,7 @@ void TEST_filesort(SORT_FIELD *sortorder,uint s_length, ha_rows special) DBUG_LOCK_FILE; VOID(fputs("\nInfo about FILESORT\n",DBUG_FILE)); if (special) - fprintf(DBUG_FILE,"Records to sort: %ld\n",special); + fprintf(DBUG_FILE,"Records to sort: %lu\n",(ulong) special); fprintf(DBUG_FILE,"Sortorder: %s\n",out.ptr()); DBUG_UNLOCK_FILE; DBUG_VOID_RETURN; diff --git a/sql/sql_update.cc b/sql/sql_update.cc index d8842855093..709f88726de 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -23,6 +23,8 @@ #include "sql_acl.h" #include "sql_select.h" +static bool safe_update_on_fly(JOIN_TAB *join_tab, List *fields); + /* Return 0 if row hasn't changed */ static bool compare_record(TABLE *table, ulong query_id) @@ -520,11 +522,12 @@ int multi_update::prepare(List ¬_used_values) /* - Store first used table in main_table as this should be updated first - This is because we know that no row in this table will be read twice. + Initialize table for multi table - Create temporary tables to store changed values for all other tables - that are updated. + IMPLEMENTATION + - Update first table in join on the fly, if possible + - Create temporary tables to store changed values for all other tables + that are updated (and main_table if the above doesn't hold). */ bool @@ -538,52 +541,113 @@ multi_update::initialize_tables(JOIN *join) main_table=join->join_tab->table; trans_safe= transactional_tables= main_table->file->has_transactions(); log_delayed= trans_safe || main_table->tmp_table != NO_TMP_TABLE; - table_to_update= (main_table->file->table_flags() & HA_NOT_MULTI_UPDATE) ? - (TABLE *) 0 : main_table; - /* Create a temporary table for all tables after except main table */ + table_to_update= 0; + + /* Create a temporary table for keys to all tables, except main table */ for (table_ref= update_tables; table_ref; table_ref=table_ref->next) { TABLE *table=table_ref->table; - if (table != table_to_update) + uint cnt= table_ref->shared; + List temp_fields= *fields_for_table[cnt]; + ORDER group; + + if (table == main_table) // First table in join { - uint cnt= table_ref->shared; - ORDER group; - List temp_fields= *fields_for_table[cnt]; - TMP_TABLE_PARAM *tmp_param= tmp_table_param+cnt; - - /* - Create a temporary table to store all fields that are changed for this - table. The first field in the temporary table is a pointer to the - original row so that we can find and update it - */ - - /* ok to be on stack as this is not referenced outside of this func */ - Field_string offset(table->file->ref_length, 0, "offset", - table, 1); - if (temp_fields.push_front(new Item_field(((Field *) &offset)))) - DBUG_RETURN(1); - - /* Make an unique key over the first field to avoid duplicated updates */ - bzero((char*) &group, sizeof(group)); - group.asc= 1; - group.item= (Item**) temp_fields.head_ref(); - - tmp_param->quick_group=1; - tmp_param->field_count=temp_fields.elements; - tmp_param->group_parts=1; - tmp_param->group_length= table->file->ref_length; - if (!(tmp_tables[cnt]=create_tmp_table(thd, - tmp_param, - temp_fields, - (ORDER*) &group, 0, 0, 0, - TMP_TABLE_ALL_COLUMNS))) - DBUG_RETURN(1); - tmp_tables[cnt]->file->extra(HA_EXTRA_WRITE_CACHE); + if (safe_update_on_fly(join->join_tab, &temp_fields)) + { + table_to_update= main_table; // Update table on the fly + continue; + } } + + TMP_TABLE_PARAM *tmp_param= tmp_table_param+cnt; + + /* + Create a temporary table to store all fields that are changed for this + table. The first field in the temporary table is a pointer to the + original row so that we can find and update it + */ + + /* ok to be on stack as this is not referenced outside of this func */ + Field_string offset(table->file->ref_length, 0, "offset", + table, 1); + if (temp_fields.push_front(new Item_field(((Field *) &offset)))) + DBUG_RETURN(1); + + /* Make an unique key over the first field to avoid duplicated updates */ + bzero((char*) &group, sizeof(group)); + group.asc= 1; + group.item= (Item**) temp_fields.head_ref(); + + tmp_param->quick_group=1; + tmp_param->field_count=temp_fields.elements; + tmp_param->group_parts=1; + tmp_param->group_length= table->file->ref_length; + if (!(tmp_tables[cnt]=create_tmp_table(thd, + tmp_param, + temp_fields, + (ORDER*) &group, 0, 0, 0, + TMP_TABLE_ALL_COLUMNS))) + DBUG_RETURN(1); + tmp_tables[cnt]->file->extra(HA_EXTRA_WRITE_CACHE); } DBUG_RETURN(0); } +/* + Check if table is safe to update on fly + + SYNOPSIS + safe_update_on_fly + join_tab How table is used in join + fields Fields that are updated + + NOTES + We can update the first table in join on the fly if we know that + a row in this tabel will never be read twice. This is true under + the folloing conditions: + + - We are doing a table scan and the data is in a separate file (MyISAM) or + if we don't update a clustered key. + + - We are doing a range scan and we don't update the scan key or + the primary key for a clustered table handler. + + WARNING + This code is a bit dependent of how make_join_readinfo() works. + + RETURN + 0 Not safe to update + 1 Safe to update +*/ + +static bool safe_update_on_fly(JOIN_TAB *join_tab, List *fields) +{ + TABLE *table= join_tab->table; + switch (join_tab->type) { + case JT_SYSTEM: + case JT_CONST: + case JT_EQ_REF: + return 1; // At most one matching row + case JT_REF: + return !check_if_key_used(table, join_tab->ref.key, *fields); + case JT_ALL: + /* If range search on index */ + if (join_tab->quick) + return !check_if_key_used(table, join_tab->quick->index, + *fields); + /* If scanning in clustered key */ + if ((table->file->table_flags() & HA_PRIMARY_KEY_IN_READ_INDEX) && + table->primary_key < MAX_KEY) + return !check_if_key_used(table, table->primary_key, *fields); + return 1; + default: + break; // Avoid compler warning + } + return 0; +} + + multi_update::~multi_update() { diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 2f339f30eb4..b986b72df32 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -256,6 +256,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token MAX_UPDATES_PER_HOUR %token MEDIUM_SYM %token MERGE_SYM +%token MEMORY_SYM %token MIN_ROWS %token MYISAM_SYM %token NATIONAL_SYM @@ -871,6 +872,7 @@ table_types: | MYISAM_SYM { $$= DB_TYPE_MYISAM; } | MERGE_SYM { $$= DB_TYPE_MRG_MYISAM; } | HEAP_SYM { $$= DB_TYPE_HEAP; } + | MEMORY_SYM { $$= DB_TYPE_HEAP; } | BERKELEY_DB_SYM { $$= DB_TYPE_BERKELEY_DB; } | INNOBASE_SYM { $$= DB_TYPE_INNODB; }; @@ -3316,6 +3318,7 @@ keyword: | MAX_UPDATES_PER_HOUR {} | MEDIUM_SYM {} | MERGE_SYM {} + | MEMORY_SYM {} | MINUTE_SYM {} | MIN_ROWS {} | MODIFY_SYM {} From 80630f12f3dbcf269fe81c7f39649b5ce9426363 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 15:55:17 +0400 Subject: [PATCH 207/267] Getting closer to be more SQL99 in dyadic operations mysql-test/r/ctype_collate.result: NO COLLATION has less coercibility than IMPLICIT and COERCIBLE sql/item.cc: Function to choose collation for dyadic operations sql/item.h: NO COLLATION has less coercibility than IMPLICIT and COERCIBLE sql/item_func.cc: Function to choose collation for dyadic operations sql/item_strfunc.cc: Function to choose collation for dyadic operations sql/item_strfunc.h: Use arg's attributes --- mysql-test/r/ctype_collate.result | 12 +++++------ sql/item.cc | 36 +++++++++++++++++++++++++++++-- sql/item.h | 11 ++++++++-- sql/item_func.cc | 33 ---------------------------- sql/item_strfunc.cc | 17 ++++++++++----- sql/item_strfunc.h | 6 +++++- 6 files changed, 66 insertions(+), 49 deletions(-) diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index a2ff8a606cb..07da8c8c75f 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -523,7 +523,7 @@ Variable_name Value client_collation latin1 SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1 2 1 +latin1 latin1 3 1 SET NAMES latin1 COLLATE latin1_bin; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value @@ -538,35 +538,35 @@ Variable_name Value client_collation latin1_bin SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1_bin 2 0 +latin1 latin1_bin 3 0 SET NAMES koi8r; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation koi8r SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1 2 1 +latin1 latin1 3 1 SET COLLATION koi8r_bin; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation koi8r_bin SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1 2 1 +latin1 latin1 3 1 SET COLLATION DEFAULT; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation koi8r SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1 2 1 +latin1 latin1 3 1 SET NAMES DEFAULT; SHOW VARIABLES LIKE 'client_collation'; Variable_name Value client_collation latin1 SELECT charset('a'),collation('a'),coercibility('a'),'a'='A'; charset('a') collation('a') coercibility('a') 'a'='A' -latin1 latin1 2 1 +latin1 latin1 3 1 SET NAMES latin1 COLLATE koi8r; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' SET NAMES 'DEFAULT'; diff --git a/sql/item.cc b/sql/item.cc index 6dbe026515d..b28b390c4a0 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -172,6 +172,39 @@ CHARSET_INFO * Item::default_charset() const return current_thd->db_charset; } +bool Item::set_charset(CHARSET_INFO *cs1, enum coercion co1, + CHARSET_INFO *cs2, enum coercion co2) +{ + if (cs1 == &my_charset_bin || cs2 == &my_charset_bin) + { + set_charset(&my_charset_bin, COER_NOCOLL); + return 0; + } + + if (!my_charset_same(cs1,cs2)) + { + set_charset(&my_charset_bin, COER_NOCOLL); + return 0; + } + + if (co1 < co2) + { + set_charset(cs1, co1); + } + else if (co2 < co1) + { + set_charset(cs2, co2); + } + else // co2 == co1 + { + if (cs1 != cs2) + set_charset(&my_charset_bin, COER_NOCOLL); + else + set_charset(cs2, co2); + } + return 0; +} + Item_field::Item_field(Field *f) :Item_ident(NullS,f->table_name,f->field_name) { set_field(f); @@ -195,8 +228,7 @@ void Item_field::set_field(Field *field_par) table_name=field_par->table_name; field_name=field_par->field_name; unsigned_flag=test(field_par->flags & UNSIGNED_FLAG); - set_charset(field_par->charset()); - coercibility= COER_IMPLICIT; + set_charset(field_par->charset(), COER_IMPLICIT); } const char *Item_ident::full_name() const diff --git a/sql/item.h b/sql/item.h index 2bb22d47083..d9698e09ade 100644 --- a/sql/item.h +++ b/sql/item.h @@ -39,8 +39,8 @@ public: SUBSELECT_ITEM, ROW_ITEM, CACHE_ITEM}; enum cond_result { COND_UNDEF,COND_OK,COND_TRUE,COND_FALSE }; - enum coercion { COER_NOCOLL=3, COER_COERCIBLE=2, - COER_IMPLICIT=1, COER_EXPLICIT=0 }; + enum coercion { COER_COERCIBLE=3, COER_IMPLICIT=2, + COER_NOCOLL=1, COER_EXPLICIT=0 }; String str_value; /* used to store value */ my_string name; /* Name from select */ @@ -113,6 +113,13 @@ public: CHARSET_INFO *default_charset() const; CHARSET_INFO *charset() const { return str_value.charset(); }; void set_charset(CHARSET_INFO *cs) { str_value.set_charset(cs); } + void set_charset(CHARSET_INFO *cs, enum coercion coer) + { + str_value.set_charset(cs); + coercibility= coer; + } + bool set_charset(CHARSET_INFO *cs1, enum coercion co1, + CHARSET_INFO *cs2, enum coercion co2); virtual void set_outer_resolving() {} // Row emulation diff --git a/sql/item_func.cc b/sql/item_func.cc index 6bd61a4e1e2..b7ff6f17969 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -107,7 +107,6 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) return 0; // Fatal error if flag is set! if (arg_count) { // Print purify happy - bool first_coll= 1; for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++) { if ((*arg)->fix_fields(thd, tables, arg) || @@ -116,38 +115,6 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) if ((*arg)->maybe_null) maybe_null=1; - if ((*arg)->result_type() == STRING_RESULT) - { - /* - Set return character set to first argument if we are returning a - string. - */ - if (first_coll) - { - set_charset((*arg)->charset()); - coercibility= (*args)->coercibility; - first_coll= 0; - } - else if ((*arg)->charset() == &my_charset_bin || - charset() == &my_charset_bin) - { - set_charset(&my_charset_bin); - coercibility= COER_NOCOLL; - } - else if ((*arg)->coercibility < coercibility) - { - if (!my_charset_same(charset(),(*arg)->charset())) - { - set_charset(&my_charset_bin); - coercibility= COER_NOCOLL; - } - else - { - coercibility= (*arg)->coercibility; - set_charset((*arg)->charset()); - } - } - } with_sum_func= with_sum_func || (*arg)->with_sum_func; used_tables_cache|=(*arg)->used_tables(); const_item_cache&= (*arg)->const_item(); diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 320a4258a49..5151a25f257 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -321,9 +321,17 @@ null: void Item_func_concat::fix_length_and_dec() { + bool first_coll= 1; max_length=0; + + set_charset(args[0]->charset(),args[0]->coercibility); for (uint i=0 ; i < arg_count ; i++) + { max_length+=args[i]->max_length; + set_charset(charset(), coercibility, + args[i]->charset(), args[i]->coercibility); + } + if (max_length > MAX_BLOB_WIDTH) { max_length=MAX_BLOB_WIDTH; @@ -978,6 +986,7 @@ void Item_func_substr::fix_length_and_dec() { max_length=args[0]->max_length; + set_charset(args[0]->charset(), args[0]->coercibility); if (args[1]->const_item()) { int32 start=(int32) args[1]->val_int()-1; @@ -1791,6 +1800,7 @@ inline String* alloc_buffer(String *res,String *str,String *tmp_value, void Item_func_repeat::fix_length_and_dec() { + set_charset(args[0]->charset(), args[0]->coercibility); if (args[1]->const_item()) { max_length=(long) (args[0]->max_length * args[1]->val_int()); @@ -2028,8 +2038,7 @@ String *Item_func_conv_charset::val_str(String *str) void Item_func_conv_charset::fix_length_and_dec() { max_length = args[0]->max_length*conv_charset->mbmaxlen; - coercibility= COER_IMPLICIT; - set_charset(conv_charset); + set_charset(conv_charset, COER_IMPLICIT); } @@ -2171,9 +2180,7 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, set_collation->name,args[0]->charset()->csname); return 1; } - set_charset(set_collation); - - coercibility= COER_EXPLICIT; + set_charset(set_collation, COER_EXPLICIT); with_sum_func= with_sum_func || args[0]->with_sum_func; used_tables_cache=args[0]->used_tables(); const_item_cache=args[0]->const_item(); diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 726008716c5..84653a8315c 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -151,7 +151,11 @@ class Item_str_conv :public Item_str_func { public: Item_str_conv(Item *item) :Item_str_func(item) {} - void fix_length_and_dec() { max_length = args[0]->max_length; } + void fix_length_and_dec() + { + set_charset(args[0]->charset(), args[0]->coercibility); + max_length = args[0]->max_length; + } }; From 3b4dd0963dff58f595f7d9ee25ba17ee565d4099 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 14:04:30 +0100 Subject: [PATCH 208/267] Fixed lots of typos, and translated a few messages. --- sql/share/swedish/errmsg.txt | 170 +++++++++++++++++------------------ 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index e0da1bfb4c1..f7da6516600 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -5,22 +5,22 @@ "isamchk", "NO", "YES", -"Kan inte skapa filen: '%-.64s' (Felkod: %d)", -"Kan inte skapa tabellen: '%-.64s' (Felkod: %d)", +"Kan inte skapa filen '%-.64s' (Felkod: %d)", +"Kan inte skapa tabellen '%-.64s' (Felkod: %d)", "Kan inte skapa databasen '%-.64s'. (Felkod: %d)", "Databasen '%-.64s' existerar redan", "Kan inte radera databasen '%-.64s'. Databasen finns inte", "Fel vid radering av databasen (Kan inte radera '%-.64s'. Felkod: %d)", "Fel vid radering av databasen (Kan inte radera biblioteket '%-.64s'. Felkod: %d)", -"Kan inte radera filen: '%-.64s' (Felkod: %d)", +"Kan inte radera filen '%-.64s' (Felkod: %d)", "Hittar inte posten i systemregistret", "Kan inte läsa filinformationen (stat) från '%-.64s' (Felkod: %d)", "Kan inte inte läsa aktivt bibliotek. (Felkod: %d)", "Kan inte låsa filen. (Felkod: %d)", -"Kan inte använda: '%-.64s'. (Felkod: %d)", -"Hittar inte filen: '%-.64s'. (Felkod: %d)", +"Kan inte använda '%-.64s'. (Felkod: %d)", +"Hittar inte filen '%-.64s'. (Felkod: %d)", "Kan inte läsa från bibliotek '%-.64s'. (Felkod: %d)", -"Kan inte byta till: '%-.64s'. (Felkod: %d)", +"Kan inte byta till '%-.64s'. (Felkod: %d)", "Posten har förändrats sedan den lästes i register '%-.64s'", "Disken är full (%s). Väntar tills det finns ledigt utrymme....", "Kan inte skriva, dubbel söknyckel i register '%-.64s'", @@ -36,13 +36,13 @@ "Hittar inte posten", "Felaktig fil: '%-.64s'", "Fatalt fel vid hantering av register '%-.64s'. Kör en reparation", -"Gammal nyckelfil '%-.64s'; Reparera registret", +"Gammal nyckelfil '%-.64s'. Reparera registret", "'%-.64s' är skyddad mot förändring", "Oväntat slut på minnet, starta om programmet och försök på nytt (Behövde %d bytes)", "Sorteringsbufferten räcker inte till. Kontrollera startparametrarna", "Oväntat filslut vid läsning från '%-.64s' (Felkod: %d)", "För många anslutningar", -"Fick slut på minnet. Kontrollera ifall mysqld eller någon annan process använder allt tillgängligt minne. Ifall inte, försök använda 'ulimit' eller allokera mera swap", +"Fick slut på minnet. Kontrollera om mysqld eller någon annan process använder allt tillgängligt minne. Om inte, försök använda 'ulimit' eller allokera mera swap", "Kan inte hitta 'hostname' för din adress", "Fel vid initiering av kommunikationen med klienten", "Användare '%-.32s@%-.64s' är ej berättigad att använda databasen %-.64s", @@ -50,43 +50,43 @@ "Ingen databas i användning", "Okänt commando", "Kolumn '%-.64s' får inte vara NULL", -"Okänd database '%-.64s'", +"Okänd databas: '%-.64s'", "Tabellen '%-.64s' finns redan", "Okänd tabell '%-.64s'", -"Kolumn: '%-.64s' i %s är inte unik", +"Kolumn '%-.64s' i %s är inte unik", "Servern går nu ned", "Okänd kolumn '%-.64s' i %s", "'%-.64s' finns inte i GROUP BY", "Kan inte använda GROUP BY med '%-.64s'", "Kommandot har både sum functions och enkla funktioner", "Antalet kolumner motsvarar inte antalet värden", -"Kolumn namn '%-.64s' är för långt", -"Kolumn namn '%-.64s finns flera gånger", -"Nyckel namn '%-.64s' finns flera gånger", -"Dubbel nyckel '%-.64s' för nyckel: %d", -"Felaktigt kolumn typ för kolumn: '%-.64s'", +"Kolumnnamn '%-.64s' är för långt", +"Kolumnnamn '%-.64s finns flera gånger", +"Nyckelnamn '%-.64s' finns flera gånger", +"Dubbel nyckel '%-.64s' för nyckel %d", +"Felaktigt kolumntyp för kolumn '%-.64s'", "%s nära '%-.64s' på rad %d", "Frågan var tom", "Icke unikt tabell/alias: '%-.64s'", "Ogiltigt DEFAULT värde för '%-.64s'", "Flera PRIMARY KEY använda", "För många nycklar använda. Man får ha högst %d nycklar", -"För många nyckel delar använda. Man får ha högst %d nyckeldelar", +"För många nyckeldelar använda. Man får ha högst %d nyckeldelar", "För lång nyckel. Högsta tillåtna nyckellängd är %d", -"Nyckel kolumn '%-.64s' finns inte", -"En BLOB '%-.64s' kan inte vara nyckel med den använda tabellen typen", +"Nyckelkolumn '%-.64s' finns inte", +"En BLOB '%-.64s' kan inte vara nyckel med den använda tabelltypen", "För stor kolumnlängd angiven för '%-.64s' (max= %d). Använd en BLOB instället", -"Det får finnas endast ett AUTO_INCREMENT fält och detta måste vara en nyckel", +"Det får finnas endast ett AUTO_INCREMENT-fält och detta måste vara en nyckel", "%s: klar att ta emot klienter\n", "%s: Normal avslutning\n", "%s: Fick signal %d. Avslutar!\n", "%s: Avslutning klar\n", -"%s: Stänger av tråd %ld användare: '%-.64s'\n", -"Kan inte skapa IP socket", +"%s: Stänger av tråd %ld; användare: '%-.64s'\n", +"Kan inte skapa IP-socket", "Tabellen '%-.64s' har inget index som motsvarar det angivna i CREATE INDEX. Skapa om tabellen", -"Fält separatorerna är inte emotsägande eller för långa. Kontrollera mot manualen", +"Fältseparatorerna är vad som förväntades. Kontrollera mot manualen", "Man kan inte använda fast radlängd med blobs. Använd 'fields terminated by'", -"Textfilen '%' måste finnas i databas biblioteket eller vara läsbar för alla", +"Textfilen '%' måste finnas i databasbiblioteket eller vara läsbar för alla", "Filen '%-.64s' existerar redan", "Rader: %ld Bortagna: %ld Dubletter: %ld Varningar: %ld", "Rader: %ld Dubletter: %ld", @@ -94,18 +94,18 @@ "Man kan inte radera alla fält med ALTER TABLE. Använd DROP TABLE istället", "Kan inte ta bort '%-.64s'. Kontrollera att fältet/nyckel finns", "Rader: %ld Dubletter: %ld Varningar: %ld", -"INSERT table '%-.64s' får inte finnas i FROM tabell-listan", -"Finns inget thread med id %lu", -"Du är inte ägare till thread %lu", +"INSERT-table '%-.64s' får inte finnas i FROM tabell-listan", +"Finns ingen tråd med id %lu", +"Du är inte ägare till tråd %lu", "Inga tabeller angivna", "För många alternativ till kolumn %s för SET", "Kan inte generera ett unikt filnamn %s.(1-999)\n", "Tabell '%-.64s' kan inte uppdateras emedan den är låst för läsning", "Tabell '%-.64s' är inte låst med LOCK TABLES", -"BLOB fält '%-.64s' kan inte ha ett DEFAULT värde", -"Felaktigt databas namn '%-.64s'", -"Felaktigt tabell namn '%-.64s'", -"Den angivna frågan skulle troligen ta mycket long tid! Kontrollar din WHERE och använd SET OPTION SQL_BIG_SELECTS=1 ifall du vill hantera stora joins", +"BLOB fält '%-.64s' kan inte ha ett DEFAULT-värde", +"Felaktigt databasnamn '%-.64s'", +"Felaktigt tabellnamn '%-.64s'", +"Den angivna frågan skulle troligen ta mycket lång tid! Kontrollera din WHERE och använd SET OPTION SQL_BIG_SELECTS=1 ifall du vill hantera stora joins", "Oidentifierat fel", "Okänd procedur: %s", "Felaktigt antal parametrar till procedur %s", @@ -116,12 +116,12 @@ "Tabell '%-.64s' har en extension som inte finns i denna version av MySQL", "Tabeller måste ha minst 1 kolumn", "Tabellen '%-.64s' är full", -"Okänt karaktärset: '%-.64s'", +"Okänd teckenuppsättning: '%-.64s'", "För många tabeller. MySQL can ha högst %d tabeller i en och samma join", "För många fält", -"För stor total rad längd. Den högst tillåtna rad-längden, förutom BLOBs, är %d. Ändra några av dina fält till BLOB", -"Tråd-stacken tog slut: Har använt %ld av %ld bytes. Använd 'mysqld -O thread_stack=#' ifall du behöver en större stack", -"Felaktigt referens i OUTER JOIN. Kontrollera ON uttrycket", +"För stor total radlängd. Den högst tillåtna radlängden, förutom BLOBs, är %d. Ändra några av dina fält till BLOB", +"Trådstacken tog slut: Har använt %ld av %ld bytes. Använd 'mysqld -O thread_stack=#' ifall du behöver en större stack", +"Felaktigt referens i OUTER JOIN. Kontrollera ON-uttrycket", "Kolumn '%-.32s' är använd med UNIQUE eller INDEX men är inte definerad med NOT NULL", "Kan inte ladda funktionen '%-.64s'", "Kan inte initialisera funktionen '%-.64s'; '%-.80s'", @@ -130,30 +130,30 @@ "Kan inte öppna det dynamiska biblioteket '%-.64s' (Felkod: %d %s)", "Hittar inte funktionen '%-.64s' in det dynamiska biblioteket", "Funktionen '%-.64s' är inte definierad", -"Denna dator '%-.64s' är blockerad pga många felaktig paket. Gör 'mysqladmin flush-hosts' för att ta bort alla blockeringarna", -"Denna dator '%-.64s' har inte privileger att använda denna MySQL server", +"Denna dator, '%-.64s', är blockerad pga många felaktig paket. Gör 'mysqladmin flush-hosts' för att ta bort alla blockeringarna", +"Denna dator, '%-.64s', har inte privileger att använda denna MySQL server", "Du använder MySQL som en anonym användare och som sådan får du inte ändra ditt lösenord", -"För att ändra lösenord för andra måste du ha rättigheter att uppdatera mysql databasen", -"Hittade inte användaren i 'user' tabellen", +"För att ändra lösenord för andra måste du ha rättigheter att uppdatera mysql-databasen", +"Hittade inte användaren i 'user'-tabellen", "Rader: %ld Uppdaterade: %ld Varningar: %ld", "Kan inte skapa en ny tråd (errno %d)", "Antalet kolumner motsvarar inte antalet värden på rad: %ld", -"Kunde inte stänga och öppna tabell: '%-.64s", +"Kunde inte stänga och öppna tabell '%-.64s", "Felaktig använding av NULL", -"Fix fel '%-.64s' från REGEXP", -"Man får ha både GROUP kolumner (MIN(),MAX(),COUNT()...) och fält i en fråga om man inte har en GROUP BY del", +"Fick fel '%-.64s' från REGEXP", +"Man får ha både GROUP-kolumner (MIN(),MAX(),COUNT()...) och fält i en fråga om man inte har en GROUP BY-del", "Det finns inget privilegium definierat för användare '%-.32s' på '%-.64s'", "%-.16s ej tillåtet för '%-.32s@%-.64s' för tabell '%-.64s'", -"%-.16s ej tillåtet för '%-.32s@%-.64s'\n för kolumn '%-.64s' i tabell '%-.64s'", -"Felaktigt GRANT privilegium använt", +"%-.16s ej tillåtet för '%-.32s@%-.64s' för kolumn '%-.64s' i tabell '%-.64s'", +"Felaktigt GRANT-privilegium använt", "Felaktigt maskinnamn eller användarnamn använt med GRANT", "Det finns ingen tabell som heter '%-.64s.%s'", "Det finns inget privilegium definierat för användare '%-.32s' på '%-.64s' för tabell '%-.64s'", "Du kan inte använda detta kommando med denna MySQL version", "Du har något fel i din syntax", -"DELAYED INSERT tråden kunde inte låsa tabell '%-.64s'", +"DELAYED INSERT-tråden kunde inte låsa tabell '%-.64s'", "Det finns redan 'max_delayed_threads' trådar i använding", -"Avbröt länken för tråd %ld till db: '%-.64s' användare: '%-.64s' (%s)", +"Avbröt länken för tråd %ld till db '%-.64s', användare '%-.64s' (%s)", "Kommunkationspaketet är större än 'max_allowed_packet'", "Fick läsfel från klienten vid läsning från 'PIPE'", "Fick fatalt fel från 'fcntl()'", @@ -163,20 +163,20 @@ "Fick 'timeout' vid läsning från klienten", "Fick ett fel vid skrivning till klienten", "Fick 'timeout' vid skrivning till klienten", -"Resultat strängen är längre än max_allowed_packet", -"Den använda tabell typen kan inte hantera BLOB/TEXT kolumner", -"Den använda tabell typen kan inte hantera AUTO_INCREMENT kolumner", +"Resultatsträngen är längre än max_allowed_packet", +"Den använda tabelltypen kan inte hantera BLOB/TEXT-kolumner", +"Den använda tabelltypen kan inte hantera AUTO_INCREMENT-kolumner", "INSERT DELAYED kan inte användas med tabell '%-.64s', emedan den är låst med LOCK TABLES", -"Felaktigt column namn '%-.100s'", -"Den använda tabell typen kan inte indexera kolumn '%-.64s'", -"Tabellerna i MERGE tabellen är inte identiskt definierade", -"Kan inte skriva till tabell '%-.64s'; UNIQUE test", -"Du har inte angett en nyckel längd för BLOB '%-.64s'", +"Felaktigt kolumnnamn '%-.100s'", +"Den använda tabelltypen kan inte indexera kolumn '%-.64s'", +"Tabellerna i MERGE-tabellen är inte identiskt definierade", +"Kan inte skriva till tabell '%-.64s'; UNIQUE-test", +"Du har inte angett någon nyckellängd för BLOB '%-.64s'", "Alla delar av en PRIMARY KEY måste vara NOT NULL; Om du vill ha en nyckel med NULL, använd UNIQUE istället", "Resultet bestod av mera än en rad", -"Denna tabell typ kräver en PRIMARY KEY", +"Denna tabelltyp kräver en PRIMARY KEY", "Denna version av MySQL är inte kompilerad med RAID", -"Du använder 'säker uppdaterings mod' och försökte uppdatera en table utan en WHERE sats som använder sig av en nyckel", +"Du använder 'säker uppdateringsmod' och försökte uppdatera en tabell utan en WHERE-sats som använder sig av en nyckel", "Nyckel '%-.64s' finns inte in tabell '%-.64s'", "Kan inte öppna tabellen", "Tabellhanteraren för denna tabell kan inte göra %s", @@ -185,56 +185,56 @@ "Fick fel %d vid ROLLBACK", "Fick fel %d vid FLUSH_LOGS", "Fick fel %d vid CHECKPOINT", -"Avbröt länken för tråd %ld till db: '%-.64s' användare: '%-.32s' Host: '%-.64s' (%.-64s)", +"Avbröt länken för tråd %ld till db '%-.64s', användare '%-.32s', host '%-.64s' (%.-64s)", "Tabellhanteraren klarar inte en binär kopiering av tabellen", -"Binärloggen stängdes medan vi gjorde FLUSH MASTER", +"Binärloggen stängdes medan FLUSH MASTER utfördes", "Failed rebuilding the index of dumped table '%-.64s'", "Fick en master: '%-.64s'", "Fick nätverksfel vid läsning från master", "Fick nätverksfel vid skrivning till master", -"Hittar inte ett FULLTEXT index i kolumnlistan", -"Kan inte exekvera kommandot emedan du har en låst tabell eller an aktiv transaktion", -"Okänd system variabel '%-.64s'", -"Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE", -"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades", +"Hittar inte ett FULLTEXT-index i kolumnlistan", +"Kan inte utföra kommandot emedan du har en låst tabell eller an aktiv transaktion", +"Okänd systemvariabel: '%-.64s'", +"Tabell '%-.64s' är trasig och bör repareras med REPAIR TABLE", +"Tabell '%-.64s' är trasig och senast (automatiska?) reparation misslyckades", "Warning: Några icke transaktionella tabeller kunde inte återställas vid ROLLBACK", -"Transaktionen krävde mera än 'max_binlog_cache_size' minne. Utöka denna mysqld variabel och försök på nytt", +"Transaktionen krävde mera än 'max_binlog_cache_size' minne. Öka denna mysqld-variabel och försök på nytt", "Denna operation kan inte göras under replikering; Gör SLAVE STOP först", "Denna operation kan endast göras under replikering; Konfigurera slaven och gör SLAVE START", -"Servern är inte konfigurerade som en replikations slav. Ändra konfigurationsfilen eller gör CHANGE MASTER TO", -"Kunde inte initializera replications-strukturerna. Kontrollera privilegerna för 'master.info'", +"Servern är inte konfigurerade som en replikationsslav. Ändra konfigurationsfilen eller gör CHANGE MASTER TO", +"Kunde inte initialisera replikationsstrukturerna. Kontrollera privilegerna för 'master.info'", "Kunde inte starta en tråd för replikering", "Användare '%-.64s' har redan 'max_user_connections' aktiva inloggningar", -"Man kan endast använda konstant-uttryck med SET", +"Man kan endast använda konstantuttryck med SET", "Fick inte ett lås i tid ; Försök att starta om transaktionen", "Antal lås överskrider antalet reserverade lås", -"Updaterings-lås kan inte göras när man använder READ UNCOMMITTED", -"DROP DATABASE är inte tillåtet när man har ett globalt läs-lås", -"CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås", +"Updateringslås kan inte göras när man använder READ UNCOMMITTED", +"DROP DATABASE är inte tillåtet när man har ett globalt läslås", +"CREATE DATABASE är inte tillåtet när man har ett globalt läslås", "Felaktiga argument till %s", "%-.32s@%-.64s har inte rättighet att skapa nya användare", -"Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas", -"Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen", -"Tabelltypen har inte hantering av FULLTEXT index", +"Felaktig tabelldefinition. Alla tabeller i en MERGE-tabell måste vara i samma databas", +"Fick 'DEADLOCK' vid låsförsök av block/rad. Försök att starta om transaktionen", +"Tabelltypen har inte hantering av FULLTEXT-index", "Kan inte lägga till 'FOREIGN KEY constraint'", -"FOREIGN KEY konflikt: Kan inte skriva barn", -"FOREIGN KEY konflikt: Kan inte radera fader", +"FOREIGN KEY-konflikt: Kan inte skriva barn", +"FOREIGN KEY-konflikt: Kan inte radera fader", "Fick fel vid anslutning till master: %-.128s", "Fick fel vid utförande av command på mastern: %-.128s", "Fick fel vid utförande av %s: %-.128s", "Felaktig använding av %s and %s", -"SELECT kommandona har olika antal kolumner" -"Kan inte utföra kommandot emedan du har ett READ lås", +"SELECT-kommandona har olika antal kolumner" +"Kan inte utföra kommandot emedan du har ett READ-lås", "Blandning av transaktionella och icke-transaktionella tabeller är inaktiverat", "Option '%s' användes två gånger", "Användare '%-.64s' har överskridit '%s' (nuvarande värde: %ld)", "Du har inte privlegiet '%-.128s' som behövs för denna operation", -"Variable '%-.64s' is a LOCAL variable and can't be used with SET GLOBAL", -"Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", -"Variable '%-.64s' doesn't have a default value", -"Variable '%-.64s' can't be set to the value of '%-.64s'", -"Wrong argument type to variable '%-.64s'", -"Variable '%-.64s' can only be set, not read", -"Wrong usage/placement of '%s'", -"This version of MySQL doesn't yet support '%s'", -"Got fatal error %d: '%-.128s' from master when reading data from binary log", +"Variabel '%-.64s' är en LOCAL variabel och kan inte ändrad med SET GLOBAL", +"Variabel '%-.64s' är en GLOBAL variabel och bör sättas med SET GLOBAL", +"Variabel '%-.64s' har inte ett DEFAULT-värde", +"Variabel '%-.64s' kan inte sättas till '%-.64s'", +"Fel typ av argument till variabel '%-.64s'", +"Variabeln '%-.64s' kan endast sättas, inte läsas", +"Fel använding/placering av '%s'", +"Denna version av MySQL kan ännu inte utföra '%s'", +"Fick fatalt fel %d: '%-.128s' från master vid läsning av binärloggen" From 2af67065cbac2bd607a08b9b510f585986f16dcf Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 14:13:37 +0100 Subject: [PATCH 209/267] Fixed a few typos, and translated new messages. --- sql/share/swedish/errmsg.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index 517232fe2a9..6d34b5a93b3 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -238,20 +238,20 @@ "Fel använding/placering av '%s'", "Denna version av MySQL kan inte utföra '%s'", "Fick fatalt fel %d: '%-.128s' från master vid läsning av binär loggen", -"Felaktig FOREIGN KEY definition för '%-.64s': %s", -"Nyckel referensen och table referensen stämmer inte överens", -"Cardinality error (more/less than %d columns)", +"Felaktig FOREIGN KEY-definition för '%-.64s': %s", +"Nyckelreferensen och tabellreferensen stämmer inte överens", +"Kardinalitetsfel (fler/färre än %d kolumner)", "Subselect returnerade mer än 1 rad", "Okänd PREPARED STATEMENT id (%ld) var given till %s", -"Hjälp databasen finns inte eller är skadad", -"Syklisk referens i subselect", +"Hjälpdatabasen finns inte eller är skadad", +"Cyklisk referens i subselect", "Konvertar kolumn '%s' från %s till %s", -"Reference '%-.64s' not supported (%s)", -"Every derived table must have it's own alias" -"Select %u was reduced during optimisation", -"Table '%-.64s' from one of SELECT's can not be used in %-.32s" -"Client does not support authentication protocol requested by server. Consider upgrading MySQL client" -"All parts of a SPATIAL KEY must be NOT NULL" -"COLLATION '%s' is not valid for CHARACTER SET '%s'" -"The slave was already running" -"The slave was already stopped" +"Referens '%-.64s' stöds inte (%s)", +"Varje 'derived table' måste ha sitt eget alias", +"Select %u reducerades vid optimiering", +"Tabell '%-.64s' från en SELECT kan inte användas i %-.32s" +"Klienten stöder inte autentiseringsprotokollet som begärts av servern. Överväg uppgradering av klientprogrammet." +"Alla delar av en SPATIAL KEY måste vara NOT NULL" +"COLLATION '%s' är inte tillåtet för CHARACTER SET '%s'" +"Slaven har redan startat" +"Slaven har redan stoppat" From 676f986838bcf220ee50dc5df975b153eced76d1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 17:24:46 +0400 Subject: [PATCH 210/267] Produce an error when arguments are not compatible for CONCAT() --- sql/item.cc | 16 +++++++++------- sql/item_strfunc.cc | 8 ++++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/sql/item.cc b/sql/item.cc index b28b390c4a0..f2053c37fb7 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -180,13 +180,10 @@ bool Item::set_charset(CHARSET_INFO *cs1, enum coercion co1, set_charset(&my_charset_bin, COER_NOCOLL); return 0; } - + if (!my_charset_same(cs1,cs2)) - { - set_charset(&my_charset_bin, COER_NOCOLL); - return 0; - } - + return 1; + if (co1 < co2) { set_charset(cs1, co1); @@ -198,7 +195,12 @@ bool Item::set_charset(CHARSET_INFO *cs1, enum coercion co1, else // co2 == co1 { if (cs1 != cs2) - set_charset(&my_charset_bin, COER_NOCOLL); + { + CHARSET_INFO *bin= get_charset_by_csname(cs1->csname, MY_CS_BINSORT,MYF(0)); + if (!bin) + return 1; + set_charset(bin, COER_NOCOLL); + } else set_charset(cs2, co2); } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 5151a25f257..d04ed97393d 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -328,8 +328,12 @@ void Item_func_concat::fix_length_and_dec() for (uint i=0 ; i < arg_count ; i++) { max_length+=args[i]->max_length; - set_charset(charset(), coercibility, - args[i]->charset(), args[i]->coercibility); + if (set_charset(charset(), coercibility, + args[i]->charset(), args[i]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + break; + } } if (max_length > MAX_BLOB_WIDTH) From 53c5d448a23d5a21c505ee369f9f2af643b27c39 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 19:13:28 +0400 Subject: [PATCH 211/267] Strings comparison is now done according to "Collating sequences used for comparison" table, "SQL Complete, Really", page 162 --- mysql-test/r/ctype_many.result | 8 +++---- mysql-test/r/func_system.result | 4 ++-- mysql-test/t/ctype_many.test | 8 +++---- mysql-test/t/func_system.test | 2 +- sql/item.cc | 2 +- sql/item_cmpfunc.cc | 38 ++++++++++++++++++++++++++++++--- sql/item_cmpfunc.h | 2 ++ sql/item_create.cc | 2 +- 8 files changed, 50 insertions(+), 16 deletions(-) diff --git a/mysql-test/r/ctype_many.result b/mysql-test/r/ctype_many.result index 096ddf8188b..4d31ab6c274 100644 --- a/mysql-test/r/ctype_many.result +++ b/mysql-test/r/ctype_many.result @@ -1327,10 +1327,10 @@ INSERT INTO t1 (ucs2_f,comment) VALUES (0x0565,'ARMENIAN SMALL ECH'); INSERT INTO t1 (ucs2_f,comment) VALUES (0x0566,'ARMENIAN SMALL ZA'); ALTER TABLE t1 ADD armscii8_f CHAR(32) CHARACTER SET armscii8 NOT NULL; ALTER TABLE t1 ADD greek_f CHAR(32) CHARACTER SET greek NOT NULL; -UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE 'GRE%'; -UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE 'ARM%'; -UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=''; -UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=''; +UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE _latin2'GRE%'; +UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE _latin2'ARM%'; +UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=_utf8''; +UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=_ucs2''; SELECT * FROM t1; comment koi8_ru_f utf8_f bin_f ucs2_f armscii8_f greek_f LAT SMALL A a a a a diff --git a/mysql-test/r/func_system.result b/mysql-test/r/func_system.result index 83c2ad6e020..83e78a30396 100644 --- a/mysql-test/r/func_system.result +++ b/mysql-test/r/func_system.result @@ -1,8 +1,8 @@ select database(),user() like "%@%"; database() user() like "%@%" test 1 -select version()>="3.23.29"; -version()>="3.23.29" +select version()>=_utf8"3.23.29"; +version()>=_utf8"3.23.29" 1 select TRUE,FALSE,NULL; TRUE FALSE NULL diff --git a/mysql-test/t/ctype_many.test b/mysql-test/t/ctype_many.test index ddb7034be10..05f3687d330 100644 --- a/mysql-test/t/ctype_many.test +++ b/mysql-test/t/ctype_many.test @@ -194,10 +194,10 @@ INSERT INTO t1 (ucs2_f,comment) VALUES (0x0566,'ARMENIAN SMALL ZA'); ALTER TABLE t1 ADD armscii8_f CHAR(32) CHARACTER SET armscii8 NOT NULL; ALTER TABLE t1 ADD greek_f CHAR(32) CHARACTER SET greek NOT NULL; -UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE 'GRE%'; -UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE 'ARM%'; -UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=''; -UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=''; +UPDATE t1 SET greek_f=CONVERT(ucs2_f USING greek) WHERE comment LIKE _latin2'GRE%'; +UPDATE t1 SET armscii8_f=CONVERT(ucs2_f USING armscii8) WHERE comment LIKE _latin2'ARM%'; +UPDATE t1 SET utf8_f=CONVERT(ucs2_f USING utf8) WHERE utf8_f=_utf8''; +UPDATE t1 SET ucs2_f=CONVERT(utf8_f USING ucs2) WHERE ucs2_f=_ucs2''; SELECT * FROM t1; SET NAMES 'binary'; SELECT * FROM t1; diff --git a/mysql-test/t/func_system.test b/mysql-test/t/func_system.test index c69526644f4..db366e3ab49 100644 --- a/mysql-test/t/func_system.test +++ b/mysql-test/t/func_system.test @@ -3,5 +3,5 @@ # select database(),user() like "%@%"; -select version()>="3.23.29"; +select version()>=_utf8"3.23.29"; select TRUE,FALSE,NULL; diff --git a/sql/item.cc b/sql/item.cc index f2053c37fb7..fc5acd3c2fb 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -39,7 +39,7 @@ Item::Item(): { marker= 0; maybe_null=null_value=with_sum_func=unsigned_flag=0; - coercibility=COER_NOCOLL; + coercibility=COER_IMPLICIT; name= 0; decimals= 0; max_length= 0; THD *thd= current_thd; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 1ae16827e0b..8d3789783a8 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -87,6 +87,35 @@ static bool convert_constant_item(Field *field, Item **item) return 0; } +bool Item_bool_func2::set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1, + CHARSET_INFO *cs2, enum coercion co2) +{ + if((cs1 == &my_charset_bin) || (cs2 == &my_charset_bin)) + { + cmp_charset= &my_charset_bin; + return 0; + } + + if ((co1 == COER_NOCOLL) || (co2 == COER_NOCOLL)) + return 1; + + if (!my_charset_same(cs1,cs2)) + return 1; + + if (co1 < co2) + cmp_charset= cs1; + else if (co2 < co1) + cmp_charset= cs2; + else // co1==co2 + { + if (cs1 == cs2) + cmp_charset= cs1; + else + return 1; + } + return 0; +} + void Item_bool_func2::fix_length_and_dec() { max_length= 1; // Function returns 0 or 1 @@ -124,9 +153,12 @@ void Item_bool_func2::fix_length_and_dec() } } } - /* QQ: COERCIBILITY */ - cmp_charset= (args[0]->binary() || args[1]->binary()) ? - &my_charset_bin : args[0]->charset(); + if (set_cmp_charset(args[0]->charset(), args[0]->coercibility, + args[1]->charset(), args[1]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + return; + } set_cmp_func(); } diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index b9d8615beb4..e7670755396 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -122,6 +122,8 @@ public: { cmp.set_cmp_func(this, tmp_arg, tmp_arg+1); } + bool set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1, + CHARSET_INFO *cs2, enum coercion co2); optimize_type select_optimize() const { return OPTIMIZE_OP; } virtual enum Functype rev_functype() const { return UNKNOWN_FUNC; } bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; } diff --git a/sql/item_create.cc b/sql/item_create.cc index eff0c8ab137..b80327b657a 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -433,7 +433,7 @@ Item *create_func_version(void) { return new Item_string(NullS,server_version, (uint) strlen(server_version), - default_charset_info); + system_charset_info); } Item *create_func_weekday(Item* a) From c2297fb5ecaf2e98b21ae8287535d0b7fbced34b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 19:33:26 +0400 Subject: [PATCH 212/267] configure.in: Always compile utf8 configure.in: Always compile utf8 --- configure.in | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 0fdd962956d..7238be18ef0 100644 --- a/configure.in +++ b/configure.in @@ -2401,7 +2401,11 @@ done dnl Always compile latin1 AC_DEFINE(HAVE_CHARSET_latin1) - + +dnl Always compile utf8 +AC_DEFINE(HAVE_CHARSET_utf8) +use_mb=yes + if test "$use_mb" = "yes" then AC_DEFINE(USE_MB) From d7bedeb998c911c921d7b67dc07049955481d9b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 21:23:13 +0200 Subject: [PATCH 213/267] Added support for ULONG division with DIV Fixed non fatal memory leak in slave code. mysql-test/r/func_test.result: Added test for DIV mysql-test/t/func_test.test: Added test for DIV mysys/my_alloc.c: More DBUG statements sql/item_func.cc: Added support for ULONG division with DIV sql/log_event.cc: Fixed memory leak (Wrong call to init_sql_alloc) sql/slave.cc: Fixed memory leak (Wrong call to init_sql_alloc) sql/sql_base.cc: More DBUG statements sql/sql_class.cc: Added init_for_queries() to fix memory leak in slave code sql/sql_class.h: Added init_for_queries() to fix memory leak in slave code sql/sql_error.cc: More DBUG statements sql/sql_parse.cc: Added init_for_queries() to fix memory leak in slave code sql/unireg.h: Moved memory defaults to include file --- mysql-test/r/func_test.result | 3 +++ mysql-test/t/func_test.test | 1 + mysys/my_alloc.c | 14 ++++++++++---- sql/item_func.cc | 5 ++++- sql/log_event.cc | 8 ++------ sql/slave.cc | 6 +++--- sql/sql_base.cc | 4 +++- sql/sql_class.cc | 15 +++++++++++++++ sql/sql_class.h | 1 + sql/sql_error.cc | 2 ++ sql/sql_parse.cc | 13 ++----------- sql/unireg.h | 7 +++++++ 12 files changed, 53 insertions(+), 26 deletions(-) diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result index 9fcf03db838..d415b77692b 100644 --- a/mysql-test/r/func_test.result +++ b/mysql-test/r/func_test.result @@ -49,6 +49,9 @@ select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL; select 10 % 7, 10 mod 7, 10 div 3; 10 % 7 10 mod 7 10 div 3 3 3 3 +select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2; +(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2 +18446744073709551615 18446744073709551615 9223372036854775807 select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1; 5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1 0 1 diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test index 8810aefc20f..bdf58ee4b15 100644 --- a/mysql-test/t/func_test.test +++ b/mysql-test/t/func_test.test @@ -18,6 +18,7 @@ select -1.49 or -1.49,0.6 or 0.6; select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1; select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL; select 10 % 7, 10 mod 7, 10 div 3; +select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2; # # Wrong usage of functions diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index 4d3b0604984..abd51369f95 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -25,6 +25,8 @@ void init_alloc_root(MEM_ROOT *mem_root, uint block_size, uint pre_alloc_size __attribute__((unused))) { + DBUG_ENTER("init_alloc_root"); + DBUG_PRINT("enter",("root: %lx", mem_root)); mem_root->free= mem_root->used= mem_root->pre_alloc= 0; mem_root->min_malloc= 32; mem_root->block_size= block_size-MALLOC_OVERHEAD-sizeof(USED_MEM)-8; @@ -45,24 +47,27 @@ void init_alloc_root(MEM_ROOT *mem_root, uint block_size, } } #endif + DBUG_VOID_RETURN; } gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size) { #if defined(HAVE_purify) && defined(EXTRA_DEBUG) reg1 USED_MEM *next; - Size+=ALIGN_SIZE(sizeof(USED_MEM)); + DBUG_ENTER("alloc_root"); + DBUG_PRINT("enter",("root: %lx", mem_root)); + Size+=ALIGN_SIZE(sizeof(USED_MEM)); if (!(next = (USED_MEM*) my_malloc(Size,MYF(MY_WME)))) { if (mem_root->error_handler) (*mem_root->error_handler)(); - return((gptr) 0); /* purecov: inspected */ + DBUG_RETURN((gptr) 0); /* purecov: inspected */ } next->next= mem_root->used; next->size= Size; mem_root->used= next; - return (gptr) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM))); + DBUG_RETURN((gptr) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM)))); #else uint get_size, block_size; gptr point; @@ -151,8 +156,9 @@ void free_root(MEM_ROOT *root, myf MyFlags) { reg1 USED_MEM *next,*old; DBUG_ENTER("free_root"); + DBUG_PRINT("enter",("root: %lx flags: %u", root, (uint) MyFlags)); - if (!root) + if (!root) /* QQ: Should be deleted */ DBUG_VOID_RETURN; /* purecov: inspected */ if (MyFlags & MY_MARK_BLOCKS_FREE) { diff --git a/sql/item_func.cc b/sql/item_func.cc index 6b932edf00e..81ea91c5c3d 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -499,12 +499,15 @@ longlong Item_func_int_div::val_int() longlong val2=args[1]->val_int(); if ((null_value= val2 == 0 || args[0]->null_value || args[1]->null_value)) return 0; - return value/val2; + return (unsigned_flag ? + (ulonglong) value / (ulonglong) val2 : + value / val2); } void Item_func_int_div::fix_length_and_dec() { + find_num_type(); max_length=args[0]->max_length - args[0]->decimals; maybe_null=1; } diff --git a/sql/log_event.cc b/sql/log_event.cc index 1f3a09ba93b..b57a691c267 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -875,7 +875,6 @@ void Query_log_event::print(FILE* file, bool short_form, char* last_db) int Query_log_event::exec_event(struct st_relay_log_info* rli) { int expected_error,actual_error = 0; - init_sql_alloc(&thd->mem_root, 8192,0); thd->db = rewrite_db((char*)db); /* @@ -1075,6 +1074,7 @@ int Start_log_event::write_data(IO_CACHE* file) #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) int Start_log_event::exec_event(struct st_relay_log_info* rli) { + DBUG_ENTER("Start_log_event::exec_event"); /* All temporary tables was deleted on the master */ close_temporary_tables(thd); /* @@ -1082,7 +1082,7 @@ int Start_log_event::exec_event(struct st_relay_log_info* rli) */ if (!rli->mi->old_format) cleanup_load_tmpdir(); - return Log_event::exec_event(rli); + DBUG_RETURN(Log_event::exec_event(rli)); } #endif @@ -1535,7 +1535,6 @@ void Load_log_event::set_fields(List &field_list) int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, bool use_rli_only_for_errors) { - init_sql_alloc(&thd->mem_root, 8192,0); thd->db = rewrite_db((char*)db); DBUG_ASSERT(thd->query == 0); thd->query = 0; // Should not be needed @@ -2164,9 +2163,6 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) double real_val; longlong int_val; - if (type != ROW_RESULT) - init_sql_alloc(&thd->mem_root, 8192,0); - if (is_null) { it= new Item_null(); diff --git a/sql/slave.cc b/sql/slave.cc index 215da63a704..61348722d1e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2099,7 +2099,6 @@ point. If you are sure that your master is ok, run this query manually on the\ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) { - DBUG_ASSERT(rli->sql_thd==thd); Log_event * ev = next_event(rli); DBUG_ASSERT(rli->sql_thd==thd); if (sql_slave_killed(thd,rli)) @@ -2463,7 +2462,8 @@ slave_begin: #endif thd = new THD; // note that contructor of THD uses DBUG_ ! - THD_CHECK_SENTRY(thd); + thd->thread_stack = (char*)&thd; // remember where our stack is + /* Inform waiting threads that slave has started */ rli->slave_run_id++; @@ -2479,9 +2479,9 @@ slave_begin: sql_print_error("Failed during slave thread initialization"); goto err; } + thd->init_for_queries(); rli->sql_thd= thd; thd->temporary_tables = rli->save_temporary_tables; // restore temp tables - thd->thread_stack = (char*)&thd; // remember where our stack is pthread_mutex_lock(&LOCK_thread_count); threads.append(thd); pthread_mutex_unlock(&LOCK_thread_count); diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 34884003da3..2063e8b3f08 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1637,6 +1637,8 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db, bool rm_temporary_table(enum db_type base, char *path) { bool error=0; + DBUG_ENTER("rm_temporary_table"); + fn_format(path, path,"",reg_ext,4); unpack_filename(path,path); if (my_delete(path,MYF(0))) @@ -1646,7 +1648,7 @@ bool rm_temporary_table(enum db_type base, char *path) if (file && file->delete_table(path)) error=1; delete file; - return error; + DBUG_RETURN(error); } diff --git a/sql/sql_class.cc b/sql/sql_class.cc index f67db09ee67..022a31e7b5c 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -215,6 +215,21 @@ void THD::init(void) total_warn_count= 0; } + +/* + Init THD for query processing + + This has to be called once before we call mysql_parse() +*/ + +void THD::init_for_queries() +{ + init_sql_alloc(&mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC); + init_sql_alloc(&transaction.mem_root, + TRANS_MEM_ROOT_BLOCK_SIZE, TRANS_MEM_ROOT_PREALLOC); +} + + /* Do what's needed when one invokes change user diff --git a/sql/sql_class.h b/sql/sql_class.h index 44082aa897e..af60ea6d466 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -573,6 +573,7 @@ public: void init(void); void change_user(void); + void init_for_queries(); void cleanup(void); bool store_globals(); #ifdef SIGNAL_WITH_VIO_CLOSE diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 00c80a654cb..8d3bb3ca49b 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -60,6 +60,7 @@ This file contains the implementation of error and warnings related void mysql_reset_errors(THD *thd) { + DBUG_ENTER("mysql_reset_errors"); if (thd->query_id != thd->warn_id) { thd->warn_id= thd->query_id; @@ -67,6 +68,7 @@ void mysql_reset_errors(THD *thd) bzero((char*) thd->warn_count, sizeof(thd->warn_count)); thd->warn_list.empty(); } + DBUG_VOID_RETURN; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index eed5e62555b..3b27a65f4e1 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -44,11 +44,6 @@ #define MIN_HANDSHAKE_SIZE 6 #endif /* HAVE_OPENSSL */ -#define MEM_ROOT_BLOCK_SIZE 8192 -#define MEM_ROOT_PREALLOC 8192 -#define TRANS_MEM_ROOT_BLOCK_SIZE 4096 -#define TRANS_MEM_ROOT_PREALLOC 4096 - extern int yyparse(void *thd); extern "C" pthread_mutex_t THR_LOCK_keycache; #ifdef SOLARIS @@ -834,9 +829,7 @@ pthread_handler_decl(handle_one_connection,arg) thd->command=COM_SLEEP; thd->version=refresh_version; thd->set_time(); - init_sql_alloc(&thd->mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC); - init_sql_alloc(&thd->transaction.mem_root, - TRANS_MEM_ROOT_BLOCK_SIZE, TRANS_MEM_ROOT_PREALLOC); + thd->init_for_queries(); while (!net->error && net->vio != 0 && !thd->killed) { if (do_command(thd)) @@ -907,9 +900,7 @@ extern "C" pthread_handler_decl(handle_bootstrap,arg) thd->priv_user=thd->user=(char*) my_strdup("boot", MYF(MY_WME)); buff= (char*) thd->net.buff; - init_sql_alloc(&thd->mem_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC); - init_sql_alloc(&thd->transaction.mem_root, - TRANS_MEM_ROOT_BLOCK_SIZE, TRANS_MEM_ROOT_PREALLOC); + thd->init_for_queries(); while (fgets(buff, thd->net.max_packet, file)) { uint length=(uint) strlen(buff); diff --git a/sql/unireg.h b/sql/unireg.h index a5cd784a14a..9430329e67a 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -63,6 +63,13 @@ #define MAX_SORT_MEMORY (2048*1024-MALLOC_OVERHEAD) #define MIN_SORT_MEMORY (32*1024-MALLOC_OVERHEAD) + +/* Memory allocated when parsing a statement / saving a statement */ +#define MEM_ROOT_BLOCK_SIZE 8192 +#define MEM_ROOT_PREALLOC 8192 +#define TRANS_MEM_ROOT_BLOCK_SIZE 4096 +#define TRANS_MEM_ROOT_PREALLOC 4096 + #define DEFAULT_ERROR_COUNT 64 #define DEFAULT_PREP_STMT_COUNT 64 #define EXTRA_RECORDS 10 /* Extra records in sort */ From 0847c4f90e732378b6e4b37fe819c92bda870067 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Mar 2003 21:43:41 +0200 Subject: [PATCH 214/267] Print right hostname or IP in SHOW PROCESSLIST Use SESSION TABLE_HANDLER as default table handler if given table handler doesn't exists Docs/internals.texi: Updated description for how DATE, TIME and TIMESTAMP are stored mysql-test/r/create.result: New tests mysql-test/t/create.test: New tests sql/handler.cc: Use SESSION TABLE_HANDLER as default table handler if given table handler doesn't exists. sql/sql_parse.cc: Fix that we return hostname instead of IP in SHOW PROCESSLIST sql/sql_show.cc: Print right hostname or IP in SHOW PROCESSLIST --- Docs/internals.texi | 19 +++++++++++-------- mysql-test/r/create.result | 23 +++++++++++++++++++++++ mysql-test/t/create.test | 17 +++++++++++++++++ sql/handler.cc | 9 ++++++++- sql/sql_parse.cc | 3 +++ sql/sql_show.cc | 4 ++-- 6 files changed, 64 insertions(+), 11 deletions(-) diff --git a/Docs/internals.texi b/Docs/internals.texi index 1f90b8d1999..686ecd27fda 100644 --- a/Docs/internals.texi +++ b/Docs/internals.texi @@ -2213,11 +2213,11 @@ Storage: same as TINYINT. @strong{DATE} @itemize @bullet @item -Storage: fixed-length series of binary integers, always three bytes -long. +Storage: 3 byte integer, low byte first. +Packed as: 'day + month*32 + year*16*32' @item -Example: a DATE column containing '0001-01-01' looks like:@* -@code{hexadecimal 21 02 00} +Example: a DATE column containing '1962-01-02' looks like:@* +@code{hexadecimal 22 54 0F} @end itemize @strong{DATETIME} @@ -2236,16 +2236,19 @@ Example: a DATETIME column for '0001-01-01 01:01:01' looks like:@* @strong{TIME} @itemize @bullet @item -Storage: a value offset from 8385959, always three bytes long. +Storage: 3 bytes, low byte first. +This is stored as seconds: days*24*3600+hours*3600+minutes*60+seconds @item -Example: a TIME column containing '01:01:01' looks like:@* -@code{hexadecimal 75 27 00} +Example: a TIME column containing '1 02:03:04' (1 day 2 hour 3 minutes and 4 seconds) looks like:@* +@code{hexadecimal 58 6E 01} @end itemize @strong{TIMESTAMP} @itemize @bullet @item -Storage: four bytes long (NOTE TO SELF: not figured out) +Storage: 4 bytes, low byte first. +Stored as unix @code{time()}, which is seconds since the Epoch +(00:00:00 UTC, January 1, 1970). @item Example: a TIMESTAMP column containing '2003-01-01 01:01:01' looks like:@* @code{hexadecimal 4D AE 12 23} diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index 0cc98c38d49..a2ab0e97905 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -148,3 +148,26 @@ select * from t1; if('2002'='2002','Y','N') Y drop table if exists t1; +SET SESSION table_type="heap"; +SELECT @@table_type; +@@table_type +HEAP +CREATE TABLE t1 (a int not null); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL default '0' +) TYPE=HEAP +drop table t1; +SET SESSION table_type="gemini"; +SELECT @@table_type; +@@table_type +GEMINI +CREATE TABLE t1 (a int not null); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL default '0' +) TYPE=MyISAM +SET SESSION table_type=default; +drop table t1; diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test index 7d566cb89ac..68d68929f07 100644 --- a/mysql-test/t/create.test +++ b/mysql-test/t/create.test @@ -102,3 +102,20 @@ drop table t1; create table t1 select if('2002'='2002','Y','N'); select * from t1; drop table if exists t1; + +# +# Test default table type +# +SET SESSION table_type="heap"; +SELECT @@table_type; +CREATE TABLE t1 (a int not null); +show create table t1; +drop table t1; +# Test what happens when using a non existing table type +SET SESSION table_type="gemini"; +SELECT @@table_type; +CREATE TABLE t1 (a int not null); +show create table t1; +SET SESSION table_type=default; +drop table t1; + diff --git a/sql/handler.cc b/sql/handler.cc index ebae0d5e901..6e3f8486b45 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -121,8 +121,15 @@ handler *get_new_handler(TABLE *table, enum db_type db_type) #endif case DB_TYPE_HEAP: return new ha_heap(table); - case DB_TYPE_MYISAM: default: // should never happen + { + enum db_type def=(enum db_type) current_thd->variables.table_type; + /* Try first with 'default table type' */ + if (db_type != def) + return get_new_handler(table, def); + } + /* Fall back to MyISAM */ + case DB_TYPE_MYISAM: return new ha_myisam(table); case DB_TYPE_MRG_MYISAM: return new ha_myisammrg(table); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index dde4b6c5c93..8439db0be6b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -499,7 +499,10 @@ check_connections(THD *thd) thd->host=ip_to_hostname(&thd->remote.sin_addr,&connect_errors); /* Cut very long hostnames to avoid possible overflows */ if (thd->host) + { thd->host[min(strlen(thd->host), HOSTNAME_LENGTH)]= 0; + thd->host_or_ip= thd->host; + } if (connect_errors > max_connect_errors) return(ER_HOST_IS_BLOCKED); } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 95197ecfc4b..23e5049636a 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1064,10 +1064,10 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) { if ((thd_info->host= thd->alloc(LIST_PROCESS_HOST_LEN+1))) my_snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, - "%s:%u", thd->host_or_ip, tmp->peer_port); + "%s:%u", tmp->host_or_ip, tmp->peer_port); } else - thd_info->host= thd->strdup(thd->host_or_ip); + thd_info->host= thd->strdup(tmp->host_or_ip); if ((thd_info->db=tmp->db)) // Safe test thd_info->db=thd->strdup(thd_info->db); thd_info->command=(int) tmp->command; From 10096d9185838a9b258b84f282b0218b792cef5c Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 11:48:02 +0100 Subject: [PATCH 215/267] fixed bad merge (s/rnd/my_rnd/) --- sql/password.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/password.c b/sql/password.c index 9752bcc95eb..257547671e5 100644 --- a/sql/password.c +++ b/sql/password.c @@ -118,7 +118,7 @@ static void old_randominit(struct rand_struct *rand_st,ulong seed1) Generate Random number SYNOPSIS - rnd() + my_rnd() rand_st INOUT Structure used for number generation RETURN @@ -152,7 +152,7 @@ void create_random_string(int length,struct rand_struct *rand_st,char *target) char *end=target+length; /* Use pointer arithmetics as it is faster way to do so. */ for (; target Date: Thu, 20 Mar 2003 12:09:20 +0100 Subject: [PATCH 216/267] another bad merge fixed --- sql/sql_update.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_update.cc b/sql/sql_update.cc index e5c9d160725..ec1183819dc 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -597,7 +597,7 @@ multi_update::initialize_tables(JOIN *join) /* ok to be on stack as this is not referenced outside of this func */ Field_string offset(table->file->ref_length, 0, "offset", - table, 1, &my_charset_bin); + table, &my_charset_bin); if (temp_fields.push_front(new Item_field(((Field *) &offset)))) DBUG_RETURN(1); From dd94ef103ebcce51d4efb7ec40930f510e3ac2a4 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 19:11:15 +0400 Subject: [PATCH 217/267] New syntax for character strings: SELECT _latin1 0x345678; SELECT _latin x'345678'; --- sql/sql_yacc.yy | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 220c0b04d5e..3d476ebd57c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3885,6 +3885,14 @@ literal: | NULL_SYM { $$ = new Item_null(); Lex->next_state=MY_LEX_OPERATOR_OR_IDENT;} | HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);} + | UNDERSCORE_CHARSET HEX_NUM + { + Item *tmp= new Item_varbinary($2.str,$2.length); + String *str= tmp ? tmp->val_str((String*) 0) : (String*) 0; + $$ = new Item_string(str ? str->ptr() : "", + str ? str->length() : 0, + Lex->charset,Item::COER_IMPLICIT); + } | DATE_SYM text_literal { $$ = $2; } | TIME_SYM text_literal { $$ = $2; } | TIMESTAMP text_literal { $$ = $2; }; From 4637fa16b63e29a6b8736d7e0e7a911bda023d3c Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 19:31:01 +0400 Subject: [PATCH 218/267] NCHAR(n) and NATIONAL CHARACTER(n) is now synonim for CHARACTER(n) CHARACTER SET utf8 --- sql/sql_yacc.yy | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3d476ebd57c..9244490f3cc 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -664,7 +664,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); when_list2 expr_list2 handler opt_precision opt_ignore opt_column opt_restrict grant revoke set lock unlock string_list field_options field_option - field_opt_list opt_binary table_lock_list table_lock varchar + field_opt_list opt_binary table_lock_list table_lock varchar nchar ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use opt_delete_options opt_delete_option opt_outer table_list table_name opt_option opt_place @@ -1130,6 +1130,12 @@ type: $$=FIELD_TYPE_STRING; } | char opt_binary { Lex->length=(char*) "1"; $$=FIELD_TYPE_STRING; } + | nchar '(' NUM ')' { Lex->length=$3.str; + $$=FIELD_TYPE_STRING; + Lex->charset=&my_charset_utf8; } + | nchar { Lex->length=(char*) "1"; + $$=FIELD_TYPE_STRING; + Lex->charset=&my_charset_utf8; } | BINARY '(' NUM ')' { Lex->length=$3.str; Lex->charset=&my_charset_bin; $$=FIELD_TYPE_STRING; } @@ -1211,8 +1217,12 @@ type: char: CHAR_SYM {} - | NCHAR_SYM {} - | NATIONAL_SYM CHAR_SYM {}; + ; + +nchar: + NCHAR_SYM {} + | NATIONAL_SYM CHAR_SYM {} + ; varchar: char VARYING {} From 3112cd61ac60d9106bcbfad024371d56790f68de Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 20:04:21 +0400 Subject: [PATCH 219/267] NATIONAL CHARACTER VARYING(n) NATIONAL CHAR VARYING(n) NCHAR VARYING(n) are now aliases for VARCHAR(n) CHARACTER SET utf8 --- sql/sql_yacc.yy | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 9244490f3cc..45db591478c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -664,9 +664,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); when_list2 expr_list2 handler opt_precision opt_ignore opt_column opt_restrict grant revoke set lock unlock string_list field_options field_option - field_opt_list opt_binary table_lock_list table_lock varchar nchar + field_opt_list opt_binary table_lock_list table_lock ref_list opt_on_delete opt_on_delete_list opt_on_delete_item use - opt_delete_options opt_delete_option + opt_delete_options opt_delete_option varchar nchar nvarchar opt_outer table_list table_name opt_option opt_place opt_attribute opt_attribute_list attribute column_list column_list_id opt_column_list grant_privileges opt_table user_list grant_option @@ -1141,6 +1141,9 @@ type: $$=FIELD_TYPE_STRING; } | varchar '(' NUM ')' opt_binary { Lex->length=$3.str; $$=FIELD_TYPE_VAR_STRING; } + | nvarchar '(' NUM ')' { Lex->length=$3.str; + $$=FIELD_TYPE_VAR_STRING; + Lex->charset= &my_charset_utf8; } | VARBINARY '(' NUM ')' { Lex->length=$3.str; Lex->charset=&my_charset_bin; $$=FIELD_TYPE_VAR_STRING; } @@ -1227,8 +1230,14 @@ nchar: varchar: char VARYING {} | VARCHAR {} - | NATIONAL_SYM VARCHAR {} - | NCHAR_SYM VARCHAR {}; + ; + +nvarchar: + NATIONAL_SYM VARCHAR {} + | NCHAR_SYM VARCHAR {} + | NATIONAL_SYM CHAR_SYM VARYING {} + | NCHAR_SYM VARYING {} + ; int_type: INT_SYM { $$=FIELD_TYPE_LONG; } From 83a4fcac5c3990772e7be06cf6a5cda4f869d65a Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 20:55:53 +0400 Subject: [PATCH 220/267] R-tree bug fixes. myisam/rt_index.c: Should call find_first() instead of find_next() after key deletion. Fixed type cast. myisam/sp_key.c: Fixed spatial key creation. sql/field.cc: To get rid of warning. --- myisam/rt_index.c | 9 ++++++++- myisam/sp_key.c | 33 +++++++++++++++++++++++++++++---- sql/field.cc | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/myisam/rt_index.c b/myisam/rt_index.c index e3f64940203..f02d6121eb5 100644 --- a/myisam/rt_index.c +++ b/myisam/rt_index.c @@ -188,6 +188,12 @@ int rtree_find_next(MI_INFO *info, uint keynr, uint search_flag) uint nod_cmp_flag; MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; + if (info->update & HA_STATE_DELETED) + { + return rtree_find_first(info, keynr, info->lastkey, info->lastkey_length, + search_flag); + } + if (!info->buff_used) { uchar *key = info->int_keypos; @@ -814,6 +820,7 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) goto err1; info->s->state.key_root[keynr] = new_root; } + info->update= HA_STATE_DELETED; return 0; err1: @@ -911,7 +918,7 @@ ha_rows rtree_estimate(MI_INFO *info, uint keynr, uchar *key, if (nod_flag) { if (i) - res = (int)(area / i * info->state->records); + res = (ha_rows) (area / i * info->state->records); else res = HA_POS_ERROR; } diff --git a/myisam/sp_key.c b/myisam/sp_key.c index f0b53b541b8..f669d217026 100644 --- a/myisam/sp_key.c +++ b/myisam/sp_key.c @@ -56,6 +56,31 @@ uint sp_make_key(register MI_INFO *info, uint keynr, uchar *key, pos = ((byte*)mbr) + keyseg->start; if (keyseg->flag & HA_SWAP_KEY) { +#ifdef HAVE_ISNAN + if (keyseg->type == HA_KEYTYPE_FLOAT) + { + float nr; + float4get(nr, pos); + if (isnan(nr)) + { + /* Replace NAN with zero */ + bzero(key, length); + key+= length; + continue; + } + } + else if (keyseg->type == HA_KEYTYPE_DOUBLE) + { + double nr; + float8get(nr, pos); + if (isnan(nr)) + { + bzero(key, length); + key+= length; + continue; + } + } +#endif pos += length; while (length--) { @@ -99,19 +124,19 @@ static int sp_add_point_to_mbr(uchar *(*wkb), uchar *end, uint n_dims, double *mbr) { double ord; - double *mbr_end = mbr + n_dims * 2; + double *mbr_end= mbr + n_dims * 2; while (mbr < mbr_end) { if ((*wkb) > end - 8) return -1; float8get(ord, (*wkb)); - (*wkb) += 8; + (*wkb)+= 8; if (ord < *mbr) - *mbr = ord; + float8store((char*) mbr, ord); mbr++; if (ord > *mbr) - *mbr = ord; + float8store((char*) mbr, ord); mbr++; } return 0; diff --git a/sql/field.cc b/sql/field.cc index b5ed7885af5..6b403b85aae 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4285,7 +4285,7 @@ Field_blob::Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, :Field_str(ptr_arg, (1L << min(blob_pack_length,3)*8)-1L, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg, table_arg, cs), - packlength(blob_pack_length), geom_flag(true) + geom_flag(true), packlength(blob_pack_length) { flags|= BLOB_FLAG; if (table) From 9e5a1ba67e1c4dd918ab357905f1708f1b101e9e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 22:01:03 +0400 Subject: [PATCH 221/267] SELECT N'string' --- include/m_ctype.h | 3 ++- mysys/charset.c | 1 + sql/sql_lex.cc | 20 ++++++++++++++++++++ sql/sql_yacc.yy | 7 ++++++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/m_ctype.h b/include/m_ctype.h index 8833b7df47e..29ea40eaf33 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -85,7 +85,8 @@ enum my_lex_states MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_COLON, MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, - MY_LEX_IDENT_OR_KEYWORD, MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, + MY_LEX_IDENT_OR_KEYWORD, + MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, MY_LEX_STRING_OR_DELIMITER }; diff --git a/mysys/charset.c b/mysys/charset.c index ce44353b065..899acf46fac 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -110,6 +110,7 @@ static void init_state_maps(CHARSET_INFO *cs) /* Special handling of hex and binary strings */ state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX; state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN; + state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR; } diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index da67f5646fc..a5bed692293 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -463,6 +463,26 @@ int yylex(void *arg, void *yythd) lex->tok_start=lex->ptr; // Let tok_start point at next item return((int) c); + case MY_LEX_IDENT_OR_NCHAR: + if (yyPeek() != '\'') + { // Found x'hex-number' + state= MY_LEX_IDENT; + break; + } + yyGet(); // Skip ' + while ((c = yyGet()) && (c !='\'')) ; + length=(lex->ptr - lex->tok_start); // Length of hexnum+3 + if (c != '\'') + { + return(ABORT_SYM); // Illegal hex constant + } + yyGet(); // get_token makes an unget + yylval->lex_str=get_token(lex,length); + yylval->lex_str.str+=2; // Skip x' + yylval->lex_str.length-=3; // Don't count x' and last ' + lex->yytoklen-=3; + return (NCHAR_STRING); + case MY_LEX_IDENT_OR_HEX: if (yyPeek() == '\'') { // Found x'hex-number' diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 45db591478c..428af27ed3f 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -291,6 +291,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token NATURAL %token NEW_SYM %token NCHAR_SYM +%token NCHAR_STRING %token NOT %token NO_SYM %token NULL_SYM @@ -561,6 +562,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME ULONGLONG_NUM field_ident select_alias ident ident_or_text UNDERSCORE_CHARSET IDENT_sys TEXT_STRING_sys TEXT_STRING_db + NCHAR_STRING %type opt_table_alias @@ -3862,10 +3864,13 @@ text_literal: thd->charset() : thd->db_charset; $$ = new Item_string($1.str,$1.length,cs); } + | NCHAR_STRING + { $$= new Item_string($1.str,$1.length,&my_charset_utf8); } | UNDERSCORE_CHARSET TEXT_STRING { $$ = new Item_string($2.str,$2.length,Lex->charset,Item::COER_IMPLICIT); } | text_literal TEXT_STRING_db - { ((Item_string*) $1)->append($2.str,$2.length); }; + { ((Item_string*) $1)->append($2.str,$2.length); } + ; text_string: TEXT_STRING_db From f27d55586de005299417684252d33b238d741d2d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 22:43:40 +0400 Subject: [PATCH 222/267] item_cmpfunc.cc: cmp_charset was not initialized valgrind fix LIKE now works according to coercibility rules sql/item_cmpfunc.cc: cmp_charset was not initialized valgrind fix LIKE now works according to coercibility rules --- sql/item_cmpfunc.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 48fe1a9d470..da63e3bbf4b 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1780,7 +1780,7 @@ longlong Item_func_like::val_int() null_value=0; if (canDoTurboBM) return turboBM_matches(res->ptr(), res->length()) ? 1 : 0; - return my_wildcmp(charset(), + return my_wildcmp(cmp_charset, res->ptr(),res->ptr()+res->length(), res2->ptr(),res2->ptr()+res2->length(), escape,wild_one,wild_many) ? 0 : 1; @@ -1813,14 +1813,12 @@ bool Item_func_like::fix_fields(THD *thd, TABLE_LIST *tlist, Item ** ref) if (Item_bool_func2::fix_fields(thd, tlist, ref)) return 1; - /* - Comparision is by default done according to character set of LIKE - QQ: COERCIBILITY - */ - if (cmp_charset == &my_charset_bin) - set_charset(&my_charset_bin); - else - set_charset(args[1]->charset()); + if (set_cmp_charset(args[0]->charset(), args[0]->coercibility, + args[1]->charset(), args[1]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + return 1; + } /* We could also do boyer-more for non-const items, but as we would have to From e968e3b18f7cbfd51284fc5a8618178c79ec32ab Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 20 Mar 2003 21:35:03 +0200 Subject: [PATCH 223/267] After merge fixes Fixed bug in Item::set_name() Fix for memory leak with geometry type mysql-test/r/create.result: Fixed results after merge mysql-test/r/innodb.result: Hack to make test repeatable (InnoDB's cardinality numbers varies a bit between tests) mysql-test/r/rpl_relayspace.result: After merge fix mysql-test/t/innodb.test: Hack to make test repeatable (InnoDB's cardinality numbers varies a bit between tests) sql/ha_myisam.cc: Indentation cleanup sql/item.cc: Fixed bug in Item::set_name() sql/password.c: After merge fix sql/sql_update.cc: After merge fix sql/table.cc: Fix for memory leak with geometry type --- mysql-test/r/create.result | 4 ++-- mysql-test/r/innodb.result | 12 ++++++------ mysql-test/r/rpl_relayspace.result | 4 ++-- mysql-test/t/innodb.test | 6 ++++++ sql/ha_myisam.cc | 6 ++++-- sql/item.cc | 29 ++++++++++++++++------------- sql/password.c | 4 ++-- sql/sql_update.cc | 2 +- sql/table.cc | 5 +++-- 9 files changed, 42 insertions(+), 30 deletions(-) diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index 136b7272c1d..0780b97890f 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -262,7 +262,7 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) NOT NULL default '0' -) TYPE=HEAP +) TYPE=HEAP CHARSET=latin1 drop table t1; SET SESSION table_type="gemini"; SELECT @@table_type; @@ -273,6 +273,6 @@ show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) NOT NULL default '0' -) TYPE=MyISAM +) TYPE=MyISAM CHARSET=latin1 SET SESSION table_type=default; drop table t1; diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index df33af0709c..52b6fc307ae 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -140,13 +140,13 @@ id parent_id level 1015 102 2 explain select level from t1 where level=1; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ref level level 1 const 12 Using where; Using index +1 SIMPLE t1 ref level level 1 const # Using where; Using index explain select level,id from t1 where level=1; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ref level level 1 const 12 Using where; Using index +1 SIMPLE t1 ref level level 1 const # Using where; Using index explain select level,id,parent_id from t1 where level=1; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t1 ref level level 1 const 12 Using where +1 SIMPLE t1 ref level level 1 const # Using where select level,id from t1 where level=1; level id 1 1002 @@ -168,9 +168,9 @@ Table Op Msg_type Msg_text test.t1 optimize error The handler for the table doesn't support optimize show keys from t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment -t1 0 PRIMARY 1 id A 87 NULL NULL BTREE -t1 1 parent_id 1 parent_id A 43 NULL NULL BTREE -t1 1 level 1 level A 6 NULL NULL BTREE +t1 0 PRIMARY 1 id A # NULL NULL BTREE +t1 1 parent_id 1 parent_id A # NULL NULL BTREE +t1 1 level 1 level A # NULL NULL BTREE drop table t1; CREATE TABLE t1 ( gesuchnr int(11) DEFAULT '0' NOT NULL, diff --git a/mysql-test/r/rpl_relayspace.result b/mysql-test/r/rpl_relayspace.result index 5e552ef7400..610419980b5 100644 --- a/mysql-test/r/rpl_relayspace.result +++ b/mysql-test/r/rpl_relayspace.result @@ -1,9 +1,9 @@ -slave stop; +stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; -slave start; +start slave; stop slave; create table t1 (a int); reset slave; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index bfaeee78f8e..c85f2192437 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -22,6 +22,8 @@ drop table t1; # # A bit bigger test +# The 'replace_result' statements are needed because the cardinality calculated +# by innodb is not always the same between runs # CREATE TABLE t1 ( @@ -43,12 +45,16 @@ update ignore t1 set id=id+1; # This will change all rows select * from t1; update ignore t1 set id=1023 where id=1010; select * from t1 where parent_id=102; +--replace_result 12 # 6 # explain select level from t1 where level=1; +--replace_result 12 # 6 # explain select level,id from t1 where level=1; +--replace_result 12 # 6 # explain select level,id,parent_id from t1 where level=1; select level,id from t1 where level=1; select level,id,parent_id from t1 where level=1; optimize table t1; +--replace_result 87 # 48 # 43 # 24 # 6 # 3 # show keys from t1; drop table t1; diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 126d0628f79..7e8dab5daed 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -1049,7 +1049,8 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, &recinfo,(table_arg->fields*2+2)*sizeof(MI_COLUMNDEF), &keydef, table_arg->keys*sizeof(MI_KEYDEF), &keyseg, - ((table_arg->key_parts + table_arg->keys) * sizeof(HA_KEYSEG)), + ((table_arg->key_parts + table_arg->keys) * + sizeof(HA_KEYSEG)), 0))) DBUG_RETURN(1); @@ -1107,7 +1108,8 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, keydef[i].seg[j].null_bit=0; keydef[i].seg[j].null_pos=0; } - if ((field->type() == FIELD_TYPE_BLOB) || (field->type() == FIELD_TYPE_GEOMETRY)) + if (field->type() == FIELD_TYPE_BLOB || + field->type() == FIELD_TYPE_GEOMETRY) { keydef[i].seg[j].flag|=HA_BLOB_PART; /* save number of bytes used to pack length */ diff --git a/sql/item.cc b/sql/item.cc index faf0f245576..aed0a823603 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -93,20 +93,23 @@ bool Item::check_cols(uint c) void Item::set_name(const char *str,uint length, CHARSET_INFO *cs) { if (!length) - length= str ? strlen(str) : 0; - while (length && !my_isgraph(cs,*str)) - { // Fix problem with yacc - length--; - str++; - } - if (!my_charset_same(cs, system_charset_info)) - { - String tmp; - tmp.copy(str, length, cs, system_charset_info); - name=sql_strmake(tmp.ptr(),min(tmp.length(),MAX_FIELD_WIDTH)); - } + name= (char*) str; // Empty string, used by AS else - name=sql_strmake(str,min(length,MAX_FIELD_WIDTH)); + { + while (length && !my_isgraph(cs,*str)) + { // Fix problem with yacc + length--; + str++; + } + if (length && !my_charset_same(cs, system_charset_info)) + { + String tmp; + tmp.copy(str, length, cs, system_charset_info); + name=sql_strmake(tmp.ptr(),min(tmp.length(),MAX_FIELD_WIDTH)); + } + else + name=sql_strmake(str,min(length,MAX_FIELD_WIDTH)); + } } /* diff --git a/sql/password.c b/sql/password.c index 9752bcc95eb..b4f325d99fd 100644 --- a/sql/password.c +++ b/sql/password.c @@ -152,7 +152,7 @@ void create_random_string(int length,struct rand_struct *rand_st,char *target) char *end=target+length; /* Use pointer arithmetics as it is faster way to do so. */ for (; targetfile->ref_length, 0, "offset", - table, 1, &my_charset_bin); + table, &my_charset_bin); if (temp_fields.push_front(new Item_field(((Field *) &offset)))) DBUG_RETURN(1); diff --git a/sql/table.cc b/sql/table.cc index b36171cab93..17bb15d3033 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -515,6 +515,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, keyinfo->key_length+= HA_KEY_NULL_LENGTH; } if (field->type() == FIELD_TYPE_BLOB || + field->type() == FIELD_TYPE_GEOMETRY || field->real_type() == FIELD_TYPE_VAR_STRING) { if (field->type() == FIELD_TYPE_BLOB) @@ -531,7 +532,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, if (i == 0) field->key_start|= ((key_map) 1 << key); if (field->key_length() == key_part->length && - field->type() != FIELD_TYPE_BLOB) + !(field->flags & BLOB_FLAG)) { if ((index_flags & HA_KEY_READ_ONLY) && (field->key_type() != HA_KEYTYPE_TEXT || @@ -560,7 +561,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, if (field->key_length() != key_part->length) { key_part->key_part_flag|= HA_PART_KEY; - if (field->type() != FIELD_TYPE_BLOB) + if (!(field->flags & BLOB_FLAG)) { // Create a new field field=key_part->field=field->new_field(&outparam->mem_root, outparam); From 2dc27531c8952c00133440d54f60dd2030361080 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 11:21:01 +0400 Subject: [PATCH 224/267] A separate variable national_charset_info Fixes according coercibility tables, p162, SQL Complete include/my_sys.h: Declaration has been moved to /sql directory sql/item.cc: Fixes acording SQL complete, page 162 sql/item_cmpfunc.cc: Fixes acording SQL complete, page 162 sql/mysql_priv.h: Declaration has been moved here from /include sql/sql_string.cc: A separate variable national_charset_info sql/sql_yacc.yy: A separate variable national_charset_info --- include/my_sys.h | 1 - sql/item.cc | 16 ++++++++++++---- sql/item_cmpfunc.cc | 16 +++++++++++++++- sql/mysql_priv.h | 4 +++- sql/sql_string.cc | 3 +++ sql/sql_yacc.yy | 15 +++++++-------- 6 files changed, 40 insertions(+), 15 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index 18d6115c75a..03a0ae70d6a 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -203,7 +203,6 @@ extern int (*fatal_error_handler_hook)(uint my_err, const char *str, /* charsets */ extern CHARSET_INFO *default_charset_info; -extern CHARSET_INFO *system_charset_info; extern CHARSET_INFO *all_charsets[256]; extern CHARSET_INFO compiled_charsets[]; diff --git a/sql/item.cc b/sql/item.cc index aed0a823603..b4d2d0670d8 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -199,10 +199,17 @@ bool Item::set_charset(CHARSET_INFO *cs1, enum coercion co1, { if (cs1 != cs2) { - CHARSET_INFO *bin= get_charset_by_csname(cs1->csname, MY_CS_BINSORT,MYF(0)); - if (!bin) - return 1; - set_charset(bin, COER_NOCOLL); + if (co1 == COER_EXPLICIT) + { + return 1; + } + else + { + CHARSET_INFO *bin= get_charset_by_csname(cs1->csname, MY_CS_BINSORT,MYF(0)); + if (!bin) + return 1; + set_charset(bin, COER_NOCOLL); + } } else set_charset(cs2, co2); @@ -987,6 +994,7 @@ Item_varbinary::Item_varbinary(const char *str, uint str_length) str+=2; } *ptr=0; // Keep purify happy + coercibility= COER_COERCIBLE; } longlong Item_varbinary::val_int() diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index da63e3bbf4b..ff6f4022877 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -111,7 +111,21 @@ bool Item_bool_func2::set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1, if (cs1 == cs2) cmp_charset= cs1; else - return 1; + { + if (co1 == COER_COERCIBLE) + { + CHARSET_INFO *c= get_charset_by_csname(cs1->csname,MY_CS_PRIMARY,MYF(0)); + if (c) + { + cmp_charset= c; + return 0; + } + else + return 1; + } + else + return 1; + } } return 0; } diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 61c5d308b4e..f68de23034a 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -62,7 +62,9 @@ char* query_table_status(THD *thd,const char *db,const char *table_name); #endif #endif -#define files_charset_info system_charset_info +extern CHARSET_INFO *system_charset_info; +extern CHARSET_INFO *files_charset_info; +extern CHARSET_INFO *national_charset_info; /*************************************************************************** Configuration parameters diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 54a76319be7..ffa272713de 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -29,6 +29,9 @@ #endif CHARSET_INFO *system_charset_info= &my_charset_utf8; +CHARSET_INFO *files_charset_info= &my_charset_utf8; +CHARSET_INFO *national_charset_info= &my_charset_utf8; + extern gptr sql_alloc(unsigned size); extern void sql_element_free(void *ptr); static uint32 diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 428af27ed3f..ce1a3dc10cd 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1134,10 +1134,10 @@ type: $$=FIELD_TYPE_STRING; } | nchar '(' NUM ')' { Lex->length=$3.str; $$=FIELD_TYPE_STRING; - Lex->charset=&my_charset_utf8; } + Lex->charset=national_charset_info; } | nchar { Lex->length=(char*) "1"; $$=FIELD_TYPE_STRING; - Lex->charset=&my_charset_utf8; } + Lex->charset=national_charset_info; } | BINARY '(' NUM ')' { Lex->length=$3.str; Lex->charset=&my_charset_bin; $$=FIELD_TYPE_STRING; } @@ -1145,7 +1145,7 @@ type: $$=FIELD_TYPE_VAR_STRING; } | nvarchar '(' NUM ')' { Lex->length=$3.str; $$=FIELD_TYPE_VAR_STRING; - Lex->charset= &my_charset_utf8; } + Lex->charset=national_charset_info; } | VARBINARY '(' NUM ')' { Lex->length=$3.str; Lex->charset=&my_charset_bin; $$=FIELD_TYPE_VAR_STRING; } @@ -3865,9 +3865,9 @@ text_literal: $$ = new Item_string($1.str,$1.length,cs); } | NCHAR_STRING - { $$= new Item_string($1.str,$1.length,&my_charset_utf8); } + { $$= new Item_string($1.str,$1.length,national_charset_info); } | UNDERSCORE_CHARSET TEXT_STRING - { $$ = new Item_string($2.str,$2.length,Lex->charset,Item::COER_IMPLICIT); } + { $$ = new Item_string($2.str,$2.length,Lex->charset); } | text_literal TEXT_STRING_db { ((Item_string*) $1)->append($2.str,$2.length); } ; @@ -3913,9 +3913,8 @@ literal: { Item *tmp= new Item_varbinary($2.str,$2.length); String *str= tmp ? tmp->val_str((String*) 0) : (String*) 0; - $$ = new Item_string(str ? str->ptr() : "", - str ? str->length() : 0, - Lex->charset,Item::COER_IMPLICIT); + $$ = new Item_string(str ? str->ptr() : "", str ? str->length() : 0, + Lex->charset); } | DATE_SYM text_literal { $$ = $2; } | TIME_SYM text_literal { $$ = $2; } From 0f16578bffe3d6cf38a3a895d9c8e7dc1711e230 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 12:04:08 +0400 Subject: [PATCH 225/267] COLLATE precedence bug has been fixed: "a LIKE b COLLATE c" worked as "(a LIKE b) COLLATE c" which is not right --- sql/sql_yacc.yy | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ce1a3dc10cd..64e2ff30aab 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2023,11 +2023,6 @@ expr_expr: { $$= new Item_date_add_interval($1,$3,$4,0); } | expr '-' interval_expr interval { $$= new Item_date_add_interval($1,$3,$4,1); } - | expr COLLATE_SYM ident_or_text - { - $$= new Item_func_set_collation($1,new Item_string($3.str,$3.length, - YYTHD->variables.thd_charset)); - } ; /* expressions that begin with 'expr' that do NOT follow IN_SYM */ @@ -2137,6 +2132,11 @@ interval_expr: simple_expr: simple_ident + | simple_expr COLLATE_SYM ident_or_text %prec NEG + { + $$= new Item_func_set_collation($1,new Item_string($3.str,$3.length, + YYTHD->variables.thd_charset)); + } | literal | param_marker | '@' ident_or_text SET_VAR expr From 08733cbd5b39891ddf1600ff203ebd83e52735ce Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 11:49:17 +0200 Subject: [PATCH 226/267] Fixed reference to uninitialized memory mysql-test/t/innodb.test: Another fix to take InnoDB cardinality changes into account --- mysql-test/t/innodb.test | 2 +- strings/ctype-utf8.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index c85f2192437..0a10df52412 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -49,7 +49,7 @@ select * from t1 where parent_id=102; explain select level from t1 where level=1; --replace_result 12 # 6 # explain select level,id from t1 where level=1; ---replace_result 12 # 6 # +--replace_result 12 # 6 # 5 # explain select level,id,parent_id from t1 where level=1; select level,id from t1 where level=1; select level,id,parent_id from t1 where level=1; diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 897e2846659..702a34fde84 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1585,14 +1585,15 @@ static uchar to_upper_utf8[] = { }; -static int my_utf8_uni (CHARSET_INFO *cs __attribute__((unused)) , - my_wc_t * pwc, const uchar *s, const uchar *e) +static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)), + my_wc_t * pwc, const uchar *s, const uchar *e) { - unsigned char c = s[0]; + unsigned char c; if (s >= e) return MY_CS_TOOFEW(0); + c= s[0]; if (c < 0x80) { *pwc = c; @@ -1624,10 +1625,8 @@ static int my_utf8_uni (CHARSET_INFO *cs __attribute__((unused)) , (my_wc_t) (s[2] ^ 0x80); return 3; - -#ifdef UNICODE_32BIT - } +#ifdef UNICODE_32BIT else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32) { if (s+4 > e) /* We need 4 characters */ @@ -1685,9 +1684,9 @@ static int my_utf8_uni (CHARSET_INFO *cs __attribute__((unused)) , | ((my_wc_t) (s[4] ^ 0x80) << 6) | (my_wc_t) (s[5] ^ 0x80); return 6; + } #endif - } else - return MY_CS_ILSEQ; + return MY_CS_ILSEQ; } static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)) , From c51c782c55a5f4328d2ad08823f84adc28abad81 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 15:18:52 +0400 Subject: [PATCH 227/267] New variable to turn off automatic charset conversion of query results Some speed improvements --- sql/mysqld.cc | 1 + sql/protocol.cc | 26 +++++++++++++++----------- sql/protocol.h | 2 ++ sql/set_var.cc | 5 ++++- sql/sql_class.h | 1 + 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2298ae7b9ea..8414fcb97c3 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4551,6 +4551,7 @@ static void set_options(void) sizeof(mysql_real_data_home)-1); /* Set default values for some variables */ + global_system_variables.convert_result_charset= TRUE; global_system_variables.table_type= DB_TYPE_MYISAM; global_system_variables.tx_isolation= ISO_REPEATABLE_READ; global_system_variables.select_limit= (ulonglong) HA_POS_ERROR; diff --git a/sql/protocol.cc b/sql/protocol.cc index af8f966a4b6..2d53d545066 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -703,11 +703,13 @@ bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs) field_types[field_pos] <= MYSQL_TYPE_GEOMETRY)); field_pos++; #endif - if (cs != this->thd->charset()) + if (!my_charset_same(cs, this->thd->charset()) && + (cs != &my_charset_bin) && + (this->thd->charset() != &my_charset_bin) && + (this->thd->variables.convert_result_charset)) { - String tmp; - tmp.copy(from, length, cs, this->thd->charset()); - return net_store_data(tmp.ptr(), tmp.length()); + convert.copy(from, length, cs, this->thd->charset()); + return net_store_data(convert.ptr(), convert.length()); } else return net_store_data(from, length); @@ -800,16 +802,18 @@ bool Protocol_simple::store(Field *field) field_pos++; #endif char buff[MAX_FIELD_WIDTH]; - String tmp1(buff,sizeof(buff), &my_charset_bin); - field->val_str(&tmp1,&tmp1); - if (field->charset() != this->thd->charset()) + String str(buff,sizeof(buff), &my_charset_bin); + field->val_str(&str,&str); + if (!my_charset_same(field->charset(), this->thd->charset()) && + (field->charset() != &my_charset_bin) && + (this->thd->charset() != &my_charset_bin) && + (this->thd->variables.convert_result_charset)) { - String tmp; - tmp.copy(tmp1.ptr(), tmp1.length(), tmp1.charset(), this->thd->charset()); - return net_store_data(tmp.ptr(), tmp.length()); + convert.copy(str.ptr(), str.length(), str.charset(), this->thd->charset()); + return net_store_data(convert.ptr(), convert.length()); } else - return net_store_data(tmp1.ptr(), tmp1.length()); + return net_store_data(str.ptr(), str.length()); } diff --git a/sql/protocol.h b/sql/protocol.h index 71ad5c1302b..418814a9623 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -30,6 +30,7 @@ class Protocol protected: THD *thd; String *packet; + String convert; uint field_pos; #ifndef DEBUG_OFF enum enum_field_types *field_types; @@ -44,6 +45,7 @@ protected: public: Protocol() {} Protocol(THD *thd) { init(thd); } + virtual ~Protocol() {} void init(THD* thd); bool send_fields(List *list, uint flag); bool send_records_num(List *list, ulonglong records); diff --git a/sql/set_var.cc b/sql/set_var.cc index cb49ad603d9..c4a4819689c 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -109,6 +109,8 @@ sys_var_bool_ptr sys_concurrent_insert("concurrent_insert", &myisam_concurrent_insert); sys_var_long_ptr sys_connect_timeout("connect_timeout", &connect_timeout); +sys_var_thd_bool sys_convert_result_charset("convert_result_charset", + &SV::convert_result_charset); sys_var_enum sys_delay_key_write("delay_key_write", &delay_key_write_options, &delay_key_write_typelib, @@ -337,6 +339,7 @@ sys_var *sys_variables[]= &sys_client_collation, &sys_concurrent_insert, &sys_connect_timeout, + &sys_convert_result_charset, &sys_default_week_format, &sys_delay_key_write, &sys_delayed_insert_limit, @@ -445,6 +448,7 @@ struct show_var_st init_vars[]= { {sys_client_collation.name, (char*) &sys_client_collation, SHOW_SYS}, {sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS}, {sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS}, + {sys_convert_result_charset.name, (char*) &sys_convert_result_charset, SHOW_SYS}, {"datadir", mysql_real_data_home, SHOW_CHAR}, {"default_week_format", (char*) &sys_default_week_format, SHOW_SYS}, {sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS}, @@ -1455,7 +1459,6 @@ void set_var_init() (*var)->option_limits= find_option(my_long_options, (*var)->name); hash_insert(&system_variable_hash, (byte*) *var); } - /* Special cases Needed because MySQL can't find the limits for a variable it it has diff --git a/sql/sql_class.h b/sql/sql_class.h index b832bbffac8..8284a2b1ea3 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -374,6 +374,7 @@ struct system_variables my_bool log_warnings; my_bool low_priority_updates; my_bool new_mode; + my_bool convert_result_charset; CHARSET_INFO *thd_charset; }; From 9a8637339a3f9e822e0aa3925a451945efa380f9 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 15:44:15 +0400 Subject: [PATCH 228/267] sql_yacc.yy: Reduce/reduce conflict fix. sql/sql_yacc.yy: Reduce/reduce conflict fix. --- sql/sql_yacc.yy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 64e2ff30aab..af861875691 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -4339,18 +4339,18 @@ option_value: find_sys_var("tx_isolation"), new Item_int((int32) $4))); } - | charset opt_equal set_expr_or_default + | charset set_expr_or_default { THD *thd= YYTHD; LEX *lex= &thd->lex; - if (!$3) + if (!$2) { CHARSET_INFO *cl= thd->db_charset; - $3= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1); + $2= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1); } lex->var_list.push_back(new set_var(lex->option_type, find_sys_var("client_collation"), - $3)); + $2)); } | NAMES_SYM charset_name_or_default opt_collate { From 8b9d8b2966aa9add3d01ef292fd6631a3ca13f5e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 14:14:36 +0200 Subject: [PATCH 229/267] Fixed a bug in comment handling. --- client/mysql.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 6c8b7c8eb7b..4f7548afc92 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -40,7 +40,7 @@ #include #include -const char *VER= "12.19"; +const char *VER= "12.20"; /* Don't try to make a nice table if the data is too big */ #define MAX_COLUMN_LENGTH 1024 @@ -919,6 +919,7 @@ static bool add_line(String &buffer,char *line,char *in_string) uchar inchar; char buff[80],*pos,*out; COMMANDS *com; + my_bool in_comment= 0; if (!line[0] && buffer.is_empty()) return 0; @@ -978,7 +979,7 @@ static bool add_line(String &buffer,char *line,char *in_string) continue; } } - else if (inchar == ';' && !*in_string) + else if (inchar == ';' && !*in_string && !in_comment) { // ';' is end of command if (out != line) buffer.append(line,(uint) (out-line)); // Add this line @@ -1009,6 +1010,13 @@ static bool add_line(String &buffer,char *line,char *in_string) else if (!*in_string && (inchar == '\'' || inchar == '"')) *in_string=(char) inchar; *out++ = (char) inchar; + if (inchar == '*' && !*in_string) + { + if (pos != line && pos[-1] == '/') + in_comment= 1; + else if (in_comment && pos[1] == '/') + in_comment= 0; + } } } if (out != line || !buffer.is_empty()) From a0e2d75aa08292d851c11261da3ea3e4ffd8cf0b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 17:21:45 +0400 Subject: [PATCH 230/267] All charset related actions have been moved from fix_fields() to fix_length_and_dec() --- sql/item_strfunc.cc | 49 +++++++-------------------------------------- sql/item_strfunc.h | 5 +---- 2 files changed, 8 insertions(+), 46 deletions(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index d04ed97393d..76d05cae009 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2041,6 +2041,7 @@ String *Item_func_conv_charset::val_str(String *str) void Item_func_conv_charset::fix_length_and_dec() { + set_charset(conv_charset); max_length = args[0]->max_length*conv_charset->mbmaxlen; set_charset(conv_charset, COER_IMPLICIT); } @@ -2114,25 +2115,6 @@ outp: } -bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables, Item **ref) -{ - char buff[STACK_BUFF_ALLOC]; // Max argument in function - used_tables_cache=0; - const_item_cache=1; - - if (thd && check_stack_overrun(thd,buff)) - return 0; // Fatal error if flag is set! - if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1)) - return 1; - maybe_null=args[0]->maybe_null; - const_item_cache=args[0]->const_item(); - set_charset(conv_charset); - fix_length_and_dec(); - fixed= 1; - return 0; -} - - void Item_func_conv_charset3::fix_length_and_dec() { max_length = args[0]->max_length; @@ -2147,24 +2129,11 @@ String *Item_func_set_collation::val_str(String *str) return str; } -bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, Item **ref) +void Item_func_set_collation::fix_length_and_dec() { CHARSET_INFO *set_collation; - String tmp, *str; const char *colname; - char buff[STACK_BUFF_ALLOC]; // Max argument in function - used_tables_cache=0; - const_item_cache=1; - - if (thd && check_stack_overrun(thd,buff)) - return 0; // Fatal error if flag is set! - if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1)) - return 1; - if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1)) - return 2; - maybe_null=args[0]->maybe_null || args[1]->maybe_null; - - str= args[1]->val_str(&tmp); + String tmp, *str= args[1]->val_str(&tmp); colname= str->c_ptr(); if (!strncmp(colname,"BINARY",6)) set_collation= get_charset_by_csname(args[0]->charset()->csname, @@ -2175,24 +2144,20 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, if (!set_collation) { my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), str->c_ptr()); - return 1; + return; } if (!my_charset_same(args[0]->charset(),set_collation)) { my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0), set_collation->name,args[0]->charset()->csname); - return 1; + return; } set_charset(set_collation, COER_EXPLICIT); - with_sum_func= with_sum_func || args[0]->with_sum_func; - used_tables_cache=args[0]->used_tables(); - const_item_cache=args[0]->const_item(); - fix_length_and_dec(); - fixed= 1; - return 0; + max_length= args[0]->max_length; } + bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const { /* Assume we don't have rtti */ diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 84653a8315c..07b7eb2d165 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -577,7 +577,6 @@ class Item_func_conv_charset :public Item_str_func public: Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a) { conv_charset=cs; } - bool fix_fields(THD *thd,struct st_table_list *tables,Item **ref); String *val_str(String *); void fix_length_and_dec(); const char *func_name() const { return "conv_charset"; } @@ -588,9 +587,7 @@ class Item_func_set_collation :public Item_str_func public: Item_func_set_collation(Item *a, Item *b) :Item_str_func(a,b) {}; String *val_str(String *); - bool fix_fields(THD *thd,struct st_table_list *tables, Item **ref); - void fix_length_and_dec() - { max_length = args[0]->max_length; } + void fix_length_and_dec(); bool eq(const Item *item, bool binary_cmp) const; const char *func_name() const { return "set_collation"; } }; From ce17ac5af299e040499b355e30b3fcdacdf02712 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 18:31:41 +0400 Subject: [PATCH 231/267] IF() and LEAST() now honors coercibility --- sql/item_cmpfunc.cc | 9 +++++++-- sql/item_func.cc | 11 ++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index ff6f4022877..e63f0a836de 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -723,8 +723,12 @@ Item_func_if::fix_length_and_dec() else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT) { cached_result_type = STRING_RESULT; - set_charset((args[1]->binary() || args[2]->binary()) ? - &my_charset_bin : args[1]->charset()); + if (set_charset(args[1]->charset(), args[1]->coercibility, + args[2]->charset(), args[2]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + return; + } } else { @@ -760,6 +764,7 @@ Item_func_if::val_str(String *str) { Item *arg= args[0]->val_int() ? args[1] : args[2]; String *res=arg->val_str(str); + res->set_charset(charset()); null_value=arg->null_value; return res; } diff --git a/sql/item_func.cc b/sql/item_func.cc index 72db23d1953..5bbb6003e4f 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -855,9 +855,13 @@ void Item_func_min_max::fix_length_and_dec() maybe_null=0; cmp_type=item_cmp_type(cmp_type,args[i]->result_type()); if (i==0) - set_charset(args[i]->charset()); - else if (args[i]->charset() == &my_charset_bin) - set_charset(&my_charset_bin); + set_charset(args[i]->charset(), args[i]->coercibility); + else if (set_charset(charset(), coercibility, + args[i]->charset(), args[i]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + break; + } } } @@ -909,6 +913,7 @@ String *Item_func_min_max::val_str(String *str) } } } + res->set_charset(charset()); return res; } case ROW_RESULT: From 92f5103df4c0baf8e7ece584c95cb2ae0280c010 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 19:02:07 +0400 Subject: [PATCH 232/267] item_cmpfunc.cc: IFNULL() now honors collations sql/item_cmpfunc.cc: IFNULL() now honors collations --- sql/item_cmpfunc.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index e63f0a836de..4d2aaf5a0f2 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -650,6 +650,9 @@ Item_func_ifnull::fix_length_and_dec() args[1]->result_type())) != REAL_RESULT) decimals= 0; + if (set_charset(args[0]->charset(),args[0]->coercibility, + args[1]->charset(),args[1]->coercibility)) + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); } @@ -690,11 +693,13 @@ Item_func_ifnull::val_str(String *str) if (!args[0]->null_value) { null_value=0; + res->set_charset(charset()); return res; } res=args[1]->val_str(str); if ((null_value=args[1]->null_value)) return 0; + res->set_charset(charset()); return res; } From 8b71664441b8a152331322307ef961a1b98b9d94 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 21:42:51 +0500 Subject: [PATCH 233/267] crash-me.sh: add foreign key value update test sql-bench/crash-me.sh: add foreign key value update test --- sql-bench/crash-me.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh index 82c8a3a90e4..79090e3e6db 100644 --- a/sql-bench/crash-me.sh +++ b/sql-bench/crash-me.sh @@ -2178,6 +2178,20 @@ report("views","views", save_config_data('foreign_key',$result,"foreign keys"); } +if ($limits{'foreign_key'} eq 'yes') +{ + report("allows to update of foreign key values",'foreign_update', + "create table crash_me1 (a int not null primary key)", + "create table crash_me2 (a int not null," . + " foreign key (a) references crash_me1 (a))", + "insert into crash_me1 values (1)", + "insert into crash_me2 values (1)", + "update crash_me1 set a = 2", ## <- must fail + "drop table crash_me2 $drop_attr", + "drop table crash_me1 $drop_attr" + ); +} + report("Create SCHEMA","create_schema", "create schema crash_schema create table crash_q (a int) ". "create table crash_q2(b int)", From e4ae47ff36894c6c776a26b16141cec5eddb34b0 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 18:53:55 +0200 Subject: [PATCH 234/267] Fixes for fill_help_tables.sql innobase/ha/ha0ha.c: Removed compiler warnings mysql-test/t/innodb.test: Another fix for cardinality scripts/Makefile.am: Install fill_help_tables.sql in prefix/share/mysql Don't install make_binary_distribution scripts/fill_help_tables.sh: use INSERT IGNORE to avoid errors scripts/make_binary_distribution.sh: Install and use fill_help_tables.sql scripts/mysql_install_db.sh: Search for and use fill_help_tables.sql sql/mysqld.cc: Don't write shutdown message when called from mysql_install_db support-files/Makefile.am: Don't install binary-configure support-files/binary-configure.sh: Don't use config files --- innobase/ha/ha0ha.c | 6 +-- mysql-test/t/innodb.test | 2 +- scripts/Makefile.am | 19 ++++--- scripts/fill_help_tables.sh | 9 ++-- scripts/make_binary_distribution.sh | 5 +- scripts/mysql_install_db.sh | 77 +++++++++++++++++++++-------- sql/mysqld.cc | 2 +- support-files/Makefile.am | 6 +-- support-files/binary-configure.sh | 4 +- 9 files changed, 86 insertions(+), 44 deletions(-) diff --git a/innobase/ha/ha0ha.c b/innobase/ha/ha0ha.c index 4489b25ec2b..b847798586d 100644 --- a/innobase/ha/ha0ha.c +++ b/innobase/ha/ha0ha.c @@ -294,10 +294,10 @@ ha_print_info( { hash_cell_t* cell; /* ha_node_t* node; */ - ulint nodes = 0; +/* ulint nodes = 0; */ ulint cells = 0; - ulint len = 0; - ulint max_len = 0; +/* ulint len = 0; */ +/* ulint max_len = 0; */ ulint n_bufs; ulint i; diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 0a10df52412..4d1a620d67f 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -54,7 +54,7 @@ explain select level,id,parent_id from t1 where level=1; select level,id from t1 where level=1; select level,id,parent_id from t1 where level=1; optimize table t1; ---replace_result 87 # 48 # 43 # 24 # 6 # 3 # +--replace_result 87 # 50 # 48 # 43 # 25 # 24 # 6 # 3 # show keys from t1; drop table t1; diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 3b4d19b7eed..88f561e0e6d 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -58,10 +58,9 @@ EXTRA_SCRIPTS = make_binary_distribution.sh \ EXTRA_DIST = $(EXTRA_SCRIPTS) \ mysqlaccess.conf \ - mysqlbug \ - fill_help_tables.sql + mysqlbug -pkgdata_DATA = make_binary_distribution +pkgdata_DATA = fill_help_tables.sql # mysqlbug should be distributed built so that people can report build # failures with it. @@ -81,8 +80,8 @@ CLEANFILES = @server_scripts@ \ mysqlhotcopy \ mysqldumpslow \ mysqld_multi \ - fill_help_tables \ - fill_help_tables.sql + fill_help_tables \ + fill_help_tables.sql SUPERCLEANFILES = mysqlbug @@ -103,6 +102,7 @@ SUFFIXES = .sh -e 's!@''libexecdir''@!$(libexecdir)!g' \ -e 's!@''pkglibdir''@!$(pkglibdir)!g' \ -e 's!@''pkgincludedir''@!$(pkgincludedir)!g' \ + -e 's!@''pkgdatadir''@!$(pkgdatadir)!g' \ -e 's!@''CC''@!@CC@!'\ -e 's!@''CXX''@!@CXX@!'\ -e 's!@''GXX''@!@GXX@!'\ @@ -137,7 +137,12 @@ SUFFIXES = .sh # Don't update the files from bitkeeper %::SCCS/s.% -all: fill_help_tables.sql make_win_src_distribution +all: fill_help_tables.sql make_win_src_distribution make_binary_distribution + +# The following rule is here to ensure that build will continue +# even if we don't have perl installed. In this case the help tables +# will be empty fill_help_tables.sql: fill_help_tables ../Docs/manual.texi - ./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql + -./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql + echo "" >> fill_help_tables.sql diff --git a/scripts/fill_help_tables.sh b/scripts/fill_help_tables.sh index 52dfa018d6e..e21b0ff2bb0 100644 --- a/scripts/fill_help_tables.sh +++ b/scripts/fill_help_tables.sh @@ -111,12 +111,12 @@ sub flush_all $example= prepare_example($example); if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){ - print "INSERT INTO help_topic (name,description,example) VALUES ("; + print "INSERT IGNORE INTO help_topic (name,description,example) VALUES ("; print "'$func_name',"; print "'$text',"; print "'$example'"; print ");\n"; - print "INSERT INTO help_relation (help_category_id,help_topic_id) VALUES (\@cur_category,LAST_INSERT_ID());\n"; + print "INSERT IGNORE INTO help_relation (help_category_id,help_topic_id) VALUES (\@cur_category,LAST_INSERT_ID());\n"; } $func_name= ""; @@ -131,11 +131,11 @@ sub new_category $category= prepare_text($category); - print "INSERT INTO help_category (name) VALUES (\'$category\');\n"; + print "INSERT IGNORE INTO help_category (name) VALUES (\'$category\');\n"; print "SET \@cur_category=LAST_INSERT_ID();\n"; } -#print "INSERT INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n"; +#print "INSERT IGNORE INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n"; #print "CREATE DATABASE mysql_help;\n"; print "USE mysql;\n"; @@ -236,4 +236,3 @@ print "DELETE help_category "; print "FROM help_category "; print "LEFT JOIN help_relation ON help_category.help_category_id=help_relation.help_category_id "; print "WHERE help_relation.help_category_id is null;" - diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 2fff531c4c8..5ed76cefdb4 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -160,6 +160,7 @@ if [ $BASE_SYSTEM != "netware" ] ; then fi $CP support-files/* $BASE/support-files +$CP scripts/fill_help_tables.sql $BASE/support-files if [ $BASE_SYSTEM = "netware" ] ; then rm -f $BASE/support-files/magic \ @@ -183,14 +184,14 @@ do done $CP mysql-test/include/*.inc $BASE/mysql-test/include -$CP mysql-test/std_data/*.dat mysql-test/std_data/*.001 $BASE/mysql-test/std_data +$CP mysql-test/std_data/*.dat mysql-test/std_data/*.*001 $BASE/mysql-test/std_data $CP mysql-test/std_data/des_key_file $BASE/mysql-test/std_data $CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t $CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r if [ $BASE_SYSTEM != "netware" ] ; then $CP scripts/* $BASE/bin - $BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ ./bin \@libexecdir\@ ./bin \@sbindir\@ ./bin \@prefix\@ . \@HOSTNAME\@ @HOSTNAME@ < $SOURCE/scripts/mysql_install_db.sh > $BASE/scripts/mysql_install_db + $BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ ./bin \@libexecdir\@ ./bin \@sbindir\@ ./bin \@prefix\@ . \@HOSTNAME\@ @HOSTNAME@ \@pkgdatadir\@ ./support-files < $SOURCE/scripts/mysql_install_db.sh > $BASE/scripts/mysql_install_db $BASE/bin/replace \@prefix\@ /usr/local/mysql \@bindir\@ ./bin \@MYSQLD_USER\@ root \@localstatedir\@ /usr/local/mysql/data \@HOSTNAME\@ @HOSTNAME@ < $SOURCE/support-files/mysql.server.sh > $BASE/support-files/mysql.server $BASE/bin/replace /my/gnu/bin/hostname /bin/hostname -- $BASE/bin/mysqld_safe mv $BASE/support-files/binary-configure $BASE/configure diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 7249a095195..1a969895f7f 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2002 MySQL AB +# Copyright (C) 2002-2003 MySQL AB # For a more info consult the file COPYRIGHT distributed with this file. # This scripts creates the privilege tables db, host, user, tables_priv, @@ -43,6 +43,7 @@ parse_arguments() { --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; --ldata=*|--datadir=*) ldata=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; + --verbose) verbose=1 ;; *) if test -n "$pick_args" then @@ -76,6 +77,8 @@ execdir= bindir= basedir= force=0 +verbose=0 +fill_help_tables="" parse_arguments `$print_defaults $defaults mysqld mysql_install_db` parse_arguments PICK-ARGS-FROM-ARGV "$@" @@ -85,17 +88,37 @@ then basedir=@prefix@ bindir=@bindir@ execdir=@libexecdir@ + pkgdatadir=@pkgdatadir@ else bindir="$basedir/bin" -if test -x "$basedir/libexec/mysqld" -then - execdir="$basedir/libexec" -elif test -x "@libexecdir@/mysqld" -then - execdir="@libexecdir@" -else - execdir="$basedir/bin" + if test -x "$basedir/libexec/mysqld" + then + execdir="$basedir/libexec" + elif test -x "@libexecdir@/mysqld" + then + execdir="@libexecdir@" + else + execdir="$basedir/bin" + fi + + # find fill_help_tables.sh + for i in $basedir/support-files $basedir/share $basedir/share/mysql $basedir/scripts @pkgdatadir@ + do + if test -f $i/fill_help_tables.sql + then + pkgdatadir=$i + fi + done fi + +if test -f $pkgdatadir/fill_help_tables.sql +then + fill_help_tables=$pkgdatadir/fill_help_tables.sql +else + if test $verbose -eq 1 + then + echo "Could not find help file 'fill_help_tables.sql'". + fi fi mdata=$ldata/mysql @@ -160,8 +183,9 @@ c_t="" c_c="" # Check for old tables if test ! -f $mdata/db.frm then - echo "Preparing db table" - + if test $verbose -eq 1 ; then + echo "Preparing db table" + fi # mysqld --bootstrap wants one command/line c_d="$c_d CREATE TABLE db (" c_d="$c_d Host char(60) binary DEFAULT '' NOT NULL," @@ -190,7 +214,9 @@ fi if test ! -f $mdata/host.frm then - echo "Preparing host table" + if test $verbose -eq 1 ; then + echo "Preparing host table" + fi c_h="$c_h CREATE TABLE host (" c_h="$c_h Host char(60) binary DEFAULT '' NOT NULL," @@ -214,7 +240,9 @@ fi if test ! -f $mdata/user.frm then - echo "Preparing user table" + if test $verbose -eq 1 ; then + echo "Preparing user table" + fi c_u="$c_u CREATE TABLE user (" c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL," @@ -256,7 +284,8 @@ then REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); - INSERT INTO user (host,user) values ('localhost','');" + INSERT INTO user (host,user) values ('localhost',''); +" if test "$windows" -eq 0 then @@ -270,7 +299,9 @@ fi if test ! -f $mdata/func.frm then - echo "Preparing func table" + if test $verbose -eq 1 ; then + echo "Preparing func table" + fi c_f="$c_f CREATE TABLE func (" c_f="$c_f name char(64) binary DEFAULT '' NOT NULL," @@ -284,7 +315,9 @@ fi if test ! -f $mdata/tables_priv.frm then - echo "Preparing tables_priv table" + if test $verbose -eq 1 ; then + echo "Preparing tables_priv table" + fi c_t="$c_t CREATE TABLE tables_priv (" c_t="$c_t Host char(60) binary DEFAULT '' NOT NULL," @@ -303,7 +336,9 @@ fi if test ! -f $mdata/columns_priv.frm then - echo "Preparing columns_priv table" + if test $verbose -eq 1 ; then + echo "Preparing columns_priv table" + fi c_c="$c_c CREATE TABLE columns_priv (" c_c="$c_c Host char(60) binary DEFAULT '' NOT NULL," @@ -318,7 +353,7 @@ then c_c="$c_c comment='Column privileges';" fi -echo "Installing all prepared tables" +echo "Installing privilege tables" if ( cat << END_OF_DATA use mysql; @@ -337,7 +372,10 @@ $i_f $c_t $c_c END_OF_DATA - cat fill_help_tables.sql + if test -n "$fill_help_tables" + then + cat $fill_help_tables + fi ) | eval "$execdir/mysqld $defaults --bootstrap --skip-grant-tables \ --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args" then @@ -377,7 +415,6 @@ then echo "The latest information about MySQL is available on the web at" echo "http://www.mysql.com" echo "Support MySQL by buying support/licenses at https://order.mysql.com" - echo exit 0 else echo "Installation of grant tables failed!" diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2298ae7b9ea..bb2214f3c14 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -894,7 +894,7 @@ extern "C" void unireg_abort(int exit_code) DBUG_ENTER("unireg_abort"); if (exit_code) sql_print_error("Aborting\n"); - clean_up(1); /* purecov: inspected */ + clean_up(exit_code || !opt_bootstrap); /* purecov: inspected */ DBUG_PRINT("quit",("done with cleanup in unireg_abort")); my_thread_end(); clean_up_mutexes(); diff --git a/support-files/Makefile.am b/support-files/Makefile.am index 4aadd98bd1b..ec88972c821 100644 --- a/support-files/Makefile.am +++ b/support-files/Makefile.am @@ -34,8 +34,7 @@ pkgdata_DATA = my-small.cnf \ my-large.cnf \ my-huge.cnf \ mysql-log-rotate \ - mysql-@VERSION@.spec \ - binary-configure + mysql-@VERSION@.spec pkgdata_SCRIPTS = mysql.server @@ -48,7 +47,6 @@ CLEANFILES = my-small.cnf \ mysql-log-rotate \ mysql.server \ binary-configure - mysql-@VERSION@.spec: mysql.spec rm -f $@ @@ -98,5 +96,7 @@ SUFFIXES = .sh $< > $@-t @MV@ $@-t $@ +all: binary-configure + # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/support-files/binary-configure.sh b/support-files/binary-configure.sh index 107f468bffc..884a8363e22 100644 --- a/support-files/binary-configure.sh +++ b/support-files/binary-configure.sh @@ -14,11 +14,11 @@ echo "and start the MySQL server for you. If you run into any trouble, please" echo "consult the MySQL manual, that you can find in the Docs directory." echo "" -./scripts/mysql_install_db +./scripts/mysql_install_db --no-defaults if [ $? = 0 ] then echo "Starting the mysqld server. You can test that it is up and running" echo "with the command:" echo "./bin/mysqladmin version" - ./bin/mysqld_safe & + ./bin/mysqld_safe --no-defaults & fi From 696962c4e6d0582c8de4cc3e6943adf372c925fa Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 21:08:56 +0100 Subject: [PATCH 235/267] Fix for bug #174 (charset 0 caused segfault) --- sql/log_event.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 68b897d30ae..5e3340b4cf7 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -328,7 +328,7 @@ int Log_event::exec_event(struct st_relay_log_info* rli) ****************************************************************************/ void Log_event::pack_info(Protocol *protocol) { - protocol->store("",0); + protocol->store("", &my_charset_bin); } From 0ea383e048f6cb07a01e06d63f30baef0c2af3ff Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 15:43:38 -0500 Subject: [PATCH 236/267] Changes from Novell for various NetWare-only files, post-4.0.12 include/config-netware.h: Define USE_OLD_FUNCTIONS, remove NKS header includes netware/BUILD/mwenv: Changes to compiler flags netware/BUILD/nwbootstrap: bk changes syntax netware/Makefile.am: Remove isamchk.def, mysqld.xdc, add comp_err.def to netware_build_files netware/isamchk.def: Add XDCDATA netware/isamlog.def: Add XDCDATA netware/libmysql.def: Add XDCDATA netware/my_manage.c: Changes in argument handling, use procve netware/my_manage.h: Changes to argument handling, spawn netware/my_print_defaults.def: Add XDCDATA netware/myisamchk.def: Add XDCDATA netware/myisamlog.def: Add XDCDATA netware/myisampack.def: Add XDCDATA netware/mysql.def: Add XDCDATA netware/mysql_install.def: Add XDCDATA netware/mysql_install_db.c: Argument handling changes, etc netware/mysql_install_db.def: Add XDCDATA netware/mysql_test_run.c: Argument handling, spawn changes, etc netware/mysql_test_run.def: Add XDCDATA netware/mysqladmin.def: Add XDCDATA netware/mysqlbinlog.def: Add XDCDATA netware/mysqlcheck.def: Add XDCDATA netware/mysqld.def: Add XDCDATA netware/mysqld_safe.def: Add XDCDATA netware/mysqldump.def: Add XDCDATA netware/mysqlimport.def: Add XDCDATA netware/mysqlshow.def: Add XDCDATA netware/mysqltest.def: Add XDCDATA netware/pack_isam.def: Add XDCDATA netware/perror.def: Add XDCDATA netware/replace.def: Add XDCDATA netware/resolveip.def: Add XDCDATA --- include/config-netware.h | 7 +- netware/BUILD/create-patch | 56 +++++++++ netware/BUILD/mwenv | 10 +- netware/BUILD/nwbootstrap | 2 +- netware/Makefile.am | 7 +- netware/comp_err.def | 10 ++ netware/isamchk.def | 1 + netware/isamlog.def | 3 +- netware/libmysql.def | 1 + netware/my_manage.c | 219 +++++++++++++++++----------------- netware/my_manage.h | 24 ++-- netware/my_print_defaults.def | 1 + netware/myisamchk.def | 1 + netware/myisamlog.def | 1 + netware/myisampack.def | 1 + netware/mysql.def | 1 + netware/mysql_install.def | 1 + netware/mysql_install_db.c | 57 +++++---- netware/mysql_install_db.def | 1 + netware/mysql_test_run.c | 206 ++++++++++++++++---------------- netware/mysql_test_run.def | 1 + netware/mysqladmin.def | 1 + netware/mysqlbinlog.def | 1 + netware/mysqlcheck.def | 1 + netware/mysqld.def | 2 +- netware/mysqld_safe.def | 2 + netware/mysqldump.def | 1 + netware/mysqlimport.def | 1 + netware/mysqlshow.def | 1 + netware/mysqltest.def | 1 + netware/pack_isam.def | 3 +- netware/perror.def | 1 + netware/replace.def | 1 + netware/resolveip.def | 1 + 34 files changed, 364 insertions(+), 264 deletions(-) create mode 100644 netware/BUILD/create-patch create mode 100644 netware/comp_err.def diff --git a/include/config-netware.h b/include/config-netware.h index 57bf500da47..dab365a7127 100644 --- a/include/config-netware.h +++ b/include/config-netware.h @@ -22,17 +22,13 @@ #include #include #include -#include -#include #include #include #include #include -#include #include #include #include -#include #include #include @@ -48,6 +44,9 @@ #define HAVE_PTHREAD_YIELD_ZERO_ARG 1 #define HAVE_BROKEN_REALPATH 1 +/* include the old function apis */ +#define USE_OLD_FUNCTIONS 1 + /* no case sensitivity */ #define FN_NO_CASE_SENCE 1 diff --git a/netware/BUILD/create-patch b/netware/BUILD/create-patch new file mode 100644 index 00000000000..711eabf2d89 --- /dev/null +++ b/netware/BUILD/create-patch @@ -0,0 +1,56 @@ +#! /bin/sh + +# debug +#set -x + +# stop on errors +set -e + +# repository direcotry +repo_dir=`pwd` + +# show usage +show_usage() +{ + cat << EOF + +usage: create-patch + +Creates a patch file between the latest revision of the current tree +and the latest revision not create by \$BK_USER. + +EOF + exit 0; +} + +if test $1 || test -z $BK_USER +then + show_usage +fi + +echo "starting patch..." + +echo "user: $BK_USER" + +# check for bk and repo_dir +bk help > /dev/null +repo_dir=`bk root $repo_dir` +cd $repo_dir + +# determine version +version=`grep -e "AM_INIT_AUTOMAKE(mysql, .*)" < configure.in | sed -e "s/AM_INIT_AUTOMAKE(mysql, \(.*\))/\1/"` +echo "version: $version" + +# user revision +user_rev=`bk changes -e -n -d':REV:' | head -1` +echo "latest revision: $user_rev" + +# tree revision +tree_rev=`bk changes -e -n -d':REV:' -U$BK_USER | head -1` +echo "latest non-$BK_USER revision: $tree_rev" + +# create patch +patch="$repo_dir/../$BK_USER-$version.patch" +echo "creating \"$patch\"..." +bk export -tpatch -r$tree_rev..$user_rev > $patch + diff --git a/netware/BUILD/mwenv b/netware/BUILD/mwenv index d2b64409c88..26794c3f77f 100755 --- a/netware/BUILD/mwenv +++ b/netware/BUILD/mwenv @@ -1,9 +1,9 @@ #! /bin/sh -# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be changed before compiling +# WINE_BUILD_DIR, BUILD_DIR, and VERSION must be correct before compiling # This values are normally changed by the nwbootstrap script -# the default for WINE_BUILD_DIR is "F:/mydev" +# the default is "F:/mydev" export MYDEV="WINE_BUILD_DIR" export MWCNWx86Includes="$MYDEV/libc/include" @@ -12,16 +12,16 @@ export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib" export WINEPATH="$MYDEV/mw/bin" -# the default for BUILD_DIR is "$HOME/mydev" +# the default added path is "$HOME/mydev/mysql-x.x-x/netware/BUILD" export PATH="$PATH:BUILD_DIR/mysql-VERSION/netware/BUILD" export AR='mwldnlm' export AR_FLAGS='-type library -o' export AS='mwasmnlm' export CC='mwccnlm -gccincludes' -export CFLAGS='-dialect c -proc 686 -bool on -relax_pointers -DUSE_OLD_FUNCTIONS' +export CFLAGS='-dialect c -proc 686 -relax_pointers' export CXX='mwccnlm -gccincludes' -export CXXFLAGS='-dialect c++ -proc 686 -bool on -relax_pointers' +export CXXFLAGS='-dialect c++ -proc 686 -bool on -wchar_t on -relax_pointers -D_WCHAR_T' export LD='mwldnlm' export LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -flags pseudopreemption' export RANLIB=: diff --git a/netware/BUILD/nwbootstrap b/netware/BUILD/nwbootstrap index a8ed956811e..002e19c8e49 100755 --- a/netware/BUILD/nwbootstrap +++ b/netware/BUILD/nwbootstrap @@ -129,7 +129,7 @@ else fi echo "creating ChangeLog..." -bk changes -v -r$rev > $target_dir/ChangeLog +bk changes -v -r$rev..$revision > $target_dir/ChangeLog # add the latest manual if test -d $doc_dir diff --git a/netware/Makefile.am b/netware/Makefile.am index 5933340febb..801d144b968 100644 --- a/netware/Makefile.am +++ b/netware/Makefile.am @@ -28,12 +28,13 @@ netware_build_files = client/mysql.def client/mysqladmin.def \ client/mysqlshow.def client/mysqltest.def \ extra/mysql_install.def extra/my_print_defaults.def \ extra/perror.def extra/replace.def \ - extra/resolveip.def isam/isamchk.def \ + extra/resolveip.def extra/comp_err.def \ + isam/isamchk.def \ isam/isamlog.def isam/pack_isam.def \ libmysqld/libmysqld.def myisam/myisamchk.def \ myisam/myisamlog.def myisam/myisampack.def \ - sql/mysqld.def sql/mysqld.xdc - + sql/mysqld.def + link_sources: set -x; \ for f in $(netware_build_files); do \ diff --git a/netware/comp_err.def b/netware/comp_err.def new file mode 100644 index 00000000000..d694c07174a --- /dev/null +++ b/netware/comp_err.def @@ -0,0 +1,10 @@ +#------------------------------------------------------------------------------ +# MySQL Error File Compiler +#------------------------------------------------------------------------------ +MODULE libc.nlm +COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." +DESCRIPTION "MySQL Error File Compiler" +VERSION 4, 0 +XDCDATA ../netware/mysql.xdc +#DEBUG + diff --git a/netware/isamchk.def b/netware/isamchk.def index a724340066a..8d756466609 100644 --- a/netware/isamchk.def +++ b/netware/isamchk.def @@ -6,5 +6,6 @@ COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved DESCRIPTION "MySQL ISAM Table Check Tool" VERSION 4, 0 STACKSIZE 65536 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/isamlog.def b/netware/isamlog.def index 3f74d17f284..bb8312066ef 100644 --- a/netware/isamlog.def +++ b/netware/isamlog.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL ISAM Table Log Tool" VERSION 4, 0 -DEBUG +XDCDATA ../netware/mysql.xdc +#DEBUG diff --git a/netware/libmysql.def b/netware/libmysql.def index f2ab1f0f21a..7804c4468a5 100644 --- a/netware/libmysql.def +++ b/netware/libmysql.def @@ -7,4 +7,5 @@ COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved DESCRIPTION "MySQL Client Library" VERSION 4, 0 AUTOUNLOAD +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/my_manage.c b/netware/my_manage.c index 25147b16674..490438b0485 100644 --- a/netware/my_manage.c +++ b/netware/my_manage.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include @@ -54,18 +54,16 @@ Init an argument list. ******************************************************************************/ -void _init_args(arg_list *al) +void init_args(arg_list_t *al) { - int i; + ASSERT(al != NULL); - *al = malloc(sizeof(arg_list_t)); + al->argc = 0; + al->size = ARG_BUF; + al->argv = malloc(al->size * sizeof(char *)); + ASSERT(al->argv != NULL); - (*al)->argc = 0; - - for(i = 0; i < ARG_MAX; i++) - { - (*al)->argv[i] = NULL; - } + return; } /****************************************************************************** @@ -75,49 +73,66 @@ void _init_args(arg_list *al) Add an argument to a list. ******************************************************************************/ -void add_arg(arg_list al, char *format, ...) +void add_arg(arg_list_t *al, char *format, ...) { va_list ap; + char temp[PATH_MAX]; ASSERT(al != NULL); - ASSERT(al->argc < ARG_MAX); - al->argv[al->argc] = malloc(PATH_MAX); + // increase size + if (al->argc >= al->size) + { + al->size += ARG_BUF; + al->argv = realloc(al->argv, al->size * sizeof(char *)); + ASSERT(al->argv != NULL); + } - ASSERT(al->argv[al->argc] != NULL); + if (format) + { + va_start(ap, format); + vsprintf(temp, format, ap); + va_end(ap); - va_start(ap, format); + al->argv[al->argc] = malloc(strlen(temp)+1); + ASSERT(al->argv[al->argc] != NULL); + strcpy(al->argv[al->argc], temp); - vsprintf(al->argv[al->argc], format, ap); + ++(al->argc); + } + else + { + al->argv[al->argc] = NULL; + } - va_end(ap); - - ++(al->argc); + return; } /****************************************************************************** - _free_args() + free_args() Free an argument list. ******************************************************************************/ -void _free_args(arg_list *al) +void free_args(arg_list_t *al) { int i; ASSERT(al != NULL); - ASSERT(*al != NULL); - for(i = 0; i < (*al)->argc; i++) + for(i = 0; i < al->argc; i++) { - ASSERT((*al)->argv[i] != NULL); - free((*al)->argv[i]); - (*al)->argv[i] = NULL; + ASSERT(al->argv[i] != NULL); + free(al->argv[i]); + al->argv[i] = NULL; } - free(*al); - *al = NULL; + free(al->argv); + al->argc = 0; + al->argv = NULL; + + return; } /****************************************************************************** @@ -167,7 +182,7 @@ int sleep_until_file_exists(char *pid_file) ******************************************************************************/ int wait_for_server_start(char *bin_dir, char *user, char *password, int port) { - arg_list al; + arg_list_t al; int err, i; char mysqladmin_file[PATH_MAX]; char trash[PATH_MAX]; @@ -177,27 +192,27 @@ int wait_for_server_start(char *bin_dir, char *user, char *password, int port) snprintf(trash, PATH_MAX, "/tmp/trash.out"); // args - init_args(al); - add_arg(al, "%s", mysqladmin_file); - add_arg(al, "--no-defaults"); - add_arg(al, "--port=%u", port); - add_arg(al, "--user=%s", user); - add_arg(al, "--password=%s", password); - add_arg(al, "--silent"); - add_arg(al, "-O"); - add_arg(al, "connect_timeout=10"); - add_arg(al, "-w"); - add_arg(al, "--host=localhost"); - add_arg(al, "ping"); + init_args(&al); + add_arg(&al, "%s", mysqladmin_file); + add_arg(&al, "--no-defaults"); + add_arg(&al, "--port=%u", port); + add_arg(&al, "--user=%s", user); + add_arg(&al, "--password=%s", password); + add_arg(&al, "--silent"); + add_arg(&al, "-O"); + add_arg(&al, "connect_timeout=10"); + add_arg(&al, "-w"); + add_arg(&al, "--host=localhost"); + add_arg(&al, "ping"); // NetWare does not support the connect timeout in the TCP/IP stack // -- we will try the ping multiple times for(i = 0; (i < TRY_MAX) - && (err = spawn(mysqladmin_file, al, TRUE, NULL, + && (err = spawn(mysqladmin_file, &al, TRUE, NULL, trash, NULL)); i++) sleep(1); // free args - free_args(al); + free_args(&al); return err; } @@ -206,71 +221,53 @@ int wait_for_server_start(char *bin_dir, char *user, char *password, int port) spawn() - Spawn the given file with the given arguments. + Spawn the given path with the given arguments. ******************************************************************************/ -int spawn(char *file, arg_list al, int join, char *input, +int spawn(char *path, arg_list_t *al, int join, char *input, char *output, char *error) { - NXNameSpec_t name; - NXExecEnvSpec_t env; - NXVmId_t vm, ignore; - int result; - - // name - name.ssType = NX_OBJ_FILE; - name.ssPathCtx = 0; - name.ssPath = file; - - // env - env.esArgc = al->argc; - env.esArgv = al->argv; - env.esEnv = NULL; - - env.esStdin.ssPathCtx = 0; - env.esStdout.ssPathCtx = 0; - env.esStderr.ssPathCtx = 0; - - if (input == NULL) - { - env.esStdin.ssType = NX_OBJ_DEFAULT; - env.esStdin.ssPath = NULL; - } - else - { - env.esStdin.ssType = NX_OBJ_FILE; - env.esStdin.ssPath = input; - } - - if (output == NULL) + pid_t pid; + int result = 0; + wiring_t wiring = { FD_UNUSED, FD_UNUSED, FD_UNUSED }; + unsigned long flags = PROC_CURRENT_SPACE | PROC_INHERIT_CWD; + + // open wiring + if (input) + wiring.infd = open(input, O_RDONLY); + + if (output) + wiring.outfd = open(output, O_WRONLY | O_CREAT | O_TRUNC); + + if (error) + wiring.errfd = open(error, O_WRONLY | O_CREAT | O_TRUNC); + + // procve requires a NULL + add_arg(al, NULL); + + // go + pid = procve(path, flags, NULL, &wiring, NULL, NULL, 0, + NULL, (const char **)al->argv); + + if (pid == -1) { - env.esStdout.ssType = NX_OBJ_DEFAULT; - env.esStdout.ssPath = NULL; + result = -1; } - else + else if (join) { - env.esStdout.ssType = NX_OBJ_FILE; - env.esStdout.ssPath = output; + waitpid(pid, &result, 0); } - if (error == NULL) - { - env.esStderr.ssType = NX_OBJ_DEFAULT; - env.esStderr.ssPath = NULL; - } - else - { - env.esStderr.ssType = NX_OBJ_FILE; - env.esStderr.ssPath = error; - } - - result = NXVmSpawn(&name, &env, NX_VM_SAME_ADDRSPACE | NX_VM_INHERIT_ENV, &vm); - - if (!result && join) - { - NXVmJoin(vm, &ignore, &result); - } - + // close wiring + if (wiring.infd != -1) + close(wiring.infd); + + if (wiring.outfd != -1) + close(wiring.outfd); + + if (wiring.errfd != -1) + close(wiring.errfd); + return result; } @@ -284,7 +281,7 @@ int spawn(char *file, arg_list al, int join, char *input, int stop_server(char *bin_dir, char *user, char *password, int port, char *pid_file) { - arg_list al; + arg_list_t al; int err, i, argc = 0; char mysqladmin_file[PATH_MAX]; char trash[PATH_MAX]; @@ -294,18 +291,18 @@ int stop_server(char *bin_dir, char *user, char *password, int port, snprintf(trash, PATH_MAX, "/tmp/trash.out"); // args - init_args(al); - add_arg(al, "%s", mysqladmin_file); - add_arg(al, "--no-defaults"); - add_arg(al, "--port=%u", port); - add_arg(al, "--user=%s", user); - add_arg(al, "--password=%s", password); - add_arg(al, "-O"); - add_arg(al, "shutdown_timeout=20"); - add_arg(al, "shutdown"); + init_args(&al); + add_arg(&al, "%s", mysqladmin_file); + add_arg(&al, "--no-defaults"); + add_arg(&al, "--port=%u", port); + add_arg(&al, "--user=%s", user); + add_arg(&al, "--password=%s", password); + add_arg(&al, "-O"); + add_arg(&al, "shutdown_timeout=20"); + add_arg(&al, "shutdown"); // spawn - if ((err = spawn(mysqladmin_file, al, TRUE, NULL, + if ((err = spawn(mysqladmin_file, &al, TRUE, NULL, trash, NULL)) == 0) { sleep_until_file_deleted(pid_file); @@ -324,7 +321,7 @@ int stop_server(char *bin_dir, char *user, char *password, int port, } // free args - free_args(al); + free_args(&al); return err; } diff --git a/netware/my_manage.h b/netware/my_manage.h index 92ed66ea865..b19662c4ee9 100644 --- a/netware/my_manage.h +++ b/netware/my_manage.h @@ -34,12 +34,9 @@ ******************************************************************************/ -#define ARG_MAX 50 +#define ARG_BUF 10 #define TRY_MAX 5 -#define init_args(al) _init_args(&al); -#define free_args(al) _free_args(&al); - /****************************************************************************** structures @@ -50,9 +47,11 @@ typedef struct { int argc; - char *argv[ARG_MAX]; + char **argv; -} arg_list_t, * arg_list; + size_t size; + +} arg_list_t; /****************************************************************************** @@ -66,18 +65,23 @@ typedef struct ******************************************************************************/ -void _init_args(arg_list *); -void add_arg(arg_list, char *, ...); -void _free_args(arg_list *); +void init_args(arg_list_t *); +void add_arg(arg_list_t *, char *, ...); +void free_args(arg_list_t *); + int sleep_until_file_exists(char *); int sleep_until_file_deleted(char *); int wait_for_server_start(char *, char *, char *, int); -int spawn(char *, arg_list, int, char *, char *, char *); + +int spawn(char *, arg_list_t *, int, char *, char *, char *); + int stop_server(char *, char *, char *, int, char *); pid_t get_server_pid(char *); void kill_server(pid_t pid); + void del_tree(char *); int removef(char *, ...); + void get_basedir(char *, char *); #endif /* _MY_MANAGE */ diff --git a/netware/my_print_defaults.def b/netware/my_print_defaults.def index 7f474c50469..49f167341ae 100644 --- a/netware/my_print_defaults.def +++ b/netware/my_print_defaults.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Print Defaults Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/myisamchk.def b/netware/myisamchk.def index 5a57866c1ee..2222a1317e1 100644 --- a/netware/myisamchk.def +++ b/netware/myisamchk.def @@ -6,5 +6,6 @@ COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved DESCRIPTION "MySQL MyISAM Table Check Tool" VERSION 4, 0 STACKSIZE 65536 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/myisamlog.def b/netware/myisamlog.def index c3bbee38d16..bfa673e12be 100644 --- a/netware/myisamlog.def +++ b/netware/myisamlog.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL MyISAM Table Log Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/myisampack.def b/netware/myisampack.def index ae025e5f84d..72403d2591e 100644 --- a/netware/myisampack.def +++ b/netware/myisampack.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL MyISAM Table Pack Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysql.def b/netware/mysql.def index a5e3ae21369..9b4424ed4fb 100644 --- a/netware/mysql.def +++ b/netware/mysql.def @@ -7,5 +7,6 @@ COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved DESCRIPTION "MySQL Monitor" VERSION 4, 0 MULTIPLE +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysql_install.def b/netware/mysql_install.def index 2c2819ec6af..87fc76919f9 100644 --- a/netware/mysql_install.def +++ b/netware/mysql_install.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Install Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysql_install_db.c b/netware/mysql_install_db.c index 128f07dc2bc..b4060bfdb7e 100644 --- a/netware/mysql_install_db.c +++ b/netware/mysql_install_db.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "my_config.h" #include "my_manage.h" @@ -51,7 +52,7 @@ char default_option[PATH_MAX]; void start_defaults(int, char*[]); void finish_defaults(); -void read_defaults(arg_list); +void read_defaults(arg_list_t *); void parse_args(int, char*[]); void get_options(int, char*[]); void create_paths(); @@ -151,9 +152,9 @@ void finish_defaults() Read the defaults. ******************************************************************************/ -void read_defaults(arg_list pal) +void read_defaults(arg_list_t *pal) { - arg_list al; + arg_list_t al; char defaults_file[PATH_MAX]; char mydefaults[PATH_MAX]; char line[PATH_MAX]; @@ -167,15 +168,15 @@ void read_defaults(arg_list pal) snprintf(mydefaults, PATH_MAX, "%s/bin/my_print_defaults", basedir); // args - init_args(al); - add_arg(al, mydefaults); - if (default_option[0]) add_arg(al, default_option); - add_arg(al, "mysqld"); - add_arg(al, "mysql_install_db"); + init_args(&al); + add_arg(&al, mydefaults); + if (default_option[0]) add_arg(&al, default_option); + add_arg(&al, "mysqld"); + add_arg(&al, "mysql_install_db"); - spawn(mydefaults, al, TRUE, NULL, defaults_file, NULL); + spawn(mydefaults, &al, TRUE, NULL, defaults_file, NULL); - free_args(al); + free_args(&al); // gather defaults if((fp = fopen(defaults_file, "r")) != NULL) @@ -267,17 +268,17 @@ void parse_args(int argc, char *argv[]) ******************************************************************************/ void get_options(int argc, char *argv[]) { - arg_list al; + arg_list_t al; // start defaults start_defaults(argc, argv); // default file arguments - init_args(al); - add_arg(al, "dummy"); - read_defaults(al); - parse_args(al->argc, al->argv); - free_args(al); + init_args(&al); + add_arg(&al, "ignore"); + read_defaults(&al); + parse_args(al.argc, al.argv); + free_args(&al); // command-line arguments parse_args(argc, argv); @@ -323,7 +324,7 @@ void create_paths() ******************************************************************************/ int mysql_install_db(int argc, char *argv[]) { - arg_list al; + arg_list_t al; int i, j, err; char skip; @@ -336,8 +337,8 @@ int mysql_install_db(int argc, char *argv[]) }; // args - init_args(al); - add_arg(al, "%s", mysqld); + init_args(&al); + add_arg(&al, "%s", mysqld); // parent args for(i = 1; i < argc; i++) @@ -354,19 +355,19 @@ int mysql_install_db(int argc, char *argv[]) } } - if (!skip) add_arg(al, "%s", argv[i]); + if (!skip) add_arg(&al, "%s", argv[i]); } - add_arg(al, "--bootstrap"); - add_arg(al, "--skip-grant-tables"); - add_arg(al, "--skip-innodb"); - add_arg(al, "--skip-bdb"); + add_arg(&al, "--bootstrap"); + add_arg(&al, "--skip-grant-tables"); + add_arg(&al, "--skip-innodb"); + add_arg(&al, "--skip-bdb"); // spawn mysqld - err = spawn(mysqld, al, TRUE, sql_file, out_log, err_log); + err = spawn(mysqld, &al, TRUE, sql_file, out_log, err_log); // free args - free_args(al); + free_args(&al); return err; } @@ -384,6 +385,9 @@ int main(int argc, char **argv) // check for an autoclose option if (!autoclose) setscreenmode(SCR_NO_MODE); + // header + printf("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE); + // create paths create_paths(); @@ -391,6 +395,7 @@ int main(int argc, char **argv) if (mysql_install_db(argc, argv)) { printf("ERROR - The database creation failed!\n"); + printf(" %s\n", strerror(errno)); printf("See the following log for more infomration:\n"); printf("\t%s\n\n", err_log); exit(-1); diff --git a/netware/mysql_install_db.def b/netware/mysql_install_db.def index c813e80d768..4653638b5ad 100644 --- a/netware/mysql_install_db.def +++ b/netware/mysql_install_db.def @@ -6,5 +6,6 @@ SCREENNAME "MySQL Install" COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Initial Database Installer" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysql_test_run.c b/netware/mysql_test_run.c index f19cee32e92..ff629546793 100644 --- a/netware/mysql_test_run.c +++ b/netware/mysql_test_run.c @@ -28,6 +28,7 @@ #include #include +#include "my_config.h" #include "my_manage.h" /****************************************************************************** @@ -178,7 +179,7 @@ void report_stats() ******************************************************************************/ void install_db(char *datadir) { - arg_list al; + arg_list_t al; int err, i; char input[PATH_MAX]; char output[PATH_MAX]; @@ -190,23 +191,23 @@ void install_db(char *datadir) snprintf(error, PATH_MAX, "%s/install.err", datadir); // args - init_args(al); - add_arg(al, mysqld_file); - add_arg(al, "--bootstrap"); - add_arg(al, "--skip-grant-tables"); - add_arg(al, "--basedir=%s", base_dir); - add_arg(al, "--datadir=%s", datadir); - add_arg(al, "--skip-innodb"); - add_arg(al, "--skip-bdb"); + init_args(&al); + add_arg(&al, mysqld_file); + add_arg(&al, "--bootstrap"); + add_arg(&al, "--skip-grant-tables"); + add_arg(&al, "--basedir=%s", base_dir); + add_arg(&al, "--datadir=%s", datadir); + add_arg(&al, "--skip-innodb"); + add_arg(&al, "--skip-bdb"); // spawn - if ((err = spawn(mysqld_file, al, TRUE, input, output, error)) != 0) + if ((err = spawn(mysqld_file, &al, TRUE, input, output, error)) != 0) { die("Unable to create database."); } // free args - free_args(al); + free_args(&al); } /****************************************************************************** @@ -261,7 +262,7 @@ void mysql_install_db() ******************************************************************************/ void start_master() { - arg_list al; + arg_list_t al; int err, i; char master_out[PATH_MAX]; char master_err[PATH_MAX]; @@ -297,32 +298,32 @@ void start_master() mysql_test_dir, restarts); // args - init_args(al); - add_arg(al, "%s", mysqld_file); - add_arg(al, "--no-defaults"); - add_arg(al, "--log-bin=master-bin"); - add_arg(al, "--server-id=1"); - add_arg(al, "--basedir=%s", base_dir); - add_arg(al, "--port=%u", master_port); - add_arg(al, "--local-infile"); - add_arg(al, "--core"); - add_arg(al, "--datadir=%s", master_dir); - add_arg(al, "--pid-file=%s", master_pid); - add_arg(al, "--character-sets-dir=%s", char_dir); - add_arg(al, "--tmpdir=%s", mysql_tmp_dir); - add_arg(al, "--language=%s", lang_dir); + init_args(&al); + add_arg(&al, "%s", mysqld_file); + add_arg(&al, "--no-defaults"); + add_arg(&al, "--log-bin=master-bin"); + add_arg(&al, "--server-id=1"); + add_arg(&al, "--basedir=%s", base_dir); + add_arg(&al, "--port=%u", master_port); + add_arg(&al, "--local-infile"); + add_arg(&al, "--core"); + add_arg(&al, "--datadir=%s", master_dir); + add_arg(&al, "--pid-file=%s", master_pid); + add_arg(&al, "--character-sets-dir=%s", char_dir); + add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); + add_arg(&al, "--language=%s", lang_dir); // $MASTER_40_ARGS - add_arg(al, "--rpl-recovery-rank=1"); - add_arg(al, "--init-rpl-role=master"); + add_arg(&al, "--rpl-recovery-rank=1"); + add_arg(&al, "--init-rpl-role=master"); // $SMALL_SERVER - add_arg(al, "-O"); - add_arg(al, "key_buffer_size=1M"); - add_arg(al, "-O"); - add_arg(al, "sort_buffer=256K"); - add_arg(al, "-O"); - add_arg(al, "max_heap_table_size=1M"); + add_arg(&al, "-O"); + add_arg(&al, "key_buffer_size=1M"); + add_arg(&al, "-O"); + add_arg(&al, "sort_buffer=256K"); + add_arg(&al, "-O"); + add_arg(&al, "max_heap_table_size=1M"); // $EXTRA_MASTER_OPT if (master_opt[0] != NULL) @@ -333,7 +334,7 @@ void start_master() while(p) { - add_arg(al, "%s", p); + add_arg(&al, "%s", p); p = (char *)strtok(NULL, " \t"); } @@ -343,7 +344,7 @@ void start_master() remove(master_pid); // spawn - if ((err = spawn(mysqld_file, al, FALSE, NULL, master_out, master_err)) == 0) + if ((err = spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err)) == 0) { sleep_until_file_exists(master_pid); @@ -362,7 +363,7 @@ void start_master() } // free_args - free_args(al); + free_args(&al); } /****************************************************************************** @@ -374,7 +375,7 @@ void start_master() ******************************************************************************/ void start_slave() { - arg_list al; + arg_list_t al; int err, i; char slave_out[PATH_MAX]; char slave_err[PATH_MAX]; @@ -444,34 +445,34 @@ void start_slave() mysql_test_dir, restarts); // args - init_args(al); - add_arg(al, "%s", mysqld_file); - add_arg(al, "--no-defaults"); - add_arg(al, "--log-bin=slave-bin"); - add_arg(al, "--relay_log=slave-relay-bin"); - add_arg(al, "--basedir=%s", base_dir); - add_arg(al, "--port=%u", slave_port); - add_arg(al, "--datadir=%s", slave_dir); - add_arg(al, "--pid-file=%s", slave_pid); - add_arg(al, "--character-sets-dir=%s", char_dir); - add_arg(al, "--core"); - add_arg(al, "--tmpdir=%s", mysql_tmp_dir); - add_arg(al, "--language=%s", lang_dir); + init_args(&al); + add_arg(&al, "%s", mysqld_file); + add_arg(&al, "--no-defaults"); + add_arg(&al, "--log-bin=slave-bin"); + add_arg(&al, "--relay_log=slave-relay-bin"); + add_arg(&al, "--basedir=%s", base_dir); + add_arg(&al, "--port=%u", slave_port); + add_arg(&al, "--datadir=%s", slave_dir); + add_arg(&al, "--pid-file=%s", slave_pid); + add_arg(&al, "--character-sets-dir=%s", char_dir); + add_arg(&al, "--core"); + add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); + add_arg(&al, "--language=%s", lang_dir); - add_arg(al, "--exit-info=256"); - add_arg(al, "--log-slave-updates"); - add_arg(al, "--init-rpl-role=slave"); - add_arg(al, "--skip-innodb"); - add_arg(al, "--skip-slave-start"); - add_arg(al, "--slave-load-tmpdir=../../var/tmp"); + add_arg(&al, "--exit-info=256"); + add_arg(&al, "--log-slave-updates"); + add_arg(&al, "--init-rpl-role=slave"); + add_arg(&al, "--skip-innodb"); + add_arg(&al, "--skip-slave-start"); + add_arg(&al, "--slave-load-tmpdir=../../var/tmp"); - add_arg(al, "--report-user=%s", user); - add_arg(al, "--report-host=127.0.0.1"); - add_arg(al, "--report-port=%u", slave_port); + add_arg(&al, "--report-user=%s", user); + add_arg(&al, "--report-host=127.0.0.1"); + add_arg(&al, "--report-port=%u", slave_port); - add_arg(al, "--master-retry-count=10"); - add_arg(al, "-O"); - add_arg(al, "slave_net_timeout=10"); + add_arg(&al, "--master-retry-count=10"); + add_arg(&al, "-O"); + add_arg(&al, "slave_net_timeout=10"); // slave master info if (slave_master_info[0] != NULL) @@ -482,29 +483,29 @@ void start_slave() while(p) { - add_arg(al, "%s", p); + add_arg(&al, "%s", p); p = (char *)strtok(NULL, " \t"); } } else { - add_arg(al, "--master-user=%s", user); - add_arg(al, "--master-password=%s", password); - add_arg(al, "--master-host=127.0.0.1"); - add_arg(al, "--master-port=%u", master_port); - add_arg(al, "--master-connect-retry=1"); - add_arg(al, "--server-id=2"); - add_arg(al, "--rpl-recovery-rank=2"); + add_arg(&al, "--master-user=%s", user); + add_arg(&al, "--master-password=%s", password); + add_arg(&al, "--master-host=127.0.0.1"); + add_arg(&al, "--master-port=%u", master_port); + add_arg(&al, "--master-connect-retry=1"); + add_arg(&al, "--server-id=2"); + add_arg(&al, "--rpl-recovery-rank=2"); } // small server - add_arg(al, "-O"); - add_arg(al, "key_buffer_size=1M"); - add_arg(al, "-O"); - add_arg(al, "sort_buffer=256K"); - add_arg(al, "-O"); - add_arg(al, "max_heap_table_size=1M"); + add_arg(&al, "-O"); + add_arg(&al, "key_buffer_size=1M"); + add_arg(&al, "-O"); + add_arg(&al, "sort_buffer=256K"); + add_arg(&al, "-O"); + add_arg(&al, "max_heap_table_size=1M"); // opt args if (slave_opt[0] != NULL) @@ -515,7 +516,7 @@ void start_slave() while(p) { - add_arg(al, "%s", p); + add_arg(&al, "%s", p); p = (char *)strtok(NULL, " \t"); } @@ -525,7 +526,7 @@ void start_slave() remove(slave_pid); // spawn - if ((err = spawn(mysqld_file, al, FALSE, NULL, slave_out, slave_err)) == 0) + if ((err = spawn(mysqld_file, &al, FALSE, NULL, slave_out, slave_err)) == 0) { sleep_until_file_exists(slave_pid); @@ -544,7 +545,7 @@ void start_slave() } // free args - free_args(al); + free_args(&al); } /****************************************************************************** @@ -749,7 +750,7 @@ void run_test(char *test) char out_file[PATH_MAX]; char err_file[PATH_MAX]; int err; - arg_list al; + arg_list_t al; NXTime_t start, stop; // skip slave? @@ -812,25 +813,25 @@ void run_test(char *test) log("%-46s ", test); // args - init_args(al); - add_arg(al, "%s", mysqltest_file); - add_arg(al, "--no-defaults"); - add_arg(al, "--port=%u", master_port); - add_arg(al, "--database=%s", db); - add_arg(al, "--user=%s", user); - add_arg(al, "--password=%s", password); - add_arg(al, "--silent"); - add_arg(al, "--basedir=%s/", mysql_test_dir); - add_arg(al, "--host=127.0.0.1"); - add_arg(al, "-v"); - add_arg(al, "-R"); - add_arg(al, "%s", result_file); + init_args(&al); + add_arg(&al, "%s", mysqltest_file); + add_arg(&al, "--no-defaults"); + add_arg(&al, "--port=%u", master_port); + add_arg(&al, "--database=%s", db); + add_arg(&al, "--user=%s", user); + add_arg(&al, "--password=%s", password); + add_arg(&al, "--silent"); + add_arg(&al, "--basedir=%s/", mysql_test_dir); + add_arg(&al, "--host=127.0.0.1"); + add_arg(&al, "-v"); + add_arg(&al, "-R"); + add_arg(&al, "%s", result_file); // start timer NXGetTime(NX_SINCE_BOOT, NX_USECONDS, &start); // spawn - err = spawn(mysqltest_file, al, TRUE, test_file, out_file, err_file); + err = spawn(mysqltest_file, &al, TRUE, test_file, out_file, err_file); // stop timer NXGetTime(NX_SINCE_BOOT, NX_USECONDS, &stop); @@ -840,7 +841,7 @@ void run_test(char *test) total_time += elapsed; // free args - free_args(al); + free_args(&al); if (err == 0) { @@ -1055,9 +1056,6 @@ void setup(char *file) // enviornment setenv("MYSQL_TEST_DIR", mysql_test_dir, 1); - - // install test databases - mysql_install_db(); } /****************************************************************************** @@ -1067,11 +1065,17 @@ void setup(char *file) ******************************************************************************/ int main(int argc, char **argv) { - log("Initializing Tests...\n"); - // setup setup(argv[0]); + // header + log("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE); + + log("Initializing Tests...\n"); + + // install test databases + mysql_install_db(); + log("Starting Tests...\n"); log("\n"); diff --git a/netware/mysql_test_run.def b/netware/mysql_test_run.def index 7cca2e1dea6..b34f62a1f91 100644 --- a/netware/mysql_test_run.def +++ b/netware/mysql_test_run.def @@ -7,4 +7,5 @@ SCREENNAME "MySQL Test Run" COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Test Run" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqladmin.def b/netware/mysqladmin.def index 02ea42a2343..0ace36992b1 100644 --- a/netware/mysqladmin.def +++ b/netware/mysqladmin.def @@ -6,5 +6,6 @@ SCREENNAME "MySQL Admin" COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Admin Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqlbinlog.def b/netware/mysqlbinlog.def index b62ce4a578f..74d8e168b00 100644 --- a/netware/mysqlbinlog.def +++ b/netware/mysqlbinlog.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Binary Log Dump Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqlcheck.def b/netware/mysqlcheck.def index ae554bc6a06..6e476556ffe 100644 --- a/netware/mysqlcheck.def +++ b/netware/mysqlcheck.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Check Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqld.def b/netware/mysqld.def index d2ee41955ba..6856aefe56c 100644 --- a/netware/mysqld.def +++ b/netware/mysqld.def @@ -2,11 +2,11 @@ # MySQL Server #------------------------------------------------------------------------------ MODULE libc.nlm -XDCDATA mysqld.xdc COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Database Server" VERSION 4, 0 MULTIPLE STACKSIZE 65536 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqld_safe.def b/netware/mysqld_safe.def index 36a8c1cd89e..9080ef783c9 100644 --- a/netware/mysqld_safe.def +++ b/netware/mysqld_safe.def @@ -6,5 +6,7 @@ SCREENNAME "MySQL Database Server" COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Database Server Monitor" VERSION 4, 0 +MULTIPLE +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqldump.def b/netware/mysqldump.def index 763097a338c..f267b60ff77 100644 --- a/netware/mysqldump.def +++ b/netware/mysqldump.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Dump Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqlimport.def b/netware/mysqlimport.def index 990e704b73d..69e9f6eada5 100644 --- a/netware/mysqlimport.def +++ b/netware/mysqlimport.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Import Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqlshow.def b/netware/mysqlshow.def index 2849def8109..2b41386f643 100644 --- a/netware/mysqlshow.def +++ b/netware/mysqlshow.def @@ -6,5 +6,6 @@ SCREENNAME "MySQL Show" COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Show Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/mysqltest.def b/netware/mysqltest.def index c4fadf141c6..d98f6436a4a 100644 --- a/netware/mysqltest.def +++ b/netware/mysqltest.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Test Case Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/pack_isam.def b/netware/pack_isam.def index 0e077be6f00..f0f5a7e328a 100644 --- a/netware/pack_isam.def +++ b/netware/pack_isam.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL ISAM Table Pack Tool" VERSION 4, 0 -DEBUG +XDCDATA ../netware/mysql.xdc +#DEBUG diff --git a/netware/perror.def b/netware/perror.def index 08725a515ef..f1d23715f55 100644 --- a/netware/perror.def +++ b/netware/perror.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Error Code Description Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/replace.def b/netware/replace.def index b639d40f58b..b55690152b9 100644 --- a/netware/replace.def +++ b/netware/replace.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL Text Replacement Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG diff --git a/netware/resolveip.def b/netware/resolveip.def index fc6ee0fa313..10b99304e22 100644 --- a/netware/resolveip.def +++ b/netware/resolveip.def @@ -5,5 +5,6 @@ MODULE libc.nlm COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." DESCRIPTION "MySQL IP/Hostname Resolve Tool" VERSION 4, 0 +XDCDATA ../netware/mysql.xdc #DEBUG From 0f18ab78970cd64418646e83a32d7e487477fb86 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2003 16:14:52 -0500 Subject: [PATCH 237/267] Missed one file from Novell changes in 1.1686 netware/mysqld_safe.c: Changes to argument handling, spawn, etc --- netware/mysqld_safe.c | 94 +++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/netware/mysqld_safe.c b/netware/mysqld_safe.c index 1ab90775e02..845797e0022 100644 --- a/netware/mysqld_safe.c +++ b/netware/mysqld_safe.c @@ -60,7 +60,7 @@ void vlog(char *, va_list); void log(char *, ...); void start_defaults(int, char*[]); void finish_defaults(); -void read_defaults(arg_list); +void read_defaults(arg_list_t *); void parse_args(int, char*[]); void get_options(int, char*[]); void check_data_vol(); @@ -249,9 +249,9 @@ void finish_defaults() Read the defaults. ******************************************************************************/ -void read_defaults(arg_list pal) +void read_defaults(arg_list_t *pal) { - arg_list al; + arg_list_t al; char defaults_file[PATH_MAX]; char mydefaults[PATH_MAX]; char line[PATH_MAX]; @@ -265,17 +265,17 @@ void read_defaults(arg_list pal) snprintf(mydefaults, PATH_MAX, "%s/bin/my_print_defaults", basedir); // args - init_args(al); - add_arg(al, mydefaults); - if (default_option[0]) add_arg(al, default_option); - add_arg(al, "mysqld"); - add_arg(al, "server"); - add_arg(al, "mysqld_safe"); - add_arg(al, "safe_mysqld"); + init_args(&al); + add_arg(&al, mydefaults); + if (default_option[0]) add_arg(&al, default_option); + add_arg(&al, "mysqld"); + add_arg(&al, "server"); + add_arg(&al, "mysqld_safe"); + add_arg(&al, "safe_mysqld"); - spawn(mydefaults, al, TRUE, NULL, defaults_file, NULL); + spawn(mydefaults, &al, TRUE, NULL, defaults_file, NULL); - free_args(al); + free_args(&al); // gather defaults if((fp = fopen(defaults_file, "r")) != NULL) @@ -405,17 +405,17 @@ void parse_args(int argc, char *argv[]) ******************************************************************************/ void get_options(int argc, char *argv[]) { - arg_list al; + arg_list_t al; // start defaults start_defaults(argc, argv); // default file arguments - init_args(al); - add_arg(al, "ignore"); - read_defaults(al); - parse_args(al->argc, al->argv); - free_args(al); + init_args(&al); + add_arg(&al, "ignore"); + read_defaults(&al); + parse_args(al.argc, al.argv); + free_args(&al); // command-line arguments parse_args(argc, argv); @@ -504,7 +504,7 @@ void check_setup() ******************************************************************************/ void check_tables() { - arg_list al; + arg_list_t al; char mycheck[PATH_MAX]; char table[PATH_MAX]; char db[PATH_MAX]; @@ -549,21 +549,21 @@ void check_tables() snprintf(mycheck, PATH_MAX, "%s/bin/myisamchk", basedir); // args - init_args(al); - add_arg(al, mycheck); - add_arg(al, "--silent"); - add_arg(al, "--force"); - add_arg(al, "--fast"); - add_arg(al, "--medium-check"); - add_arg(al, "-O"); - add_arg(al, "key_buffer=64M"); - add_arg(al, "-O"); - add_arg(al, "sort_buffer=64M"); - add_arg(al, table); + init_args(&al); + add_arg(&al, mycheck); + add_arg(&al, "--silent"); + add_arg(&al, "--force"); + add_arg(&al, "--fast"); + add_arg(&al, "--medium-check"); + add_arg(&al, "-O"); + add_arg(&al, "key_buffer=64M"); + add_arg(&al, "-O"); + add_arg(&al, "sort_buffer=64M"); + add_arg(&al, table); - spawn(mycheck, al, TRUE, NULL, NULL, NULL); + spawn(mycheck, &al, TRUE, NULL, NULL, NULL); - free_args(al); + free_args(&al); } else if (strindex(table, ".ism")) { @@ -573,17 +573,17 @@ void check_tables() snprintf(mycheck, PATH_MAX, "%s/bin/isamchk", basedir); // args - init_args(al); - add_arg(al, mycheck); - add_arg(al, "--silent"); - add_arg(al, "--force"); - add_arg(al, "-O"); - add_arg(al, "sort_buffer=64M"); - add_arg(al, table); + init_args(&al); + add_arg(&al, mycheck); + add_arg(&al, "--silent"); + add_arg(&al, "--force"); + add_arg(&al, "-O"); + add_arg(&al, "sort_buffer=64M"); + add_arg(&al, table); - spawn(mycheck, al, TRUE, NULL, NULL, NULL); + spawn(mycheck, &al, TRUE, NULL, NULL, NULL); - free_args(al); + free_args(&al); } } } @@ -599,7 +599,7 @@ void check_tables() ******************************************************************************/ void mysql_start(int argc, char *argv[]) { - arg_list al; + arg_list_t al; int i, j, err; struct stat info; time_t cal; @@ -619,8 +619,8 @@ void mysql_start(int argc, char *argv[]) }; // args - init_args(al); - add_arg(al, "%s", mysqld); + init_args(&al); + add_arg(&al, "%s", mysqld); // parent args for(i = 1; i < argc; i++) @@ -637,7 +637,7 @@ void mysql_start(int argc, char *argv[]) } } - if (!skip) add_arg(al, "%s", argv[i]); + if (!skip) add_arg(&al, "%s", argv[i]); } // spawn @@ -653,7 +653,7 @@ void mysql_start(int argc, char *argv[]) log("mysql started : %s\n", stamp); // spawn mysqld - spawn(mysqld, al, TRUE, NULL, NULL, err_log); + spawn(mysqld, &al, TRUE, NULL, NULL, err_log); } while (!stat(pid_file, &info)); @@ -664,7 +664,7 @@ void mysql_start(int argc, char *argv[]) log("mysql stopped : %s\n\n", stamp); // free args - free_args(al); + free_args(&al); } /****************************************************************************** From 398707501216b30344c02bbe934c715fdff63cb1 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Mar 2003 15:22:59 +0100 Subject: [PATCH 238/267] Fix for #178 Replicating INSERT VALUES(USER()) crashes (SEGV) the slave Now it does not SEGV, but USER() is still badly replicated (it is replicated to ""), which is a lower priority bug. sql/item_strfunc.cc: Fix for #178 Replicating INSERT VALUES(USER()) crashes (SEGV) the slave Now it does not SEGV, but USER() is still badly replicated (it is replicated to ""), which is a lower priority bug. --- sql/item_strfunc.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index f1e37889d5f..bff8bc7e3f4 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1373,8 +1373,10 @@ String *Item_func_database::val_str(String *str) String *Item_func_user::val_str(String *str) { + // TODO: make USER() replicate properly (currently it is replicated to "") THD *thd=current_thd; - if (str->copy((const char*) thd->user,(uint) strlen(thd->user)) || + if (!(thd->user) || // for system threads (e.g. replication SQL thread) + str->copy((const char*) thd->user,(uint) strlen(thd->user)) || str->append('@') || str->append(thd->host ? thd->host : thd->ip ? thd->ip : "")) return &empty_string; From ebedd1521c19f9a6a2025d5c1c5be751cdb7b636 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Mar 2003 19:55:09 +0200 Subject: [PATCH 239/267] Added error in case auto_increment and default where defined at the same time. --- sql/sql_parse.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 8439db0be6b..e861aef5fe7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2880,21 +2880,29 @@ bool add_field_to_list(char *field_name, enum_field_types type, lex->col_list.empty(); } - if (default_value && default_value->type() == Item::NULL_ITEM) + if (default_value) { - if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) == - NOT_NULL_FLAG) + if (default_value->type() == Item::NULL_ITEM) { - net_printf(&thd->net,ER_INVALID_DEFAULT,field_name); + default_value=0; + if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) == + NOT_NULL_FLAG) + { + net_printf(&thd->net,ER_INVALID_DEFAULT,field_name); + DBUG_RETURN(1); + } + } + else if (type_modifier & AUTO_INCREMENT_FLAG) + { + net_printf(&thd->net, ER_INVALID_DEFAULT, field_name); DBUG_RETURN(1); } - default_value=0; } if (!(new_field=new create_field())) DBUG_RETURN(1); new_field->field=0; new_field->field_name=field_name; - new_field->def= (type_modifier & AUTO_INCREMENT_FLAG ? 0 : default_value); + new_field->def= default_value; new_field->flags= type_modifier; new_field->unireg_check= (type_modifier & AUTO_INCREMENT_FLAG ? Field::NEXT_NUMBER : Field::NONE); From c1719ad057d0bfa3bc4a40d01c604193c91a5659 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 22 Mar 2003 20:34:20 +0200 Subject: [PATCH 240/267] Changed some tests to pass with new auto_increment handling, e.g. default value is not accepted with auto_increment anymore. --- mysql-test/r/bdb-crash.result | 2 +- mysql-test/r/group_by.result | 10 +++++----- mysql-test/r/join_outer.result | 14 +++++++------- mysql-test/r/order_by.result | 2 +- mysql-test/r/type_blob.result | 8 ++++---- mysql-test/r/type_decimal.result | 2 +- mysql-test/r/type_ranges.result | 4 ++-- mysql-test/r/update.result | 2 +- mysql-test/t/bdb-crash.test | 2 +- mysql-test/t/group_by.test | 10 +++++----- mysql-test/t/join_outer.test | 14 +++++++------- mysql-test/t/order_by.test | 2 +- mysql-test/t/type_blob.test | 8 ++++---- mysql-test/t/type_decimal.test | 2 +- mysql-test/t/type_ranges.test | 4 ++-- mysql-test/t/update.test | 2 +- 16 files changed, 44 insertions(+), 44 deletions(-) diff --git a/mysql-test/r/bdb-crash.result b/mysql-test/r/bdb-crash.result index 42c826d55da..5079368ea21 100644 --- a/mysql-test/r/bdb-crash.result +++ b/mysql-test/r/bdb-crash.result @@ -1,6 +1,6 @@ drop table if exists t1; CREATE TABLE t1 ( -ChargeID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, +ChargeID int(10) unsigned NOT NULL auto_increment, ServiceID int(10) unsigned DEFAULT '0' NOT NULL, ChargeDate date DEFAULT '0000-00-00' NOT NULL, ChargeAmount decimal(20,2) DEFAULT '0.00' NOT NULL, diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 91f33e0cd9f..0694e284115 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -11,7 +11,7 @@ INSERT INTO t1 VALUES (2,2,2,'','0000-00-00'); INSERT INTO t1 VALUES (2,1,1,'','0000-00-00'); INSERT INTO t1 VALUES (3,3,3,'','0000-00-00'); CREATE TABLE t2 ( -userID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, +userID int(10) unsigned NOT NULL auto_increment, niName char(15), passwd char(8), mail char(50), @@ -51,7 +51,7 @@ userid MIN(t1.score+0.0) 2 2.0 drop table test.t1,test.t2; CREATE TABLE t1 ( -PID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, +PID int(10) unsigned NOT NULL auto_increment, payDate date DEFAULT '0000-00-00' NOT NULL, recDate datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, URID int(10) unsigned DEFAULT '0' NOT NULL, @@ -74,7 +74,7 @@ SELECT COUNT(P.URID),SUM(P.amount),P.method, MIN(PP.recdate+0) > 19980501000000 Can't group on 'IsNew' drop table t1; CREATE TABLE t1 ( -cid mediumint(9) DEFAULT '0' NOT NULL auto_increment, +cid mediumint(9) NOT NULL auto_increment, firstname varchar(32) DEFAULT '' NOT NULL, surname varchar(32) DEFAULT '' NOT NULL, PRIMARY KEY (cid) @@ -82,7 +82,7 @@ PRIMARY KEY (cid) INSERT INTO t1 VALUES (1,'That','Guy'); INSERT INTO t1 VALUES (2,'Another','Gent'); CREATE TABLE t2 ( -call_id mediumint(8) DEFAULT '0' NOT NULL auto_increment, +call_id mediumint(8) NOT NULL auto_increment, contact_id mediumint(8) DEFAULT '0' NOT NULL, PRIMARY KEY (call_id), KEY contact_id (contact_id) @@ -102,7 +102,7 @@ cid CONCAT(firstname, ' ', surname) COUNT(call_id) drop table t1,t2; unlock tables; CREATE TABLE t1 ( -bug_id mediumint(9) DEFAULT '0' NOT NULL auto_increment, +bug_id mediumint(9) NOT NULL auto_increment, groupset bigint(20) DEFAULT '0' NOT NULL, assigned_to mediumint(9) DEFAULT '0' NOT NULL, bug_file_loc text, diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index 37e18b8b304..6e69616b7c6 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -235,7 +235,7 @@ INSERT INTO t2 VALUES (11410,11410,131,0); INSERT INTO t2 VALUES (11416,11416,32767,0); INSERT INTO t2 VALUES (11409,0,0,0); CREATE TABLE t3 ( -id int(11) DEFAULT '0' NOT NULL auto_increment, +id int(11) NOT NULL auto_increment, dni_pasaporte char(16) DEFAULT '' NOT NULL, idPla int(11) DEFAULT '0' NOT NULL, cod_asig int(11) DEFAULT '0' NOT NULL, @@ -248,7 +248,7 @@ UNIQUE dni_pasaporte_2 (dni_pasaporte,idPla,cod_asig,any,quatrimestre) ); INSERT INTO t3 VALUES (1,'11111111',1,10362,98,1,'M'); CREATE TABLE t4 ( -id int(11) DEFAULT '0' NOT NULL auto_increment, +id int(11) NOT NULL auto_increment, papa int(11) DEFAULT '0' NOT NULL, fill int(11) DEFAULT '0' NOT NULL, idPla int(11) DEFAULT '0' NOT NULL, @@ -285,7 +285,7 @@ fill idPla 10362 NULL drop table t1,t2,t3,test.t4; CREATE TABLE t1 ( -id smallint(5) unsigned DEFAULT '0' NOT NULL auto_increment, +id smallint(5) unsigned NOT NULL auto_increment, name char(60) DEFAULT '' NOT NULL, PRIMARY KEY (id) ); @@ -293,7 +293,7 @@ INSERT INTO t1 VALUES (1,'Antonio Paz'); INSERT INTO t1 VALUES (2,'Lilliana Angelovska'); INSERT INTO t1 VALUES (3,'Thimble Smith'); CREATE TABLE t2 ( -id smallint(5) unsigned DEFAULT '0' NOT NULL auto_increment, +id smallint(5) unsigned NOT NULL auto_increment, owner smallint(5) unsigned DEFAULT '0' NOT NULL, name char(60), PRIMARY KEY (id) @@ -383,15 +383,15 @@ id str 2 NULL drop table t1; CREATE TABLE t1 ( -t1_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t1_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t1_id) ); CREATE TABLE t2 ( -t2_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t2_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t2_id) ); CREATE TABLE t3 ( -t3_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t3_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t3_id) ); CREATE TABLE t4 ( diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 9238d9eafcb..79c6c9fa6fb 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -15,7 +15,7 @@ INSERT INTO t1 VALUES (2,6,'60671515','Y'); INSERT INTO t1 VALUES (2,7,'60671569','Y'); INSERT INTO t1 VALUES (2,3,'dd','Y'); CREATE TABLE t2 ( -id int(6) DEFAULT '0' NOT NULL auto_increment, +id int(6) NOT NULL auto_increment, description varchar(40) NOT NULL, idform varchar(40), ordre int(6) unsigned DEFAULT '0' NOT NULL, diff --git a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result index ab4723457d1..d7c41743bf3 100644 --- a/mysql-test/r/type_blob.result +++ b/mysql-test/r/type_blob.result @@ -315,7 +315,7 @@ Incorrect sub part key. The used key part isn't a string, the used length is lon create table t1 (a text, key (a(255))); drop table t1; CREATE TABLE t1 ( -t1_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t1_id bigint(21) NOT NULL auto_increment, _field_72 varchar(128) DEFAULT '' NOT NULL, _field_95 varchar(32), _field_115 tinyint(4) DEFAULT '0' NOT NULL, @@ -339,7 +339,7 @@ INSERT INTO t2 VALUES (1,1); INSERT INTO t2 VALUES (2,1); INSERT INTO t2 VALUES (2,2); CREATE TABLE t3 ( -t3_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t3_id bigint(21) NOT NULL auto_increment, _field_131 varchar(128), _field_133 tinyint(4) DEFAULT '0' NOT NULL, _field_135 datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, @@ -367,7 +367,7 @@ PRIMARY KEY (seq_0_id,seq_1_id) INSERT INTO t4 VALUES (1,1); INSERT INTO t4 VALUES (2,1); CREATE TABLE t5 ( -t5_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t5_id bigint(21) NOT NULL auto_increment, _field_149 tinyint(4), _field_156 varchar(128) DEFAULT '' NOT NULL, _field_157 varchar(128) DEFAULT '' NOT NULL, @@ -394,7 +394,7 @@ INSERT INTO t6 VALUES (1,1); INSERT INTO t6 VALUES (1,2); INSERT INTO t6 VALUES (2,2); CREATE TABLE t7 ( -t7_id bigint(21) DEFAULT '0' NOT NULL auto_increment, +t7_id bigint(21) NOT NULL auto_increment, _field_143 tinyint(4), _field_165 varchar(32), _field_166 smallint(6) DEFAULT '0' NOT NULL, diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result index 0e60eefc9c7..4c326957c03 100644 --- a/mysql-test/r/type_decimal.result +++ b/mysql-test/r/type_decimal.result @@ -1,6 +1,6 @@ DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( -id int(11) DEFAULT '0' NOT NULL auto_increment, +id int(11) NOT NULL auto_increment, datatype_id int(11) DEFAULT '0' NOT NULL, minvalue decimal(20,10) DEFAULT '0.0000000000' NOT NULL, maxvalue decimal(20,10) DEFAULT '0.0000000000' NOT NULL, diff --git a/mysql-test/r/type_ranges.result b/mysql-test/r/type_ranges.result index fc7cc5255cf..4f4b4eb43eb 100644 --- a/mysql-test/r/type_ranges.result +++ b/mysql-test/r/type_ranges.result @@ -1,6 +1,6 @@ drop table if exists t1,t2,t3; CREATE TABLE t1 ( -auto int(5) unsigned DEFAULT 0 NOT NULL auto_increment, +auto int(5) unsigned NOT NULL auto_increment, string char(10) default "hello", tiny tinyint(4) DEFAULT '0' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL , @@ -129,7 +129,7 @@ auto new_field new_blob_col date_field 15 new 4294967295 0000-00-00 16 new NULL NULL CREATE TABLE t2 ( -auto int(5) unsigned NOT NULL DEFAULT 0 auto_increment, +auto int(5) unsigned NOT NULL auto_increment, string char(20), mediumblob_col mediumblob not null, new_field char(2), diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index ba5c1c6e28f..db209c5855c 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -96,7 +96,7 @@ KEY k4 (assignment), KEY ticket (ticket) ) TYPE=MyISAM; INSERT INTO t1 VALUES (773,773,'','','',980257344,20010318180652,0,'Open',10,0,0,0,1,'','','','',''); -alter table t1 change lfdnr lfdnr int(10) unsigned default 0 not null auto_increment; +alter table t1 change lfdnr lfdnr int(10) unsigned not null auto_increment; update t1 set status=1 where type='Open'; select status from t1; status diff --git a/mysql-test/t/bdb-crash.test b/mysql-test/t/bdb-crash.test index 0005b631a46..4575a612728 100644 --- a/mysql-test/t/bdb-crash.test +++ b/mysql-test/t/bdb-crash.test @@ -4,7 +4,7 @@ drop table if exists t1; CREATE TABLE t1 ( - ChargeID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, + ChargeID int(10) unsigned NOT NULL auto_increment, ServiceID int(10) unsigned DEFAULT '0' NOT NULL, ChargeDate date DEFAULT '0000-00-00' NOT NULL, ChargeAmount decimal(20,2) DEFAULT '0.00' NOT NULL, diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index ab5d6062daf..5875f9a9ba9 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -17,7 +17,7 @@ INSERT INTO t1 VALUES (2,1,1,'','0000-00-00'); INSERT INTO t1 VALUES (3,3,3,'','0000-00-00'); CREATE TABLE t2 ( - userID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, + userID int(10) unsigned NOT NULL auto_increment, niName char(15), passwd char(8), mail char(50), @@ -47,7 +47,7 @@ drop table test.t1,test.t2; # CREATE TABLE t1 ( - PID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, + PID int(10) unsigned NOT NULL auto_increment, payDate date DEFAULT '0000-00-00' NOT NULL, recDate datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, URID int(10) unsigned DEFAULT '0' NOT NULL, @@ -79,7 +79,7 @@ drop table t1; # CREATE TABLE t1 ( - cid mediumint(9) DEFAULT '0' NOT NULL auto_increment, + cid mediumint(9) NOT NULL auto_increment, firstname varchar(32) DEFAULT '' NOT NULL, surname varchar(32) DEFAULT '' NOT NULL, PRIMARY KEY (cid) @@ -88,7 +88,7 @@ INSERT INTO t1 VALUES (1,'That','Guy'); INSERT INTO t1 VALUES (2,'Another','Gent'); CREATE TABLE t2 ( - call_id mediumint(8) DEFAULT '0' NOT NULL auto_increment, + call_id mediumint(8) NOT NULL auto_increment, contact_id mediumint(8) DEFAULT '0' NOT NULL, PRIMARY KEY (call_id), KEY contact_id (contact_id) @@ -114,7 +114,7 @@ unlock tables; # CREATE TABLE t1 ( - bug_id mediumint(9) DEFAULT '0' NOT NULL auto_increment, + bug_id mediumint(9) NOT NULL auto_increment, groupset bigint(20) DEFAULT '0' NOT NULL, assigned_to mediumint(9) DEFAULT '0' NOT NULL, bug_file_loc text, diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index af5f377afb5..71c3643b2f4 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -168,7 +168,7 @@ INSERT INTO t2 VALUES (11416,11416,32767,0); INSERT INTO t2 VALUES (11409,0,0,0); CREATE TABLE t3 ( - id int(11) DEFAULT '0' NOT NULL auto_increment, + id int(11) NOT NULL auto_increment, dni_pasaporte char(16) DEFAULT '' NOT NULL, idPla int(11) DEFAULT '0' NOT NULL, cod_asig int(11) DEFAULT '0' NOT NULL, @@ -183,7 +183,7 @@ CREATE TABLE t3 ( INSERT INTO t3 VALUES (1,'11111111',1,10362,98,1,'M'); CREATE TABLE t4 ( - id int(11) DEFAULT '0' NOT NULL auto_increment, + id int(11) NOT NULL auto_increment, papa int(11) DEFAULT '0' NOT NULL, fill int(11) DEFAULT '0' NOT NULL, idPla int(11) DEFAULT '0' NOT NULL, @@ -210,7 +210,7 @@ drop table t1,t2,t3,test.t4; # CREATE TABLE t1 ( - id smallint(5) unsigned DEFAULT '0' NOT NULL auto_increment, + id smallint(5) unsigned NOT NULL auto_increment, name char(60) DEFAULT '' NOT NULL, PRIMARY KEY (id) ); @@ -219,7 +219,7 @@ INSERT INTO t1 VALUES (2,'Lilliana Angelovska'); INSERT INTO t1 VALUES (3,'Thimble Smith'); CREATE TABLE t2 ( - id smallint(5) unsigned DEFAULT '0' NOT NULL auto_increment, + id smallint(5) unsigned NOT NULL auto_increment, owner smallint(5) unsigned DEFAULT '0' NOT NULL, name char(60), PRIMARY KEY (id) @@ -257,15 +257,15 @@ drop table t1; # CREATE TABLE t1 ( - t1_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t1_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t1_id) ); CREATE TABLE t2 ( - t2_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t2_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t2_id) ); CREATE TABLE t3 ( - t3_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t3_id bigint(21) NOT NULL auto_increment, PRIMARY KEY (t3_id) ); CREATE TABLE t4 ( diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 8291a475d5e..06a5d0ceb20 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -23,7 +23,7 @@ INSERT INTO t1 VALUES (2,7,'60671569','Y'); INSERT INTO t1 VALUES (2,3,'dd','Y'); CREATE TABLE t2 ( - id int(6) DEFAULT '0' NOT NULL auto_increment, + id int(6) NOT NULL auto_increment, description varchar(40) NOT NULL, idform varchar(40), ordre int(6) unsigned DEFAULT '0' NOT NULL, diff --git a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test index 5bdaad7ffac..4132b1f48a4 100644 --- a/mysql-test/t/type_blob.test +++ b/mysql-test/t/type_blob.test @@ -96,7 +96,7 @@ drop table t1; # CREATE TABLE t1 ( - t1_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t1_id bigint(21) NOT NULL auto_increment, _field_72 varchar(128) DEFAULT '' NOT NULL, _field_95 varchar(32), _field_115 tinyint(4) DEFAULT '0' NOT NULL, @@ -127,7 +127,7 @@ INSERT INTO t2 VALUES (2,1); INSERT INTO t2 VALUES (2,2); CREATE TABLE t3 ( - t3_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t3_id bigint(21) NOT NULL auto_increment, _field_131 varchar(128), _field_133 tinyint(4) DEFAULT '0' NOT NULL, _field_135 datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, @@ -162,7 +162,7 @@ INSERT INTO t4 VALUES (1,1); INSERT INTO t4 VALUES (2,1); CREATE TABLE t5 ( - t5_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t5_id bigint(21) NOT NULL auto_increment, _field_149 tinyint(4), _field_156 varchar(128) DEFAULT '' NOT NULL, _field_157 varchar(128) DEFAULT '' NOT NULL, @@ -194,7 +194,7 @@ INSERT INTO t6 VALUES (1,2); INSERT INTO t6 VALUES (2,2); CREATE TABLE t7 ( - t7_id bigint(21) DEFAULT '0' NOT NULL auto_increment, + t7_id bigint(21) NOT NULL auto_increment, _field_143 tinyint(4), _field_165 varchar(32), _field_166 smallint(6) DEFAULT '0' NOT NULL, diff --git a/mysql-test/t/type_decimal.test b/mysql-test/t/type_decimal.test index 7f73ec34e3a..7d5d719592c 100644 --- a/mysql-test/t/type_decimal.test +++ b/mysql-test/t/type_decimal.test @@ -2,7 +2,7 @@ DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( - id int(11) DEFAULT '0' NOT NULL auto_increment, + id int(11) NOT NULL auto_increment, datatype_id int(11) DEFAULT '0' NOT NULL, minvalue decimal(20,10) DEFAULT '0.0000000000' NOT NULL, maxvalue decimal(20,10) DEFAULT '0.0000000000' NOT NULL, diff --git a/mysql-test/t/type_ranges.test b/mysql-test/t/type_ranges.test index a07a1d97f37..63bbe43512d 100644 --- a/mysql-test/t/type_ranges.test +++ b/mysql-test/t/type_ranges.test @@ -5,7 +5,7 @@ drop table if exists t1,t2,t3; CREATE TABLE t1 ( - auto int(5) unsigned DEFAULT 0 NOT NULL auto_increment, + auto int(5) unsigned NOT NULL auto_increment, string char(10) default "hello", tiny tinyint(4) DEFAULT '0' NOT NULL , short smallint(6) DEFAULT '1' NOT NULL , @@ -91,7 +91,7 @@ select auto,new_field,new_blob_col,date_field from t1 ; # check with old syntax # CREATE TABLE t2 ( - auto int(5) unsigned NOT NULL DEFAULT 0 auto_increment, + auto int(5) unsigned NOT NULL auto_increment, string char(20), mediumblob_col mediumblob not null, new_field char(2), diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test index 5cbbd2a350e..76a27b62206 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -72,7 +72,7 @@ CREATE TABLE t1 ( INSERT INTO t1 VALUES (773,773,'','','',980257344,20010318180652,0,'Open',10,0,0,0,1,'','','','',''); -alter table t1 change lfdnr lfdnr int(10) unsigned default 0 not null auto_increment; +alter table t1 change lfdnr lfdnr int(10) unsigned not null auto_increment; update t1 set status=1 where type='Open'; select status from t1; drop table t1; From fd8972cfa738af8f18f34f5bcd6b7f8d82e3b9f5 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 23 Mar 2003 11:30:45 +0200 Subject: [PATCH 241/267] Reverted fix away from 4.0, because it may in rare circumstanses cause compatibility problems. Fix will be enabled in 4.1. --- sql/sql_parse.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e861aef5fe7..ad7ccaf8f38 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2892,17 +2892,23 @@ bool add_field_to_list(char *field_name, enum_field_types type, DBUG_RETURN(1); } } +#ifdef MYSQL41000 else if (type_modifier & AUTO_INCREMENT_FLAG) { net_printf(&thd->net, ER_INVALID_DEFAULT, field_name); DBUG_RETURN(1); } +#endif } if (!(new_field=new create_field())) DBUG_RETURN(1); new_field->field=0; new_field->field_name=field_name; +#ifdef MYSQL41000 new_field->def= default_value; +#else + new_field->def= (type_modifier & AUTO_INCREMENT_FLAG ? 0 : default_value); +#endif new_field->flags= type_modifier; new_field->unireg_check= (type_modifier & AUTO_INCREMENT_FLAG ? Field::NEXT_NUMBER : Field::NONE); From bd294f07c55bc2ac7b8e13b5c35735033cea0cab Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Mar 2003 11:19:28 +0100 Subject: [PATCH 242/267] make myisam usable without threads (and even w/o pthread_t) --- include/myisam.h | 4 ++++ myisam/mi_check.c | 6 +++++- myisam/sort.c | 4 +++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/myisam.h b/include/myisam.h index def8b492681..11dae5f59ba 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -366,14 +366,18 @@ typedef struct st_sort_info SORT_KEY_BLOCKS *key_block,*key_block_end; /* sync things*/ uint got_error, threads_running; +#ifdef THREAD pthread_mutex_t mutex; pthread_cond_t cond; +#endif } SORT_INFO; typedef struct st_mi_sort_param { +#ifdef THREAD pthread_t thr; +#endif IO_CACHE read_cache, tempfile, tempfile_for_exceptions; DYNAMIC_ARRAY buffpek; ulonglong unique[MI_MAX_KEY_SEG+1]; diff --git a/myisam/mi_check.c b/myisam/mi_check.c index ca5c8f9ecb4..5cbe0a7d2f3 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -2109,7 +2109,7 @@ err: Threaded repair of table using sorting SYNOPSIS - mi_repair_by_sort_r() + mi_repair_parallel() param Repair parameters info MyISAM handler to repair name Name of table (for warnings) @@ -2128,6 +2128,9 @@ err: int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, const char * name, int rep_quick) { +#ifndef THREAD + return mi_repair_by_sort(param, info, name, rep_quick); +#else int got_error; uint i,key, total_key_length, istep; ulong rec_length; @@ -2489,6 +2492,7 @@ err: share->pack.header_length=0; } DBUG_RETURN(got_error); +#endif /* THREAD */ } /* Read next record and return next key */ diff --git a/myisam/sort.c b/myisam/sort.c index f45ecbaf3a1..ddf565d5092 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -275,6 +275,7 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys, } /* find_all_keys */ +#ifdef THREAD /* Search after all keys and place them in a temp. file */ pthread_handler_decl(thr_find_all_keys,arg) @@ -284,7 +285,7 @@ pthread_handler_decl(thr_find_all_keys,arg) uint memavl,old_memavl,keys,sort_length; uint idx, maxbuffer; uchar **sort_keys=0; - + error=1; if (my_thread_init()) @@ -542,6 +543,7 @@ int thr_write_keys(MI_SORT_PARAM *sort_param) my_free((gptr) mergebuf,MYF(MY_ALLOW_ZERO_PTR)); return got_error; } +#endif /* THREAD */ /* Write all keys in memory to file for later merge */ From 6f063d33693356389f3e64e9a719f348fec218aa Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Mar 2003 15:06:11 +0100 Subject: [PATCH 243/267] - fixed wrong order of commands in Mac OS X Readme.txt (Thanks to Marc Liyanage for spotting this) --- support-files/MacOSX/ReadMe.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support-files/MacOSX/ReadMe.txt b/support-files/MacOSX/ReadMe.txt index ed2d2b4c714..a18c5f3aa41 100644 --- a/support-files/MacOSX/ReadMe.txt +++ b/support-files/MacOSX/ReadMe.txt @@ -46,8 +46,8 @@ the following commands in a terminal window: sudo ./bin/mysqld_safe (Enter your password) (Press CTRL+Z) - (Press CTRL+D to exit the shell) bg + (Press CTRL+D to exit the shell) You should now be able to connect to the MySQL server, e.g. by running /usr/local/mysql/bin/mysql From 45e9ee67d1120e099b108f3ffff9819f912cbb8e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Mar 2003 19:23:43 +0400 Subject: [PATCH 244/267] item_strfunc.cc: A bug has been fixed. ELT() didn't honor the second argument. Coercibility support has been added. sql/item_strfunc.cc: A bug has been fixed. ELT() didn't honor the second argument. Coercibility support has been added. --- sql/item_strfunc.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 76d05cae009..97918cf2875 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1587,10 +1587,22 @@ void Item_func_elt::fix_length_and_dec() { max_length=0; decimals=0; - for (uint i=1 ; i < arg_count ; i++) + + for (uint i=0 ; i < arg_count ; i++) { set_if_bigger(max_length,args[i]->max_length); set_if_bigger(decimals,args[i]->decimals); + if (i == 0) + set_charset(args[i]->charset(),args[i]->coercibility); + else + { + if (set_charset(charset(), coercibility, + args[i]->charset(), args[i]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + break; + } + } } maybe_null=1; // NULL if wrong first arg with_sum_func= with_sum_func || item->with_sum_func; From 8848bb894c92609fc739e2e902578abe92da6255 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Mar 2003 19:33:44 +0400 Subject: [PATCH 245/267] item_strfunc.cc: The result didn't return proper collation sql/item_strfunc.cc: The result didn't return proper collation --- sql/item_strfunc.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 97918cf2875..5b9e16ae905 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1663,13 +1663,16 @@ longlong Item_func_elt::val_int() String *Item_func_elt::val_str(String *str) { uint tmp; + String *res; if ((tmp=(uint) item->val_int()) == 0 || tmp > arg_count) { null_value=1; return NULL; } null_value=0; - return args[tmp-1]->val_str(str); + res= args[tmp-1]->val_str(str); + res->set_charset(charset()); + return res; } From 396328d5d75ea6be5bd6ef10cf5bee967501a30a Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Mar 2003 20:01:05 +0400 Subject: [PATCH 246/267] item_strfunc.cc: Fixed that concat() didn't set character set in val_str concat_ws() now honors coercibility sql/item_strfunc.cc: Fixed that concat() didn't set character set in val_str concat_ws() now honors coercibility --- sql/item_strfunc.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 5b9e16ae905..2a0194aba28 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -235,8 +235,6 @@ String *Item_func_concat::val_str(String *str) use_as_buff= &tmp_value; for (i=1 ; i < arg_count ; i++) { - if (args[i]->binary()) - set_charset(&my_charset_bin); if (res->length() == 0) { if (!(res=args[i]->val_str(str))) @@ -265,7 +263,6 @@ String *Item_func_concat::val_str(String *str) str->append(*res2); } res=str; - res->set_charset(charset()); } else if (res == &tmp_value) { @@ -277,7 +274,6 @@ String *Item_func_concat::val_str(String *str) if (tmp_value.replace(0,0,*res)) goto null; res= &tmp_value; - res->set_charset(charset()); use_as_buff=str; // Put next arg here } else if (tmp_value.is_alloced() && res2->ptr() >= tmp_value.ptr() && @@ -296,7 +292,6 @@ String *Item_func_concat::val_str(String *str) *res)) goto null; res= &tmp_value; - res->set_charset(charset()); use_as_buff=str; // Put next arg here } else @@ -306,11 +301,11 @@ String *Item_func_concat::val_str(String *str) tmp_value.append(*res2)) goto null; res= &tmp_value; - res->set_charset(charset()); use_as_buff=str; } } } + res->set_charset(charset()); return res; null: @@ -602,6 +597,7 @@ String *Item_func_concat_ws::val_str(String *str) use_as_buff=str; } } + res->set_charset(charset()); return res; null: @@ -626,9 +622,18 @@ void Item_func_concat_ws::split_sum_func(Item **ref_pointer_array, void Item_func_concat_ws::fix_length_and_dec() { + set_charset(separator->charset(),separator->coercibility); max_length=separator->max_length*(arg_count-1); for (uint i=0 ; i < arg_count ; i++) + { max_length+=args[i]->max_length; + if (set_charset(charset(), coercibility, + args[i]->charset(), args[i]->coercibility)) + { + my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name()); + break; + } + } if (max_length > MAX_BLOB_WIDTH) { max_length=MAX_BLOB_WIDTH; From 11841c05ec1b2db812e9827e9206551e42d9e87d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 02:37:41 +0200 Subject: [PATCH 247/267] Fixed bug in allocation memory in key cache. (Memory was not properly aligned which cased core dumps on sparc CPU's) Changed keycache variables to start with my_ instead of _my_ include/my_sys.h: Changed keycache variables to start with my_ instead of _my_ myisam/mi_test2.c: Changed keycache variables to start with my_ instead of _my_ Removed compiler warnings myisam/sp_test.c: Removed compiler warning mysys/mf_keycache.c: Fixed bug in allocation memory (Memory was not properly aligned which cased core dumps on sparc CPU's) Changed keycache variables to start with my_ instead of _my_ Fixed indentation and comment syntax. Removed end space. sql/mysqld.cc: Changed keycache variables to start with my_ instead of _my_ sql/sql_test.cc: Changed keycache variables to start with my_ instead of _my_ --- include/my_sys.h | 6 +- myisam/mi_test2.c | 10 +- myisam/sp_test.c | 2 +- mysys/mf_keycache.c | 935 +++++++++++++++++++++++--------------------- sql/mysqld.cc | 14 +- sql/sql_test.cc | 4 +- 6 files changed, 511 insertions(+), 460 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index 03a0ae70d6a..b3be3588b2f 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -219,9 +219,9 @@ extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); /* statistics */ -extern ulong _my_cache_w_requests,_my_cache_write,_my_cache_r_requests, - _my_cache_read; -extern ulong _my_blocks_used,_my_blocks_changed; +extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests, + my_cache_read; +extern ulong my_blocks_used, my_blocks_changed; extern uint key_cache_block_size; extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; extern my_bool key_cache_inited, my_init_done; diff --git a/myisam/mi_test2.c b/myisam/mi_test2.c index b5da87355c6..8c7713c4b4d 100644 --- a/myisam/mi_test2.c +++ b/myisam/mi_test2.c @@ -646,13 +646,13 @@ int main(int argc, char *argv[]) (long) range_records > (long) records*14/10+2) { printf("mi_records_range for key: %d returned %ld; Should be about %ld\n", - i, range_records, records); + i, (long) range_records, (long) records); goto end; } if (verbose && records) { printf("mi_records_range returned %ld; Exact is %ld (diff: %4.2g %%)\n", - range_records,records, + (long) range_records, (long) records, labs((long) range_records-(long) records)*100.0/records); } @@ -667,7 +667,7 @@ int main(int argc, char *argv[]) { puts("Wrong info from mi_info"); printf("Got: records: %ld delete: %ld i_keys: %d\n", - info.records,info.deleted,info.keys); + (long) info.records, (long) info.deleted,info.keys); } if (verbose) { @@ -822,8 +822,8 @@ w_requests: %10lu\n\ writes: %10lu\n\ r_requests: %10lu\n\ reads: %10lu\n", - _my_blocks_used,_my_cache_w_requests, _my_cache_write, - _my_cache_r_requests,_my_cache_read); + my_blocks_used, my_cache_w_requests, my_cache_write, + my_cache_r_requests, my_cache_read); } end_key_cache(); if (blob_buffer) diff --git a/myisam/sp_test.c b/myisam/sp_test.c index 7ae41c2088c..7021cb4a8ee 100644 --- a/myisam/sp_test.c +++ b/myisam/sp_test.c @@ -272,7 +272,7 @@ int run_test(const char *filename) create_key(key, nrecords*upd); print_key(key," INTERSECT\n"); hrows=mi_records_in_range(file,0,key,0,HA_READ_MBR_INTERSECT,record+1,0,0); - printf(" %ld rows\n",hrows); + printf(" %ld rows\n", (long) hrows); if (mi_close(file)) goto err; diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c index 482a594fa73..45cbcdb3ab7 100644 --- a/mysys/mf_keycache.c +++ b/mysys/mf_keycache.c @@ -29,42 +29,42 @@ #include #include -/* - Some compilation flags have been added specifically for this module - to control the following: - - not to let a thread to yield the control when reading directly - from key cache, which might improve performance in many cases; - to enable this add: - #define SERIALIZED_READ_FROM_CACHE - - to set an upper bound for number of threads simultaneously - using the key cache; this setting helps to determine an optimal - size for hash table and improve performance when the number of - blocks in the key cache much less than the number of threads - accessing it; - to set this number equal to add - #define MAX_THREADS - - to substitute calls of pthread_cond_wait for calls of - pthread_cond_timedwait (wait with timeout set up); - this setting should be used only when you want to trap a deadlock - situation, which theoretically should not happen; - to set timeout equal to seconds add - #define KEYCACHE_TIMEOUT - - to enable the module traps and to send debug information from - key cache module to a special debug log add: - #define KEYCACHE_DEBUG - the name of this debug log file can be set through: - #define KEYCACHE_DEBUG_LOG - if the name is not defined, it's set by default; - if the KEYCACHE_DEBUG flag is not set up and we are in a debug - mode, i.e. when ! defined(DBUG_OFF), the debug information from the - module is sent to the regular debug log. +/* + Some compilation flags have been added specifically for this module + to control the following: + - not to let a thread to yield the control when reading directly + from key cache, which might improve performance in many cases; + to enable this add: + #define SERIALIZED_READ_FROM_CACHE + - to set an upper bound for number of threads simultaneously + using the key cache; this setting helps to determine an optimal + size for hash table and improve performance when the number of + blocks in the key cache much less than the number of threads + accessing it; + to set this number equal to add + #define MAX_THREADS + - to substitute calls of pthread_cond_wait for calls of + pthread_cond_timedwait (wait with timeout set up); + this setting should be used only when you want to trap a deadlock + situation, which theoretically should not happen; + to set timeout equal to seconds add + #define KEYCACHE_TIMEOUT + - to enable the module traps and to send debug information from + key cache module to a special debug log add: + #define KEYCACHE_DEBUG + the name of this debug log file can be set through: + #define KEYCACHE_DEBUG_LOG + if the name is not defined, it's set by default; + if the KEYCACHE_DEBUG flag is not set up and we are in a debug + mode, i.e. when ! defined(DBUG_OFF), the debug information from the + module is sent to the regular debug log. - Example of the settings: - #define SERIALIZED_READ_FROM_CACHE - #define MAX_THREADS 100 - #define KEYCACHE_TIMEOUT 1 - #define KEYCACHE_DEBUG - #define KEYCACHE_DEBUG_LOG "my_key_cache_debug.log" + Example of the settings: + #define SERIALIZED_READ_FROM_CACHE + #define MAX_THREADS 100 + #define KEYCACHE_TIMEOUT 1 + #define KEYCACHE_DEBUG + #define KEYCACHE_DEBUG_LOG "my_key_cache_debug.log" */ #if defined(MSDOS) && !defined(M_IC80386) @@ -83,20 +83,24 @@ #define COND_FOR_SAVED 1 #define COND_FOR_READERS 2 -typedef pthread_cond_t KEYCACHE_CONDVAR; -typedef struct st_keycache_wqueue -{ /* info about requests in a waiting queue */ +typedef pthread_cond_t KEYCACHE_CONDVAR; + +/* info about requests in a waiting queue */ +typedef struct st_keycache_wqueue +{ struct st_my_thread_var *last_thread; /* circular list of waiting threads */ } KEYCACHE_WQUEUE; +/* descriptor of the page in the key cache block buffer */ typedef struct st_keycache_page -{ /* descriptor of the page in the key cache block buffer */ +{ int file; /* file to which the page belongs to */ my_off_t filepos; /* position of the page in the file */ } KEYCACHE_PAGE; -typedef struct st_hash_link -{ /* element in the chain of a hash table bucket */ +/* element in the chain of a hash table bucket */ +typedef struct st_hash_link +{ struct st_hash_link *next, **prev; /* to connect links in the same bucket */ struct st_block_link *block; /* reference to the block for the page: */ File file; /* from such a file */ @@ -117,8 +121,9 @@ typedef struct st_hash_link #define PAGE_TO_BE_READ 1 #define PAGE_WAIT_TO_BE_READ 2 +/* key cache block */ typedef struct st_block_link -{ /* key cache block */ +{ struct st_block_link *next_used, **prev_used; /* to connect links in the LRU chain (ring) */ struct st_block_link @@ -143,40 +148,36 @@ static uint key_cache_shift; #define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */ #define FLUSH_CACHE 2000 /* sort this many blocks at once */ -static KEYCACHE_WQUEUE +static KEYCACHE_WQUEUE waiting_for_hash_link; /* queue of requests waiting for a free hash link */ -static KEYCACHE_WQUEUE +static KEYCACHE_WQUEUE waiting_for_block; /* queue of requests waiting for a free block */ -static HASH_LINK **_my_hash_root; /* arr. of entries into hash table buckets */ -static uint _my_hash_entries; /* max number of entries in the hash table */ -static HASH_LINK *_my_hash_link_root; /* memory for hash table links */ -static int _my_hash_links; /* max number of hash links */ -static int _my_hash_links_used; /* number of hash links currently used */ -static HASH_LINK *_my_free_hash_list; /* list of free hash links */ -static BLOCK_LINK *_my_block_root; /* memory for block links */ -static int _my_disk_blocks; /* max number of blocks in the cache */ -static byte HUGE_PTR *_my_block_mem; /* memory for block buffers */ -static BLOCK_LINK *_my_used_last; /* ptr to the last block of the LRU chain */ -ulong _my_blocks_used, /* number of currently used blocks */ - _my_blocks_changed; /* number of currently dirty blocks */ +static HASH_LINK **my_hash_root; /* arr. of entries into hash table buckets */ +static uint my_hash_entries; /* max number of entries in the hash table */ +static HASH_LINK *my_hash_link_root; /* memory for hash table links */ +static int my_hash_links; /* max number of hash links */ +static int my_hash_links_used; /* number of hash links currently used */ +static HASH_LINK *my_free_hash_list; /* list of free hash links */ +static BLOCK_LINK *my_block_root; /* memory for block links */ +static int my_disk_blocks; /* max number of blocks in the cache */ +static byte HUGE_PTR *my_block_mem; /* memory for block buffers */ +static BLOCK_LINK *my_used_last; /* ptr to the last block of the LRU chain */ +ulong my_blocks_used, /* number of currently used blocks */ + my_blocks_changed; /* number of currently dirty blocks */ #if defined(KEYCACHE_DEBUG) static -ulong _my_blocks_available; /* number of blocks available in the LRU chain */ +ulong my_blocks_available; /* number of blocks available in the LRU chain */ #endif /* defined(KEYCACHE_DEBUG) */ -ulong _my_cache_w_requests,_my_cache_write, /* counters */ - _my_cache_r_requests,_my_cache_read; /* for statistics */ -static BLOCK_LINK +ulong my_cache_w_requests, my_cache_write, /* counters */ + my_cache_r_requests, my_cache_read; /* for statistics */ +static BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash table for file dirty blocks */ static BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash table for other file blocks */ /* that are not free */ -#ifndef DBUG_OFF -static my_bool _my_printed; -#endif - #define KEYCACHE_HASH(f, pos) \ - (((ulong) ((pos) >> key_cache_shift)+(ulong) (f)) & (_my_hash_entries-1)) + (((ulong) ((pos) >> key_cache_shift)+(ulong) (f)) & (my_hash_entries-1)) #define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1)) #define DEFAULT_KEYCACHE_DEBUG_LOG "keycache_debug.log" @@ -194,11 +195,11 @@ static void keycache_debug_print _VARARGS((const char *fmt,...)); #define KEYCACHE_DEBUG_CLOSE \ if (keycache_debug_log) fclose(keycache_debug_log) #else -#define KEYCACHE_DEBUG_OPEN +#define KEYCACHE_DEBUG_OPEN #define KEYCACHE_DEBUG_CLOSE #endif /* defined(KEYCACHE_DEBUG_LOG) */ -#if defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG) +#if defined(KEYCACHE_DEBUG_LOG) && defined(KEYCACHE_DEBUG) #define KEYCACHE_DBUG_PRINT(l, m) \ { if (keycache_debug_log) fprintf(keycache_debug_log, "%s: ", l); \ keycache_debug_print m; } @@ -224,15 +225,15 @@ static long keycache_thread_id; #define KEYCACHE_THREAD_TRACE_END(l) \ KEYCACHE_DBUG_PRINT(l,("]thread %ld",keycache_thread_id)) #else -#define KEYCACHE_THREAD_TRACE_BEGIN(l) -#define KEYCACHE_THREAD_TRACE_END(l) -#define KEYCACHE_THREAD_TRACE(l) +#define KEYCACHE_THREAD_TRACE_BEGIN(l) +#define KEYCACHE_THREAD_TRACE_END(l) +#define KEYCACHE_THREAD_TRACE(l) #endif /* defined(KEYCACHE_DEBUG) || !defined(DBUG_OFF) */ #define BLOCK_NUMBER(b) \ - ((uint) (((char*)(b) - (char *) _my_block_root) / sizeof(BLOCK_LINK))) + ((uint) (((char*)(b) - (char *) my_block_root) / sizeof(BLOCK_LINK))) #define HASH_LINK_NUMBER(h) \ - ((uint) (((char*)(h) - (char *) _my_hash_link_root) / sizeof(HASH_LINK))) + ((uint) (((char*)(h) - (char *) my_hash_link_root) / sizeof(HASH_LINK))) #if (defined(KEYCACHE_TIMEOUT) && !defined(__WIN__)) || defined(KEYCACHE_DEBUG) static int keycache_pthread_cond_wait(pthread_cond_t *cond, @@ -266,18 +267,19 @@ static uint next_power(uint value) /* - Initialize the key cache, - return number of blocks in it + Initialize the key cache, + return number of blocks in it */ + int init_key_cache(ulong use_mem) { uint blocks, hash_links, length; int error; - + DBUG_ENTER("init_key_cache"); - + KEYCACHE_DEBUG_OPEN; - if (key_cache_inited && _my_disk_blocks > 0) + if (key_cache_inited && my_disk_blocks > 0) { DBUG_PRINT("warning",("key cache already in use")); DBUG_RETURN(0); @@ -285,101 +287,101 @@ int init_key_cache(ulong use_mem) if (! key_cache_inited) { key_cache_inited=TRUE; - _my_disk_blocks= -1; + my_disk_blocks= -1; key_cache_shift=my_bit_log2(key_cache_block_size); - DBUG_PRINT("info",("key_cache_block_size: %u", + DBUG_PRINT("info",("key_cache_block_size: %u", key_cache_block_size)); -#ifndef DBUG_OFF - _my_printed=0; -#endif } - - _my_cache_w_requests=_my_cache_r_requests=_my_cache_read=_my_cache_write=0; - - _my_block_mem=NULL; - _my_block_root=NULL; - + + my_cache_w_requests= my_cache_r_requests= my_cache_read= my_cache_write=0; + + my_block_mem=NULL; + my_block_root=NULL; + blocks= (uint) (use_mem/(sizeof(BLOCK_LINK)+2*sizeof(HASH_LINK)+ sizeof(HASH_LINK*)*5/4+key_cache_block_size)); /* It doesn't make sense to have too few blocks (less than 8) */ - if (blocks >= 8 && _my_disk_blocks < 0) + if (blocks >= 8 && my_disk_blocks < 0) { for (;;) { - /* Set _my_hash_entries to the next bigger 2 power */ - if ((_my_hash_entries=next_power(blocks)) < blocks*5/4) - _my_hash_entries<<=1; + /* Set my_hash_entries to the next bigger 2 power */ + if ((my_hash_entries=next_power(blocks)) < blocks*5/4) + my_hash_entries<<=1; hash_links=2*blocks; #if defined(MAX_THREADS) if (hash_links < MAX_THREADS + blocks - 1) hash_links=MAX_THREADS + blocks - 1; #endif - while ((length=blocks*sizeof(BLOCK_LINK)+hash_links*sizeof(HASH_LINK)+ - sizeof(HASH_LINK*)*_my_hash_entries)+ - ((ulong) blocks << key_cache_shift) > - use_mem) + while ((length=(ALIGN_SIZE(blocks*sizeof(BLOCK_LINK))+ + ALIGN_SIZE(hash_links*sizeof(HASH_LINK))+ + ALIGN_SIZE(sizeof(HASH_LINK*)*my_hash_entries)))+ + ((ulong) blocks << key_cache_shift) > use_mem) blocks--; /* Allocate memory for cache page buffers */ - if ((_my_block_mem=my_malloc_lock((ulong) blocks*key_cache_block_size, - MYF(0)))) + if ((my_block_mem=my_malloc_lock((ulong) blocks*key_cache_block_size, + MYF(0)))) { - /* + /* Allocate memory for blocks, hash_links and hash entries; - For each block 2 hash links are allocated + For each block 2 hash links are allocated */ - if ((_my_block_root=(BLOCK_LINK*) my_malloc((uint) length,MYF(0)))) + if ((my_block_root=(BLOCK_LINK*) my_malloc((uint) length,MYF(0)))) break; - my_free_lock(_my_block_mem,MYF(0)); + my_free_lock(my_block_mem,MYF(0)); } - if (blocks < 8) + if (blocks < 8) { my_errno=ENOMEM; goto err; } blocks=blocks/4*3; } - _my_disk_blocks=(int) blocks; - _my_hash_links=hash_links; - _my_hash_root=(HASH_LINK**) (_my_block_root+blocks); - _my_hash_link_root=(HASH_LINK*) (_my_hash_root+_my_hash_entries); - bzero((byte*) _my_block_root,_my_disk_blocks*sizeof(BLOCK_LINK)); - bzero((byte*) _my_hash_root,_my_hash_entries*sizeof(HASH_LINK*)); - bzero((byte*) _my_hash_link_root,_my_hash_links*sizeof(HASH_LINK)); - _my_hash_links_used=0; - _my_free_hash_list=NULL; - _my_blocks_used=_my_blocks_changed=0; + my_disk_blocks=(int) blocks; + my_hash_links=hash_links; + my_hash_root= (HASH_LINK**) ((char*) my_block_root + + ALIGN_SIZE(blocks*sizeof(BLOCK_LINK))); + my_hash_link_root= (HASH_LINK*) ((char*) my_hash_root + + ALIGN_SIZE((sizeof(HASH_LINK*) * + my_hash_entries))); + bzero((byte*) my_block_root, my_disk_blocks*sizeof(BLOCK_LINK)); + bzero((byte*) my_hash_root, my_hash_entries*sizeof(HASH_LINK*)); + bzero((byte*) my_hash_link_root, my_hash_links*sizeof(HASH_LINK)); + my_hash_links_used=0; + my_free_hash_list=NULL; + my_blocks_used= my_blocks_changed=0; #if defined(KEYCACHE_DEBUG) - _my_blocks_available=0; + my_blocks_available=0; #endif /* The LRU chain is empty after initialization */ - _my_used_last=NULL; - + my_used_last=NULL; + waiting_for_hash_link.last_thread=NULL; waiting_for_block.last_thread=NULL; DBUG_PRINT("exit", ("disk_blocks: %d block_root: %lx hash_entries: %d hash_root: %lx \ hash_links: %d hash_link_root %lx", - _my_disk_blocks,_my_block_root,_my_hash_entries,_my_hash_root, - _my_hash_links,_my_hash_link_root)); + my_disk_blocks, my_block_root, my_hash_entries, my_hash_root, + my_hash_links, my_hash_link_root)); } bzero((gptr) changed_blocks,sizeof(changed_blocks[0])*CHANGED_BLOCKS_HASH); bzero((gptr) file_blocks,sizeof(file_blocks[0])*CHANGED_BLOCKS_HASH); - + DBUG_RETURN((int) blocks); - + err: error=my_errno; - if (_my_block_mem) - my_free_lock((gptr) _my_block_mem,MYF(0)); - if (_my_block_mem) - my_free((gptr) _my_block_root,MYF(0)); + if (my_block_mem) + my_free_lock((gptr) my_block_mem,MYF(0)); + if (my_block_mem) + my_free((gptr) my_block_root,MYF(0)); my_errno=error; DBUG_RETURN(0); } /* - Resize the key cache + Resize the key cache */ int resize_key_cache(ulong use_mem) { @@ -394,51 +396,54 @@ int resize_key_cache(ulong use_mem) end_key_cache(); /* the following will work even if memory is 0 */ blocks=init_key_cache(use_mem); - keycache_pthread_mutex_unlock(&THR_LOCK_keycache); + keycache_pthread_mutex_unlock(&THR_LOCK_keycache); return blocks; } /* - Remove key_cache from memory + Remove key_cache from memory */ + void end_key_cache(void) { DBUG_ENTER("end_key_cache"); - if (_my_disk_blocks > 0) + if (my_disk_blocks > 0) { - if (_my_block_mem) + if (my_block_mem) { - my_free_lock((gptr) _my_block_mem,MYF(0)); - my_free((gptr) _my_block_root,MYF(0)); + my_free_lock((gptr) my_block_mem,MYF(0)); + my_free((gptr) my_block_root,MYF(0)); } - _my_disk_blocks= -1; + my_disk_blocks= -1; } KEYCACHE_DEBUG_CLOSE; key_cache_inited=0; DBUG_PRINT("status", ("used: %d changed: %d w_requests: %ld \ writes: %ld r_requests: %ld reads: %ld", - _my_blocks_used,_my_blocks_changed,_my_cache_w_requests, - _my_cache_write,_my_cache_r_requests,_my_cache_read)); + my_blocks_used, my_blocks_changed, my_cache_w_requests, + my_cache_write, my_cache_r_requests, my_cache_read)); DBUG_VOID_RETURN; } /* end_key_cache */ /* - Link a thread into double-linked queue of waiting threads + Link a thread into double-linked queue of waiting threads */ + static inline void link_into_queue(KEYCACHE_WQUEUE *wqueue, struct st_my_thread_var *thread) -{ +{ struct st_my_thread_var *last; if (! (last=wqueue->last_thread)) - { /* Queue is empty */ + { + /* Queue is empty */ thread->next=thread; thread->prev=&thread->next; } else - { + { thread->prev=last->next->prev; last->next->prev=&thread->next; thread->next=last->next; @@ -448,16 +453,17 @@ static inline void link_into_queue(KEYCACHE_WQUEUE *wqueue, } /* - Unlink a thread from double-linked queue of waiting threads + Unlink a thread from double-linked queue of waiting threads */ + static inline void unlink_from_queue(KEYCACHE_WQUEUE *wqueue, struct st_my_thread_var *thread) -{ +{ KEYCACHE_DBUG_PRINT("unlink_from_queue", ("thread %ld", thread->id)); if (thread->next == thread) /* The queue contains only one member */ wqueue->last_thread=NULL; - else + else { thread->next->prev=thread->prev; *thread->prev=thread->next; @@ -470,16 +476,17 @@ static inline void unlink_from_queue(KEYCACHE_WQUEUE *wqueue, /* - Add a thread to single-linked queue of waiting threads + Add a thread to single-linked queue of waiting threads */ + static inline void add_to_queue(KEYCACHE_WQUEUE *wqueue, struct st_my_thread_var *thread) -{ +{ struct st_my_thread_var *last; if (! (last=wqueue->last_thread)) thread->next=thread; else - { + { thread->next=last->next; last->next=thread; } @@ -488,10 +495,11 @@ static inline void add_to_queue(KEYCACHE_WQUEUE *wqueue, /* - Remove all threads from queue signaling them to proceed + Remove all threads from queue signaling them to proceed */ -static inline void release_queue(KEYCACHE_WQUEUE *wqueue) -{ + +static void release_queue(KEYCACHE_WQUEUE *wqueue) +{ struct st_my_thread_var *last=wqueue->last_thread; struct st_my_thread_var *next=last->next; struct st_my_thread_var *thread; @@ -509,8 +517,9 @@ static inline void release_queue(KEYCACHE_WQUEUE *wqueue) /* - Unlink a block from the chain of dirty/clean blocks + Unlink a block from the chain of dirty/clean blocks */ + static inline void unlink_changed(BLOCK_LINK *block) { if (block->next_changed) @@ -520,8 +529,9 @@ static inline void unlink_changed(BLOCK_LINK *block) /* - Link a block into the chain of dirty/clean blocks + Link a block into the chain of dirty/clean blocks */ + static inline void link_changed(BLOCK_LINK *block, BLOCK_LINK **phead) { block->prev_changed=phead; @@ -532,11 +542,12 @@ static inline void link_changed(BLOCK_LINK *block, BLOCK_LINK **phead) /* - Unlink a block from the chain of dirty/clean blocks, if it's asked for, - and link it to the chain of clean blocks for the specified file + Unlink a block from the chain of dirty/clean blocks, if it's asked for, + and link it to the chain of clean blocks for the specified file */ -static inline void link_to_file_list(BLOCK_LINK *block,int file, - my_bool unlink) + +static void link_to_file_list(BLOCK_LINK *block,int file, + my_bool unlink) { if (unlink) unlink_changed(block); @@ -544,27 +555,29 @@ static inline void link_to_file_list(BLOCK_LINK *block,int file, if (block->status & BLOCK_CHANGED) { block->status&=~BLOCK_CHANGED; - _my_blocks_changed--; + my_blocks_changed--; } } -/* - Unlink a block from the chain of clean blocks for the specified - file and link it to the chain of dirty blocks for this file +/* + Unlink a block from the chain of clean blocks for the specified + file and link it to the chain of dirty blocks for this file */ + static inline void link_to_changed_list(BLOCK_LINK *block) { unlink_changed(block); link_changed(block,&changed_blocks[FILE_HASH(block->hash_link->file)]); block->status|=BLOCK_CHANGED; - _my_blocks_changed++; + my_blocks_changed++; } /* - Link a block to the LRU chain at the beginning or at the end + Link a block to the LRU chain at the beginning or at the end */ + static void link_block(BLOCK_LINK *block, my_bool at_end) { KEYCACHE_DBUG_ASSERT(! (block->hash_link && block->hash_link->requests)); @@ -579,7 +592,7 @@ static void link_block(BLOCK_LINK *block, my_bool at_end) { thread=next_thread; next_thread=thread->next; - /* + /* We notify about the event all threads that ask for the same page as the first thread in the queue */ @@ -589,78 +602,79 @@ static void link_block(BLOCK_LINK *block, my_bool at_end) unlink_from_queue(&waiting_for_block, thread); block->requests++; } - } + } while (thread != last_thread); hash_link->block=block; KEYCACHE_THREAD_TRACE("link_block: after signaling"); #if defined(KEYCACHE_DEBUG) - KEYCACHE_DBUG_PRINT("link_block", + KEYCACHE_DBUG_PRINT("link_block", ("linked,unlinked block %u status=%x #requests=%u #available=%u", BLOCK_NUMBER(block),block->status, - block->requests,_my_blocks_available)); + block->requests, my_blocks_available)); #endif return; } - if (_my_used_last) + if (my_used_last) { - _my_used_last->next_used->prev_used=&block->next_used; - block->next_used=_my_used_last->next_used; - block->prev_used=&_my_used_last->next_used; - _my_used_last->next_used=block; + my_used_last->next_used->prev_used=&block->next_used; + block->next_used= my_used_last->next_used; + block->prev_used= &my_used_last->next_used; + my_used_last->next_used=block; if (at_end) - _my_used_last=block; + my_used_last=block; } else { /* The LRU chain is empty */ - _my_used_last=block->next_used=block; + my_used_last=block->next_used=block; block->prev_used=&block->next_used; } KEYCACHE_THREAD_TRACE("link_block"); #if defined(KEYCACHE_DEBUG) - _my_blocks_available++; - KEYCACHE_DBUG_PRINT("link_block", + my_blocks_available++; + KEYCACHE_DBUG_PRINT("link_block", ("linked block %u:%1u status=%x #requests=%u #available=%u", BLOCK_NUMBER(block),at_end,block->status, - block->requests,_my_blocks_available)); - KEYCACHE_DBUG_ASSERT(_my_blocks_available <= _my_blocks_used); + block->requests, my_blocks_available)); + KEYCACHE_DBUG_ASSERT(my_blocks_available <= my_blocks_used); #endif } /* - Unlink a block from the LRU chain + Unlink a block from the LRU chain */ -static inline void unlink_block(BLOCK_LINK *block) + +static void unlink_block(BLOCK_LINK *block) { if (block->next_used == block) /* The list contains only one member */ - _my_used_last=NULL; - else + my_used_last=NULL; + else { block->next_used->prev_used=block->prev_used; *block->prev_used=block->next_used; - if (_my_used_last == block) - _my_used_last=STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used); + if (my_used_last == block) + my_used_last=STRUCT_PTR(BLOCK_LINK, next_used, block->prev_used); } block->next_used=NULL; - + KEYCACHE_THREAD_TRACE("unlink_block"); #if defined(KEYCACHE_DEBUG) - _my_blocks_available--; - KEYCACHE_DBUG_PRINT("unlink_block", + my_blocks_available--; + KEYCACHE_DBUG_PRINT("unlink_block", ("unlinked block %u status=%x #requests=%u #available=%u", BLOCK_NUMBER(block),block->status, - block->requests,_my_blocks_available)); - KEYCACHE_DBUG_ASSERT(_my_blocks_available >= 0); + block->requests, my_blocks_available)); + KEYCACHE_DBUG_ASSERT(my_blocks_available >= 0); #endif } /* - Register requests for a block + Register requests for a block */ -static inline void reg_requests(BLOCK_LINK *block, int count) +static void reg_requests(BLOCK_LINK *block, int count) { if (! block->requests) /* First request for the block unlinks it */ @@ -669,10 +683,11 @@ static inline void reg_requests(BLOCK_LINK *block, int count) } -/* - Unregister request for a block - linking it to the LRU chain if it's the last request +/* + Unregister request for a block + linking it to the LRU chain if it's the last request */ + static inline void unreg_request(BLOCK_LINK *block, int at_end) { if (! --block->requests) @@ -680,18 +695,19 @@ static inline void unreg_request(BLOCK_LINK *block, int at_end) } /* - Remove a reader of the page in block + Remove a reader of the page in block */ + static inline void remove_reader(BLOCK_LINK *block) -{ +{ if (! --block->hash_link->requests && block->condvar) keycache_pthread_cond_signal(block->condvar); } /* - Wait until the last reader of the page in block - signals on its termination + Wait until the last reader of the page in block + signals on its termination */ static inline void wait_for_readers(BLOCK_LINK *block) { @@ -706,8 +722,9 @@ static inline void wait_for_readers(BLOCK_LINK *block) /* - add a hash link to a bucket in the hash_table + Add a hash link to a bucket in the hash_table */ + static inline void link_hash(HASH_LINK **start, HASH_LINK *hash_link) { if (*start) @@ -719,9 +736,10 @@ static inline void link_hash(HASH_LINK **start, HASH_LINK *hash_link) /* - Remove a hash link from the hash table + Remove a hash link from the hash table */ -static inline void unlink_hash(HASH_LINK *hash_link) + +static void unlink_hash(HASH_LINK *hash_link) { KEYCACHE_DBUG_PRINT("unlink_hash", ("file %u, filepos %lu #requests=%u", (uint) hash_link->file,(ulong) hash_link->diskpos, hash_link->requests)); @@ -730,7 +748,8 @@ static inline void unlink_hash(HASH_LINK *hash_link) hash_link->next->prev=hash_link->prev; hash_link->block=NULL; if (waiting_for_hash_link.last_thread) - { /* Signal that A free hash link appeared */ + { + /* Signal that A free hash link appeared */ struct st_my_thread_var *last_thread=waiting_for_hash_link.last_thread; struct st_my_thread_var *first_thread=last_thread->next; struct st_my_thread_var *next_thread=first_thread; @@ -745,7 +764,7 @@ static inline void unlink_hash(HASH_LINK *hash_link) thread=next_thread; page= (KEYCACHE_PAGE *) thread->opt_info; next_thread=thread->next; - /* + /* We notify about the event all threads that ask for the same page as the first thread in the queue */ @@ -756,18 +775,20 @@ static inline void unlink_hash(HASH_LINK *hash_link) } } while (thread != last_thread); - link_hash(&_my_hash_root[KEYCACHE_HASH(hash_link->file, - hash_link->diskpos)], hash_link); + link_hash(&my_hash_root[KEYCACHE_HASH(hash_link->file, + hash_link->diskpos)], hash_link); return; - } - hash_link->next=_my_free_hash_list; - _my_free_hash_list=hash_link; + } + hash_link->next= my_free_hash_list; + my_free_hash_list=hash_link; } + /* - Get the hash link for a page + Get the hash link for a page */ -static inline HASH_LINK *get_hash_link(int file, my_off_t filepos) + +static HASH_LINK *get_hash_link(int file, my_off_t filepos) { reg1 HASH_LINK *hash_link, **start; KEYCACHE_PAGE page; @@ -784,7 +805,7 @@ restart: start contains the head of the bucket list, hash_link points to the first member of the list */ - hash_link=*(start=&_my_hash_root[KEYCACHE_HASH(file, filepos)]); + hash_link= *(start= &my_hash_root[KEYCACHE_HASH(file, filepos)]); #if defined(KEYCACHE_DEBUG) cnt=0; #endif @@ -795,7 +816,7 @@ restart: hash_link= hash_link->next; #if defined(KEYCACHE_DEBUG) cnt++; - if (! (cnt <= _my_hash_links_used)) + if (! (cnt <= my_hash_links_used)) { int i; for (i=0, hash_link=*start ; @@ -805,22 +826,24 @@ restart: (uint) hash_link->file,(ulong) hash_link->diskpos)); } } - KEYCACHE_DBUG_ASSERT(n <= _my_hash_links_used); + KEYCACHE_DBUG_ASSERT(n <= my_hash_links_used); #endif } if (! hash_link) - { /* There is no hash link in the hash table for the pair (file, filepos) */ - if (_my_free_hash_list) + { + /* There is no hash link in the hash table for the pair (file, filepos) */ + if (my_free_hash_list) { - hash_link=_my_free_hash_list; - _my_free_hash_list=hash_link->next; + hash_link= my_free_hash_list; + my_free_hash_list=hash_link->next; } - else if (_my_hash_links_used < _my_hash_links) + else if (my_hash_links_used < my_hash_links) { - hash_link= &_my_hash_link_root[_my_hash_links_used++]; + hash_link= &my_hash_link_root[my_hash_links_used++]; } else - { /* Wait for a free hash link */ + { + /* Wait for a free hash link */ struct st_my_thread_var *thread=my_thread_var; KEYCACHE_DBUG_PRINT("get_hash_link", ("waiting")); page.file=file; page.filepos=filepos; @@ -836,16 +859,17 @@ restart: } /* Register the request for the page */ hash_link->requests++; - + return hash_link; } /* - Get a block for the file page requested by a keycache read/write operation; - If the page is not in the cache return a free block, if there is none - return the lru block after saving its buffer if the page is dirty -*/ + Get a block for the file page requested by a keycache read/write operation; + If the page is not in the cache return a free block, if there is none + return the lru block after saving its buffer if the page is dirty +*/ + static BLOCK_LINK *find_key_block(int file, my_off_t filepos, int wrmode, int *page_st) { @@ -853,7 +877,7 @@ static BLOCK_LINK *find_key_block(int file, my_off_t filepos, BLOCK_LINK *block; int error=0; int page_status; - + DBUG_ENTER("find_key_block"); KEYCACHE_THREAD_TRACE("find_key_block:begin"); DBUG_PRINT("enter", ("file %u, filepos %lu, wrmode %lu", @@ -863,22 +887,22 @@ static BLOCK_LINK *find_key_block(int file, my_off_t filepos, #if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) DBUG_EXECUTE("check_keycache2",test_key_cache("start of find_key_block",0);); #endif - + restart: /* Find the hash link for the requested page (file, filepos) */ hash_link=get_hash_link(file, filepos); - + page_status=-1; if ((block=hash_link->block) && block->hash_link == hash_link && (block->status & BLOCK_READ)) page_status=PAGE_READ; - - if (page_status == PAGE_READ && (block->status & BLOCK_IN_SWITCH)) - { /* This is a request for a page to be removed from cache */ - - KEYCACHE_DBUG_PRINT("find_key_block", + + if (page_status == PAGE_READ && (block->status & BLOCK_IN_SWITCH)) + { + /* This is a request for a page to be removed from cache */ + KEYCACHE_DBUG_PRINT("find_key_block", ("request for old page in block %u",BLOCK_NUMBER(block))); - /* + /* Only reading requests can proceed until the old dirty page is flushed, all others are to be suspended, then resubmitted */ @@ -887,7 +911,7 @@ restart: else { hash_link->requests--; - KEYCACHE_DBUG_PRINT("find_key_block", + KEYCACHE_DBUG_PRINT("find_key_block", ("request waiting for old page to be saved")); { struct st_my_thread_var *thread=my_thread_var; @@ -900,47 +924,51 @@ restart: } while(thread->next); } - KEYCACHE_DBUG_PRINT("find_key_block", + KEYCACHE_DBUG_PRINT("find_key_block", ("request for old page resubmitted")); /* Resubmit the request */ goto restart; } } else - { /* This is a request for a new page or for a page not to be removed */ + { + /* This is a request for a new page or for a page not to be removed */ if (! block) - { /* No block is assigned for the page yet */ - if (_my_blocks_used < (uint) _my_disk_blocks) - { /* There are some never used blocks, take first of them */ - hash_link->block=block= &_my_block_root[_my_blocks_used]; - block->buffer=ADD_TO_PTR(_my_block_mem, - ((ulong) _my_blocks_used*key_cache_block_size), + { + /* No block is assigned for the page yet */ + if (my_blocks_used < (uint) my_disk_blocks) + { + /* There are some never used blocks, take first of them */ + hash_link->block=block= &my_block_root[my_blocks_used]; + block->buffer=ADD_TO_PTR(my_block_mem, + ((ulong) my_blocks_used*key_cache_block_size), byte*); block->status=0; block->length=0; block->offset=key_cache_block_size; block->requests=1; - _my_blocks_used++; + my_blocks_used++; link_to_file_list(block, file, 0); block->hash_link=hash_link; page_status=PAGE_TO_BE_READ; - KEYCACHE_DBUG_PRINT("find_key_block", + KEYCACHE_DBUG_PRINT("find_key_block", ("got never used block %u",BLOCK_NUMBER(block))); } else - { /* There are no never used blocks, use a block from the LRU chain */ + { + /* There are no never used blocks, use a block from the LRU chain */ /* - Wait until a new block is added to the LRU chain; + Wait until a new block is added to the LRU chain; several threads might wait here for the same page, all of them must get the same block */ - - if (! _my_used_last) + + if (! my_used_last) { struct st_my_thread_var *thread=my_thread_var; thread->opt_info=(void *) hash_link; link_into_queue(&waiting_for_block, thread); - do + do { keycache_pthread_cond_wait(&thread->suspend,&THR_LOCK_keycache); } @@ -950,50 +978,53 @@ restart: block=hash_link->block; if (! block) { - /* - Take the first block from the LRU chain + /* + Take the first block from the LRU chain unlinking it from the chain */ - block=_my_used_last->next_used; + block= my_used_last->next_used; reg_requests(block,1); hash_link->block=block; } - - if (block->hash_link != hash_link && ! (block->status & BLOCK_IN_SWITCH) ) - { /* this is a primary request for a new page */ + + if (block->hash_link != hash_link && + ! (block->status & BLOCK_IN_SWITCH) ) + { + /* this is a primary request for a new page */ block->status|=BLOCK_IN_SWITCH; - - KEYCACHE_DBUG_PRINT("find_key_block", + + KEYCACHE_DBUG_PRINT("find_key_block", ("got block %u for new page",BLOCK_NUMBER(block))); - + if (block->status & BLOCK_CHANGED) - { /* The block contains a dirty page - push it out of the cache */ - + { + /* The block contains a dirty page - push it out of the cache */ + KEYCACHE_DBUG_PRINT("find_key_block",("block is dirty")); - + keycache_pthread_mutex_unlock(&THR_LOCK_keycache); - /* - The call is thread safe because only the current - thread might change the block->hash_link value + /* + The call is thread safe because only the current + thread might change the block->hash_link value */ error=my_pwrite(block->hash_link->file,block->buffer, block->length,block->hash_link->diskpos, - MYF(MY_NABP | MY_WAIT_IF_FULL)); + MYF(MY_NABP | MY_WAIT_IF_FULL)); keycache_pthread_mutex_lock(&THR_LOCK_keycache); - _my_cache_write++; + my_cache_write++; } - + block->status|=BLOCK_REASSIGNED; if (block->hash_link) { - /* - Wait until all pending read requests - for this page are executed - (we could have avoided this waiting, if we had read - a page in the cache in a sweep, without yielding control) + /* + Wait until all pending read requests + for this page are executed + (we could have avoided this waiting, if we had read + a page in the cache in a sweep, without yielding control) */ wait_for_readers(block); - + /* Remove the hash link for this page from the hash table */ unlink_hash(block->hash_link); /* All pending requests for this page must be resubmitted */ @@ -1006,7 +1037,7 @@ restart: block->offset=key_cache_block_size; block->hash_link=hash_link; page_status=PAGE_TO_BE_READ; - + KEYCACHE_DBUG_ASSERT(block->hash_link->block == block); KEYCACHE_DBUG_ASSERT(hash_link->block->hash_link == hash_link); } @@ -1018,8 +1049,8 @@ restart: PAGE_READ : PAGE_WAIT_TO_BE_READ; } } - - _my_cache_read++; + + my_cache_read++; } else { @@ -1029,10 +1060,10 @@ restart: PAGE_READ : PAGE_WAIT_TO_BE_READ; } } - + KEYCACHE_DBUG_ASSERT(page_status != -1); *page_st=page_status; - + #if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) DBUG_EXECUTE("check_keycache2",test_key_cache("end of find_key_block",0);); #endif @@ -1042,55 +1073,58 @@ restart: /* - Read into a key cache block buffer from disk; - do not to report error when the size of successfully read - portion is less than read_length, but not less than min_length + Read into a key cache block buffer from disk; + do not to report error when the size of successfully read + portion is less than read_length, but not less than min_length */ + static void read_block(BLOCK_LINK *block, uint read_length, uint min_length, my_bool primary) { uint got_length; - + /* On entry THR_LOCK_keycache is locked */ - + KEYCACHE_THREAD_TRACE("read_block"); if (primary) - { /* - This code is executed only by threads - that submitted primary requests + { + /* + This code is executed only by threads + that submitted primary requests */ - - KEYCACHE_DBUG_PRINT("read_block", + + KEYCACHE_DBUG_PRINT("read_block", ("page to be read by primary request")); - + /* Page is not in buffer yet, is to be read from disk */ keycache_pthread_mutex_unlock(&THR_LOCK_keycache); got_length=my_pread(block->hash_link->file,block->buffer, read_length,block->hash_link->diskpos,MYF(0)); keycache_pthread_mutex_lock(&THR_LOCK_keycache); - if (got_length < min_length) + if (got_length < min_length) block->status|=BLOCK_ERROR; else { block->status=BLOCK_READ; block->length=got_length; } - KEYCACHE_DBUG_PRINT("read_block", + KEYCACHE_DBUG_PRINT("read_block", ("primary request: new page in cache")); /* Signal that all pending requests for this page now can be processed */ if (block->wqueue[COND_FOR_REQUESTED].last_thread) release_queue(&block->wqueue[COND_FOR_REQUESTED]); } - else - { /* - This code is executed only by threads - that submitted secondary requests + else + { + /* + This code is executed only by threads + that submitted secondary requests */ - KEYCACHE_DBUG_PRINT("read_block", + KEYCACHE_DBUG_PRINT("read_block", ("secondary request waiting for new page to be read")); { struct st_my_thread_var *thread=my_thread_var; - /* Put the request into a queue and wait until it can be processed */ + /* Put the request into a queue and wait until it can be processed */ add_to_queue(&block->wqueue[COND_FOR_REQUESTED],thread); do { @@ -1098,44 +1132,45 @@ static void read_block(BLOCK_LINK *block, uint read_length, } while (thread->next); } - KEYCACHE_DBUG_PRINT("read_block", + KEYCACHE_DBUG_PRINT("read_block", ("secondary request: new page in cache")); } } /* - Read a block of data from a cached file into a buffer; - if return_buffer is set then the cache buffer is returned if - it can be used; - filepos must be a multiple of 'block_length', but it doesn't - have to be a multiple of key_cache_block_size; - returns adress from where data is read + Read a block of data from a cached file into a buffer; + if return_buffer is set then the cache buffer is returned if + it can be used; + filepos must be a multiple of 'block_length', but it doesn't + have to be a multiple of key_cache_block_size; + returns adress from where data is read */ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length, - uint block_length __attribute__((unused)), - int return_buffer __attribute__((unused))) + uint block_length __attribute__((unused)), + int return_buffer __attribute__((unused))) { int error=0; DBUG_ENTER("key_cache_read"); DBUG_PRINT("enter", ("file %u, filepos %lu, length %u", (uint) file,(ulong) filepos,length)); - - if (_my_disk_blocks > 0) - { /* Key cache is used */ + + if (my_disk_blocks > 0) + { + /* Key cache is used */ reg1 BLOCK_LINK *block; uint offset= (uint) (filepos & (key_cache_block_size-1)); byte *start=buff; uint read_length; uint status; int page_st; - + #ifndef THREAD if (block_length > key_cache_block_size || offset) return_buffer=0; #endif - + /* Read data in key_cache_block_size increments */ filepos-= offset; do @@ -1144,7 +1179,7 @@ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length, key_cache_block_size : length; KEYCACHE_DBUG_ASSERT(read_length > 0); keycache_pthread_mutex_lock(&THR_LOCK_keycache); - _my_cache_r_requests++; + my_cache_r_requests++; block=find_key_block(file,filepos,0,&page_st); if (page_st != PAGE_READ) { @@ -1154,26 +1189,26 @@ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length, } else if (! (block->status & BLOCK_ERROR) && block->length < read_length + offset) - { - /* - Impossible if nothing goes wrong: - this could only happen if we are using a file with - small key blocks and are trying to read outside the file + { + /* + Impossible if nothing goes wrong: + this could only happen if we are using a file with + small key blocks and are trying to read outside the file */ my_errno=-1; block->status|=BLOCK_ERROR; } - + if (! ((status=block->status) & BLOCK_ERROR)) { #ifndef THREAD - if (! return_buffer) + if (! return_buffer) #endif { #if !defined(SERIALIZED_READ_FROM_CACHE) keycache_pthread_mutex_unlock(&THR_LOCK_keycache); #endif - + /* Copy data from the cache buffer */ if (!(read_length & 511)) bmove512(buff,block->buffer+offset,read_length); @@ -1185,35 +1220,35 @@ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length, #endif } } - + remove_reader(block); - /* - Link the block into the LRU chain - if it's the last submitted request for the block + /* + Link the block into the LRU chain + if it's the last submitted request for the block */ unreg_request(block,1); - + keycache_pthread_mutex_unlock(&THR_LOCK_keycache); - + if (status & BLOCK_ERROR) DBUG_RETURN((byte *) 0); - + #ifndef THREAD if (return_buffer) return (block->buffer); #endif - + buff+=read_length; filepos+=read_length; offset=0; - + } while ((length-= read_length)); DBUG_RETURN(start); } - + /* Key cache is not used */ - statistic_increment(_my_cache_r_requests,&THR_LOCK_keycache); - statistic_increment(_my_cache_read,&THR_LOCK_keycache); + statistic_increment(my_cache_r_requests,&THR_LOCK_keycache); + statistic_increment(my_cache_read,&THR_LOCK_keycache); if (my_pread(file,(byte*) buff,length,filepos,MYF(MY_NABP))) error=1; DBUG_RETURN(error? (byte*) 0 : buff); @@ -1221,12 +1256,13 @@ byte *key_cache_read(File file, my_off_t filepos, byte *buff, uint length, /* - Write a buffer into disk; - filepos must be a multiple of 'block_length', but it doesn't - have to be a multiple of key cache block size; - if !dont_write then all dirty pages involved in writing should - have been flushed from key cache before the function starts + Write a buffer into disk; + filepos must be a multiple of 'block_length', but it doesn't + have to be a multiple of key cache block size; + if !dont_write then all dirty pages involved in writing should + have been flushed from key cache before the function starts */ + int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, uint block_length __attribute__((unused)), int dont_write) @@ -1239,31 +1275,33 @@ int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, (uint) file,(ulong) filepos,length,block_length)); if (!dont_write) - { /* Force writing from buff into disk */ - statistic_increment(_my_cache_write, &THR_LOCK_keycache); + { + /* Force writing from buff into disk */ + statistic_increment(my_cache_write, &THR_LOCK_keycache); if (my_pwrite(file,buff,length,filepos,MYF(MY_NABP | MY_WAIT_IF_FULL))) DBUG_RETURN(1); } - + #if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) DBUG_EXECUTE("check_keycache",test_key_cache("start of key_cache_write",1);); #endif - - if (_my_disk_blocks > 0) - { /* Key cache is used */ + + if (my_disk_blocks > 0) + { + /* Key cache is used */ uint read_length; uint offset= (uint) (filepos & (key_cache_block_size-1)); int page_st; - + /* Write data in key_cache_block_size increments */ filepos-= offset; do { read_length= length > key_cache_block_size ? - key_cache_block_size : length; + key_cache_block_size : length; KEYCACHE_DBUG_ASSERT(read_length > 0); keycache_pthread_mutex_lock(&THR_LOCK_keycache); - _my_cache_w_requests++; + my_cache_w_requests++; block=find_key_block(file, filepos, 1, &page_st); if (page_st != PAGE_READ && (offset || read_length < key_cache_block_size)) @@ -1271,19 +1309,20 @@ int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, offset + read_length >= key_cache_block_size? offset : key_cache_block_size, offset,(my_bool)(page_st == PAGE_TO_BE_READ)); - + if (!dont_write) - { /* buff has been written to disk at start */ - if ((block->status & BLOCK_CHANGED) && + { + /* buff has been written to disk at start */ + if ((block->status & BLOCK_CHANGED) && (!offset && read_length >= key_cache_block_size)) link_to_file_list(block, block->hash_link->file, 1); } else if (! (block->status & BLOCK_CHANGED)) link_to_changed_list(block); - + set_if_smaller(block->offset,offset) set_if_bigger(block->length,read_length+offset); - + if (! (block->status & BLOCK_ERROR)) { if (!(read_length & 511)) @@ -1291,26 +1330,26 @@ int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, else memcpy(block->buffer+offset,buff,(size_t) read_length); } - - block->status|=BLOCK_READ; - + + block->status|=BLOCK_READ; + /* Unregister the request */ block->hash_link->requests--; unreg_request(block,1); - + if (block->status & BLOCK_ERROR) { keycache_pthread_mutex_unlock(&THR_LOCK_keycache); error=1; break; } - + keycache_pthread_mutex_unlock(&THR_LOCK_keycache); - + buff+=read_length; filepos+=read_length; offset=0; - + } while ((length-= read_length)); } else @@ -1318,8 +1357,8 @@ int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, /* Key cache is not used */ if (dont_write) { - statistic_increment(_my_cache_w_requests, &THR_LOCK_keycache); - statistic_increment(_my_cache_write, &THR_LOCK_keycache); + statistic_increment(my_cache_w_requests, &THR_LOCK_keycache); + statistic_increment(my_cache_write, &THR_LOCK_keycache); if (my_pwrite(file,(byte*) buff,length,filepos,MYF(MY_NABP | MY_WAIT_IF_FULL))) error=1; } @@ -1332,32 +1371,33 @@ int key_cache_write(File file, my_off_t filepos, byte *buff, uint length, } -/* - Free block: remove reference to it from hash table, - remove it from the chain file of dirty/clean blocks - and add it at the beginning of the LRU chain -*/ +/* + Free block: remove reference to it from hash table, + remove it from the chain file of dirty/clean blocks + and add it at the beginning of the LRU chain +*/ + static void free_block(BLOCK_LINK *block) { KEYCACHE_THREAD_TRACE("free block"); - KEYCACHE_DBUG_PRINT("free_block", - ("block %u to be freed",BLOCK_NUMBER(block))); - if (block->hash_link) + KEYCACHE_DBUG_PRINT("free_block", + ("block %u to be freed",BLOCK_NUMBER(block))); + if (block->hash_link) { block->status|=BLOCK_REASSIGNED; wait_for_readers(block); unlink_hash(block->hash_link); } - + unlink_changed(block); block->status=0; block->length=0; block->offset=key_cache_block_size; KEYCACHE_THREAD_TRACE("free block"); - KEYCACHE_DBUG_PRINT("free_block", + KEYCACHE_DBUG_PRINT("free_block", ("block is freed")); unreg_request(block,0); - block->hash_link=NULL; + block->hash_link=NULL; } @@ -1368,10 +1408,11 @@ static int cmp_sec_link(BLOCK_LINK **a, BLOCK_LINK **b) } -/* - Flush a portion of changed blocks to disk, - free used blocks if requested +/* + Flush a portion of changed blocks to disk, + free used blocks if requested */ + static int flush_cached_blocks(File file, BLOCK_LINK **cache, BLOCK_LINK **end, enum flush_type type) @@ -1379,27 +1420,27 @@ static int flush_cached_blocks(File file, BLOCK_LINK **cache, int error; int last_errno=0; uint count=end-cache; - + /* Don't lock the cache during the flush */ keycache_pthread_mutex_unlock(&THR_LOCK_keycache); - /* - As all blocks referred in 'cache' are marked by BLOCK_IN_FLUSH - we are guarunteed no thread will change them + /* + As all blocks referred in 'cache' are marked by BLOCK_IN_FLUSH + we are guarunteed no thread will change them */ qsort((byte*) cache,count,sizeof(*cache),(qsort_cmp) cmp_sec_link); - + keycache_pthread_mutex_lock(&THR_LOCK_keycache); for ( ; cache != end ; cache++) { BLOCK_LINK *block= *cache; - - KEYCACHE_DBUG_PRINT("flush_cached_blocks", + + KEYCACHE_DBUG_PRINT("flush_cached_blocks", ("block %u to be flushed", BLOCK_NUMBER(block))); keycache_pthread_mutex_unlock(&THR_LOCK_keycache); error=my_pwrite(file,block->buffer+block->offset,block->length, block->hash_link->diskpos,MYF(MY_NABP | MY_WAIT_IF_FULL)); keycache_pthread_mutex_lock(&THR_LOCK_keycache); - _my_cache_write++; + my_cache_write++; if (error) { block->status|= BLOCK_ERROR; @@ -1409,42 +1450,44 @@ static int flush_cached_blocks(File file, BLOCK_LINK **cache, /* type will never be FLUSH_IGNORE_CHANGED here */ if (! (type == FLUSH_KEEP || type == FLUSH_FORCE_WRITE)) { - _my_blocks_changed--; + my_blocks_changed--; free_block(block); } - else + else { block->status&=~BLOCK_IN_FLUSH; link_to_file_list(block,file,1); unreg_request(block,1); } - + } return last_errno; } /* - Flush all blocks for a file to disk + Flush all blocks for a file to disk */ + int flush_key_blocks(File file, enum flush_type type) { int last_errno=0; BLOCK_LINK *cache_buff[FLUSH_CACHE],**cache; DBUG_ENTER("flush_key_blocks"); DBUG_PRINT("enter",("file: %d blocks_used: %d blocks_changed: %d", - file,_my_blocks_used,_my_blocks_changed)); - + file, my_blocks_used, my_blocks_changed)); + #if !defined(DBUG_OFF) && defined(EXTRA_DEBUG) DBUG_EXECUTE("check_keycache",test_key_cache("start of flush_key_blocks",0);); #endif - + keycache_pthread_mutex_lock(&THR_LOCK_keycache); - - cache=cache_buff; - if (_my_disk_blocks > 0 && + + cache=cache_buff; + if (my_disk_blocks > 0 && (!my_disable_flush_key_blocks || type != FLUSH_KEEP)) - { /* Key cache exists and flush is not disabled */ + { + /* Key cache exists and flush is not disabled */ int error=0; uint count=0; BLOCK_LINK **pos,**end; @@ -1453,10 +1496,10 @@ int flush_key_blocks(File file, enum flush_type type) #if defined(KEYCACHE_DEBUG) uint cnt=0; #endif - + if (type != FLUSH_IGNORE_CHANGED) { - /* + /* Count how many key blocks we have to cache to be able to flush all dirty pages with minimum seek moves */ @@ -1467,18 +1510,18 @@ int flush_key_blocks(File file, enum flush_type type) if (block->hash_link->file == file) { count++; - KEYCACHE_DBUG_ASSERT(count<=_my_blocks_used); + KEYCACHE_DBUG_ASSERT(count<= my_blocks_used); } } /* Allocate a new buffer only if its bigger than the one we have */ - if (count > FLUSH_CACHE && + if (count > FLUSH_CACHE && !(cache=(BLOCK_LINK**) my_malloc(sizeof(BLOCK_LINK*)*count,MYF(0)))) { - cache=cache_buff; + cache=cache_buff; count=FLUSH_CACHE; } } - + /* Retrieve the blocks and write them to a buffer to be flushed */ restart: end=(pos=cache)+count; @@ -1488,37 +1531,40 @@ restart: { #if defined(KEYCACHE_DEBUG) cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= _my_blocks_used); + KEYCACHE_DBUG_ASSERT(cnt <= my_blocks_used); #endif next=block->next_changed; if (block->hash_link->file == file) { - /* + /* Mark the block with BLOCK_IN_FLUSH in order not to let other threads to use it for new pages and interfere with our sequence ot flushing dirty file pages */ block->status|= BLOCK_IN_FLUSH; - + if (! (block->status & BLOCK_IN_SWITCH)) - { /* - We care only for the blocks for which flushing was not - initiated by other threads as a result of page swapping - */ + { + /* + We care only for the blocks for which flushing was not + initiated by other threads as a result of page swapping + */ reg_requests(block,1); - if (type != FLUSH_IGNORE_CHANGED) - { /* It's not a temporary file */ + if (type != FLUSH_IGNORE_CHANGED) + { + /* It's not a temporary file */ if (pos == end) - { /* - This happens only if there is not enough - memory for the big block + { + /* + This happens only if there is not enough + memory for the big block */ if ((error=flush_cached_blocks(file,cache,end,type))) - last_errno=error; - /* - Restart the scan as some other thread might have changed - the changed blocks chain: the blocks that were in switch - state before the flush started have to be excluded + last_errno=error; + /* + Restart the scan as some other thread might have changed + the changed blocks chain: the blocks that were in switch + state before the flush started have to be excluded */ goto restart; } @@ -1527,12 +1573,13 @@ restart: else { /* It's a temporary file */ - _my_blocks_changed--; + my_blocks_changed--; free_block(block); } } else - { /* Link the block into a list of blocks 'in switch' */ + { + /* Link the block into a list of blocks 'in switch' */ unlink_changed(block); link_changed(block,&first_in_switch); } @@ -1561,7 +1608,7 @@ restart: } #if defined(KEYCACHE_DEBUG) cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= _my_blocks_used); + KEYCACHE_DBUG_ASSERT(cnt <= my_blocks_used); #endif } /* The following happens very seldom */ @@ -1576,7 +1623,7 @@ restart: { #if defined(KEYCACHE_DEBUG) cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= _my_blocks_used); + KEYCACHE_DBUG_ASSERT(cnt <= my_blocks_used); #endif next=block->next_changed; if (block->hash_link->file == file && @@ -1589,9 +1636,9 @@ restart: } } } - + keycache_pthread_mutex_unlock(&THR_LOCK_keycache); - + #ifndef DBUG_OFF DBUG_EXECUTE("check_keycache", test_key_cache("end of flush_key_blocks",0);); @@ -1604,30 +1651,31 @@ restart: } -/* - Flush all blocks in the key cache to disk +/* + Flush all blocks in the key cache to disk */ + static int flush_all_key_blocks() { #if defined(KEYCACHE_DEBUG) uint cnt=0; #endif - while (_my_blocks_changed > 0) + while (my_blocks_changed > 0) { BLOCK_LINK *block; - for (block=_my_used_last->next_used ; ; block=block->next_used) + for (block= my_used_last->next_used ; ; block=block->next_used) { if (block->hash_link) { #if defined(KEYCACHE_DEBUG) cnt++; - KEYCACHE_DBUG_ASSERT(cnt <= _my_blocks_used); + KEYCACHE_DBUG_ASSERT(cnt <= my_blocks_used); #endif if (flush_key_blocks(block->hash_link->file, FLUSH_RELEASE)) return 1; break; } - if (block == _my_used_last) + if (block == my_used_last) break; } } @@ -1637,13 +1685,13 @@ static int flush_all_key_blocks() #ifndef DBUG_OFF /* - Test if disk-cache is ok + Test if disk-cache is ok */ -static void test_key_cache(const char *where __attribute__((unused)), +static void test_key_cache(const char *where __attribute__((unused)), my_bool lock __attribute__((unused))) { /* TODO */ -} +} #endif #if defined(KEYCACHE_TIMEOUT) @@ -1680,7 +1728,7 @@ static void keycache_dump() break; } while (thread != last); - + i=0; thread=last=waiting_for_block.last_thread; fprintf(keycache_dump_file, "queue of threads waiting for block\n"); @@ -1698,11 +1746,11 @@ static void keycache_dump() } while (thread != last); - for (i=0 ; i< _my_blocks_used ; i++) + for (i=0 ; i< my_blocks_used ; i++) { int j; - block=&_my_block_root[i]; - hash_link=block->hash_link; + block= &my_block_root[i]; + hash_link= block->hash_link; fprintf(keycache_dump_file, "block:%u hash_link:%d status:%x #requests=%u waiting_for_readers:%d\n", i, (int) (hash_link ? HASH_LINK_NUMBER(hash_link) : -1), @@ -1713,6 +1761,7 @@ static void keycache_dump() thread=last=wqueue->last_thread; fprintf(keycache_dump_file, "queue #%d\n", j); if (thread) + { do { thread=thread->next; @@ -1722,20 +1771,23 @@ static void keycache_dump() break; } while (thread != last); + } } } fprintf(keycache_dump_file, "LRU chain:"); - block=_my_used_last; + block= my_used_last; if (block) + { do { block=block->next_used; fprintf(keycache_dump_file, "block:%u, ", BLOCK_NUMBER(block)); } - while (block != _my_used_last); + while (block != my_used_last); + } fprintf(keycache_dump_file, "\n"); - + fclose(keycache_dump_file); } @@ -1744,7 +1796,7 @@ static void keycache_dump() #if defined(KEYCACHE_TIMEOUT) && !defined(__WIN__) -static int keycache_pthread_cond_wait(pthread_cond_t *cond, +static int keycache_pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) { int rc; @@ -1754,8 +1806,8 @@ static int keycache_pthread_cond_wait(pthread_cond_t *cond, #if defined(KEYCACHE_DEBUG) int cnt=0; #endif - - /* Get current time */ + + /* Get current time */ gettimeofday(&now, &tz); /* Prepare timeout value */ timeout.tv_sec = now.tv_sec + KEYCACHE_TIMEOUT; @@ -1773,16 +1825,16 @@ static int keycache_pthread_cond_wait(pthread_cond_t *cond, KEYCACHE_THREAD_TRACE_BEGIN("finished waiting"); #if defined(KEYCACHE_DEBUG) if (rc == ETIMEDOUT) - { + { fprintf(keycache_debug_log,"aborted by keycache timeout\n"); fclose(keycache_debug_log); abort(); } #endif - + if (rc == ETIMEDOUT) keycache_dump(); - + #if defined(KEYCACHE_DEBUG) KEYCACHE_DBUG_ASSERT(rc != ETIMEDOUT); #else @@ -1867,4 +1919,3 @@ void keycache_debug_log_close(void) #endif /* defined(KEYCACHE_DEBUG_LOG) */ #endif /* defined(KEYCACHE_DEBUG) */ - diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ddaf8e538c6..ac3703c5a1d 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4415,13 +4415,13 @@ struct show_var_st status_vars[]= { {"Handler_rollback", (char*) &ha_rollback_count, SHOW_LONG}, {"Handler_update", (char*) &ha_update_count, SHOW_LONG}, {"Handler_write", (char*) &ha_write_count, SHOW_LONG}, - {"Key_blocks_used", (char*) &_my_blocks_used, SHOW_LONG_CONST}, - {"Key_read_requests", (char*) &_my_cache_r_requests, SHOW_LONG}, - {"Key_reads", (char*) &_my_cache_read, SHOW_LONG}, - {"Key_write_requests", (char*) &_my_cache_w_requests, SHOW_LONG}, - {"Key_writes", (char*) &_my_cache_write, SHOW_LONG}, - {"Max_used_connections", (char*) &max_used_connections, SHOW_LONG}, - {"Not_flushed_key_blocks", (char*) &_my_blocks_changed, SHOW_LONG_CONST}, + {"Key_blocks_used", (char*) &my_blocks_used, SHOW_LONG_CONST}, + {"Key_read_requests", (char*) &my_cache_r_requests, SHOW_LONG}, + {"Key_reads", (char*) &my_cache_read, SHOW_LONG}, + {"Key_write_requests", (char*) &my_cache_w_requests, SHOW_LONG}, + {"Key_writes", (char*) &my_cache_write, SHOW_LONG}, + {"Max_used_connections", (char*) &max_used_connections, SHOW_LONG}, + {"Not_flushed_key_blocks", (char*) &my_blocks_changed, SHOW_LONG_CONST}, {"Not_flushed_delayed_rows", (char*) &delayed_rows_in_use, SHOW_LONG_CONST}, {"Open_tables", (char*) 0, SHOW_OPENTABLES}, {"Open_files", (char*) &my_file_opened, SHOW_LONG_CONST}, diff --git a/sql/sql_test.cc b/sql/sql_test.cc index 88ed86732f1..d2f97640010 100644 --- a/sql/sql_test.cc +++ b/sql/sql_test.cc @@ -321,8 +321,8 @@ w_requests: %10lu\n\ writes: %10lu\n\ r_requests: %10lu\n\ reads: %10lu\n", - _my_blocks_used,_my_blocks_changed,_my_cache_w_requests, - _my_cache_write,_my_cache_r_requests,_my_cache_read); + my_blocks_used,my_blocks_changed,my_cache_w_requests, + my_cache_write,my_cache_r_requests,my_cache_read); pthread_mutex_unlock(&THR_LOCK_keycache); if (thd) From bbbc2564b83fd05cc4420d028d1d2ad161871897 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 12:07:46 +0400 Subject: [PATCH 248/267] Collation names have been renamed to common style --- sql/share/charsets/Index.xml | 15 ++++++++++++--- sql/share/charsets/latin7.xml | 6 +++--- strings/ctype-extra.c | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/sql/share/charsets/Index.xml b/sql/share/charsets/Index.xml index 4d54b8b53ce..4f0e4ff2157 100644 --- a/sql/share/charsets/Index.xml +++ b/sql/share/charsets/Index.xml @@ -240,9 +240,18 @@ To make maintaining easier please: BalticRim iso-8859-13 l7 - - - + + Estonian + primary + + + Latvian + Lithuanian + + + Latvian + Lithuanian + diff --git a/sql/share/charsets/latin7.xml b/sql/share/charsets/latin7.xml index 89c14a3acd8..da57fee105f 100644 --- a/sql/share/charsets/latin7.xml +++ b/sql/share/charsets/latin7.xml @@ -93,7 +93,7 @@ - + 00 02 03 04 05 06 07 08 09 2E 2F 30 31 32 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B @@ -115,7 +115,7 @@ - + @@ -139,7 +139,7 @@ - + diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index b95228c9f65..c9d05ab0341 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -3169,7 +3169,7 @@ CHARSET_INFO compiled_charsets[] = { 20,0,0, /* number */ MY_CS_COMPILED, /* state */ "latin7", /* cs name */ - "estonia", /* name */ + "latin7_estonian_ci_as", /* name */ "", /* comment */ ctype_estonia, to_lower_estonia, From f8b7332cf3d991610e13f61a9631d44381a5f6f2 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 13:38:05 +0400 Subject: [PATCH 249/267] Two separate commands: SHOW COLLATION and SHOW CHARACTER SET --- sql/mysql_priv.h | 1 + sql/sql_lex.h | 2 +- sql/sql_parse.cc | 3 ++ sql/sql_show.cc | 92 +++++++++++++++++++++++++++++++++++++----------- sql/sql_yacc.yy | 2 ++ 5 files changed, 79 insertions(+), 21 deletions(-) diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index f68de23034a..4ad1335d080 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -528,6 +528,7 @@ int mysqld_show_variables(THD *thd,const char *wild); int mysqld_show(THD *thd, const char *wild, show_var_st *variables, enum enum_var_type value_type); int mysqld_show_charsets(THD *thd,const char *wild); +int mysqld_show_collations(THD *thd,const char *wild); int mysqld_show_table_types(THD *thd); int mysqld_show_privileges(THD *thd); int mysqld_show_column_types(THD *thd); diff --git a/sql/sql_lex.h b/sql/sql_lex.h index d8045dcc556..0d284d5f619 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -52,7 +52,7 @@ enum enum_sql_command { SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, - SQLCOM_SHOW_CREATE_DB, + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_LOAD,SQLCOM_SET_OPTION,SQLCOM_LOCK_TABLES,SQLCOM_UNLOCK_TABLES, SQLCOM_GRANT, diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 8ca5bf2f12d..d08e6b70634 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2566,6 +2566,9 @@ mysql_execute_command(THD *thd) case SQLCOM_SHOW_CHARSETS: res= mysqld_show_charsets(thd,(lex->wild ? lex->wild->ptr() : NullS)); break; + case SQLCOM_SHOW_COLLATIONS: + res= mysqld_show_collations(thd,(lex->wild ? lex->wild->ptr() : NullS)); + break; case SQLCOM_SHOW_FIELDS: #ifdef DONT_ALLOW_SHOW_COMMANDS send_error(thd,ER_NOT_ALLOWED_COMMAND); /* purecov: inspected */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 122a0171777..bd33156eeab 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1414,6 +1414,71 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) Status functions *****************************************************************************/ +static bool write_collation(Protocol *protocol, CHARSET_INFO *cs) +{ + char flags[4]; + protocol->prepare_for_resend(); + protocol->store(cs->csname, system_charset_info); + protocol->store(cs->name, system_charset_info); + protocol->store_short((longlong) cs->number); + flags[0]='\0'; + if (cs->state & MY_CS_PRIMARY) + strcat(flags,"def"); + protocol->store(flags, system_charset_info); + protocol->store_short((longlong) cs->strxfrm_multiply); + return protocol->write(); +} + +int mysqld_show_collations(THD *thd, const char *wild) +{ + char buff[8192]; + String packet2(buff,sizeof(buff),thd->charset()); + List field_list; + CHARSET_INFO **cs; + Protocol *protocol= thd->protocol; + char flags[64]; + + DBUG_ENTER("mysqld_show_charsets"); + + field_list.push_back(new Item_empty_string("Charset",30)); + field_list.push_back(new Item_empty_string("Collation",30)); + field_list.push_back(new Item_return_int("Id",11, FIELD_TYPE_SHORT)); + field_list.push_back(new Item_empty_string("Flags",30)); + field_list.push_back(new Item_return_int("strx_maxlen",3, FIELD_TYPE_SHORT)); + + if (protocol->send_fields(&field_list, 1)) + DBUG_RETURN(1); + + for ( cs= all_charsets ; cs < all_charsets+255 ; cs++ ) + { + CHARSET_INFO **cl; + for ( cl= all_charsets; cl < all_charsets+255 ;cl ++) + { + if (!cs[0] || !cl[0] || !my_charset_same(cs[0],cl[0]) || !(cs[0]->state & MY_CS_PRIMARY)) + continue; + if (cs[0] && !(wild && wild[0] && + wild_case_compare(system_charset_info,cs[0]->name,wild))) + { + if (write_collation(protocol, cl[0])) + goto err; + } + } + } + send_eof(thd); + DBUG_RETURN(0); +err: + DBUG_RETURN(1); +} + +static bool write_charset(Protocol *protocol, CHARSET_INFO *cs) +{ + protocol->prepare_for_resend(); + protocol->store(cs->csname, system_charset_info); + protocol->store(cs->name, system_charset_info); + protocol->store_short((longlong) cs->mbmaxlen); + return protocol->write(); +} + int mysqld_show_charsets(THD *thd, const char *wild) { char buff[8192]; @@ -1425,32 +1490,19 @@ int mysqld_show_charsets(THD *thd, const char *wild) DBUG_ENTER("mysqld_show_charsets"); - field_list.push_back(new Item_empty_string("CS_Name",30)); - field_list.push_back(new Item_empty_string("COL_Name",30)); - field_list.push_back(new Item_return_int("Id",11, FIELD_TYPE_SHORT)); - field_list.push_back(new Item_empty_string("Flags",30)); - field_list.push_back(new Item_return_int("strx_maxlen",3, FIELD_TYPE_TINY)); - field_list.push_back(new Item_return_int("mb_maxlen",3, FIELD_TYPE_TINY)); + field_list.push_back(new Item_empty_string("Charset",30)); + field_list.push_back(new Item_empty_string("Default collation",60)); + field_list.push_back(new Item_return_int("Maxlen",3, FIELD_TYPE_SHORT)); if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(1); - for (cs=all_charsets ; cs < all_charsets+255 ; cs++ ) + for ( cs= all_charsets ; cs < all_charsets+255 ; cs++ ) { - if (cs[0] && !(wild && wild[0] && - wild_case_compare(system_charset_info,cs[0]->name,wild))) + if (cs[0] && (cs[0]->state & MY_CS_PRIMARY) && !(wild && wild[0] && + wild_case_compare(system_charset_info,cs[0]->name,wild))) { - protocol->prepare_for_resend(); - protocol->store(cs[0]->csname, system_charset_info); - protocol->store(cs[0]->name, system_charset_info); - protocol->store_short((longlong) cs[0]->number); - flags[0]='\0'; - if (cs[0]->state & MY_CS_PRIMARY) - strcat(flags,"pri"); - protocol->store(flags, system_charset_info); - protocol->store_tiny((longlong) cs[0]->strxfrm_multiply); - protocol->store_tiny((longlong) cs[0]->mbmaxlen); - if (protocol->write()) + if (write_charset(protocol, cs[0])) goto err; } } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index af861875691..84c68d37c91 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3578,6 +3578,8 @@ show_param: } | charset wild { Lex->sql_command= SQLCOM_SHOW_CHARSETS; } + | COLLATION_SYM wild + { Lex->sql_command= SQLCOM_SHOW_COLLATIONS; } | LOGS_SYM { Lex->sql_command= SQLCOM_SHOW_LOGS; } | GRANTS FOR_SYM user From 8816bbae1c9da57a2aadc14ebd5f311c0b099594 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 13:42:01 +0400 Subject: [PATCH 250/267] sql_show.cc: LIKE was used against wrong name sql/sql_show.cc: LIKE was used against wrong name --- sql/sql_show.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index bd33156eeab..d2cc9045148 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1457,7 +1457,7 @@ int mysqld_show_collations(THD *thd, const char *wild) if (!cs[0] || !cl[0] || !my_charset_same(cs[0],cl[0]) || !(cs[0]->state & MY_CS_PRIMARY)) continue; if (cs[0] && !(wild && wild[0] && - wild_case_compare(system_charset_info,cs[0]->name,wild))) + wild_case_compare(system_charset_info,cl[0]->name,wild))) { if (write_collation(protocol, cl[0])) goto err; From c8bdced21469ec1777abfea13662becc66944919 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 14:54:07 +0400 Subject: [PATCH 251/267] sql_string.cc: NATIONAL CHARACTER() has latin1 charset now. Reasons are (by Monty): I think we should keepy having latin1 (default configure option) as the national character set. The reason for this is simple that: - This is ok for a large part of the world. - It's faster and takes less space than utf8. sql/sql_string.cc: NATIONAL CHARACTER() has latin1 charset now. Reasons are (by Monty): I think we should keepy having latin1 (default configure option) as the national character set. The reason for this is simple that: --- sql/sql_string.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_string.cc b/sql/sql_string.cc index ffa272713de..e29883c190b 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -30,7 +30,7 @@ CHARSET_INFO *system_charset_info= &my_charset_utf8; CHARSET_INFO *files_charset_info= &my_charset_utf8; -CHARSET_INFO *national_charset_info= &my_charset_utf8; +CHARSET_INFO *national_charset_info= &my_charset_latin1; extern gptr sql_alloc(unsigned size); extern void sql_element_free(void *ptr); From 829045100dc01e3cd3b4936d5c0aee8e02bbf894 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 13:06:20 +0200 Subject: [PATCH 252/267] Fixed bug with GROUP BY and alias mysql-test/r/group_by.result: Test for group by + alias bug mysql-test/t/group_by.test: Test for group by + alias bug --- mysql-test/r/group_by.result | 19 +++++++++++++++++++ mysql-test/t/group_by.test | 12 ++++++++++++ sql/item.cc | 1 + 3 files changed, 32 insertions(+) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 91f33e0cd9f..508094aff63 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -569,3 +569,22 @@ a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') 1 4 c 10 43 a,b,d,f drop table t1; +create table t1 (id int not null, qty int not null); +insert into t1 values (1,2),(1,3),(2,4),(2,5); +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and cqty>1; +id sqty cqty +1 5 2 +2 9 2 +select id, sum(qty) as sqty from t1 group by id having sqty>2 and count(qty)>1; +id sqty +1 5 +2 9 +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sqty>2 and cqty>1; +id sqty cqty +1 5 2 +2 9 2 +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and count(qty)>1; +id sqty cqty +1 5 2 +2 9 2 +drop table t1; diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index ab5d6062daf..7988a529afa 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -417,3 +417,15 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a; select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a; select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a; drop table t1; + +# +# Problem with group by and alias +# + +create table t1 (id int not null, qty int not null); +insert into t1 values (1,2),(1,3),(2,4),(2,5); +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and cqty>1; +select id, sum(qty) as sqty from t1 group by id having sqty>2 and count(qty)>1; +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sqty>2 and cqty>1; +select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and count(qty)>1; +drop table t1; diff --git a/sql/item.cc b/sql/item.cc index 0046f53c6fb..4fefae7358f 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -665,6 +665,7 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables) maybe_null= (*ref)->maybe_null; decimals= (*ref)->decimals; binary= (*ref)->binary; + with_sum_func= (*ref)->with_sum_func; } return 0; } From 028822d27bcd59aa8ede44f11b31301b9eebac3c Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 16:12:49 +0400 Subject: [PATCH 253/267] SHOW CHARACTER SET now can display comments Low case letters are used in charset names BitKeeper/deleted/.del-MacRoman.xml~f890bce37d31d382: Delete: sql/share/charsets/MacRoman.xml BitKeeper/deleted/.del-MacCE.xml~fca413f3126f6189: Delete: sql/share/charsets/MacCE.xml mysys/charset.c: SHOW CHARACTER SET now can display comments sql/share/charsets/Index.xml: SHOW CHARACTER SET now can display comments sql/sql_show.cc: SHOW CHARACTER SET now can display comments strings/ctype.c: SHOW CHARACTER SET now can display comments --- mysys/charset.c | 8 +++- sql/share/charsets/Index.xml | 37 ++++++++++++++++++- sql/share/charsets/{MacCE.xml => macce.xml} | 2 +- .../charsets/{MacRoman.xml => macroman.xml} | 2 +- sql/sql_show.cc | 2 + strings/ctype.c | 9 ++++- 6 files changed, 54 insertions(+), 6 deletions(-) rename sql/share/charsets/{MacCE.xml => macce.xml} (99%) rename sql/share/charsets/{MacRoman.xml => macroman.xml} (99%) diff --git a/mysys/charset.c b/mysys/charset.c index 899acf46fac..30bd186c531 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -271,6 +271,9 @@ static void simple_cs_copy_data(CHARSET_INFO *to, CHARSET_INFO *from) if (from->name) to->name= my_once_strdup(from->name,MYF(MY_WME)); + if (from->comment) + to->comment= my_once_strdup(from->comment,MYF(MY_WME)); + if (from->ctype) { to->ctype= (uchar*) my_once_memdup((char*) from->ctype, @@ -339,7 +342,10 @@ static int add_collation(CHARSET_INFO *cs) } else { - all_charsets[cs->number]->state |= cs->state; + CHARSET_INFO *dst= all_charsets[cs->number]; + dst->state |= cs->state; + if (cs->comment) + dst->comment= my_once_strdup(cs->comment,MYF(MY_WME)); } cs->number= 0; cs->primary_number= 0; diff --git a/sql/share/charsets/Index.xml b/sql/share/charsets/Index.xml index 4f0e4ff2157..ffc6d30100c 100644 --- a/sql/share/charsets/Index.xml +++ b/sql/share/charsets/Index.xml @@ -11,6 +11,7 @@ To make maintaining easier please: Traditional Chinese + Big5 Traditional Chinese big-5 bigfive big-five @@ -24,6 +25,7 @@ To make maintaining easier please: Central European + ISO 8859-2 Central European csisolatin2 iso-8859-2 iso-ir-101 @@ -47,6 +49,7 @@ To make maintaining easier please: Western + DEC West European Dutch @@ -62,6 +65,7 @@ To make maintaining easier please: Western + DOS West European 850 cp850 cspc850multilingual @@ -81,6 +85,7 @@ To make maintaining easier please: Western + ISO 8859-1 West European csisolatin1 iso-8859-1 iso-ir-100 @@ -117,6 +122,7 @@ To make maintaining easier please: Western + HP West European hproman8 @@ -133,6 +139,7 @@ To make maintaining easier please: Cyrillic + KOI8-R Relcom Russian koi8-r cskoi8r @@ -141,6 +148,7 @@ To make maintaining easier please: Western + 7bit Swedish iso-646-se @@ -148,6 +156,7 @@ To make maintaining easier please: Western + US ASCII us us-ascii csascii @@ -159,12 +168,14 @@ To make maintaining easier please: Japanese + EUC-JP Japanese euc-jp Japanese + Shift-JIS Japanese s-jis shift-jis x-sjis @@ -173,6 +184,7 @@ To make maintaining easier please: Cyrillic + Windows Cyrillic windows-1251 ms-cyr ms-cyrillic @@ -209,6 +221,7 @@ To make maintaining easier please: Hebrew + ISO 8859-8 Hebrew csisolatinhebrew iso-8859-8 iso-ir-138 @@ -218,6 +231,7 @@ To make maintaining easier please: Thai + TIS620 Thai tis-620 primary @@ -227,6 +241,7 @@ To make maintaining easier please: Korean + EUC-KR Korean euc_kr euc-kr @@ -237,6 +252,7 @@ To make maintaining easier please: Baltic + ISO 8859-13 Baltic BalticRim iso-8859-13 l7 @@ -257,6 +273,7 @@ To make maintaining easier please: Cyrillic + KOI8-U Ukrainian koi8-u @@ -264,6 +281,7 @@ To make maintaining easier please: Simplified Chinese + GB2312 Simplified Chinese chinese iso-ir-58 @@ -274,6 +292,7 @@ To make maintaining easier please: Greek + ISO 8859-7 Greek csisolatingreek ecma-118 greek8 @@ -285,6 +304,7 @@ To make maintaining easier please: Central European + Windows Central European ms-ce windows-1250 @@ -302,6 +322,7 @@ To make maintaining easier please: East Asian + GBK Simplified Chinese cp936 primary @@ -311,6 +332,7 @@ To make maintaining easier please: Baltic + Windows Baltic WinBaltRim windows-1257 @@ -331,6 +353,7 @@ To make maintaining easier please: South Asian + ISO 8859-9 Turkish csisolatin5 iso-8859-9 iso-ir-148 @@ -343,6 +366,7 @@ To make maintaining easier please: South Asian + ARMSCII-8 Armenian armscii-8 @@ -350,17 +374,20 @@ To make maintaining easier please: Unicode + UTF-8 Unicode utf-8 Unicode + UCS-2 Unicode Cyrillic + DOS Russian 866 csibm866 ibm866 @@ -371,12 +398,14 @@ To make maintaining easier please: Central European + DOS Kamenicky Czech-Slovak - + Central European + Mac Central European MacCentralEurope Hungarian @@ -417,8 +446,9 @@ To make maintaining easier please: - + Western + Mac West European Mac Macintosh csmacintosh @@ -467,6 +497,7 @@ To make maintaining easier please: Central European + DOS Central European 852 cp852 ibm852 @@ -484,6 +515,7 @@ To make maintaining easier please: Arabic + Windows Arabic ms-arab windows-1256 @@ -496,6 +528,7 @@ To make maintaining easier please: + Binary pseudo charset primary compiled diff --git a/sql/share/charsets/MacCE.xml b/sql/share/charsets/macce.xml similarity index 99% rename from sql/share/charsets/MacCE.xml rename to sql/share/charsets/macce.xml index 9a6a392b426..056047e9b82 100644 --- a/sql/share/charsets/MacCE.xml +++ b/sql/share/charsets/macce.xml @@ -2,7 +2,7 @@ - + diff --git a/sql/share/charsets/MacRoman.xml b/sql/share/charsets/macroman.xml similarity index 99% rename from sql/share/charsets/MacRoman.xml rename to sql/share/charsets/macroman.xml index 9dc4d73b3ef..cc9448842b4 100644 --- a/sql/share/charsets/MacRoman.xml +++ b/sql/share/charsets/macroman.xml @@ -2,7 +2,7 @@ - + diff --git a/sql/sql_show.cc b/sql/sql_show.cc index d2cc9045148..cc7e19e72e2 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1474,6 +1474,7 @@ static bool write_charset(Protocol *protocol, CHARSET_INFO *cs) { protocol->prepare_for_resend(); protocol->store(cs->csname, system_charset_info); + protocol->store(cs->comment ? cs->comment : "", system_charset_info); protocol->store(cs->name, system_charset_info); protocol->store_short((longlong) cs->mbmaxlen); return protocol->write(); @@ -1491,6 +1492,7 @@ int mysqld_show_charsets(THD *thd, const char *wild) DBUG_ENTER("mysqld_show_charsets"); field_list.push_back(new Item_empty_string("Charset",30)); + field_list.push_back(new Item_empty_string("Description",60)); field_list.push_back(new Item_empty_string("Default collation",60)); field_list.push_back(new Item_return_int("Maxlen",3, FIELD_TYPE_SHORT)); diff --git a/strings/ctype.c b/strings/ctype.c index 45bc2589f76..68d9a30048f 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -54,6 +54,7 @@ struct my_cs_file_section_st #define _CS_CTYPEMAP 14 #define _CS_PRIMARY_ID 15 #define _CS_BINARY_ID 16 +#define _CS_CSDESCRIPT 17 static struct my_cs_file_section_st sec[] = { @@ -62,12 +63,12 @@ static struct my_cs_file_section_st sec[] = {_CS_MISC, "xml.encoding"}, {_CS_MISC, "charsets"}, {_CS_MISC, "charsets.max-id"}, - {_CS_MISC, "charsets.description"}, {_CS_CHARSET, "charsets.charset"}, {_CS_PRIMARY_ID, "charsets.charset.primary-id"}, {_CS_BINARY_ID, "charsets.charset.binary-id"}, {_CS_CSNAME, "charsets.charset.name"}, {_CS_FAMILY, "charsets.charset.family"}, + {_CS_CSDESCRIPT, "charsets.charset.description"}, {_CS_MISC, "charsets.charset.alias"}, {_CS_MISC, "charsets.charset.ctype"}, {_CS_CTYPEMAP, "charsets.charset.ctype.map"}, @@ -97,6 +98,8 @@ static struct my_cs_file_section_st * cs_file_sec(const char *attr, uint len) return NULL; } +#define MY_CS_CSDESCR_SIZE 64 + typedef struct my_cs_file_info { char csname[MY_CS_NAME_SIZE]; @@ -106,6 +109,7 @@ typedef struct my_cs_file_info uchar to_upper[MY_CS_TO_UPPER_TABLE_SIZE]; uchar sort_order[MY_CS_SORT_ORDER_TABLE_SIZE]; uint16 tab_to_uni[MY_CS_TO_UNI_TABLE_SIZE]; + char comment[MY_CS_CSDESCR_SIZE]; CHARSET_INFO cs; int (*add_collation)(CHARSET_INFO *cs); } MY_CHARSET_LOADER; @@ -208,6 +212,9 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, uint len) case _CS_CSNAME: i->cs.csname=mstr(i->csname,attr,len,MY_CS_NAME_SIZE-1); break; + case _CS_CSDESCRIPT: + i->cs.comment=mstr(i->comment,attr,len,MY_CS_CSDESCR_SIZE-1); + break; case _CS_FLAG: if (!strncmp("primary",attr,len)) i->cs.state|= MY_CS_PRIMARY; From 165d8e9c0b662e8086e1e2a953ce36d1ccea40df Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 13:46:10 +0100 Subject: [PATCH 254/267] - fixed comments so mysql_copyright does not eat the whole files sql/sql_error.cc: - fixed comment so mysql_copyright does not eat the whole file sql/sql_prepare.cc: - fixed comment so mysql_copyright does not eat the whole file --- sql/sql_error.cc | 3 +-- sql/sql_prepare.cc | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 8d3bb3ca49b..c7b1814c1d7 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -12,8 +12,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /********************************************************************** This file contains the implementation of error and warnings related diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index fc8959c6493..eea0d853132 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -12,8 +12,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /********************************************************************** This file contains the implementation of prepare and executes. From 0737f4adaa83a51b33f3ed26bbb31dd231c99be8 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Mar 2003 22:48:13 +0100 Subject: [PATCH 255/267] - removed redundant readline_dir from SUBDIRS to fix "make distclean" (there is a Makefile in readline_topdir that already lists readline_dir in SUBDIRS) --- Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 9da59074caa..f8b559c4238 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,7 +22,7 @@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = INSTALL-SOURCE README \ COPYING COPYING.LIB SUBDIRS = . include @docs_dirs@ \ - @readline_topdir@ @readline_dir@ \ + @readline_topdir@ \ @thread_dirs@ pstack @sql_client_dirs@ \ @sql_server_dirs@ scripts man tests \ BUILD @netware_dir@ os2 @libmysqld_dirs@ \ From b7a723af127549ab36fc0cf09eb46f0efa1e0113 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Mar 2003 13:27:19 +0400 Subject: [PATCH 256/267] German Phone book collation is always compiled Some collation names have been renamed BitKeeper/deleted/.del-ctype-latin1_de.c~c5d8f9208bceb98e: Delete: strings/ctype-latin1_de.c libmysql/Makefile.shared: German Phone book collation is always compiled mysql-test/r/ctype_collate.result: Some collation names have been renamed mysql-test/t/ctype_collate.test: Some collation names have been renamed mysql-test/t/ctype_latin1_de-master.opt: Some collation names have been renamed mysys/charset.c: get_charset_by_name() now will find its default collation if charset name is passed sql/share/charsets/Index.xml: Some collation names have been renamed sql/share/charsets/cp1251.xml: Some collation names have been renamed sql/share/charsets/cp1257.xml: Some collation names have been renamed sql/share/charsets/latin1.xml: Some collation names have been renamed sql/share/charsets/latin2.xml: Some collation names have been renamed sql/share/charsets/latin7.xml: Some collation names have been renamed sql/share/charsets/macce.xml: Some collation names have been renamed sql/share/charsets/macroman.xml: Some collation names have been renamed sql/sql_show.cc: Nicer output from SHOW COLLATION strings/Makefile.am: German Phone book collation is always compiled strings/ctype-czech.c: Some collation names have been renamed strings/ctype-extra.c: Don't compile dynamic charset. We should decide names convension before making this available. strings/ctype-latin1.c: German Phone book collation is always compiled --- libmysql/Makefile.shared | 2 +- mysql-test/r/ctype_collate.result | 34 +- mysql-test/t/ctype_collate.test | 36 +- mysql-test/t/ctype_latin1_de-master.opt | 2 +- mysys/charset.c | 5 +- sql/share/charsets/Index.xml | 67 +- sql/share/charsets/cp1251.xml | 4 +- sql/share/charsets/cp1257.xml | 4 +- sql/share/charsets/latin1.xml | 10 +- sql/share/charsets/latin2.xml | 8 +- sql/share/charsets/latin7.xml | 6 +- sql/share/charsets/macce.xml | 4 +- sql/share/charsets/macroman.xml | 4 +- sql/sql_show.cc | 12 +- strings/Makefile.am | 8 +- strings/ctype-czech.c | 8 +- strings/ctype-extra.c | 3966 ----------------------- strings/ctype-latin1.c | 276 +- strings/ctype-latin1_de.c | 399 --- 19 files changed, 366 insertions(+), 4489 deletions(-) delete mode 100644 strings/ctype-latin1_de.c diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared index 9440d920719..60d6b320bb6 100644 --- a/libmysql/Makefile.shared +++ b/libmysql/Makefile.shared @@ -41,7 +41,7 @@ mystringsobjects = strmov.lo strxmov.lo strxnmov.lo strnmov.lo \ ctype.lo ctype-simple.lo ctype-bin.lo ctype-mb.lo \ ctype-big5.lo ctype-czech.lo ctype-euc_kr.lo \ ctype-win1250ch.lo ctype-utf8.lo ctype-extra.lo \ - ctype-gb2312.lo ctype-gbk.lo ctype-latin1_de.lo \ + ctype-gb2312.lo ctype-gbk.lo \ ctype-sjis.lo ctype-tis620.lo ctype-ujis.lo xml.lo mystringsextra= strto.c diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index 07da8c8c75f..a0150dc485a 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -92,7 +92,7 @@ z Ä ä ß -SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_de; +SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_german2_ci; latin1_f A a @@ -121,7 +121,7 @@ Y y Z z -SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_ci_as; +SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_general_ci; latin1_f A a @@ -181,7 +181,7 @@ z ü SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE koi8r; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' -SELECT latin1_f COLLATE latin1 AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1 AS latin1_f_as FROM t1 ORDER BY latin1_f_as; latin1_f_as A a @@ -210,7 +210,7 @@ z Ä ä ß -SELECT latin1_f COLLATE latin1_de AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_german2_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as; latin1_f_as A a @@ -239,7 +239,7 @@ Y y Z z -SELECT latin1_f COLLATE latin1_ci_as AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_general_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as; latin1_f_as A a @@ -268,7 +268,7 @@ Y y Z z -SELECT latin1_f COLLATE latin1_bin AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_bin AS latin1_f_as FROM t1 ORDER BY latin1_f_as; latin1_f_as A AD @@ -297,7 +297,7 @@ z ä å ü -SELECT latin1_f COLLATE koi8r AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE koi8r AS latin1_f_as FROM t1 ORDER BY latin1_f_as; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f; latin1_f count(*) @@ -329,7 +329,7 @@ Z 2 Å 2 Ä 2 ß 1 -SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_de; +SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_german2_ci; latin1_f count(*) A 4 AD 2 @@ -344,7 +344,7 @@ UE 2 Ü 2 Y 2 Z 2 -SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_ci_as; +SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_general_ci; latin1_f count(*) A 2 AD 2 @@ -391,7 +391,7 @@ z 1 ü 1 SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE koi8r; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' -SELECT DISTINCT latin1_f FROM t1; +SELECT DISTINCT latin1_f FROM t1; latin1_f A AD @@ -406,7 +406,7 @@ UE SS ß Z -SELECT DISTINCT latin1_f COLLATE latin1 FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1 FROM t1; latin1_f COLLATE latin1 A AD @@ -421,8 +421,8 @@ UE SS ß Z -SELECT DISTINCT latin1_f COLLATE latin1_de FROM t1; -latin1_f COLLATE latin1_de +SELECT DISTINCT latin1_f COLLATE latin1_german2_ci FROM t1; +latin1_f COLLATE latin1_german2_ci A AD AE @@ -436,8 +436,8 @@ SS ß Y Z -SELECT DISTINCT latin1_f COLLATE latin1_ci_as FROM t1; -latin1_f COLLATE latin1_ci_as +SELECT DISTINCT latin1_f COLLATE latin1_general_ci FROM t1; +latin1_f COLLATE latin1_general_ci A AD AE @@ -452,7 +452,7 @@ SS ß Y Z -SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1; latin1_f COLLATE latin1_bin A a @@ -481,7 +481,7 @@ Y y Z z -SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; +SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; COLLATION 'koi8r' is not valid for CHARACTER SET 'latin1' SHOW CREATE TABLE t1; Table Create Table diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index c2ebf39170e..e2631a06156 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -58,8 +58,8 @@ INSERT INTO t1 (latin1_f) VALUES (_latin1'z'); SELECT latin1_f FROM t1 ORDER BY latin1_f; SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1; -SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_de; -SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_ci_as; +SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_german2_ci; +SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_general_ci; SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE latin1_bin; --error 1251 SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE koi8r; @@ -67,20 +67,20 @@ SELECT latin1_f FROM t1 ORDER BY latin1_f COLLATE koi8r; --SELECT latin1_f COLLATE koi8r FROM t1 ; -- AS + ORDER BY -SELECT latin1_f COLLATE latin1 AS latin1_f_as FROM t1 ORDER BY latin1_f_as; -SELECT latin1_f COLLATE latin1_de AS latin1_f_as FROM t1 ORDER BY latin1_f_as; -SELECT latin1_f COLLATE latin1_ci_as AS latin1_f_as FROM t1 ORDER BY latin1_f_as; -SELECT latin1_f COLLATE latin1_bin AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1 AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_german2_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_general_ci AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE latin1_bin AS latin1_f_as FROM t1 ORDER BY latin1_f_as; --error 1251 -SELECT latin1_f COLLATE koi8r AS latin1_f_as FROM t1 ORDER BY latin1_f_as; +SELECT latin1_f COLLATE koi8r AS latin1_f_as FROM t1 ORDER BY latin1_f_as; -- GROUP BY SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f; SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1; -SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_de; -SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_ci_as; +SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_german2_ci; +SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_general_ci; SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE latin1_bin; --error 1251 SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE koi8r; @@ -88,29 +88,29 @@ SELECT latin1_f,count(*) FROM t1 GROUP BY latin1_f COLLATE koi8r; -- DISTINCT -SELECT DISTINCT latin1_f FROM t1; -SELECT DISTINCT latin1_f COLLATE latin1 FROM t1; -SELECT DISTINCT latin1_f COLLATE latin1_de FROM t1; -SELECT DISTINCT latin1_f COLLATE latin1_ci_as FROM t1; -SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1; +SELECT DISTINCT latin1_f FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1 FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1_german2_ci FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1_general_ci FROM t1; +SELECT DISTINCT latin1_f COLLATE latin1_bin FROM t1; --error 1251 -SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; +SELECT DISTINCT latin1_f COLLATE koi8r FROM t1; -- Aggregates ---SELECT MAX(k COLLATE latin1_de) +--SELECT MAX(k COLLATE latin1_german2_ci) --FROM t1 -- WHERE --SELECT * --FROM t1 ---WHERE (_latin1'Mu"ller' COLLATE latin1_de) = k +--WHERE (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k --HAVING --SELECT * --FROM t1 ---HAVING (_latin1'Mu"ller' COLLATE latin1_de) = k +--HAVING (_latin1'Mu"ller' COLLATE latin1_german2_ci) = k # diff --git a/mysql-test/t/ctype_latin1_de-master.opt b/mysql-test/t/ctype_latin1_de-master.opt index 98accd58c46..62f864d501d 100644 --- a/mysql-test/t/ctype_latin1_de-master.opt +++ b/mysql-test/t/ctype_latin1_de-master.opt @@ -1 +1 @@ ---default-character-set=latin1_de +--default-character-set=latin1_german2_ci diff --git a/mysys/charset.c b/mysys/charset.c index 30bd186c531..e1545dc4f8f 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -553,7 +553,10 @@ uint get_charset_number(const char *charset_name) for (cs= all_charsets; cs < all_charsets+255; ++cs) { - if ( cs[0] && cs[0]->name && !strcasecmp(cs[0]->name, charset_name)) + if ( cs[0] && cs[0]->name && + (!strcasecmp(cs[0]->name, charset_name) || + (!strcasecmp(cs[0]->csname, charset_name) && + (cs[0]->state & MY_CS_PRIMARY)))) return cs[0]->number; } return 0; /* this mimics find_type() */ diff --git a/sql/share/charsets/Index.xml b/sql/share/charsets/Index.xml index ffc6d30100c..974c2968e55 100644 --- a/sql/share/charsets/Index.xml +++ b/sql/share/charsets/Index.xml @@ -32,8 +32,8 @@ To make maintaining easier please: iso_8859-2 iso_8859-2:1987 l2 - - + + Hungarian Polish Romanian @@ -42,16 +42,16 @@ To make maintaining easier please: Slovenian Sorbian - - + + Western DEC West European - - + + Dutch English French @@ -93,12 +93,12 @@ To make maintaining easier please: iso_8859-1:1987 l1 latin1 - + - - - - + + + + Dutch English French @@ -108,7 +108,7 @@ To make maintaining easier please: Pogtuguese Spanish - + Dutch English French @@ -199,7 +199,7 @@ To make maintaining easier please: - + Belarusian Bulgarian Macedonian @@ -208,7 +208,7 @@ To make maintaining easier please: Mongolian Ukrainian - + Belarusian Bulgarian Macedonian @@ -256,15 +256,15 @@ To make maintaining easier please: BalticRim iso-8859-13 l7 - + Estonian primary - + Latvian Lithuanian - + Latvian Lithuanian @@ -341,11 +341,11 @@ To make maintaining easier please: Latvian Lithuanian - + Latvian Lithuanian - + Latvian Lithuanian @@ -417,7 +417,8 @@ To make maintaining easier please: Sorbian - + + Hungarian Polish Romanian @@ -426,16 +427,7 @@ To make maintaining easier please: Slovenian Sorbian - - Hungarian - Polish - Romanian - Croatian - Slovak - Slovenian - Sorbian - - + Hungarian Polish Romanian @@ -463,7 +455,7 @@ To make maintaining easier please: Spanish - + Dutch English French @@ -473,17 +465,8 @@ To make maintaining easier please: Pogtuguese Spanish - - Dutch - English - French - German Duden - Italian - Latin - Pogtuguese - Spanish - - + + Dutch English French diff --git a/sql/share/charsets/cp1251.xml b/sql/share/charsets/cp1251.xml index 79b71df9baf..98dd1186c0c 100644 --- a/sql/share/charsets/cp1251.xml +++ b/sql/share/charsets/cp1251.xml @@ -119,7 +119,7 @@ - + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F @@ -141,7 +141,7 @@ - + @@ -139,7 +139,7 @@ - + diff --git a/sql/share/charsets/macce.xml b/sql/share/charsets/macce.xml index 056047e9b82..0f39cb14b31 100644 --- a/sql/share/charsets/macce.xml +++ b/sql/share/charsets/macce.xml @@ -139,7 +139,7 @@ - + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F @@ -162,7 +162,7 @@ - + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F diff --git a/sql/share/charsets/macroman.xml b/sql/share/charsets/macroman.xml index cc9448842b4..8c8a9070084 100644 --- a/sql/share/charsets/macroman.xml +++ b/sql/share/charsets/macroman.xml @@ -135,7 +135,7 @@ - + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F @@ -156,7 +156,7 @@ - + 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F diff --git a/sql/sql_show.cc b/sql/sql_show.cc index cc7e19e72e2..fe4f1a0576d 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1416,15 +1416,12 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) static bool write_collation(Protocol *protocol, CHARSET_INFO *cs) { - char flags[4]; protocol->prepare_for_resend(); protocol->store(cs->csname, system_charset_info); protocol->store(cs->name, system_charset_info); protocol->store_short((longlong) cs->number); - flags[0]='\0'; - if (cs->state & MY_CS_PRIMARY) - strcat(flags,"def"); - protocol->store(flags, system_charset_info); + protocol->store((cs->state & MY_CS_PRIMARY) ? "Y" : "",system_charset_info); + protocol->store((cs->state & MY_CS_COMPILED)? "Y" : "",system_charset_info); protocol->store_short((longlong) cs->strxfrm_multiply); return protocol->write(); } @@ -1443,8 +1440,9 @@ int mysqld_show_collations(THD *thd, const char *wild) field_list.push_back(new Item_empty_string("Charset",30)); field_list.push_back(new Item_empty_string("Collation",30)); field_list.push_back(new Item_return_int("Id",11, FIELD_TYPE_SHORT)); - field_list.push_back(new Item_empty_string("Flags",30)); - field_list.push_back(new Item_return_int("strx_maxlen",3, FIELD_TYPE_SHORT)); + field_list.push_back(new Item_empty_string("D",30)); + field_list.push_back(new Item_empty_string("C",30)); + field_list.push_back(new Item_return_int("Sortlen",3, FIELD_TYPE_SHORT)); if (protocol->send_fields(&field_list, 1)) DBUG_RETURN(1); diff --git a/strings/Makefile.am b/strings/Makefile.am index ee1ce59d0d1..1db96f5fda5 100644 --- a/strings/Makefile.am +++ b/strings/Makefile.am @@ -22,19 +22,19 @@ pkglib_LIBRARIES = libmystrings.a # Exact one of ASSEMBLER_X if ASSEMBLER_x86 ASRCS = strings-x86.s longlong2str-x86.s -CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-latin1_de.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c +CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c else if ASSEMBLER_sparc32 # These file MUST all be on the same line!! Otherwise automake # generats a very broken makefile ASRCS = bmove_upp-sparc.s strappend-sparc.s strend-sparc.s strinstr-sparc.s strmake-sparc.s strmov-sparc.s strnmov-sparc.s strstr-sparc.s -CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-latin1_de.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c +CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c else #no assembler ASRCS = # These file MUST all be on the same line!! Otherwise automake # generats a very broken makefile -CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-latin1_de.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c +CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c atof.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c endif endif @@ -44,7 +44,7 @@ DISTCLEANFILES = ctype_autoconf.c # Default charset definitions EXTRA_DIST = ctype-big5.c ctype-czech.c ctype-euc_kr.c ctype-win1250ch.c \ ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-utf8.c \ - ctype-tis620.c ctype-ujis.c ctype-latin1_de.c \ + ctype-tis620.c ctype-ujis.c \ xml.c strto.c strings-x86.s \ longlong2str.c longlong2str-x86.s \ strxmov.c bmove_upp.c strappend.c strcont.c strend.c \ diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index 11e40dcf32f..d8f8a43ad34 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -607,11 +607,11 @@ int my_strnncollsp_czech(CHARSET_INFO * cs, CHARSET_INFO my_charset_czech = { - 2,0,0, /* number */ + 2,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ - "latin2", /* cs name */ - "czech", /* name */ - "", /* comment */ + "latin2", /* cs name */ + "latin2_czech_ci", /* name */ + "", /* comment */ ctype_czech, to_lower_czech, to_upper_czech, diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index c9d05ab0341..9358b406f93 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -17,3973 +17,7 @@ #include #include - -#ifndef HAVE_CHARSET_latin1 -#define HAVE_CHARSET_latin1 -#endif - -#if defined(HAVE_CHARSET_latin1)||defined(HAVE_CHARSET_latin1_de)||\ -defined(HAVE_CHARSET_danish)||defined(HAVE_CHARSET_german1) - -static uint16 tab_8859_1_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -static uchar tab_uni_8859_1_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}; - -static MY_UNI_IDX idx_uni_8859_1[]={ - {0x0000,0x00FF,tab_uni_8859_1_plane00}, - {0,0,NULL} -}; -#endif - -#if defined(HAVE_CHARSET_latin2)||defined(HAVE_CHARSET_croat)||\ -defined(HAVE_CHARSET_hungarian) - -static uint16 tab_8859_2_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, -0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, -0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, -0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - - -/* 0000-00FD , 254 chars */ -static uchar tab_uni_8859_2_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0x00,0x00,0xA4,0x00,0x00,0xA7,0xA8,0x00,0x00,0x00,0x00,0xAD,0x00,0x00, -0xB0,0x00,0x00,0x00,0xB4,0x00,0x00,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00, -0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF, -0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00, -0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD}; - -/* 0102-017E , 125 chars */ -static uchar tab_uni_8859_2_plane01[]={ -0xC3,0xE3,0xA1,0xB1,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0, -0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xA5,0xB5,0x00,0x00,0xA3, -0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5, -0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0xA6,0xB6,0x00,0x00,0xAA,0xBA,0xA9,0xB9, -0xDE,0xFE,0xAB,0xBB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xBC,0xAF,0xBF,0xAE,0xBE}; - -/* 02C7-02DD , 23 chars */ -static uchar tab_uni_8859_2_plane02[]={ -0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD}; - -static MY_UNI_IDX idx_uni_8859_2[]={ - {0x0000,0x00FD,tab_uni_8859_2_plane00}, - {0x0102,0x017E,tab_uni_8859_2_plane01}, - {0x02C7,0x02DD,tab_uni_8859_2_plane02}, - {0,0,NULL} -}; -#endif - -#if defined(HAVE_CHARSET_cp1251) || defined(HAVE_CHARSET_win1251) || defined(HAVE_CHARSET_win1251ukr) -static uint16 tab_cp1251_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021, - 0,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F, -0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, - 0,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F, -0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7, -0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407, -0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7, -0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457, -0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417, -0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F, -0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427, -0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F, -0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437, -0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F, -0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447, -0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F -}; - -/* 0000-00BB , 188 chars */ -static uchar tab_uni_cp1251_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0x00,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00, -0xB0,0xB1,0x00,0x00,0x00,0xB5,0xB6,0xB7,0x00,0x00,0x00,0xBB}; - -/* 0401-0491 , 145 chars */ -static uchar tab_uni_cp1251_plane04[]={ -0xA8,0x80,0x81,0xAA,0xBD,0xB2,0xAF,0xA3,0x8A,0x8C,0x8E,0x8D,0x00,0xA1,0x8F,0xC0, -0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0, -0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0, -0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0, -0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00, -0xB8,0x90,0x83,0xBA,0xBE,0xB3,0xBF,0xBC,0x9A,0x9C,0x9E,0x9D,0x00,0xA2,0x9F,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA5, -0xB4}; - -/* 2013-203A , 40 chars */ -static uchar tab_uni_cp1251_plane20[]={ -0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95, -0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B}; - -/* 2116-2122 , 13 chars */ -static uchar tab_uni_cp1251_plane21[]={ -0xB9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x99}; - -static MY_UNI_IDX idx_uni_cp1251[]={ - {0x0000,0x00BB,tab_uni_cp1251_plane00}, - {0x0401,0x0491,tab_uni_cp1251_plane04}, - {0x2013,0x203A,tab_uni_cp1251_plane20}, - {0x2116,0x2122,tab_uni_cp1251_plane21}, - {0,0,NULL} -}; -#endif - - - -#ifdef HAVE_CHARSET_armscii8 -static uchar ctype_armscii8[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 16, 16 -}; - -static uchar to_lower_armscii8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,184,169,170,171,172,173,174,175, - 176,177,179,179,181,181,183,183,185,185,187,187,189,189,191,191, - 193,193,195,195,197,197,199,199,201,201,203,203,205,205,207,207, - 209,209,211,211,213,213,215,215,217,217,219,219,221,221,223,223, - 225,225,227,227,229,229,231,231,233,233,235,235,237,237,239,239, - 241,241,243,243,245,245,247,247,249,249,251,251,253,253,254,255 -}; - -static uchar to_upper_armscii8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,178,180,180,182,182,184,184,186,186,188,188,190,190, - 192,192,194,194,196,196,198,198,200,200,202,202,204,204,206,206, - 208,208,210,210,212,212,214,214,216,216,218,218,220,220,222,222, - 224,224,226,226,228,228,230,230,232,232,234,234,236,236,238,238, - 240,240,242,242,244,244,246,246,248,248,250,250,252,252,254,255 -}; - -static uchar sort_order_armscii8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uint16 tab_armscii_8_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, -0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, -0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, -0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, -0x00A0,0x2741,0x00A7,0x0589,0x0029,0x0028,0x00BB,0x00AB, -0x2014,0x002E,0x055D,0x002C,0x002D,0x055F,0x2026,0x055C, -0x055B,0x055E,0x0531,0x0561,0x0532,0x0562,0x0533,0x0563, -0x0534,0x0564,0x0535,0x0565,0x0536,0x0566,0x0537,0x0567, -0x0538,0x0568,0x0539,0x0569,0x053A,0x056A,0x053B,0x056B, -0x053C,0x056C,0x053D,0x056D,0x053E,0x056E,0x053F,0x056F, -0x0540,0x0570,0x0541,0x0571,0x0542,0x0572,0x0543,0x0573, -0x0544,0x0574,0x0545,0x0575,0x0546,0x0576,0x0547,0x0577, -0x0548,0x0578,0x0549,0x0579,0x054A,0x057A,0x054B,0x057B, -0x054C,0x057C,0x054D,0x057D,0x054E,0x057E,0x054F,0x057F, -0x0550,0x0580,0x0551,0x0581,0x0552,0x0582,0x0553,0x0583, -0x0554,0x0584,0x0555,0x0585,0x0556,0x0586,0x2019,0x0027 -}; - - -/* 0000-00BB , 188 chars */ -static uchar tab_uni_armscii_8_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0xFF,0xA5,0xA4,0x2A,0x2B,0xAB,0xAC,0xA9,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, -0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, -0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0xA2,0x00,0x00,0x00,0xA7,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6}; - -/* 0531-0589 , 89 chars */ -static uchar tab_uni_armscii_8_plane05[]={ -0xB2,0xB4,0xB6,0xB8,0xBA,0xBC,0xBE,0xC0,0xC2,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE,0xD0, -0xD2,0xD4,0xD6,0xD8,0xDA,0xDC,0xDE,0xE0,0xE2,0xE4,0xE6,0xE8,0xEA,0xEC,0xEE,0xF0, -0xF2,0xF4,0xF6,0xF8,0xFA,0xFC,0x00,0x00,0x00,0x00,0xB0,0xAF,0xAA,0xB1,0xAD,0x00, -0xB3,0xB5,0xB7,0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF,0xD1, -0xD3,0xD5,0xD7,0xD9,0xDB,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEB,0xED,0xEF,0xF1, -0xF3,0xF5,0xF7,0xF9,0xFB,0xFD,0x00,0x00,0xA3}; - -/* 2014-2026 , 19 chars */ -static uchar tab_uni_armscii_8_plane20[]={ -0xA8,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xAE}; - -/* 2741-2741 , 1 chars */ -static uchar tab_uni_armscii_8_plane27[]={ -0xA1}; - - -static MY_UNI_IDX idx_uni_armscii_8[]={ - {0x0000,0x00BB,tab_uni_armscii_8_plane00}, - {0x0531,0x0589,tab_uni_armscii_8_plane05}, - {0x2014,0x2026,tab_uni_armscii_8_plane20}, - {0x2741,0x2741,tab_uni_armscii_8_plane27}, - {0,0,NULL} -}; - -#endif - - -#ifdef HAVE_CHARSET_cp1251 - -/* The cp1251 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_cp1251[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_cp1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,184,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_cp1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,168,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 -}; - -static uchar sort_order_cp1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,124,125,126,127,128, - 129, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,130,131,132,133,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, 97,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255, 97,255,255,255,255,255,255,255, - 91, 92, 93, 94, 95, 96, 98, 99,100,101,102,103,104,105,106,107, - 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123, - 91, 92, 93, 94, 95, 96, 98, 99,100,101,102,103,104,105,106,107, - 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123 -}; - -#endif - - -#ifdef HAVE_CHARSET_cp1257 - -/* The cp1257 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_cp1257[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, - 2, 2, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 2, 0 -}; - -static uchar to_lower_cp1257[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,194,195,196,197,230,199,232,201,202,235,204,205,206,207, - 240,209,210,211,212,213,214,215,248,217,218,251,220,221,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_cp1257[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,226,227,228,229,198,231,200,233,234,203,236,237,238,239, - 208,241,242,243,244,245,246,247,216,249,250,219,252,253,222,255 -}; - -static uchar sort_order_cp1257[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 67, 68, 70, 71, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 91, 92, 95, 96, 97, 78,255, 98, 99,100,101,102, - 103, 65, 67, 68, 70, 71, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 91, 92, 95, 96, 97, 78,255,104,105,106,107,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 66, 79,255,255,255,255, 72,255, 69,255,255, 73,255,255,255,255, - 90,255,255,255,255,255,255,255, 94,255,255, 93,255,255,255,255, - 255, 79,255,255,255,255, 72,255, 69,255,255, 73,255,255,255,255, - 90,255,255,255,255,255,255,255, 94,255,255, 93,255,255,255,255 -}; - -static uint16 tab_cp1257_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC, 0,0x201A, 0,0x201E,0x2026,0x2020,0x2021, - 0,0x2030, 0,0x2039, 0,0x00A8,0x02C7,0x00B8, - 0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, - 0,0x2122, 0,0x203A, 0,0x00AF,0x02DB, 0, -0x00A0, 0,0x00A2,0x00A3,0x00A4, 0,0x00A6,0x00A7, -0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6, -0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112, -0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B, -0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7, -0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF, -0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113, -0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C, -0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7, -0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 -}; - - -/* 0000-00FC , 253 chars */ -static uchar tab_uni_cp1257_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0xA2,0xA3,0xA4,0x00,0xA6,0xA7,0x8D,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x9D, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0x8F,0xB9,0x00,0xBB,0xBC,0xBD,0xBE,0x00, -0x00,0x00,0x00,0x00,0xC4,0xC5,0xAF,0x00,0x00,0xC9,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xD3,0x00,0xD5,0xD6,0xD7,0xA8,0x00,0x00,0x00,0xDC,0x00,0x00,0xDF, -0x00,0x00,0x00,0x00,0xE4,0xE5,0xBF,0x00,0x00,0xE9,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xF3,0x00,0xF5,0xF6,0xF7,0xB8,0x00,0x00,0x00,0xFC}; - -/* 0100-017E , 127 chars */ -static uchar tab_uni_cp1257_plane01[]={ -0xC2,0xE2,0x00,0x00,0xC0,0xE0,0xC3,0xE3,0x00,0x00,0x00,0x00,0xC8,0xE8,0x00,0x00, -0x00,0x00,0xC7,0xE7,0x00,0x00,0xCB,0xEB,0xC6,0xE6,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0xCE,0xEE,0x00,0x00,0xC1,0xE1, -0x00,0x00,0x00,0x00,0x00,0x00,0xCD,0xED,0x00,0x00,0x00,0xCF,0xEF,0x00,0x00,0x00, -0x00,0xD9,0xF9,0xD1,0xF1,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0xD4,0xF4,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0xAA,0xBA,0x00,0x00,0xDA,0xFA,0x00,0x00,0x00,0x00, -0xD0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xFB,0x00,0x00,0x00,0x00, -0x00,0x00,0xD8,0xF8,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xDD,0xFD,0xDE,0xFE}; - -/* 2013-20AC , 154 chars */ -static uchar tab_uni_cp1257_plane20[]={ -0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95, -0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}; - -/* 02C7-02DB , 21 chars */ -static uchar tab_uni_cp1257_plane02[]={ -0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xFF,0x00,0x9E}; - -/* 2122-2122 , 1 chars */ -static uchar tab_uni_cp1257_plane21[]={ -0x99}; - -static MY_UNI_IDX idx_uni_cp1257[]={ - {0x0000,0x00FC,tab_uni_cp1257_plane00}, - {0x0100,0x017E,tab_uni_cp1257_plane01}, - {0x2013,0x20AC,tab_uni_cp1257_plane20}, - {0x02C7,0x02DB,tab_uni_cp1257_plane02}, - {0x2122,0x2122,tab_uni_cp1257_plane21}, - {0,0,NULL} -}; - -#endif - - -#ifdef HAVE_CHARSET_croat - -/* The croat character set. Generated by - * the ./conf_to_src program - */ - -static uchar ctype_croat[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_croat[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,154,139,140,141,158,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_croat[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,138,155,156,157,142,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_croat[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137, 87,139,140,141, 95,143, - 144,145,146,147,148,149,150,151,152,153, 87,155,156,157, 95,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 92, 91, 69, 67, 68, 69, 69, 69, 73, 73, 73, 73, - 71, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223, - 65, 65, 65, 65, 92, 91, 69, 67, 68, 69, 69, 69, 73, 73, 73, 73, - 71, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255 -}; -#endif - - -#ifdef HAVE_CHARSET_danish - -/* The danish character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_danish[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_danish[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_danish[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_danish[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 91, 93, 91, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 92,215, 92, 85, 85, 85, 89, 89,222,223, - 65, 65, 65, 65, 91, 93, 91, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 92,247, 92, 85, 85, 85, 89, 89,222,255 -}; -#endif - - - -#ifdef HAVE_CHARSET_dec8 - -/* The dec8 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_dec8[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_dec8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_dec8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_dec8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255 -}; -#endif - - -#ifdef HAVE_CHARSET_dos - -/* The dos character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_dos[] = { - 0, - 32, 48, 48, 48, 48, 48, 48, 32, 32, 40, 40, 40, 40, 40, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 48, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, - 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 32 -}; - -static uchar to_lower_dos[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 135,129,130,131,132,133,134,135,136,137,138,139,140,141,132,134, - 130,145,145,147,148,149,150,151,152,148,129,155,156,157,158,159, - 160,161,162,163,164,164,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_dos[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,154,144, 65,142, 65,143,128, 69, 69, 69, 73, 73, 73,142,143, - 144,146,146, 79,153, 79, 85, 85, 89,153,154,155,156,157,158,159, - 65, 73, 79, 85,165,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_dos[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 67, 89, 69, 65, 92, 65, 91, 67, 69, 69, 69, 73, 73, 73, 92, 91, - 69, 92, 92, 79, 93, 79, 85, 85, 89, 93, 89, 36, 36, 36, 36, 36, - 65, 73, 79, 85, 78, 78,166,167, 63,169,170,171,172, 33, 34, 34, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; -#endif - -#ifdef HAVE_CHARSET_estonia - -/* The estonia character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_estonia[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_estonia[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,184,169,186,171,172,173,174,191, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_estonia[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,168,185,170,187,188,189,190,175, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_estonia[] = { - 0, 2, 3, 4, 5, 6, 7, 8, 9, 46, 47, 48, 49, 50, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 44, 51, 52, 53, 54, 55, 56, 39, 57, 58, 59, 93, 60, 40, 61, 62, - 118,122,124,126,128,129,130,131,132,133, 63, 64, 94, 95, 96, 65, - 66,134,144,146,152,154,164,166,170,172,178,180,184,190,192,198, - 206,208,210,214,229,232,238,240,250,252,221, 67, 68, 69, 70, 71, - 72,135,145,147,153,155,165,167,171,173,179,181,185,191,193,199, - 207,209,211,215,230,233,239,241,251,253,222, 73, 74, 75, 76, 28, - 1, 29, 87, 30, 90,116,113,114, 31,117, 32, 91, 33, 78, 82, 81, - 34, 85, 86, 88, 89,115, 42, 43, 35,231, 36, 92, 37, 79, 84, 38, - 45,254,102,103,104,255, 77,105,204,106,212, 98,107, 41,108,142, - 109, 97,125,127, 80,110,111,112,205,123,213, 99,119,120,121,143, - 140,176,136,148,244,138,162,160,150,156,223,158,168,182,174,186, - 219,194,196,200,202,242,246,100,236,188,216,234,248,225,227,218, - 141,177,137,149,245,139,163,161,151,157,224,159,169,183,175,187, - 220,195,197,201,203,243,247,101,237,189,217,235,249,226,228, 83 -}; -#endif - -#ifdef HAVE_CHARSET_german1 - -/* The german1 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_german1[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_german1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_german1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_german1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 208, 78, 79, 79, 79, 79, 79,215, 79, 85, 85, 85, 85, 89,222, 83, - 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 208, 78, 79, 79, 79, 79, 79,247, 79, 85, 85, 85, 85, 89,222,255 -}; -#endif - -#ifdef HAVE_CHARSET_greek_bad - -/* The greek character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_greek[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 0, 0, 16, 16, 16, 16, 0, 16, 16, 16, 0, 16, - 16, 16, 16, 16, 16, 16, 1, 16, 1, 1, 1, 16, 1, 16, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 -}; - -static uchar to_lower_greek[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,220,183,221,222,223,187,252,189,253,254, - 192,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,210,243,244,245,246,247,248,249,250,251,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_greek[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 218,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,193,197,199,201, - 219,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,211,211,212,213,214,215,216,217,218,219,207,213,217,255 -}; - -static uchar sort_order_greek[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,193,183,197,199,201,187,207,189,213,217, - 201,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,201,213,193,197,199,201, - 213,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,211,211,212,213,214,215,216,217,201,213,207,213,217,255 -}; -#endif - -#ifdef HAVE_CHARSET_hebrew - -/* The hebrew character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_hebrew[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0 -}; - -static uchar to_lower_hebrew[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_hebrew[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_hebrew[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; -#endif - -#ifdef HAVE_CHARSET_hp8 - -/* The hp8 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_hp8[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 32, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 2, 16, 2, 2, - 1, 16, 16, 1, 2, 16, 16, 2, 1, 16, 1, 1, 1, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 32, 32, 32, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16, 32 -}; - -static uchar to_lower_hp8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,200,192,201,193,205,209,221,168,169,170,171,172,203,195,175, - 176,178,178,179,181,181,183,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 212,209,214,215,212,213,214,215,204,217,206,207,197,221,222,194, - 196,226,226,228,228,213,217,198,202,234,234,236,236,199,239,239, - 241,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_hp8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,177,179,180,180,182,182,184,185,186,187,188,189,190,191, - 162,164,223,174,224,220,231,237,161,163,232,173,216,165,218,219, - 208,166,210,211,208,229,210,211,216,230,218,219,220,167,222,223, - 224,225,225,227,227,229,230,231,232,233,233,235,235,237,238,238, - 240,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_hp8[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 91, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; -#endif - -#ifdef HAVE_CHARSET_hungarian - -/* The hungarian character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_hungarian[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 72, - 1, 16, 1, 16, 1, 1, 16, 0, 0, 1, 1, 1, 1, 16, 1, 1, - 16, 2, 16, 2, 16, 2, 2, 16, 16, 2, 2, 2, 2, 16, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 16, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 16 -}; - -static uchar to_lower_hungarian[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,139,139,161,161,142,160, - 130,145,146,147,148,162,150,163,150,148,129,155,156,157,158,159, - 160,161,162,163,181,182,166,147,168,185,186,187,188,173,190,191, - 176,177,178,179,180,225,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 208,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 162,225,226,227,228,229,230,231,232,233,234,150,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_hungarian[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,154,144,131,132,133,134,135,136,137,138,138,140,141,142,143, - 144,145,146,167,153,149,152,151,152,153,154,155,156,157,158,159, - 143,141,149,151,164,165,166,167,168,169,170,171,172,173,174,175, - 176,160,178,162,180,181,165,183,184,169,170,171,172,189,174,175, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,193,194,195,196,197,198,199,200,201,202,235,204,205,206,207, - 240,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_hungarian[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 71, 72, 76, 78, 83, 84, 85, 86, 90, 91, 92, 96, 97,100, - 105,106,107,110,114,117,122,123,124,125,127,131,132,133,134,135, - 136, 65, 71, 72, 76, 78, 83, 84, 85, 86, 90, 91, 92, 96, 97,100, - 105,106,107,110,114,117,122,123,124,125,127,137,138,139,140, 0, - 1,120, 78, 4, 5, 6, 7, 8, 9, 10,103,103, 86, 86, 15, 65, - 78, 18, 19,103,103,100,120,117,120,103,120, 28, 29, 30, 31,255, - 65, 86,100,117, 94,111,255,103,255,112,113,115,128,255,129,130, - 255, 66,255, 93,255, 65,111,255,255,112,113,115,128,255,129,130, - 108, 65, 68, 69, 70, 95, 73, 75, 74, 78, 81, 82, 80, 86, 87, 77, - 255, 98, 99,100,102,103,103,255,109,119,117,120,120,126,116,255, - 100, 65, 68, 69, 70, 95, 73, 75, 74, 78, 81,120, 80, 86, 88, 77, - 255, 98, 99,100,102,103,103,255,109,119,117,120,120,126,116,255 -}; -#endif - -#ifdef HAVE_CHARSET_koi8_ru - -/* The koi8_ru character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_koi8_ru[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -}; - -static uchar to_lower_koi8_ru[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,163,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 -}; - -static uchar to_upper_koi8_ru[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,179,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_koi8_ru[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,229,163,164,165,166,167,168,169,170,171,172,173,174, - 175,176,177,229,178,179,180,181,182,183,184,185,186,187,188,189, - 254,223,224,246,227,228,244,226,245,232,233,234,235,236,237,238, - 239,255,240,241,242,243,230,225,252,251,231,248,253,249,247,250, - 254,223,224,246,227,228,244,226,245,232,233,234,235,236,237,238, - 239,255,240,241,242,243,230,225,252,251,231,248,253,249,247,250 -}; - -static uint16 tab_koi8_r_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556, -0x2557,0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565, -0x2566,0x2567,0x2568,0x2569,0x256A,0x256B,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - - -/* 0000-00F7 , 248 chars */ -static uchar tab_uni_koi8_r_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x9A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x00,0x00,0x00, -0x9C,0x00,0x9D,0x00,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9F}; - -/* 0401-0451 , 81 chars */ -static uchar tab_uni_koi8_r_plane04[]={ -0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1, -0xE2,0xF7,0xE7,0xE4,0xE5,0xF6,0xFA,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF2, -0xF3,0xF4,0xF5,0xE6,0xE8,0xE3,0xFE,0xFB,0xFD,0xFF,0xF9,0xF8,0xFC,0xE0,0xF1,0xC1, -0xC2,0xD7,0xC7,0xC4,0xC5,0xD6,0xDA,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD2, -0xD3,0xD4,0xD5,0xC6,0xC8,0xC3,0xDE,0xDB,0xDD,0xDF,0xD9,0xD8,0xDC,0xC0,0xD1,0x00, -0xA3}; - -/* 2500-25A0 , 161 chars */ -static uchar tab_uni_koi8_r_plane25[]={ -0x80,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0xA1,0xA2,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0, -0xB1,0xB2,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x8B,0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x8E,0x00,0x00,0x00, -0x8F,0x90,0x91,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x94}; - -/* 2219-2265 , 77 chars */ -static uchar tab_uni_koi8_r_plane22[]={ -0x95,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x99}; - -/* 2320-2321 , 2 chars */ -static uchar tab_uni_koi8_r_plane23[]={ -0x93,0x9B}; - - -static MY_UNI_IDX idx_uni_koi8_r[]={ - {0x0000,0x00F7,tab_uni_koi8_r_plane00}, - {0x0401,0x0451,tab_uni_koi8_r_plane04}, - {0x2500,0x25A0,tab_uni_koi8_r_plane25}, - {0x2219,0x2265,tab_uni_koi8_r_plane22}, - {0x2320,0x2321,tab_uni_koi8_r_plane23}, - {0,0,NULL} -}; - -#endif - -#ifdef HAVE_CHARSET_koi8_ukr - -/* The koi8_ukr character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_koi8_ukr[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 2, 2, 16, 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, - 16, 16, 16, 1, 1, 16, 1, 1, 16, 16, 16, 16, 16, 1, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -}; - -static uchar to_lower_koi8_ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 32, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32,163,164, 32,166,167, 32, 32, 32, 32, 32,173, 32, 32, - 32, 32, 32,163,164, 32,166,167, 32, 32, 32, 32, 32,173, 32, 32, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 -}; - -static uchar to_upper_koi8_ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 32, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32,179,180, 32,182,183, 32, 32, 32, 32, 32,189, 32, 32, - 32, 32, 32,179,180, 32,182,183, 32, 32, 32, 32, 32,189, 32, 32, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_koi8_ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 32, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196, - 197,198,199,136,135,200,140,141,201,202,203,204,205,132,206,207, - 208,209,210,136,135,211,140,141,212,213,214,215,216,132,217,218, - 163,128,129,155,133,134,153,131,154,139,142,143,144,145,146,147, - 148,164,149,150,151,152,137,130,161,160,138,157,162,158,156,159, - 163,128,129,155,133,134,153,131,154,139,142,143,144,145,146,147, - 148,164,149,150,151,152,137,130,161,160,138,157,162,158,156,159 -}; - -static uint16 tab_koi8_u_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, -0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524, -0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590, -0x2591,0x2592,0x2593,0x2320,0x25A0,0x2022,0x221A,0x2248, -0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7, -0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457, -0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E, -0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407, -0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9, -0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, -0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, -0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, -0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A, -0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, -0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, -0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, -0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A -}; - - -/* 0000-00F7 , 248 chars */ -static uchar tab_uni_koi8_u_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x9A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x00,0x00,0x00,0x00,0x00,0x00, -0x9C,0x00,0x9D,0x00,0x00,0x00,0x00,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9F}; - -/* 0401-0491 , 145 chars */ -static uchar tab_uni_koi8_u_plane04[]={ -0xB3,0x00,0x00,0xB4,0x00,0xB6,0xB7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1, -0xE2,0xF7,0xE7,0xE4,0xE5,0xF6,0xFA,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF2, -0xF3,0xF4,0xF5,0xE6,0xE8,0xE3,0xFE,0xFB,0xFD,0xFF,0xF9,0xF8,0xFC,0xE0,0xF1,0xC1, -0xC2,0xD7,0xC7,0xC4,0xC5,0xD6,0xDA,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD2, -0xD3,0xD4,0xD5,0xC6,0xC8,0xC3,0xDE,0xDB,0xDD,0xDF,0xD9,0xD8,0xDC,0xC0,0xD1,0x00, -0xA3,0x00,0x00,0xA4,0x00,0xA6,0xA7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBD, -0xAD}; - -/* 2500-25A0 , 161 chars */ -static uchar tab_uni_koi8_u_plane25[]={ -0x80,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00, -0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0xA1,0xA2,0x00,0xA5,0x00,0x00,0xA8,0xA9,0xAA,0xAB,0xAC,0x00,0xAE,0xAF,0xB0, -0xB1,0xB2,0x00,0xB5,0x00,0x00,0xB8,0xB9,0xBA,0xBB,0xBC,0x00,0xBE,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x8B,0x00,0x00,0x00,0x8C,0x00,0x00,0x00,0x8D,0x00,0x00,0x00,0x8E,0x00,0x00,0x00, -0x8F,0x90,0x91,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x94}; - -/* 221A-2265 , 76 chars */ -static uchar tab_uni_koi8_u_plane22[]={ -0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x97,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x99}; - -/* 2320-2321 , 2 chars */ -static uchar tab_uni_koi8_u_plane23[]={ -0x93,0x9B}; - -/* 2022-2022 , 1 chars */ -static uchar tab_uni_koi8_u_plane20[]={ -0x95}; - - -static MY_UNI_IDX idx_uni_koi8_u[]={ - {0x0000,0x00F7,tab_uni_koi8_u_plane00}, - {0x0401,0x0491,tab_uni_koi8_u_plane04}, - {0x2500,0x25A0,tab_uni_koi8_u_plane25}, - {0x221A,0x2265,tab_uni_koi8_u_plane22}, - {0x2320,0x2321,tab_uni_koi8_u_plane23}, - {0x2022,0x2022,tab_uni_koi8_u_plane20}, - {0,0,NULL} -}; - -#endif - -#ifdef HAVE_CHARSET_latin1 - -/* The latin1 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_latin1[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_latin1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,215,216, 85, 85, 85, 89, 89,222,223, - 65, 65, 65, 65, 92, 91, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79, 93,247,216, 85, 85, 85, 89, 89,222,255 -}; -#endif - -#ifdef HAVE_CHARSET_latin2 - -/* The latin2 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_latin2[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 1, 16, 1, 16, 1, 1, 16, 16, 1, 1, 1, 1, 16, 1, 1, - 16, 2, 16, 2, 16, 2, 2, 16, 16, 2, 2, 2, 2, 16, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 16, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 16 -}; - -static uchar to_lower_latin2[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,177,162,179,164,181,182,167,168,185,186,187,188,173,190,191, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 208,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_latin2[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,161,178,163,180,165,166,183,184,169,170,171,172,189,174,175, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 240,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_latin2[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 68, 69, 72, 73, 75, 76, 77, 78, 79, 80, 81, 83, 84, 86, - 88, 89, 90, 91, 94, 95, 96, 97, 98, 99,100,104,105,106,107,108, - 109, 65, 68, 69, 72, 73, 75, 76, 77, 78, 79, 80, 81, 83, 84, 86, - 88, 89, 90, 91, 94, 95, 96, 97, 98, 99,100,110,111,112,113,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255, 66,255, 82,255, 81, 92,255,255, 93, 91, 94,101,255,103,102, - 255, 66,255, 82,255, 81, 92,255,255, 93, 91, 94,101,255,103,102, - 90, 67, 67, 67, 67, 81, 70, 69, 71, 73, 74, 73, 73, 78, 78, 72, - 255, 85, 84, 87, 86, 86, 86,255, 90, 95, 95, 95, 95, 99, 94,255, - 90, 67, 67, 67, 67, 81, 70, 69, 71, 73, 74, 73, 73, 78, 78, 72, - 255, 85, 84, 87, 86, 86, 86,255, 90, 95, 95, 95, 95, 99, 94,255 -}; -#endif - -#ifdef HAVE_CHARSET_latin5 - -/* The latin5 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_latin5[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_latin5[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,253,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,105,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_latin5[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72,221, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220, 73,222,255 -}; - -static uchar sort_order_latin5[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 81, 82, - 84, 85, 86, 87, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99,100,101, - 102, 65, 66, 67, 69, 70, 71, 72, 74, 76, 77, 78, 79, 80, 81, 82, - 84, 85, 86, 87, 89, 90, 92, 93, 94, 95, 96,135,136,137,138,139, - 140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155, - 156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187, - 188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210, 68,211,212,213,214,215,216,217,218, - 73,219,220,221,222,223, 83,224,225,226,227,228, 91, 76, 88,229, - 204,205,206,207,208,209,210, 68,211,212,213,214,215,216,217,218, - 73,219,220,221,222,223, 83,250,225,226,227,228, 91, 75, 88,255 -}; - -static uint16 tab_8859_9_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF -}; - - -/* 0000-00FF , 256 chars */ -static uchar tab_uni_8859_9_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0x00,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0x00,0x00,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0x00,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0x00,0x00,0xFF}; - -/* 011E-015F , 66 chars */ -static uchar tab_uni_8859_9_plane01[]={ -0xD0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xDD,0xFD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xDE,0xFE}; - - -static MY_UNI_IDX idx_uni_8859_9[]={ - {0x0000,0x00FF,tab_uni_8859_9_plane00}, - {0x011E,0x015F,tab_uni_8859_9_plane01}, - {0,0,NULL} -}; - -#endif - -#ifdef HAVE_CHARSET_swe7 - -/* The swe7 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_swe7[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 1,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, - 1,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static uchar to_lower_swe7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_swe7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_swe7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 69, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 91, 89, 95, - 69, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 91, 89,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; -#endif - -#ifdef HAVE_CHARSET_usa7 - -/* The usa7 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_usa7[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static uchar to_lower_usa7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_usa7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_usa7[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 91, 94, 95, - 69, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125, 89,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uint16 tab_us_ascii_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - - -/* 0000-007E , 127 chars */ -static uchar tab_uni_us_ascii_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E}; - - -static MY_UNI_IDX idx_uni_us_ascii[]={ - {0x0000,0x007E,tab_uni_us_ascii_plane00}, - {0,0,NULL} -}; - -#endif - -#ifdef HAVE_CHARSET_win1250 - -/* The win1250 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_win1250[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 32, 32, 16, 32, 16, 16, 16, 16, 32, 16, 1, 16, 1, 1, 1, 1, - 32, 16, 16, 16, 16, 16, 16, 16, 32, 16, 2, 16, 2, 2, 2, 2, - 72, 16, 16, 1, 16, 1, 16, 1, 16, 16, 1, 16, 16, 16, 16, 1, - 16, 16, 16, 2, 16, 16, 16, 16, 16, 2, 2, 16, 1, 16, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 16 -}; - -static uchar to_lower_win1250[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,154,139,156,157,158,159, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,179,164,185,166,223,168,169,186,171,172,173,174,191, - 176,177,178,179,180,181,182,183,184,185,186,187,190,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_win1250[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,138,155,140,141,142,143, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,163,180,181,182,183,184,165,170,187,188,189,188,175, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,167, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -static uchar sort_order_win1250[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 70, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, - 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 99,100,101,102,103, - 104, 65, 66, 67, 70, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 85, - 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137, 90,139, 90, 91, 98, 98, - 144,145,146,147,148,149,150,151,152,153, 90,155, 90, 91, 98, 98, - 32,161,162, 80,164, 65,166, 89,168,169, 89,171,172,173,174, 98, - 176,177,178, 80,180,181,182,183,184, 65, 89,187, 80,189, 80, 98, - 88, 65, 65, 65, 65, 80, 69, 67, 68, 73, 73, 73, 73, 77, 77, 70, - 71, 83, 83, 85, 85, 85, 85,215, 88, 92, 92, 92, 92, 96, 91, 89, - 88, 65, 65, 65, 65, 80, 69, 67, 68, 73, 73, 73, 73, 77, 77, 70, - 71, 83, 83, 85, 85, 85, 85,247, 88, 92, 92, 92, 92, 96, 91,255 -}; -#endif - -#if defined(HAVE_CHARSET_win1250) - -static uint16 tab_cp1250_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, -0x20AC, 0,0x201A, 0,0x201E,0x2026,0x2020,0x2021, - 0,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179, - 0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, - 0,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A, -0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7, -0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B, -0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C, -0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, -0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, -0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, -0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, -0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, -0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, -0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, -0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 -}; - - -/* 0000-00FD , 254 chars */ -static uchar tab_uni_cp1250_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0xA8,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00, -0xB0,0xB1,0x00,0x00,0xB4,0xB5,0xB6,0xB7,0xB8,0x00,0x00,0xBB,0x00,0x00,0x00,0x00, -0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00, -0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF, -0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00, -0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD}; - -/* 0102-017E , 125 chars */ -static uchar tab_uni_cp1250_plane01[]={ -0xC3,0xE3,0xA5,0xB9,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0, -0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xBC,0xBE,0x00,0x00,0xA3, -0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5, -0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0x8C,0x9C,0x00,0x00,0xAA,0xBA,0x8A,0x9A, -0xDE,0xFE,0x8D,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x9F,0xAF,0xBF,0x8E,0x9E}; - -/* 2013-20AC , 154 chars */ -static uchar tab_uni_cp1250_plane20[]={ -0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95, -0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}; - -/* 02C7-02DD , 23 chars */ -static uchar tab_uni_cp1250_plane02[]={ -0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD}; - -/* 2122-2122 , 1 chars */ -static uchar tab_uni_cp1250_plane21[]={ -0x99}; - - -static MY_UNI_IDX idx_uni_cp1250[]={ - {0x0000,0x00FD,tab_uni_cp1250_plane00}, - {0x0102,0x017E,tab_uni_cp1250_plane01}, - {0x2013,0x20AC,tab_uni_cp1250_plane20}, - {0x02C7,0x02DD,tab_uni_cp1250_plane02}, - {0x2122,0x2122,tab_uni_cp1250_plane21}, - {0,0,NULL} -}; - -#endif - -#ifdef HAVE_CHARSET_win1251 - -/* The win1251 character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_win1251[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_win1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,184,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,245,247,248,249,250,251,252,253,254,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_win1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,168,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,213,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 -}; - -static uchar sort_order_win1251[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,198,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,198,185,186,187,188,189,190,191, - 192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,208, - 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224, - 192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,208, - 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224 -}; -#endif - -#ifdef HAVE_CHARSET_win1251ukr - -/* The win1251ukr character set. Generated automatically by - * the ./conf_to_src program - */ - -static uchar ctype_win1251ukr[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 1, 16, 16, 16, 16, 1, - 16, 16, 1, 2, 16, 16, 16, 16, 2, 16, 2, 16, 16, 16, 16, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_win1251ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 32, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32,165, 32, 32,168, 32,170, 32, 32, 32, 32,175, - 32, 32,178,178,165, 32, 32, 32,168, 32,170, 32, 32, 32, 32,175, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 -}; - -static uchar to_upper_win1251ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 32, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32,180, 32, 32,184, 32,186, 32, 32, 32, 32,191, - 32, 32,179,179,180, 32, 32, 32,184, 32,186, 32, 32, 32, 32,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar sort_order_win1251ukr[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 32, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196, - 197,198,199,200,201,132,202,203,136,204,135,205,206,207,208,141, - 209,210,140,140,132,211,212,213,136,214,135,215,216,217,218,141, - 128,129,130,131,133,134,137,138,139,142,143,144,145,146,147,148, - 149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164, - 128,129,130,131,133,134,137,138,139,142,143,144,145,146,147,148, - 149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164 -}; -#endif - - - CHARSET_INFO compiled_charsets[] = { - -#ifdef HAVE_CHARSET_latin1 - { - 8,0,0, /* number */ - MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "latin1", /* cs name */ - "latin1", /* name */ - "", /* comment */ - ctype_latin1, - to_lower_latin1, - to_upper_latin1, - sort_order_latin1, - tab_8859_1_uni, /* tab_to_uni */ - idx_uni_8859_1, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_cp1251 - { - 14,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp1251", /* cs name */ - "cp1251", /* name */ - "", /* comment */ - ctype_cp1251, - to_lower_cp1251, - to_upper_cp1251, - sort_order_cp1251, - tab_cp1251_uni, /* tab_to_uni */ - idx_uni_cp1251, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_cp1257 - { - 29,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp1257", /* cs name */ - "cp1257", /* name */ - "", /* comment */ - ctype_cp1257, - to_lower_cp1257, - to_upper_cp1257, - sort_order_cp1257, - tab_cp1257_uni, /* tab_to_uni */ - idx_uni_cp1257, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_croat - { - 27,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin2", /* cs name */ - "croat", /* name */ - "", /* comment */ - ctype_croat, - to_lower_croat, - to_upper_croat, - sort_order_croat, - tab_8859_2_uni, /* tab_to_uni */ - idx_uni_8859_2, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_danish - { - 15,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin1", /* cs name */ - "danish", /* name */ - "", /* comment */ - ctype_danish, - to_lower_danish, - to_upper_danish, - sort_order_danish, - tab_8859_1_uni, /* tab_to_uni */ - idx_uni_8859_1, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_dec8 - { - 3,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "dec8", /* cs name */ - "dec8", /* name */ - "", /* comment */ - ctype_dec8, - to_lower_dec8, - to_upper_dec8, - sort_order_dec8, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_dos - { - 4,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp850", /* cs name */ - "dos", /* name */ - "", /* comment */ - ctype_dos, - to_lower_dos, - to_upper_dos, - sort_order_dos, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_estonia - { - 20,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin7", /* cs name */ - "latin7_estonian_ci_as", /* name */ - "", /* comment */ - ctype_estonia, - to_lower_estonia, - to_upper_estonia, - sort_order_estonia, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_german1 - { - 5,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin1", /* cs name */ - "german1", /* name */ - "", /* comment */ - ctype_german1, - to_lower_german1, - to_upper_german1, - sort_order_german1, - tab_8859_1_uni, /* tab_to_uni */ - idx_uni_8859_1, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_greek_bad - { - 25,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "greek", /* cs name */ - "greek", /* name */ - "", /* comment */ - ctype_greek, - to_lower_greek, - to_upper_greek, - sort_order_greek, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_hebrew - { - 16,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "hebrew", /* cs name */ - "hebrew", /* name */ - "", /* comment */ - ctype_hebrew, - to_lower_hebrew, - to_upper_hebrew, - sort_order_hebrew, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_hp8 - { - 6,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "hp8", /* cs name */ - "hp8", /* name */ - "", /* comment */ - ctype_hp8, - to_lower_hp8, - to_upper_hp8, - sort_order_hp8, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_hungarian - { - 21,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin2", /* cs name */ - "hungarian", /* name */ - "", /* comment */ - ctype_hungarian, - to_lower_hungarian, - to_upper_hungarian, - sort_order_hungarian, - tab_8859_2_uni, /* tab_to_uni */ - idx_uni_8859_2, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_koi8_ru - { - 7,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "koi8r", /* cs name */ - "koi8r", /* name */ - "", /* comment */ - ctype_koi8_ru, - to_lower_koi8_ru, - to_upper_koi8_ru, - sort_order_koi8_ru, - tab_koi8_r_uni, /* tab_to_uni */ - idx_uni_koi8_r, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_koi8_ukr - { - 22,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "koi8u", /* cs name */ - "koi8u", /* name */ - "", /* comment */ - ctype_koi8_ukr, - to_lower_koi8_ukr, - to_upper_koi8_ukr, - sort_order_koi8_ukr, - tab_koi8_u_uni, /* tab_to_uni */ - idx_uni_koi8_u, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_latin2 - { - 9,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin2", /* cs name */ - "latin2", /* name */ - "", /* comment */ - ctype_latin2, - to_lower_latin2, - to_upper_latin2, - sort_order_latin2, - tab_8859_2_uni, /* tab_to_uni */ - idx_uni_8859_2, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_latin5 - { - 30,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin5", /* cs name */ - "latin5", /* name */ - "", /* comment */ - ctype_latin5, - to_lower_latin5, - to_upper_latin5, - sort_order_latin5, - tab_8859_9_uni, /* tab_to_uni */ - idx_uni_8859_9, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_swe7 - { - 10,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "swe7", /* cs name */ - "swe7", /* name */ - "", /* comment */ - ctype_swe7, - to_lower_swe7, - to_upper_swe7, - sort_order_swe7, - NULL, /* tab_to_uni */ - NULL, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - - -#ifdef HAVE_CHARSET_usa7 - { - 11,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "ascii", /* cs name */ - "ascii", /* name */ - "", /* comment */ - ctype_usa7, - to_lower_usa7, - to_upper_usa7, - sort_order_usa7, - tab_us_ascii_uni, /* tab_to_uni */ - idx_uni_us_ascii, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_win1250 - { - 26,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp1250", /* cs name */ - "cp1250", /* name */ - "", /* comment */ - ctype_win1250, - to_lower_win1250, - to_upper_win1250, - sort_order_win1250, - tab_cp1250_uni, /* tab_to_uni */ - idx_uni_cp1250, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_win1251ukr - { - 23,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp1251", /* cs name */ - "win1251ukr", /* name */ - "", /* comment */ - ctype_win1251ukr, - to_lower_win1251ukr, - to_upper_win1251ukr, - sort_order_win1251ukr, - tab_cp1251_uni, /* tab_to_uni */ - idx_uni_cp1251, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_armscii8 - { - 32,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "armscii8", /* cs name */ - "armscii8", /* name */ - "", /* comment */ - ctype_armscii8, - to_lower_armscii8, - to_upper_armscii8, - sort_order_armscii8, - tab_armscii_8_uni, /* tab_to_uni */ - idx_uni_armscii_8, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - -#ifdef HAVE_CHARSET_win1251 - { - 17,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "cp1251", /* cs name */ - "win1251", /* name */ - "", /* comment */ - ctype_win1251, - to_lower_win1251, - to_upper_win1251, - sort_order_win1251, - tab_cp1251_uni, /* tab_to_uni */ - idx_uni_cp1251, /* tab_from_uni */ - "","", - 0, /* strxfrm_multiply */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple,/* strnncollsp */ - my_strnxfrm_simple, /* strnxfrm */ - my_like_range_simple,/* like_range */ - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - my_tosort_8bit, - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit - }, -#endif - { 0,0,0, /* end-of-list marker */ 0, /* state */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index 7e721299692..5b5f650671c 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -19,7 +19,7 @@ #include "m_ctype.h" -static my_wc_t latin1_uni[256]={ +static uint16 latin1_uni[256]={ 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, @@ -177,19 +177,19 @@ int my_wc_mb_latin1(CHARSET_INFO *cs __attribute__((unused)), CHARSET_INFO my_charset_latin1 = { - 8,0,0, /* number */ - MY_CS_COMPILED, /* state */ - "latin1", /* cs name */ - "latin1", /* name */ - "", /* comment */ + 8,0,0, /* number */ + MY_CS_COMPILED | MY_CS_PRIMARY, /* state */ + "latin1", /* cs name */ + "latin1", /* name */ + "", /* comment */ ctype_latin1, to_lower_latin1, to_upper_latin1, sort_order_latin1, - NULL, /* tab_to_uni */ + latin1_uni, /* tab_to_uni */ NULL, /* tab_from_uni */ "","", - 2, /* strxfrm_multiply */ + 0, /* strxfrm_multiply */ my_strnncoll_simple, my_strnncollsp_simple, my_strnxfrm_simple, @@ -207,7 +207,7 @@ CHARSET_INFO my_charset_latin1 = my_casedn_str_8bit, my_caseup_8bit, my_casedn_8bit, - NULL, /* tosort */ + my_tosort_8bit, /* tosort */ my_strcasecmp_8bit, my_strncasecmp_8bit, my_hash_caseup_simple, @@ -224,3 +224,261 @@ CHARSET_INFO my_charset_latin1 = my_strntod_8bit, my_scan_8bit }; + + + + +/* + * This file is the latin1 character set with German sorting + * + * The modern sort order is used, where: + * + * 'ä' -> "ae" + * 'ö' -> "oe" + * 'ü' -> "ue" + * 'ß' -> "ss" + */ + + +/* + * This is a simple latin1 mapping table, which maps all accented + * characters to their non-accented equivalents. Note: in this + * table, 'ä' is mapped to 'A', 'ÿ' is mapped to 'Y', etc. - all + * accented characters except the following are treated the same way. + * Ü, ü, Ö, ö, Ä, ä + */ + +static uchar sort_order_latin1_de[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, + 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, + 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, + 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, + 68, 78, 79, 79, 79, 79,214,215,216, 85, 85, 85,220, 89,222,223, + 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, + 68, 78, 79, 79, 79, 79,214,247,216, 85, 85, 85,220, 89,222, 89 +}; + +#define L1_AE 196 +#define L1_ae 228 +#define L1_OE 214 +#define L1_oe 246 +#define L1_UE 220 +#define L1_ue 252 +#define L1_ss 223 + + +/* + Some notes about the following comparison rules: + By definition, my_strnncoll_latin_de must works exactly as if had called + my_strnxfrm_latin_de() on both strings and compared the result strings. + + This means that: + Ä must also matches ÁE and Aè, because my_strxn_frm_latin_de() will convert + both to AE. + + The other option would be to not do any accent removal in + sort_order_latin_de[] at all +*/ + + +#define CHECK_S1_COMBO(ch1, ch2, str1, str1_end, res_if_str1_smaller, str2, fst, snd, accent) \ + /* Invariant: ch1 == fst == sort_order_latin1_de[accent] && ch1 != ch2 */ \ + if (ch2 != accent) \ + { \ + ch1= fst; \ + goto normal; \ + } \ + if (str1 == str1_end) \ + return res_if_str1_smaller; \ + { \ + int diff = (int) sort_order_latin1_de[*str1] - snd; \ + if (diff) \ + return diff*(-(res_if_str1_smaller)); \ + /* They are equal (e.g., "Ae" == 'ä') */ \ + str1++; \ + } + + +static int my_strnncoll_latin1_de(CHARSET_INFO *cs __attribute__((unused)), + const uchar * s1, uint len1, + const uchar * s2, uint len2) +{ + const uchar *e1 = s1 + len1; + const uchar *e2 = s2 + len2; + + while (s1 < e1 && s2 < e2) + { + /* + Because sort_order_latin1_de doesn't convert 'Ä', Ü or ß we + can use it here. + */ + uchar c1 = sort_order_latin1_de[*s1++]; + uchar c2 = sort_order_latin1_de[*s2++]; + if (c1 != c2) + { + switch (c1) { + case 'A': + CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'A', 'E', L1_AE); + break; + case 'O': + CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'O', 'E', L1_OE); + break; + case 'U': + CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'U', 'E', L1_UE); + break; + case 'S': + CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'S', 'S', L1_ss); + break; + case L1_AE: + CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'A', 'E', 'A'); + break; + case L1_OE: + CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'O', 'E', 'O'); + break; + case L1_UE: + CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'U', 'E', 'U'); + break; + case L1_ss: + CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'S', 'S', 'S'); + break; + default: + /* + Handle the case where 'c2' is a special character + If this is true, we know that c1 can't match this character. + */ + normal: + switch (c2) { + case L1_AE: + return (int) c1 - (int) 'A'; + case L1_OE: + return (int) c1 - (int) 'O'; + case L1_UE: + return (int) c1 - (int) 'U'; + case L1_ss: + return (int) c1 - (int) 'S'; + default: + { + int diff= (int) c1 - (int) c2; + if (diff) + return diff; + } + break; + } + } + } + } + /* A simple test of string lengths won't work -- we test to see + * which string ran out first */ + return s1 < e1 ? 1 : s2 < e2 ? -1 : 0; +} + +static +int my_strnncollsp_latin1_de(CHARSET_INFO * cs, + const uchar *s, uint slen, + const uchar *t, uint tlen) +{ + for ( ; slen && my_isspace(cs, s[slen-1]) ; slen--); + for ( ; tlen && my_isspace(cs, t[tlen-1]) ; tlen--); + return my_strnncoll_latin1_de(cs,s,slen,t,tlen); +} + + +static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)), + uchar * dest, uint len, + const uchar * src, uint srclen) +{ + const uchar *dest_orig = dest; + const uchar *de = dest + len; + const uchar *se = src + srclen; + while (src < se && dest < de) + { + uchar chr=sort_order_latin1_de[*src]; + switch (chr) { + case L1_AE: + *dest++ = 'A'; + if (dest < de) + *dest++ = 'E'; + break; + case L1_OE: + *dest++ = 'O'; + if (dest < de) + *dest++ = 'E'; + break; + case L1_UE: + *dest++ = 'U'; + if (dest < de) + *dest++ = 'E'; + break; + case L1_ss: + *dest++ = 'S'; + if (dest < de) + *dest++ = 'S'; + break; + default: + *dest++= chr; + break; + } + ++src; + } + return dest - dest_orig; +} + +CHARSET_INFO my_charset_latin1_de = +{ + 31,0,0, /* number */ + MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ + "latin1", /* cs name */ + "latin1_german2_ci", /* name */ + "", /* comment */ + ctype_latin1, + to_lower_latin1, + to_upper_latin1, + sort_order_latin1_de, + latin1_uni, /* tab_to_uni */ + NULL, /* tab_from_uni */ + "","", + 2, /* strxfrm_multiply */ + my_strnncoll_latin1_de, + my_strnncollsp_latin1_de, + my_strnxfrm_latin1_de, + my_like_range_simple, + my_wildcmp_8bit, /* wildcmp */ + 1, /* mbmaxlen */ + NULL, /* ismbchar */ + NULL, /* ismbhead */ + NULL, /* mbcharlen */ + my_numchars_8bit, + my_charpos_8bit, + my_mb_wc_latin1, /* mb_wc */ + my_wc_mb_latin1, /* wc_mb */ + my_caseup_str_8bit, + my_casedn_str_8bit, + my_caseup_8bit, + my_casedn_8bit, + NULL, /* tosort */ + my_strcasecmp_8bit, + my_strncasecmp_8bit, + my_hash_caseup_simple, + my_hash_sort_simple, + 0, + my_snprintf_8bit, + my_long10_to_str_8bit, + my_longlong10_to_str_8bit, + my_fill_8bit, + my_strntol_8bit, + my_strntoul_8bit, + my_strntoll_8bit, + my_strntoull_8bit, + my_strntod_8bit, + my_scan_8bit +}; + diff --git a/strings/ctype-latin1_de.c b/strings/ctype-latin1_de.c deleted file mode 100644 index e07bc6e9a70..00000000000 --- a/strings/ctype-latin1_de.c +++ /dev/null @@ -1,399 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * This file is the latin1 character set with German sorting - * - * The modern sort order is used, where: - * - * 'ä' -> "ae" - * 'ö' -> "oe" - * 'ü' -> "ue" - * 'ß' -> "ss" - */ - -/* - * This comment is parsed by configure to create ctype.c, - * so don't change it unless you know what you are doing. - * - * .configure. strxfrm_multiply_latin1_de=2 - */ - -#include -#include "m_string.h" -#include "m_ctype.h" - -#ifdef HAVE_CHARSET_latin1_de - -static uint16 tab_8859_1_uni[256]={ - 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, -0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, -0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, -0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, -0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, -0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, -0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, -0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, -0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, -0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, -0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, -0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, -0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, -0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, -0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, -0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, -0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, -0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, -0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, -0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, -0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, -0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, -0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, -0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7, -0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF, -0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7, -0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF -}; - -static uchar tab_uni_8859_1_plane00[]={ -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, -0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, -0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, -0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, -0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, -0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, -0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, -0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, -0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}; - -static MY_UNI_IDX idx_uni_8859_1[]={ - {0x0000,0x00FF,tab_uni_8859_1_plane00}, - {0,0,NULL} -}; - -static uchar ctype_latin1_de[] = { - 0, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 132,132,132,132,132,132,132,132,132,132, 16, 16, 16, 16, 16, 16, - 16,129,129,129,129,129,129, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16,130,130,130,130,130,130, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 32, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static uchar to_lower_latin1_de[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 -}; - -static uchar to_upper_latin1_de[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,255 -}; - -/* - * This is a simple latin1 mapping table, which maps all accented - * characters to their non-accented equivalents. Note: in this - * table, 'ä' is mapped to 'A', 'ÿ' is mapped to 'Y', etc. - all - * accented characters except the following are treated the same way. - * Ü, ü, Ö, ö, Ä, ä - */ - -static uchar sort_order_latin1_de[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79,214,215,216, 85, 85, 85,220, 89,222,223, - 65, 65, 65, 65,196, 65, 92, 67, 69, 69, 69, 69, 73, 73, 73, 73, - 68, 78, 79, 79, 79, 79,214,247,216, 85, 85, 85,220, 89,222, 89 -}; - -#define L1_AE 196 -#define L1_ae 228 -#define L1_OE 214 -#define L1_oe 246 -#define L1_UE 220 -#define L1_ue 252 -#define L1_ss 223 - - -/* - Some notes about the following comparison rules: - By definition, my_strnncoll_latin_de must works exactly as if had called - my_strnxfrm_latin_de() on both strings and compared the result strings. - - This means that: - Ä must also matches ÁE and Aè, because my_strxn_frm_latin_de() will convert - both to AE. - - The other option would be to not do any accent removal in - sort_order_latin_de[] at all -*/ - - -#define CHECK_S1_COMBO(ch1, ch2, str1, str1_end, res_if_str1_smaller, str2, fst, snd, accent) \ - /* Invariant: ch1 == fst == sort_order_latin1_de[accent] && ch1 != ch2 */ \ - if (ch2 != accent) \ - { \ - ch1= fst; \ - goto normal; \ - } \ - if (str1 == str1_end) \ - return res_if_str1_smaller; \ - { \ - int diff = (int) sort_order_latin1_de[*str1] - snd; \ - if (diff) \ - return diff*(-(res_if_str1_smaller)); \ - /* They are equal (e.g., "Ae" == 'ä') */ \ - str1++; \ - } - - -static int my_strnncoll_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - const uchar * s1, uint len1, - const uchar * s2, uint len2) -{ - const uchar *e1 = s1 + len1; - const uchar *e2 = s2 + len2; - - while (s1 < e1 && s2 < e2) - { - /* - Because sort_order_latin1_de doesn't convert 'Ä', Ü or ß we - can use it here. - */ - uchar c1 = sort_order_latin1_de[*s1++]; - uchar c2 = sort_order_latin1_de[*s2++]; - if (c1 != c2) - { - switch (c1) { - case 'A': - CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'A', 'E', L1_AE); - break; - case 'O': - CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'O', 'E', L1_OE); - break; - case 'U': - CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'U', 'E', L1_UE); - break; - case 'S': - CHECK_S1_COMBO(c1, c2, s1, e1, -1, s2, 'S', 'S', L1_ss); - break; - case L1_AE: - CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'A', 'E', 'A'); - break; - case L1_OE: - CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'O', 'E', 'O'); - break; - case L1_UE: - CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'U', 'E', 'U'); - break; - case L1_ss: - CHECK_S1_COMBO(c1, c2, s2, e2, 1, s1, 'S', 'S', 'S'); - break; - default: - /* - Handle the case where 'c2' is a special character - If this is true, we know that c1 can't match this character. - */ - normal: - switch (c2) { - case L1_AE: - return (int) c1 - (int) 'A'; - case L1_OE: - return (int) c1 - (int) 'O'; - case L1_UE: - return (int) c1 - (int) 'U'; - case L1_ss: - return (int) c1 - (int) 'S'; - default: - { - int diff= (int) c1 - (int) c2; - if (diff) - return diff; - } - break; - } - } - } - } - /* A simple test of string lengths won't work -- we test to see - * which string ran out first */ - return s1 < e1 ? 1 : s2 < e2 ? -1 : 0; -} - -static -int my_strnncollsp_latin1_de(CHARSET_INFO * cs, - const uchar *s, uint slen, - const uchar *t, uint tlen) -{ - for ( ; slen && my_isspace(cs, s[slen-1]) ; slen--); - for ( ; tlen && my_isspace(cs, t[tlen-1]) ; tlen--); - return my_strnncoll_latin1_de(cs,s,slen,t,tlen); -} - - -static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)), - uchar * dest, uint len, - const uchar * src, uint srclen) -{ - const uchar *dest_orig = dest; - const uchar *de = dest + len; - const uchar *se = src + srclen; - while (src < se && dest < de) - { - uchar chr=sort_order_latin1_de[*src]; - switch (chr) { - case L1_AE: - *dest++ = 'A'; - if (dest < de) - *dest++ = 'E'; - break; - case L1_OE: - *dest++ = 'O'; - if (dest < de) - *dest++ = 'E'; - break; - case L1_UE: - *dest++ = 'U'; - if (dest < de) - *dest++ = 'E'; - break; - case L1_ss: - *dest++ = 'S'; - if (dest < de) - *dest++ = 'S'; - break; - default: - *dest++= chr; - break; - } - ++src; - } - return dest - dest_orig; -} - -CHARSET_INFO my_charset_latin1_de = -{ - 31,0,0, /* number */ - MY_CS_COMPILED|MY_CS_STRNXFRM, /* state */ - "latin1", /* cs name */ - "latin1_de", /* name */ - "", /* comment */ - ctype_latin1_de, - to_lower_latin1_de, - to_upper_latin1_de, - sort_order_latin1_de, - tab_8859_1_uni, /* tab_to_uni */ - idx_uni_8859_1, /* tab_from_uni */ - "","", - 2, /* strxfrm_multiply */ - my_strnncoll_latin1_de, - my_strnncollsp_latin1_de, - my_strnxfrm_latin1_de, - my_like_range_simple, - my_wildcmp_8bit, /* wildcmp */ - 1, /* mbmaxlen */ - NULL, /* ismbchar */ - NULL, /* ismbhead */ - NULL, /* mbcharlen */ - my_numchars_8bit, - my_charpos_8bit, - my_mb_wc_8bit, /* mb_wc */ - my_wc_mb_8bit, /* wc_mb */ - my_caseup_str_8bit, - my_casedn_str_8bit, - my_caseup_8bit, - my_casedn_8bit, - NULL, /* tosort */ - my_strcasecmp_8bit, - my_strncasecmp_8bit, - my_hash_caseup_simple, - my_hash_sort_simple, - 0, - my_snprintf_8bit, - my_long10_to_str_8bit, - my_longlong10_to_str_8bit, - my_fill_8bit, - my_strntol_8bit, - my_strntoul_8bit, - my_strntoll_8bit, - my_strntoull_8bit, - my_strntod_8bit, - my_scan_8bit -}; - -#endif From 27e77a8fd6f5531e64557c20d594b85050df96b6 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Mar 2003 14:11:04 +0400 Subject: [PATCH 257/267] greek.xml: Comments why "greek" is ISO greek sql/share/charsets/greek.xml: Comments why "greek" is ISO greek --- sql/share/charsets/greek.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sql/share/charsets/greek.xml b/sql/share/charsets/greek.xml index 1ad3d1bc9d2..6d8d0954655 100644 --- a/sql/share/charsets/greek.xml +++ b/sql/share/charsets/greek.xml @@ -4,6 +4,10 @@ + + + + 00 From 10b0edf3990ea4e72d2c8ef297394d6b3da35965 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 26 Mar 2003 14:11:17 +0200 Subject: [PATCH 258/267] Fix for glibc with small stack size (fixes bug when running crash-me) sql-bench/limits/mysql.cfg: Update to new crash me --- sql-bench/limits/mysql.cfg | 46 +++++++++++++++++++------------------- sql/mysqld.cc | 7 +++--- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/sql-bench/limits/mysql.cfg b/sql-bench/limits/mysql.cfg index 01614741dcd..cebb85d8dfd 100644 --- a/sql-bench/limits/mysql.cfg +++ b/sql-bench/limits/mysql.cfg @@ -1,4 +1,4 @@ -#This file is automaticly generated by crash-me 1.60 +#This file is automaticly generated by crash-me 1.61 NEG=yes # update of column= -column ###< create table crash_q (a integer) @@ -177,7 +177,7 @@ compute=no # Compute ###> execute error:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'compute sum(a) by a' at line 1 ### ###As far as some queries didnt return OK, result is NO -connections=101 # Simultaneous connections (installation default) +connections=99 # Simultaneous connections (installation default) constraint_check=syntax only # Column constraints ###< create table crash_q (a int check (a>0)) ###> OK @@ -213,7 +213,7 @@ constraint_null=yes # NULL constraint (SyBase style) ### ###As far as all queries returned OK, result is YES crash_me_safe=yes # crash me safe -crash_me_version=1.60 # crash me version +crash_me_version=1.61 # crash me version create_default=yes # default value for column ###< create table crash_q (q integer default 10 not null) ###> OK @@ -345,7 +345,7 @@ date_format_inresult=iso # Date format in result ###> OK ### ###< select a from crash_me_d - ###> 2003-02-08 + ###> 2003-03-26 ###< delete from crash_me_d ###> OK date_infinity=error # Supports 'infinity dates @@ -695,7 +695,7 @@ func_extra_elt=yes # Function ELT func_extra_encrypt=yes # Function ENCRYPT ### ###2003-02-08 00:09:52 + ###>2003-03-26 13:44:57 func_extra_tail=no # Function TAIL ### ###4.0.11-gamma + ###>4.0.12-debug func_extra_weekday=yes # Function WEEKDAY ### ###00:09:52 + ###>13:44:57 func_odbc_database=yes # Function DATABASE ### ###2003-02-08 + ###>2003-03-26 func_sql_current_time=yes # Function CURRENT_TIME ### ###2003-02-08 00:09:52 + ###>2003-03-26 13:44:57 func_sql_current_user=with_parenthesis # CURRENT_USER ###< select CURRENT_USER ###> execute error:Unknown column 'CURRENT_USER' in 'field list' @@ -1438,11 +1438,11 @@ func_sql_extract_sql=yes # Function EXTRACT func_sql_localtime=yes # Function LOCALTIME ### ###2003-02-08 00:09:52 + ###>2003-03-26 13:44:57 func_sql_lower=yes # Function LOWER ### ###