From c1a60342f6320158fd5233611839749e04ab2cc7 Mon Sep 17 00:00:00 2001 From: "guilhem@mysql.com" <> Date: Fri, 6 Jun 2003 13:52:15 +0200 Subject: [PATCH 01/26] -- already approved; it would be nice if it goes into 3.23.57 -- Fix for bug 254 : the first Start_log_event after server startup will have created=now(), whereas the next ones (FLUSH LOGS, auto rotation) will have created=0. Before this, it was always now(). This way, slaves >=4.0.14 will know when they must drop stale temp tables or not. The next task is now modify 4.0.14 to implement this. --- sql/log.cc | 16 +++++++++++++--- sql/log_event.h | 9 +++++++++ sql/sql_class.h | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/sql/log.cc b/sql/log.cc index d189f1f1fe3..69957c5c97c 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -157,7 +157,7 @@ void MYSQL_LOG::close_index() } void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, - const char *new_name) + const char *new_name, bool null_created) { MY_STAT tmp_stat; char buff[512]; @@ -230,8 +230,10 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, if ((do_magic && my_b_write(&log_file, (byte*) BINLOG_MAGIC, 4)) || open_index(O_APPEND | O_RDWR | O_CREAT)) goto err; - Start_log_event s; bool error; + Start_log_event s; + if (null_created) + s.created= 0; s.write(&log_file); flush_io_cache(&log_file); pthread_mutex_lock(&LOCK_index); @@ -548,7 +550,15 @@ void MYSQL_LOG::new_file(bool inside_mutex) strmov(new_name, old_name); // Reopen old file name name=0; close(); - open(old_name, log_type, new_name); + /* + new_file() is only used for rotation (in FLUSH LOGS or because size > + max_binlog_size). + If this is a binary log, the Start_log_event at the beginning of + the new file should have created=0 (to distinguish with the Start_log_event + written at server startup, which should trigger temp tables deletion on + >=4.0.14 slaves). + */ + open(old_name, log_type, new_name, 1); my_free(old_name,MYF(0)); last_time=query_start=0; write_error=0; diff --git a/sql/log_event.h b/sql/log_event.h index 68696442490..bb1c9260e21 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -327,6 +327,15 @@ extern char server_version[SERVER_VERSION_LENGTH]; class Start_log_event: public Log_event { public: + /* + If this event is at the start of the first binary log since server startup + 'created' should be the timestamp when the event (and the binary log) was + created. + In the other case (i.e. this event is at the start of a binary log created + by FLUSH LOGS or automatic rotation), 'created' should be 0. + This "trick" is used by MySQL >=4.0.14 slaves to know if they must drop the + stale temporary tables or not. + */ time_t created; uint16 binlog_version; char server_version[50]; diff --git a/sql/sql_class.h b/sql/sql_class.h index d9497907926..8abf87c4cda 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -73,7 +73,7 @@ public: void set_index_file_name(const char* index_file_name = 0); void init(enum_log_type log_type_arg); void open(const char *log_name,enum_log_type log_type, - const char *new_name=0); + const char *new_name=0, bool null_created= 0); void new_file(bool inside_mutex = 0); bool open_index(int options); void close_index(); From 1dccfd055d2d246edb35d2b30ed11f38e8d1a905 Mon Sep 17 00:00:00 2001 From: "guilhem@mysql.com" <> Date: Fri, 6 Jun 2003 14:13:26 +0200 Subject: [PATCH 02/26] In Start_log_event::print, don't print "created 1970 etc" if created == 0. Otherwise, we'll get questions from users about this curious 1970. --- sql/log_event.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 1c9c48e2d93..62d6bef3a51 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -302,9 +302,13 @@ void Start_log_event::print(FILE* file, bool short_form, char* last_db) return; print_header(file); - fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, + fprintf(file, "\tStart: binlog v %d, server v %s", binlog_version, server_version); - print_timestamp(file, &created); + if (created) + { + fprintf(file, " created "); + print_timestamp(file, &created); + } fputc('\n', file); fflush(file); } From a7d65ce3b98954e512606b7666cf5b901e881777 Mon Sep 17 00:00:00 2001 From: "heikki@hundin.mysql.fi" <> Date: Sat, 7 Jun 2003 10:25:56 +0300 Subject: [PATCH 03/26] page0page.c: Fix a bug: a race condition could cause that the first B-tree page splits would get a corrupt page directory, whic often results in the assertion in page_dir_find_slot(); found with a test of 3000 startups/shutdowns; it is not clear that this would have caused any corruption which users have reported --- innobase/page/page0page.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/innobase/page/page0page.c b/innobase/page/page0page.c index f3f6776bf13..af1ccb92016 100644 --- a/innobase/page/page0page.c +++ b/innobase/page/page0page.c @@ -406,12 +406,6 @@ page_create( rec_set_next_offs(infimum_rec, (ulint)(supremum_rec - page)); rec_set_next_offs(supremum_rec, 0); - - if (page_template == NULL) { - page_template = mem_alloc(UNIV_PAGE_SIZE); - - ut_memcpy(page_template, page, UNIV_PAGE_SIZE); - } return(page); } From 39660b1f2445bbacd5d21c77420b8bda74c5bef8 Mon Sep 17 00:00:00 2001 From: "miguel@sartre.local" <> Date: Sun, 8 Jun 2003 02:53:41 -0400 Subject: [PATCH 04/26] Translation updated --- BitKeeper/etc/logging_ok | 1 + sql/share/spanish/errmsg.txt | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 003708e2944..2d9cd004d0f 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -14,6 +14,7 @@ lenz@mysql.com miguel@hegel.br miguel@hegel.local miguel@light.local +miguel@sartre.local monty@bitch.mysql.fi monty@donna.mysql.fi monty@hundin.mysql.fi diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index b9c88873106..089bc13e8d3 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -212,11 +212,11 @@ "Bloqueos de actualización no pueden ser adqueridos durante una transición READ UNCOMMITTED", "DROP DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global", "CREATE DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global", -"Wrong arguments to %s", -"%-.32s@%-.64s is not allowed to create new users", -"Incorrect table definition; All MERGE tables must be in the same database", -"Deadlock found when trying to get lock; Try restarting transaction", -"The used table type doesn't support FULLTEXT indexes", -"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", +"Argumentos errados para %s", +"%-.32s@%-.64s no es permitido para crear nuevos usuarios", +"Incorrecta definición de la tabla; Todas las tablas MERGE deben estar en el mismo banco de datos", +"Encontrado deadlock cuando tentando obtener el bloqueo; Tente recomenzar la transición", +"El tipo de tabla usada no soporta índices FULLTEXT", +"No puede adicionar clave extranjera constraint", +"No puede adicionar una línea hijo: falla de clave extranjera constraint", +"No puede deletar una línea padre: falla de clave extranjera constraint", From 2401227ceb6c1645a837bed9b1c4bc77f725766e Mon Sep 17 00:00:00 2001 From: "heikki@hundin.mysql.fi" <> Date: Wed, 11 Jun 2003 15:41:03 +0300 Subject: [PATCH 05/26] os0file.c: Prevent on Windows starting of two mysqld instances on SAME InnoDB files: that could cause severe database corruption --- innobase/os/os0file.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/innobase/os/os0file.c b/innobase/os/os0file.c index 4008f8f6c76..46474d3576a 100644 --- a/innobase/os/os0file.c +++ b/innobase/os/os0file.c @@ -386,9 +386,9 @@ try_again: file = CreateFile(name, access, - FILE_SHARE_READ | FILE_SHARE_WRITE, - /* file can be read and written - also by other processes */ + FILE_SHARE_READ, + /* file can be read also by other + processes */ NULL, /* default security attributes */ create_flag, attributes, @@ -526,9 +526,14 @@ try_again: file = CreateFile(name, GENERIC_READ | GENERIC_WRITE, /* read and write access */ - FILE_SHARE_READ | FILE_SHARE_WRITE, - /* file can be read and written - also by other processes */ + FILE_SHARE_READ,/* File can be read also by other + processes; we must give the read + permission because of ibbackup. We do + not give the write permission to + others because if one would succeed to + start 2 instances of mysqld on the + SAME files, that could cause severe + database corruption! */ NULL, /* default security attributes */ create_flag, attributes, From 85b11035b74802dbd6ad2f7ecbd60004c2ae1dd8 Mon Sep 17 00:00:00 2001 From: "guilhem@mysql.com" <> Date: Mon, 16 Jun 2003 23:38:33 +0200 Subject: [PATCH 06/26] Do not use 'created' for time anymore in Start_log_event, it's the same as the already-stored timestamp. Now 'created' is used only to know if this is a first binlog or not. And we may re-use the superfluous bytes in 5.0 when we need room. --- sql/log_event.cc | 8 +++----- sql/log_event.h | 11 +++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/sql/log_event.cc b/sql/log_event.cc index 62d6bef3a51..b89f3c151a7 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -302,13 +302,11 @@ void Start_log_event::print(FILE* file, bool short_form, char* last_db) return; print_header(file); - fprintf(file, "\tStart: binlog v %d, server v %s", binlog_version, + fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); + print_timestamp(file); if (created) - { - fprintf(file, " created "); - print_timestamp(file, &created); - } + fprintf(file," at startup"); fputc('\n', file); fflush(file); } diff --git a/sql/log_event.h b/sql/log_event.h index bb1c9260e21..d3c74f7f7c2 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -335,6 +335,17 @@ public: by FLUSH LOGS or automatic rotation), 'created' should be 0. This "trick" is used by MySQL >=4.0.14 slaves to know if they must drop the stale temporary tables or not. + Note that when 'created'!=0, it is always equal to the event's timestamp; + indeed Start_log_event is written only in log.cc where the first + constructor below is called, in which 'created' is set to 'when'. + So in fact 'created' is a useless variable. When it is 0 + we can read the actual value from timestamp ('when') and when it is + non-zero we can read the same value from timestamp ('when'). Conclusion: + - we use timestamp to print when the binlog was created. + - we use 'created' only to know if this is a first binlog or not. + In 3.23.57 we did not pay attention to this identity, so mysqlbinlog in + 3.23.57 does not print 'created the_date' if created was zero. This is now + fixed. */ time_t created; uint16 binlog_version; From b8ad5dea56e4ddf612668d636d6cef57ef5efdcb Mon Sep 17 00:00:00 2001 From: "heikki@hundin.mysql.fi" <> Date: Wed, 18 Jun 2003 04:05:10 +0300 Subject: [PATCH 07/26] row0vers.c, row0sel.c: Backport the clust rec bug fix from 4.0 --- innobase/row/row0sel.c | 23 +++++++++++++++++++++-- innobase/row/row0vers.c | 14 -------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c index c9de502eb9a..b06476219c6 100644 --- a/innobase/row/row0sel.c +++ b/innobase/row/row0sel.c @@ -598,7 +598,14 @@ row_sel_get_clust_rec( clust_rec = btr_pcur_get_rec(&(plan->clust_pcur)); - ut_ad(page_rec_is_user_rec(clust_rec)); + if (!page_rec_is_user_rec(clust_rec) + || btr_pcur_get_low_match(&(plan->clust_pcur)) + < dict_index_get_n_unique(index)) { + + clust_rec = NULL; + + goto func_exit; + } if (!node->read_view) { /* Try to place a lock on the index record */ @@ -661,6 +668,7 @@ row_sel_get_clust_rec( row_sel_fetch_columns(index, clust_rec, UT_LIST_GET_FIRST(plan->columns)); +func_exit: *out_rec = clust_rec; return(DB_SUCCESS); @@ -2206,7 +2214,17 @@ row_sel_get_clust_rec_for_mysql( clust_rec = btr_pcur_get_rec(prebuilt->clust_pcur); - ut_ad(page_rec_is_user_rec(clust_rec)); + /* Note: only if the search ends up on a non-infimum record is the + low_match value the real match to the search tuple */ + + if (!page_rec_is_user_rec(clust_rec) + || btr_pcur_get_low_match(prebuilt->clust_pcur) + < dict_index_get_n_unique(clust_index)) { + + clust_rec = NULL; + + goto func_exit; + } if (prebuilt->select_lock_type != LOCK_NONE) { /* Try to place a lock on the index record */ @@ -2268,6 +2286,7 @@ row_sel_get_clust_rec_for_mysql( } } +func_exit: *out_rec = clust_rec; if (prebuilt->select_lock_type == LOCK_X) { diff --git a/innobase/row/row0vers.c b/innobase/row/row0vers.c index cd8b18e5e12..baef6bca4ea 100644 --- a/innobase/row/row0vers.c +++ b/innobase/row/row0vers.c @@ -76,23 +76,9 @@ row_vers_impl_x_locked_off_kernel( clust_rec = row_get_clust_rec(BTR_SEARCH_LEAF, rec, index, &clust_index, &mtr); if (!clust_rec) { - rec_sprintf(err_buf, 900, rec); - - ut_print_timestamp(stderr); - fprintf(stderr, -" InnoDB: Error: cannot find the clustered index record\n" -"InnoDB: for a secondary index record in table %s index %s.\n" -"InnoDB: Secondary index record %s.\n" -"InnoDB: The table is probably corrupt. Please run CHECK TABLE on it.\n" -"InnoDB: You can try to repair the table by dump + drop + reimport.\n" -"InnoDB: Send a detailed bug report to mysql@lists.mysql.com.\n", - index->table_name, index->name, err_buf); mutex_enter(&kernel_mutex); mtr_commit(&mtr); - /* We assume there is no lock on the record, though this - is not certain because the table is apparently corrupt */ - return(NULL); } From b9b2b7dd27441b7e2541bdfa93fe058f53e70925 Mon Sep 17 00:00:00 2001 From: "miguel@hegel.(none)" <> Date: Wed, 18 Jun 2003 15:50:33 -0400 Subject: [PATCH 08/26] InstallShield Files requested by Greg --- BitKeeper/etc/logging_ok | 1 + .../3.23.XX-gpl/Component Definitions/.fgl | 37 + .../Component Definitions/Default.cdf | 192 ++++++ .../Component Definitions/Default.fgl | 42 ++ .../File Groups/Clients and Tools.fgl | 35 + .../3.23.XX-gpl/File Groups/Default.fdf | 82 +++ .../3.23.XX-gpl/File Groups/Default.fgl | 4 + .../3.23.XX-gpl/File Groups/Development.fgl | 191 ++++++ .../3.23.XX-gpl/File Groups/Documentation.fgl | 99 +++ .../3.23.XX-gpl/File Groups/Grant Tables.fgl | 36 + .../3.23.XX-gpl/File Groups/Servers.fgl | 184 +++++ .../3.23.XX-gpl/MySQL 3.23.XX-GPL.ipr | 51 ++ .../3.23.XX-gpl/Registry Entries/Default.rge | 4 + .../3.23.XX-gpl/Script Files/Setup.dbg | Bin 0 -> 28458 bytes .../3.23.XX-gpl/Script Files/Setup.ino | Bin 0 -> 58611 bytes .../3.23.XX-gpl/Script Files/Setup.ins | Bin 0 -> 57122 bytes .../3.23.XX-gpl/Script Files/Setup.obs | Bin 0 -> 65611 bytes .../3.23.XX-gpl/Script Files/Setup.rul | 641 ++++++++++++++++++ .../OS Independent/infolist.txt | 24 + .../OS Independent/SETUP.BMP | Bin 0 -> 15694 bytes .../3.23.XX-gpl/Shell Objects/Default.shl | 12 + .../String Tables/0009-English/value.shl | 23 + .../3.23.XX-gpl/String Tables/Default.shl | 74 ++ .../3.23.XX-gpl/Text Substitutions/Build.tsb | 56 ++ .../3.23.XX-gpl/Text Substitutions/Setup.tsb | 76 +++ .../3.23.XXcom/Component Definitions/.fgl | 37 + .../Component Definitions/Default.cdf | 192 ++++++ .../Component Definitions/Default.fgl | 42 ++ .../File Groups/Clients and Tools.fgl | 35 + .../3.23.XXcom/File Groups/Default.fdf | 82 +++ .../3.23.XXcom/File Groups/Default.fgl | 4 + .../3.23.XXcom/File Groups/Development.fgl | 190 ++++++ .../3.23.XXcom/File Groups/Documentation.fgl | 98 +++ .../3.23.XXcom/File Groups/Grant Tables.fgl | 36 + .../3.23.XXcom/File Groups/Servers.fgl | 183 +++++ .../3.23.XXcom/MySQL 3.23.com.ipr | 51 ++ .../3.23.XXcom/Registry Entries/Default.rge | 4 + .../3.23.XXcom/Script Files/Setup.dbg | Bin 0 -> 28458 bytes .../3.23.XXcom/Script Files/Setup.ino | Bin 0 -> 58611 bytes .../3.23.XXcom/Script Files/Setup.ins | Bin 0 -> 57122 bytes .../3.23.XXcom/Script Files/Setup.obs | Bin 0 -> 65611 bytes .../3.23.XXcom/Script Files/Setup.rul | 641 ++++++++++++++++++ .../OS Independent/infolist.txt | 24 + .../OS Independent/SETUP.BMP | Bin 0 -> 15694 bytes .../3.23.XXcom/Shell Objects/Default.shl | 12 + .../String Tables/0009-English/value.shl | 23 + .../3.23.XXcom/String Tables/Default.shl | 74 ++ .../3.23.XXcom/Text Substitutions/Build.tsb | 56 ++ .../3.23.XXcom/Text Substitutions/Setup.tsb | 76 +++ 49 files changed, 3724 insertions(+) create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/Default.cdf create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/Default.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Clients and Tools.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fdf create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Development.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Documentation.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Grant Tables.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/File Groups/Servers.fgl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/MySQL 3.23.XX-GPL.ipr create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Registry Entries/Default.rge create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.dbg create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.ino create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.ins create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.obs create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.rul create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Shell Objects/Default.shl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/String Tables/0009-English/value.shl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/String Tables/Default.shl create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Text Substitutions/Build.tsb create mode 100644 VC++Files/InstallShield/3.23.XX-gpl/Text Substitutions/Setup.tsb create mode 100644 VC++Files/InstallShield/3.23.XXcom/Component Definitions/.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/Component Definitions/Default.cdf create mode 100644 VC++Files/InstallShield/3.23.XXcom/Component Definitions/Default.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Clients and Tools.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fdf create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Development.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Documentation.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Grant Tables.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/File Groups/Servers.fgl create mode 100644 VC++Files/InstallShield/3.23.XXcom/MySQL 3.23.com.ipr create mode 100644 VC++Files/InstallShield/3.23.XXcom/Registry Entries/Default.rge create mode 100644 VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.dbg create mode 100644 VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.ino create mode 100644 VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.ins create mode 100644 VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.obs create mode 100644 VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.rul create mode 100644 VC++Files/InstallShield/3.23.XXcom/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt create mode 100644 VC++Files/InstallShield/3.23.XXcom/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP create mode 100644 VC++Files/InstallShield/3.23.XXcom/Shell Objects/Default.shl create mode 100644 VC++Files/InstallShield/3.23.XXcom/String Tables/0009-English/value.shl create mode 100644 VC++Files/InstallShield/3.23.XXcom/String Tables/Default.shl create mode 100644 VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Build.tsb create mode 100644 VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Setup.tsb diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 2d9cd004d0f..767dcab7c8a 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -11,6 +11,7 @@ heikki@hundin.mysql.fi jani@hynda.mysql.fi jorge@linux.jorge.mysql.com lenz@mysql.com +miguel@hegel.(none) miguel@hegel.br miguel@hegel.local miguel@light.local diff --git a/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/.fgl b/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/.fgl new file mode 100644 index 00000000000..81e474f9be8 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/.fgl @@ -0,0 +1,37 @@ +[General] +Type=FILELIST +Version=1.00.000 + +[topdir] +subdir0= +subdir1= +subdir2= +subdir3=USERDEFINED + +[] +DISPLAYTEXT=Windows Operating System +TYPE=TEXTSUBFIXED +subdir0=\ + +[\] +DISPLAYTEXT=Windows System Folder +TYPE=TEXTSUBFIXED + +[] +DISPLAYTEXT=Program Files Folder +TYPE=TEXTSUBFIXED +subdir0=\ + +[\] +DISPLAYTEXT=Common Files Folder +TYPE=TEXTSUBFIXED + +[] +DISPLAYTEXT=General Application Destination +TYPE=TEXTSUBFIXED + +[USERDEFINED] +DISPLAYTEXT=Script-defined Folders +TYPE=USERSTART + + diff --git a/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/Default.cdf b/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/Default.cdf new file mode 100644 index 00000000000..48d37800cd1 --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/Component Definitions/Default.fgl b/VC++Files/InstallShield/3.23.XX-gpl/Component Definitions/Default.fgl new file mode 100644 index 00000000000..4e20dcea4ab --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/File Groups/Clients and Tools.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Clients and Tools.fgl new file mode 100644 index 00000000000..7f30ff9f64b --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Clients and Tools.fgl @@ -0,0 +1,35 @@ +[bin] +file15=C:\mysql\bin\pack_isam.exe +file16=C:\mysql\bin\perror.exe +file0=C:\mysql\bin\isamchk.exe +file17=C:\mysql\bin\replace.exe +file1=C:\mysql\bin\myisamchk.exe +file18=C:\mysql\bin\winmysqladmin.cnt +file2=C:\mysql\bin\myisamlog.exe +file19=C:\mysql\bin\winmysqladmin.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.HLP +file21=C:\mysql\bin\cygwinb19.dll +file10=C:\mysql\bin\mysqlimport.exe +fulldirectory= +file22=C:\mysql\bin\libmySQL.dll +file11=C:\mysql\bin\MySqlManager.exe +file23=C:\mysql\bin\my_print_defaults.exe +file12=C:\mysql\bin\mysqlshow.exe +file24=C:\mysql\bin\comp-err.exe +file13=C:\mysql\bin\mysqlshutdown.exe +file14=C:\mysql\bin\mysqlwatch.exe + +[TopDir] +SubDir0=bin + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fdf b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fdf new file mode 100644 index 00000000000..8096a4b74bf --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/File Groups/Default.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fgl new file mode 100644 index 00000000000..94344a6ff69 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Default.fgl @@ -0,0 +1,4 @@ +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Development.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Development.fgl new file mode 100644 index 00000000000..e7b8cc7cd0f --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Development.fgl @@ -0,0 +1,191 @@ +[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 +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] +file0=C:\mysql\include\raid.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\my_global.h +file14=C:\mysql\include\config-win.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 +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] +file0=C:\mysql\scripts\mysql_find_rows.pl +file1=C:\mysql\scripts\mysql_setpermission.pl +file2=C:\mysql\scripts\mysqlhotcopy.pl +file3=C:\mysql\scripts\Readme +fulldirectory= + +[lib] +file0=C:\mysql\lib\Readme +SubDir0=lib\debug +SubDir1=lib\opt +fulldirectory= + diff --git a/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Documentation.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Documentation.fgl new file mode 100644 index 00000000000..80fe777cf0f --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/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/3.23.XX-gpl/File Groups/Grant Tables.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Grant Tables.fgl new file mode 100644 index 00000000000..178065a7003 --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/File Groups/Servers.fgl b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Servers.fgl new file mode 100644 index 00000000000..b23e2f90595 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/File Groups/Servers.fgl @@ -0,0 +1,184 @@ +[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 +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 + +[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\mysqlbug.txt +file1=C:\mysql\my-small.cnf +file2=C:\mysql\my-large.cnf +file3=C:\mysql\my-medium.cnf +file4=C:\mysql\my-huge.cnf +SubDir0=bin +SubDir1=share + +[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= + +[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/3.23.XX-gpl/MySQL 3.23.XX-GPL.ipr b/VC++Files/InstallShield/3.23.XX-gpl/MySQL 3.23.XX-GPL.ipr new file mode 100644 index 00000000000..de15790e744 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/MySQL 3.23.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=C:\MySQL-Install\3.23.XX-gpl +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/3.23.XX-gpl/Registry Entries/Default.rge b/VC++Files/InstallShield/3.23.XX-gpl/Registry Entries/Default.rge new file mode 100644 index 00000000000..537dfd82e48 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/Registry Entries/Default.rge @@ -0,0 +1,4 @@ +[General] +Type=REGISTRYDATA +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.dbg b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.dbg new file mode 100644 index 0000000000000000000000000000000000000000..0c6d4e6b70812d069322e88155868913fc543e33 GIT binary patch literal 28458 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.ino b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.ino new file mode 100644 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/3.23.XX-gpl/Script Files/Setup.ins b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.ins new file mode 100644 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/3.23.XX-gpl/Script Files/Setup.obs b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.obs new file mode 100644 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/3.23.XX-gpl/Script Files/Setup.rul b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.rul new file mode 100644 index 00000000000..0db8417a62c --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/Script Files/Setup.rul @@ -0,0 +1,641 @@ + +//////////////////////////////////////////////////////////////////////////////// +// +// 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/3.23.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt b/VC++Files/InstallShield/3.23.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt new file mode 100644 index 00000000000..2f561d29d81 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt @@ -0,0 +1,24 @@ +This is a release of MySQL 3.23.56 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 which contains the files named 'my-size.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/3.23.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP b/VC++Files/InstallShield/3.23.XX-gpl/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP new file mode 100644 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/3.23.XX-gpl/Shell Objects/Default.shl b/VC++Files/InstallShield/3.23.XX-gpl/Shell Objects/Default.shl new file mode 100644 index 00000000000..187cb651307 --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/String Tables/0009-English/value.shl b/VC++Files/InstallShield/3.23.XX-gpl/String Tables/0009-English/value.shl new file mode 100644 index 00000000000..687c58b7b21 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XX-gpl/String Tables/0009-English/value.shl @@ -0,0 +1,23 @@ +[Data] +TITLE_MAIN=MySQL Servers and Clients 3.23.56 +COMPANY_NAME=MySQL AB +ERROR_COMPONENT=Component: +COMPANY_NAME16=Company +PRODUCT_VERSION=3.23.56 +ERROR_MOVEDATA=An error occurred during the move data process: %d +ERROR_FILEGROUP=File Group: +UNINST_KEY=MySQL Servers and Clients 3.23.56 +TITLE_CAPTIONBAR=MySQL Servers and Clients 3.23.56 Setup +PRODUCT_NAME16=Product +ERROR_VGARESOLUTION=This program requires VGA or better resolution. +ERROR_FILE=File: +UNINST_DISPLAY_NAME=MySQL Servers and Clients 3.23.56 +PRODUCT_KEY=yourapp.Exe +PRODUCT_NAME=MySQL Servers and Clients 3.23.56 +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/3.23.XX-gpl/String Tables/Default.shl b/VC++Files/InstallShield/3.23.XX-gpl/String Tables/Default.shl new file mode 100644 index 00000000000..d4dc4925ab1 --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/Text Substitutions/Build.tsb b/VC++Files/InstallShield/3.23.XX-gpl/Text Substitutions/Build.tsb new file mode 100644 index 00000000000..3949bd4c066 --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XX-gpl/Text Substitutions/Setup.tsb b/VC++Files/InstallShield/3.23.XX-gpl/Text Substitutions/Setup.tsb new file mode 100644 index 00000000000..b0c5a509f0b --- /dev/null +++ b/VC++Files/InstallShield/3.23.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/3.23.XXcom/Component Definitions/.fgl b/VC++Files/InstallShield/3.23.XXcom/Component Definitions/.fgl new file mode 100644 index 00000000000..81e474f9be8 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Component Definitions/.fgl @@ -0,0 +1,37 @@ +[General] +Type=FILELIST +Version=1.00.000 + +[topdir] +subdir0= +subdir1= +subdir2= +subdir3=USERDEFINED + +[] +DISPLAYTEXT=Windows Operating System +TYPE=TEXTSUBFIXED +subdir0=\ + +[\] +DISPLAYTEXT=Windows System Folder +TYPE=TEXTSUBFIXED + +[] +DISPLAYTEXT=Program Files Folder +TYPE=TEXTSUBFIXED +subdir0=\ + +[\] +DISPLAYTEXT=Common Files Folder +TYPE=TEXTSUBFIXED + +[] +DISPLAYTEXT=General Application Destination +TYPE=TEXTSUBFIXED + +[USERDEFINED] +DISPLAYTEXT=Script-defined Folders +TYPE=USERSTART + + diff --git a/VC++Files/InstallShield/3.23.XXcom/Component Definitions/Default.cdf b/VC++Files/InstallShield/3.23.XXcom/Component Definitions/Default.cdf new file mode 100644 index 00000000000..f44131f754e --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/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=Clients and Tools +component3=Servers +component4=Documentation + +[TopComponents] +component0=Servers +component1=Clients and Tools +component2=Documentation +component3=Development +component4=Grant Tables + +[SetupType] +setuptype0=Compact +setuptype1=Typical +setuptype2=Custom + +[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 + +[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 + +[SetupTypeItem-Compact] +Comment= +item0=Grant Tables +item1=Clients and Tools +item2=Servers +item3=Documentation +Descrip= +DisplayText= + +[SetupTypeItem-Custom] +Comment= +item0=Development +item1=Grant Tables +item2=Clients and Tools +item3=Servers +Descrip= +item4=Documentation +DisplayText= + +[Info] +Type=CompDef +Version=1.00.000 +Name= + +[SetupTypeItem-Typical] +Comment= +item0=Development +item1=Grant Tables +item2=Clients and Tools +item3=Servers +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/3.23.XXcom/Component Definitions/Default.fgl b/VC++Files/InstallShield/3.23.XXcom/Component Definitions/Default.fgl new file mode 100644 index 00000000000..4e20dcea4ab --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/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/3.23.XXcom/File Groups/Clients and Tools.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Clients and Tools.fgl new file mode 100644 index 00000000000..7f30ff9f64b --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Clients and Tools.fgl @@ -0,0 +1,35 @@ +[bin] +file15=C:\mysql\bin\pack_isam.exe +file16=C:\mysql\bin\perror.exe +file0=C:\mysql\bin\isamchk.exe +file17=C:\mysql\bin\replace.exe +file1=C:\mysql\bin\myisamchk.exe +file18=C:\mysql\bin\winmysqladmin.cnt +file2=C:\mysql\bin\myisamlog.exe +file19=C:\mysql\bin\winmysqladmin.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.HLP +file21=C:\mysql\bin\cygwinb19.dll +file10=C:\mysql\bin\mysqlimport.exe +fulldirectory= +file22=C:\mysql\bin\libmySQL.dll +file11=C:\mysql\bin\MySqlManager.exe +file23=C:\mysql\bin\my_print_defaults.exe +file12=C:\mysql\bin\mysqlshow.exe +file24=C:\mysql\bin\comp-err.exe +file13=C:\mysql\bin\mysqlshutdown.exe +file14=C:\mysql\bin\mysqlwatch.exe + +[TopDir] +SubDir0=bin + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fdf b/VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fdf new file mode 100644 index 00000000000..282fae9d19b --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fdf @@ -0,0 +1,82 @@ +[FileGroups] +group0=Development +group1=Grant Tables +group2=Clients and Tools +group3=Servers +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= + +[Servers] +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= + +[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/3.23.XXcom/File Groups/Default.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fgl new file mode 100644 index 00000000000..94344a6ff69 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Default.fgl @@ -0,0 +1,4 @@ +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/File Groups/Development.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Development.fgl new file mode 100644 index 00000000000..a1cf53f880a --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Development.fgl @@ -0,0 +1,190 @@ +[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 +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] +file0=C:\mysql\include\raid.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\my_global.h +file14=C:\mysql\include\config-win.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 +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] +file0=C:\mysql\scripts\mysql_find_rows.pl +file1=C:\mysql\scripts\mysql_setpermission.pl +file2=C:\mysql\scripts\mysqlhotcopy.pl +file3=C:\mysql\scripts\Readme +fulldirectory= + +[lib] +SubDir0=lib\debug +SubDir1=lib\opt +fulldirectory= + diff --git a/VC++Files/InstallShield/3.23.XXcom/File Groups/Documentation.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Documentation.fgl new file mode 100644 index 00000000000..d36acb64538 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Documentation.fgl @@ -0,0 +1,98 @@ +[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 +SubDir0=Docs\Flags +fulldirectory= + +[TopDir] +SubDir0=Docs + +[General] +Type=FILELIST +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/File Groups/Grant Tables.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Grant Tables.fgl new file mode 100644 index 00000000000..178065a7003 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/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/3.23.XXcom/File Groups/Servers.fgl b/VC++Files/InstallShield/3.23.XXcom/File Groups/Servers.fgl new file mode 100644 index 00000000000..6f91a474d80 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/File Groups/Servers.fgl @@ -0,0 +1,183 @@ +[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 +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 + +[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-small.cnf +file1=C:\mysql\my-large.cnf +file2=C:\mysql\my-medium.cnf +file3=C:\mysql\my-huge.cnf +SubDir0=bin +SubDir1=share + +[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= + +[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/3.23.XXcom/MySQL 3.23.com.ipr b/VC++Files/InstallShield/3.23.XXcom/MySQL 3.23.com.ipr new file mode 100644 index 00000000000..811d69717d8 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/MySQL 3.23.com.ipr @@ -0,0 +1,51 @@ +[Language] +LanguageSupport0=0009 + +[OperatingSystem] +OSSupport=0000000000010010 + +[Data] +CurrentMedia= +set_mifserial= +ProductName=MySQL Servers and Clients +CurrentComponentDef=Default.cdf +set_dlldebug=No +AppExe= +DevEnvironment=Microsoft Visual C++ 6 +set_mif=No +set_testmode=No +Instructions=Instructions.txt +EmailAddresss= +SummaryText= +Department= +Type=Database Application +Author= +HomeURL= +InstallRoot=C:\MySQL-Install\3.23.XXcom +set_level=Level 3 +InstallationGUID=40744a4d-efed-4cff-84a9-9e6389550f5c +Version=1.00.000 +set_miffile=Status.mif +set_args= +set_maxerr=50 +Notes=Notes.txt +CurrentFileGroupDef=Default.fdf +set_dllcmdline= +set_warnaserr=No +Copyright= +set_preproc= +Category= +CurrentPlatform= +set_compileb4build=No +set_crc=Yes +set_maxwarn=50 +Description=Description.txt +CompanyName=MySQL +CurrentLanguage=English + +[MediaInfo] + +[General] +Type=INSTALLMAIN +Version=1.10.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/Registry Entries/Default.rge b/VC++Files/InstallShield/3.23.XXcom/Registry Entries/Default.rge new file mode 100644 index 00000000000..537dfd82e48 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Registry Entries/Default.rge @@ -0,0 +1,4 @@ +[General] +Type=REGISTRYDATA +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.dbg b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.dbg new file mode 100644 index 0000000000000000000000000000000000000000..0c6d4e6b70812d069322e88155868913fc543e33 GIT binary patch literal 28458 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 literal 0 HcmV?d00001 diff --git a/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.ino b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.ino new file mode 100644 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/3.23.XXcom/Script Files/Setup.ins b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.ins new file mode 100644 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/3.23.XXcom/Script Files/Setup.obs b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.obs new file mode 100644 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/3.23.XXcom/Script Files/Setup.rul b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.rul new file mode 100644 index 00000000000..0db8417a62c --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Script Files/Setup.rul @@ -0,0 +1,641 @@ + +//////////////////////////////////////////////////////////////////////////////// +// +// 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/3.23.XXcom/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt b/VC++Files/InstallShield/3.23.XXcom/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt new file mode 100644 index 00000000000..2f561d29d81 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Setup Files/Compressed Files/Language Independent/OS Independent/infolist.txt @@ -0,0 +1,24 @@ +This is a release of MySQL 3.23.56 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 which contains the files named 'my-size.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/3.23.XXcom/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP b/VC++Files/InstallShield/3.23.XXcom/Setup Files/Uncompressed Files/Language Independent/OS Independent/SETUP.BMP new file mode 100644 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/3.23.XXcom/Shell Objects/Default.shl b/VC++Files/InstallShield/3.23.XXcom/Shell Objects/Default.shl new file mode 100644 index 00000000000..187cb651307 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/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/3.23.XXcom/String Tables/0009-English/value.shl b/VC++Files/InstallShield/3.23.XXcom/String Tables/0009-English/value.shl new file mode 100644 index 00000000000..dd998365667 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/String Tables/0009-English/value.shl @@ -0,0 +1,23 @@ +[Data] +TITLE_MAIN=MySQL Commercial Servers and Clients 3.23.56 +ERROR_COMPONENT=Component: +COMPANY_NAME=MySQL AB +COMPANY_NAME16=Company +ERROR_FILEGROUP=File Group: +ERROR_MOVEDATA=An error occurred during the move data process: %d +PRODUCT_VERSION=3.23.56 +UNINST_KEY=MySQL Commercial Servers and Clients 3.23.56 +TITLE_CAPTIONBAR=MySQL Commercial Servers and Clients 3.23.56 Setup +PRODUCT_NAME16=Product +ERROR_FILE=File: +ERROR_VGARESOLUTION=This program requires VGA or better resolution. +PRODUCT_KEY=yourapp.Exe +UNINST_DISPLAY_NAME=MySQL Commercial Servers and Clients 3.23.56 +ERROR_UNINSTSETUP=unInstaller setup failed to initialize. You may not be able to uninstall this product. +PRODUCT_NAME=MySQL Commercial Servers and Clients 3.23.56 + +[General] +Language=0009 +Type=STRINGTABLESPECIFIC +Version=1.00.000 + diff --git a/VC++Files/InstallShield/3.23.XXcom/String Tables/Default.shl b/VC++Files/InstallShield/3.23.XXcom/String Tables/Default.shl new file mode 100644 index 00000000000..f197667992e --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/String Tables/Default.shl @@ -0,0 +1,74 @@ +[TITLE_MAIN] +Comment= + +[ERROR_COMPONENT] +Comment= + +[COMPANY_NAME] +Comment= + +[COMPANY_NAME16] +Comment= + +[ERROR_FILEGROUP] +Comment= + +[ERROR_MOVEDATA] +Comment= + +[PRODUCT_VERSION] +Comment= + +[UNINST_KEY] +Comment= + +[Language] +Lang0=0009 +CurrentLang=0 + +[TITLE_CAPTIONBAR] +Comment= + +[PRODUCT_NAME16] +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 +Entry10=ERROR_UNINSTSETUP +Entry9=ERROR_MOVEDATA +Entry11=COMPANY_NAME16 +Entry12=PRODUCT_NAME16 +Entry13=ERROR_COMPONENT +Entry14=ERROR_FILEGROUP +Entry15=ERROR_FILE + +[ERROR_FILE] +Comment= + +[ERROR_VGARESOLUTION] +Comment= + +[PRODUCT_KEY] +Comment= + +[UNINST_DISPLAY_NAME] +Comment= + +[General] +Type=STRINGTABLE +Version=1.00.000 + +[ERROR_UNINSTSETUP] +Comment= + +[PRODUCT_NAME] +Comment= + diff --git a/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Build.tsb b/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Build.tsb new file mode 100644 index 00000000000..0478df14bff --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Build.tsb @@ -0,0 +1,56 @@ +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key5= +Key6= +Key7= +Key8= +Key9= + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + diff --git a/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Setup.tsb b/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Setup.tsb new file mode 100644 index 00000000000..258173c7a48 --- /dev/null +++ b/VC++Files/InstallShield/3.23.XXcom/Text Substitutions/Setup.tsb @@ -0,0 +1,76 @@ +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[Data] +Key0= +Key1= +Key2= +Key3= +Key4= +Key10= +Key5= +Key11= +Key6= +Key12= +Key7= +Key13= +Key8= +Key9= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[General] +Type=TEXTSUB +Version=1.00.000 + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + +[] +KeyType=4 +Value= + From a05ccddd9ad22ebb72edaaf0a0811ec35955e594 Mon Sep 17 00:00:00 2001 From: "greg@gcw.ath.cx" <> Date: Thu, 19 Jun 2003 04:02:29 -0400 Subject: [PATCH 09/26] Tagged ChangeSet 1.1385 as mysql-3.23.57 --- BitKeeper/etc/logging_ok | 1 + configure.in | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 767dcab7c8a..bbf42ffcb6d 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -5,6 +5,7 @@ bar@bar.mysql.r18.ru bar@bar.udmsearch.izhnet.ru bell@sanja.is.com.ua bk@admin.bk +greg@gcw.ath.cx guilhem@mysql.com heikki@donna.mysql.fi heikki@hundin.mysql.fi diff --git a/configure.in b/configure.in index 5b690c3af78..471e97ce9cf 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.57) +AM_INIT_AUTOMAKE(mysql, 3.23.58) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 From 169fe2abe3ba1ab3bc427ea91e92b60ff223b903 Mon Sep 17 00:00:00 2001 From: "miguel@hegel.(none)" <> Date: Thu, 19 Jun 2003 12:09:32 -0400 Subject: [PATCH 10/26] Fix error msg. Bug #681 --- sql/nt_servc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/nt_servc.cc b/sql/nt_servc.cc index b917c91ce15..b18d3d00d88 100644 --- a/sql/nt_servc.cc +++ b/sql/nt_servc.cc @@ -462,7 +462,7 @@ BOOL NTService::SeekStatus(LPCSTR szInternName, int OperationType) { /* a remove operation */ if (!(service = OpenService(scm,szInternName, SERVICE_ALL_ACCESS ))) - printf("The service doesn't exists!\n"); + printf("The service doesn't exist!\n"); else { SERVICE_STATUS ss; From dcbcb78536b1b3798074cc93c299537a2bfdb66a Mon Sep 17 00:00:00 2001 From: "guilhem@mysql.com" <> Date: Sat, 21 Jun 2003 16:32:27 +0200 Subject: [PATCH 11/26] Can't believe it: one more cset (04-27) which never found his way to the central repository (incredible that I forgot to push, but why not). So unfortunately the bugfix missed 3.23.57 and will be in .58 :( Instead of looking like working (bug #198), replication between a 3.23 slave and 4.0 master should frankly stop. Here we detect 4.0 masters in the 3.23 slave code when we see a strange Rotate event, and in that case we print an error and stop. 4.0.13 and older masters will be "often" caught (see the patch); 4.0.14 and newer masters will always be immediately caught. --- sql/slave.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sql/slave.cc b/sql/slave.cc index 39c3d31ee66..50cb224d83d 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1216,6 +1216,28 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) Rotate_log_event* rev = (Rotate_log_event*)ev; int ident_len = rev->ident_len; pthread_mutex_lock(&mi->lock); + /* + If the master is 4.0, he has an incompatible binlog format, which we + cannot read. We always can detect this in _fake_ Rotate events, where we + see zeros at the beginning of the expected binlog's filename (this is + because 4.0 _fake_ Rotate events have zeros in the 'log_pos' and 'flags' + parts of the event header). + Consider the following test as a sanity check, which must always pass, + and which has the good side effect of catching 4.0 masters. + Masters >= 4.0.14 will always send a fake Rotate event (even if the slave + asked for a position >4) so we are 100% sure to catch the problem. + */ + if (!ident_len || !(rev->new_log_ident[0])) + { + sql_print_error("Slave: could not parse Rotate event; it *might* be \ +that your master's version is 4.0 or newer, which cannot be replicated by \ +3.23 slaves (in that case you need to upgrade your slave to 4.0 or newer)"); + delete ev; + pthread_cond_broadcast(&mi->cond); + pthread_mutex_unlock(&mi->lock); + return 1; + } + memcpy(mi->log_file_name, rev->new_log_ident,ident_len ); mi->log_file_name[ident_len] = 0; mi->pos = 4; // skip magic number From 5722ae6627904558c9207083e82300049aa0b579 Mon Sep 17 00:00:00 2001 From: "vva@eagle.mysql.r18.ru" <> Date: Wed, 25 Jun 2003 21:11:23 -0400 Subject: [PATCH 12/26] fixed bug with type of user variables (bug #551) --- BitKeeper/etc/logging_ok | 1 + mysql-test/r/user_var.result | 8 ++++++++ mysql-test/t/user_var.test | 6 ++++++ sql/item_func.cc | 1 + 4 files changed, 16 insertions(+) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index a6699f7c515..705b336440b 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -35,5 +35,6 @@ serg@build.mysql2.com serg@serg.mysql.com serg@sergbook.mysql.com sinisa@rhols221.adsl.netsonic.fi +vva@eagle.mysql.r18.ru walrus@mysql.com zak@balfor.local diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index e06a113bd29..8abdb40399a 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -14,3 +14,11 @@ table type possible_keys key key_len ref rows Extra t1 index NULL i 4 NULL 3 where used; Using index table type possible_keys key key_len ref rows Extra t1 ref i i 4 const 1 where used +@a:=10 @b:=1 @a > @b @a < @b +10 1 1 0 +@a:="10" @b:="1" @a > @b @a < @b +10 1 1 0 +@a:=10 @b:=2 @a > @b @a < @b +10 2 1 0 +@a:="10" @b:="2" @a > @b @a < @b +10 2 0 1 diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index 70283446fb3..3103de2dac5 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -17,3 +17,9 @@ explain select * from t1 where @vv1:=@vv1+1 and i=@vv1; explain select @vv1:=i from t1 where i=@vv1; explain select * from t1 where i=@vv1; drop table t1,t2; + +# Check types of variables +select @a:=10, @b:=1, @a > @b, @a < @b; +select @a:="10", @b:="1", @a > @b, @a < @b; +select @a:=10, @b:=2, @a > @b, @a < @b; +select @a:="10", @b:="2", @a > @b, @a < @b; diff --git a/sql/item_func.cc b/sql/item_func.cc index 723585be0b1..217768db2c5 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1676,6 +1676,7 @@ bool Item_func_set_user_var::fix_fields(THD *thd,TABLE_LIST *tables) if (Item_func::fix_fields(thd,tables) || !(entry= get_variable(&thd->user_vars, name, 1))) return 1; + entry->type= cached_result_type; entry->update_query_id=thd->query_id; return 0; } From 7655f05dc2377b3df8b9fabb0e622781f65d5b60 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Thu, 26 Jun 2003 05:38:19 +0300 Subject: [PATCH 13/26] LEFT JOIN optimization: Change LEFT JOIN to normal join if possible --- mysql-test/r/select.result | 34 +++++++++++++++++++++++++++++-- mysql-test/t/select.test | 14 +++++++++++++ sql/item.h | 17 ++++++++++++++++ sql/item_cmpfunc.cc | 41 ++++++++++++++++++++++++++++---------- sql/item_cmpfunc.h | 18 ++++++++++++----- sql/item_func.cc | 14 ++++++++++--- sql/item_func.h | 9 +++++++-- sql/item_strfunc.cc | 17 +++++++++------- sql/sql_base.cc | 16 +++++++++++---- 9 files changed, 147 insertions(+), 33 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index a4c2533ec1a..811c396ea67 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2569,16 +2569,46 @@ fld1 fld1 250503 250505 250504 250505 250505 250505 +insert into t2 (fld1, companynr) values (999999,99); select t2.companynr,companyname from t2 left join t4 using (companynr) where t4.companynr is null; companynr companyname +99 NULL +select count(*) from t2 left join t4 using (companynr) where t4.companynr is not null; +count(*) +1199 explain select t2.companynr,companyname from t2 left join t4 using (companynr) where t4.companynr is null; table type possible_keys key key_len ref rows Extra -t2 ALL NULL NULL NULL NULL 1199 +t2 ALL NULL NULL NULL NULL 1200 t4 eq_ref PRIMARY PRIMARY 1 test.t2.companynr 1 Using where; Not exists explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr is null; table type possible_keys key key_len ref rows Extra t4 ALL NULL NULL NULL NULL 12 -t2 ALL NULL NULL NULL NULL 1199 Using where; Not exists +t2 ALL NULL NULL NULL NULL 1200 Using where; Not exists +delete from t2 where fld1=999999; +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0; +table type possible_keys key key_len ref rows Extra +t2 ALL NULL NULL NULL NULL 1199 Using where +t4 eq_ref PRIMARY PRIMARY 1 test.t2.companynr 1 +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr < 0; +table type possible_keys key key_len ref rows Extra +t2 ALL NULL NULL NULL NULL 1199 Using where +t4 eq_ref PRIMARY PRIMARY 1 test.t2.companynr 1 +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 and t4.companynr > 0; +table type possible_keys key key_len ref rows Extra +t2 ALL NULL NULL NULL NULL 1199 Using where +t4 eq_ref PRIMARY PRIMARY 1 test.t2.companynr 1 Using where +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr is null; +table type possible_keys key key_len ref rows Extra +t4 ALL NULL NULL NULL NULL 12 +t2 ALL NULL NULL NULL NULL 1199 Using where +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr < 0 or t4.companynr > 0; +table type possible_keys key key_len ref rows Extra +t4 ALL PRIMARY NULL NULL NULL 12 +t2 ALL NULL NULL NULL NULL 1199 Using where +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where ifnull(t2.companynr,1)>0; +table type possible_keys key key_len ref rows Extra +t4 ALL NULL NULL NULL NULL 12 +t2 ALL NULL NULL NULL NULL 1199 Using where select distinct t2.companynr,t4.companynr from t2,t4 where t2.companynr=t4.companynr+1; companynr companynr 37 36 diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index de90eeec2e8..c2e451ea7f3 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1527,10 +1527,24 @@ select t2.fld1,t22.fld1 from t2,t2 t22 where t2.fld1 >= 250501 and t2.fld1 <= 25 # # Test of left join. # +insert into t2 (fld1, companynr) values (999999,99); select t2.companynr,companyname from t2 left join t4 using (companynr) where t4.companynr is null; +select count(*) from t2 left join t4 using (companynr) where t4.companynr is not null; explain select t2.companynr,companyname from t2 left join t4 using (companynr) where t4.companynr is null; explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr is null; +delete from t2 where fld1=999999; + +# +# Test left join optimization + +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0; +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr < 0; +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 and t4.companynr > 0; +# Following can't be optimized +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr is null; +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where t2.companynr > 0 or t2.companynr < 0 or t4.companynr > 0; +explain select t2.companynr,companyname from t4 left join t2 using (companynr) where ifnull(t2.companynr,1)>0; # # Joins with forms. diff --git a/sql/item.h b/sql/item.h index 09d428509d0..1631bf76135 100644 --- a/sql/item.h +++ b/sql/item.h @@ -71,7 +71,24 @@ public: virtual double val_result() { return val(); } virtual longlong val_int_result() { return val_int(); } virtual String *str_result(String* tmp) { return val_str(tmp); } + /* bit map of tables used by item */ virtual table_map used_tables() const { return (table_map) 0L; } + /* + Return table map of tables that can't be NULL tables (tables that are + used in a context where if they would contain a NULL row generated + by a LEFT or RIGHT join, the item would not be true). + This expression is used on WHERE item to determinate if a LEFT JOIN can be + converted to a normal join. + Generally this function should return used_tables() if the function + would return null if any of the arguments are null + As this is only used in the beginning of optimization, the value don't + have to be updated in update_used_tables() + */ + virtual table_map not_null_tables() const { return used_tables(); } + /* + Returns true if this is a simple constant item like an integer, not + a constant expression + */ virtual bool basic_const_item() const { return 0; } virtual Item *new_item() { return 0; } /* Only for const items */ virtual cond_result eq_cmp_result() const { return COND_OK; } diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 3344f2bc01d..770fe3c0232 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -292,10 +292,12 @@ void Item_func_interval::fix_length_and_dec() } } maybe_null=0; max_length=2; - used_tables_cache|=item->used_tables(); + used_tables_cache|= item->used_tables(); + not_null_tables_cache&= item->not_null_tables(); with_sum_func= with_sum_func || item->with_sum_func; } + void Item_func_interval::split_sum_func(List &fields) { if (item->with_sum_func && item->type() != SUM_FUNC_ITEM) @@ -1073,8 +1075,9 @@ void Item_func_in::fix_length_and_dec() } maybe_null= item->maybe_null; max_length=2; - used_tables_cache|=item->used_tables(); - const_item_cache&=item->const_item(); + used_tables_cache|= item->used_tables(); + not_null_tables_cache&= item->not_null_tables(); + const_item_cache&= item->const_item(); } @@ -1174,14 +1177,21 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables) char buff[sizeof(char*)]; // Max local vars in function used_tables_cache=0; const_item_cache=0; + /* + and_table_cache is the value that Item_cond_or() returns for + not_null_tables() + */ + and_tables_cache= ~(table_map) 0; if (thd && check_stack_overrun(thd,buff)) return 0; // Fatal error flag is set! while ((item=li++)) { + table_map tmp_table_map; while (item->type() == Item::COND_ITEM && ((Item_cond*) item)->functype() == functype()) { // Identical function + li.replace(((Item_cond*) item)->list); ((Item_cond*) item)->list.empty(); #ifdef DELETE_ITEMS @@ -1193,9 +1203,12 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables) item->top_level_item(); if (item->fix_fields(thd,tables)) return 1; /* purecov: inspected */ - used_tables_cache|=item->used_tables(); - with_sum_func= with_sum_func || item->with_sum_func; - const_item_cache&=item->const_item(); + used_tables_cache|= item->used_tables(); + tmp_table_map= item->not_null_tables(); + not_null_tables_cache|= tmp_table_map; + and_tables_cache&= tmp_table_map; + const_item_cache&= item->const_item(); + with_sum_func= with_sum_func || item->with_sum_func; if (item->maybe_null) maybe_null=1; } @@ -1234,17 +1247,19 @@ Item_cond::used_tables() const return used_tables_cache; } + void Item_cond::update_used_tables() { - used_tables_cache=0; - const_item_cache=1; List_iterator_fast li(list); Item *item; + + used_tables_cache=0; + const_item_cache=1; while ((item=li++)) { item->update_used_tables(); - used_tables_cache|=item->used_tables(); - const_item_cache&= item->const_item(); + used_tables_cache|= item->used_tables(); + const_item_cache&= item->const_item(); } } @@ -1348,12 +1363,16 @@ Item *and_expressions(Item *a, Item *b, Item **org_item) { Item_cond *res; if ((res= new Item_cond_and(a, (Item*) b))) + { res->used_tables_cache= a->used_tables() | b->used_tables(); + res->not_null_tables_cache= a->not_null_tables() | b->not_null_tables(); + } return res; } if (((Item_cond_and*) a)->add((Item*) b)) return 0; ((Item_cond_and*) a)->used_tables_cache|= b->used_tables(); + ((Item_cond_and*) a)->not_null_tables_cache|= b->not_null_tables(); return a; } @@ -1489,6 +1508,8 @@ Item_func_regex::fix_fields(THD *thd,TABLE_LIST *tables) max_length=1; decimals=0; binary=args[0]->binary || args[1]->binary; used_tables_cache=args[0]->used_tables() | args[1]->used_tables(); + not_null_tables_cache= (args[0]->not_null_tables() | + args[1]->not_null_tables()); const_item_cache=args[0]->const_item() && args[1]->const_item(); if (!regex_compiled && args[1]->const_item()) { diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index f7ade97940c..536ac9dc3d4 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -204,7 +204,7 @@ public: enum Item_result result_type () const { return cached_result_type; } void fix_length_and_dec(); const char *func_name() const { return "ifnull"; } - unsigned int size_of() { return sizeof(*this);} + table_map not_null_tables() const { return 0; } }; @@ -224,7 +224,7 @@ public: } void fix_length_and_dec(); const char *func_name() const { return "if"; } - unsigned int size_of() { return sizeof(*this);} + table_map not_null_tables() const { return 0; } }; @@ -239,7 +239,7 @@ public: enum Item_result result_type () const { return cached_result_type; } void fix_length_and_dec(); const char *func_name() const { return "nullif"; } - unsigned int size_of() { return sizeof(*this);} + table_map not_null_tables() const { return 0; } }; @@ -254,9 +254,10 @@ public: void fix_length_and_dec(); enum Item_result result_type () const { return cached_result_type; } const char *func_name() const { return "coalesce"; } - unsigned int size_of() { return sizeof(*this);} + table_map not_null_tables() const { return 0; } }; + class Item_func_case :public Item_func { Item * first_expr, *else_expr; @@ -270,6 +271,7 @@ public: String *val_str(String *); void fix_length_and_dec(); void update_used_tables(); + table_map not_null_tables() const { return 0; } enum Item_result result_type () const { return cached_result_type; } const char *func_name() const { return "case"; } void print(String *str); @@ -479,10 +481,12 @@ public: } } } + table_map not_null_tables() const { return 0; } optimize_type select_optimize() const { return OPTIMIZE_NULL; } unsigned int size_of() { return sizeof(*this);} }; + class Item_func_isnotnull :public Item_bool_func { public: @@ -495,9 +499,10 @@ public: } const char *func_name() const { return "isnotnull"; } optimize_type select_optimize() const { return OPTIMIZE_NULL; } - unsigned int size_of() { return sizeof(*this);} + table_map not_null_tables() const { return 0; } }; + class Item_func_like :public Item_bool_func2 { char escape; @@ -572,6 +577,8 @@ class Item_cond :public Item_bool_func protected: List list; bool abort_on_null; + table_map and_tables_cache; + public: /* Item_cond() is only used to create top level items */ Item_cond() : Item_bool_func(), abort_on_null(1) { const_item_cache=0; } @@ -611,6 +618,7 @@ public: enum Functype functype() const { return COND_OR_FUNC; } longlong val_int(); const char *func_name() const { return "or"; } + table_map not_null_tables() const { return and_tables_cache; } }; diff --git a/sql/item_func.cc b/sql/item_func.cc index e847b203006..23bec0c3c81 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -61,7 +61,7 @@ Item_func::fix_fields(THD *thd,TABLE_LIST *tables) Item **arg,**arg_end; char buff[STACK_BUFF_ALLOC]; // Max argument in function binary=0; - used_tables_cache=0; + used_tables_cache= not_null_tables_cache= 0; const_item_cache=1; if (thd && check_stack_overrun(thd,buff)) @@ -78,8 +78,9 @@ Item_func::fix_fields(THD *thd,TABLE_LIST *tables) if (item->binary) binary=1; with_sum_func= with_sum_func || item->with_sum_func; - used_tables_cache|=item->used_tables(); - const_item_cache&= item->const_item(); + used_tables_cache|= item->used_tables(); + not_null_tables_cache|= item->not_null_tables(); + const_item_cache&= item->const_item(); } } fix_length_and_dec(); @@ -122,6 +123,13 @@ table_map Item_func::used_tables() const return used_tables_cache; } + +table_map Item_func::not_null_tables() const +{ + return not_null_tables_cache; +} + + void Item_func::print(String *str) { str->append(func_name()); diff --git a/sql/item_func.h b/sql/item_func.h index 68e5335dc7e..8a4cace0b87 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -34,7 +34,7 @@ protected: Item **args,*tmp_arg[2]; public: uint arg_count; - table_map used_tables_cache; + table_map used_tables_cache, not_null_tables_cache; bool const_item_cache; enum Functype { UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC, GE_FUNC,GT_FUNC,FT_FUNC, @@ -97,6 +97,7 @@ public: bool fix_fields(THD *,struct st_table_list *); void make_field(Send_field *field); table_map used_tables() const; + table_map not_null_tables() const; void update_used_tables(); bool eq(const Item *item, bool binary_cmp) const; virtual optimize_type select_optimize() const { return OPTIMIZE_NONE; } @@ -588,7 +589,8 @@ public: void split_sum_func(List &fields); void update_used_tables() { - item->update_used_tables() ; Item_func::update_used_tables(); + item->update_used_tables(); + Item_func::update_used_tables(); used_tables_cache|= item->used_tables(); const_item_cache&= item->const_item(); } @@ -597,6 +599,7 @@ public: { maybe_null=0; max_length=3; used_tables_cache|= item->used_tables(); + not_null_tables_cache&= item->not_null_tables(); const_item_cache&= item->const_item(); with_sum_func= with_sum_func || item->with_sum_func; } @@ -736,6 +739,7 @@ public: return res; } Item_result result_type () const { return udf.result_type(); } + table_map not_null_tables() const { return 0; } unsigned int size_of() { return sizeof(*this);} }; @@ -969,6 +973,7 @@ public: } enum Functype functype() const { return FT_FUNC; } void update_used_tables() {} + table_map not_null_tables() const { return 0; } bool fix_fields(THD *thd,struct st_table_list *tlist); bool eq(const Item *, bool binary_cmp) const; longlong val_int() { return val()!=0.0; } diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 208be1ecd7f..20496a47671 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -606,9 +606,10 @@ void Item_func_concat_ws::fix_length_and_dec() max_length=MAX_BLOB_WIDTH; maybe_null=1; } - used_tables_cache|=separator->used_tables(); - const_item_cache&=separator->const_item(); - with_sum_func= with_sum_func || separator->with_sum_func; + used_tables_cache|= separator->used_tables(); + not_null_tables_cache&= separator->not_null_tables(); + const_item_cache&= separator->const_item(); + with_sum_func= with_sum_func || separator->with_sum_func; } void Item_func_concat_ws::update_used_tables() @@ -1509,8 +1510,9 @@ void Item_func_elt::fix_length_and_dec() } maybe_null=1; // NULL if wrong first arg with_sum_func= with_sum_func || item->with_sum_func; - used_tables_cache|=item->used_tables(); - const_item_cache&=item->const_item(); + used_tables_cache|= item->used_tables(); + not_null_tables_cache&= item->not_null_tables(); + const_item_cache&= item->const_item(); } @@ -1591,8 +1593,9 @@ void Item_func_make_set::fix_length_and_dec() max_length=arg_count-1; for (uint i=1 ; i < arg_count ; i++) max_length+=args[i]->max_length; - used_tables_cache|=item->used_tables(); - const_item_cache&=item->const_item(); + used_tables_cache|= item->used_tables(); + not_null_tables_cache&= item->not_null_tables(); + const_item_cache&= item->const_item(); with_sum_func= with_sum_func || item->with_sum_func; } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 3bfd5e14d43..43718e5d93b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1903,11 +1903,11 @@ bool setup_tables(TABLE_LIST *tables) table->used_fields=0; table->const_table=0; - table->outer_join=table->null_row=0; + table->null_row=0; table->status=STATUS_NO_RECORD; table->keys_in_use_for_query= table->keys_in_use; table->used_keys= table->keys_for_keyread; - table->maybe_null=test(table->outer_join=table_list->outer_join); + table->maybe_null=test(table->outer_join= table_list->outer_join); table->tablenr=tablenr; table->map= (table_map) 1 << tablenr; table->force_index= table_list->force_index; @@ -2027,6 +2027,7 @@ insert_fields(THD *thd,TABLE_LIST *tables, const char *db_name, int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) { + table_map not_null_tables= 0; DBUG_ENTER("setup_conds"); thd->set_query_id=1; thd->cond_count=0; @@ -2036,6 +2037,7 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) thd->where="where clause"; if ((*conds)->fix_fields(thd,tables)) DBUG_RETURN(1); + not_null_tables= (*conds)->not_null_tables(); } /* Check if we are using outer joins */ @@ -2049,9 +2051,15 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) DBUG_RETURN(1); thd->cond_count++; - /* If it's a normal join, add the ON/USING expression to the WHERE */ - if (!table->outer_join) + /* + If it's a normal join or a LEFT JOIN which can be optimized away + add the ON/USING expression to the WHERE + */ + if (!table->outer_join || + ((table->table->map & not_null_tables) && + !(specialflag & SPECIAL_NO_NEW_FUNC))) { + table->outer_join= 0; if (!(*conds=and_conds(*conds, table->on_expr))) DBUG_RETURN(1); table->on_expr=0; From 5f556f11e0e0ef0daefd41829cd400cc7addb583 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Thu, 26 Jun 2003 07:56:55 +0300 Subject: [PATCH 14/26] Fixed memory allocation in Unique to not allocate too much memory --- myisam/mi_info.c | 12 +++++++----- mysys/tree.c | 5 +++++ sql/net_serv.cc | 3 +++ sql/sql_class.h | 42 ++++++++++++++++++++++-------------------- sql/uniques.cc | 6 +++--- 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/myisam/mi_info.c b/myisam/mi_info.c index 32767e73bb1..f4eace198f9 100644 --- a/myisam/mi_info.c +++ b/myisam/mi_info.c @@ -80,15 +80,17 @@ int mi_status(MI_INFO *info, register MI_ISAMINFO *x, uint flag) (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)) ? 0L : share->base.pack_reclength); x->sortkey= -1; /* No clustering */ - /* The following should be included even if we are not compiling with - USE_RAID as the client must be able to request it! */ x->rec_per_key = share->state.rec_per_key_part; - x->raid_type= share->base.raid_type; - x->raid_chunks= share->base.raid_chunks; - x->raid_chunksize= share->base.raid_chunksize; x->key_map = share->state.key_map; x->data_file_name = share->data_file_name; x->index_file_name = share->index_file_name; + /* + The following should be included even if we are not compiling with + USE_RAID as the client must be able to request it! + */ + x->raid_type= share->base.raid_type; + x->raid_chunks= share->base.raid_chunks; + x->raid_chunksize= share->base.raid_chunksize; } if ((flag & HA_STATUS_TIME) && !my_fstat(info->dfile,&state,MYF(0))) x->update_time=state.st_mtime; diff --git a/mysys/tree.c b/mysys/tree.c index ea5cf79f084..2b5ea717809 100644 --- a/mysys/tree.c +++ b/mysys/tree.c @@ -90,6 +90,11 @@ void init_tree(TREE *tree, uint default_alloc_size, uint memory_limit, if (!free_element && size >= 0 && ((uint) size <= sizeof(void*) || ((uint) size & (sizeof(void*)-1)))) { + /* + We know that the data doesn't have to be aligned (like if the key + contains a double), so we can store the data combined with the + TREE_ELEMENT. + */ tree->offset_to_key=sizeof(TREE_ELEMENT); /* Put key after element */ /* Fix allocation size so that we don't lose any memory */ default_alloc_size/=(sizeof(TREE_ELEMENT)+size); diff --git a/sql/net_serv.cc b/sql/net_serv.cc index a8bc559e3a0..13f786e0e75 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -21,6 +21,9 @@ Read packets are reallocated dynamicly when reading big packets. Each logical packet has the following pre-info: 3 byte length & 1 byte package-number. + + This file needs to be written in C as it's used by the libmysql client as a + C file. */ #ifdef __WIN__ diff --git a/sql/sql_class.h b/sql/sql_class.h index a8a24451ecc..3246f77c77a 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -781,11 +781,12 @@ class Unique :public Sql_alloc TREE tree; byte *record_pointers; bool flush(); + uint size; public: ulong elements; Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg, - uint size, ulong max_in_memory_size_arg); + uint size_arg, ulong max_in_memory_size_arg); ~Unique(); inline bool unique_add(gptr ptr) { @@ -800,26 +801,27 @@ public: friend int unique_write_to_ptrs(gptr key, element_count count, Unique *unique); }; - class multi_delete : public select_result { - TABLE_LIST *delete_tables, *table_being_deleted; - Unique **tempfiles; - THD *thd; - ha_rows deleted; - uint num_of_tables; - int error; - bool do_delete, transactional_tables, log_delayed, normal_tables; - public: - multi_delete(THD *thd, TABLE_LIST *dt, uint num_of_tables); - ~multi_delete(); - int prepare(List &list); - bool send_fields(List &list, +class multi_delete : public select_result +{ + TABLE_LIST *delete_tables, *table_being_deleted; + Unique **tempfiles; + THD *thd; + ha_rows deleted; + uint num_of_tables; + int error; + bool do_delete, transactional_tables, log_delayed, normal_tables; +public: + multi_delete(THD *thd, TABLE_LIST *dt, uint num_of_tables); + ~multi_delete(); + int prepare(List &list); + bool send_fields(List &list, uint flag) { return 0; } - bool send_data(List &items); - bool initialize_tables (JOIN *join); - void send_error(uint errcode,const char *err); - int do_deletes (bool from_send_error); - bool send_eof(); - }; + bool send_data(List &items); + bool initialize_tables (JOIN *join); + void send_error(uint errcode,const char *err); + int do_deletes (bool from_send_error); + bool send_eof(); +}; class multi_update : public select_result { diff --git a/sql/uniques.cc b/sql/uniques.cc index ed256a4b791..d00893a8605 100644 --- a/sql/uniques.cc +++ b/sql/uniques.cc @@ -49,8 +49,8 @@ int unique_write_to_ptrs(gptr key, element_count count, Unique *unique) } Unique::Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg, - uint size, ulong max_in_memory_size_arg) - :max_in_memory_size(max_in_memory_size_arg),elements(0) + uint size_arg, ulong max_in_memory_size_arg) + :max_in_memory_size(max_in_memory_size_arg), size(size_arg), elements(0) { my_b_clear(&file); init_tree(&tree, max_in_memory_size / 16, 0, size, comp_func, 0, NULL, @@ -101,7 +101,7 @@ bool Unique::get(TABLE *table) { /* Whole tree is in memory; Don't use disk if you don't need to */ if ((record_pointers=table->record_pointers= (byte*) - my_malloc(tree.size_of_element * tree.elements_in_tree, MYF(0)))) + my_malloc(size * tree.elements_in_tree, MYF(0)))) { (void) tree_walk(&tree, (tree_walk_action) unique_write_to_ptrs, this, left_root_right); From 34919a03c4d0d17e6bb5f11fab53366ee04ea7f9 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Fri, 27 Jun 2003 03:04:54 +0300 Subject: [PATCH 15/26] Added thread variable max_seeks_for_key Change optimizer to prefer key lookups before table scan Change table scans to be done after tables with constrains on scanned table --- mysql-test/r/distinct.result | 12 +++++----- mysql-test/r/group_by.result | 4 ++-- mysql-test/r/heap.result | 2 +- mysql-test/r/join.result | 4 +--- mysql-test/r/key_diff.result | 2 +- mysql-test/r/myisam.result | 10 ++++---- mysql-test/r/order_by.result | 6 ++--- mysql-test/r/select_safe.result | 23 ++++++++++++++---- mysql-test/t/distinct.test | 2 +- mysql-test/t/join.test | 5 +--- mysql-test/t/select_safe.test | 15 ++++++++++-- sql/handler.h | 37 ++++++++++++++--------------- sql/item_cmpfunc.cc | 4 ++-- sql/mysqld.cc | 7 +++++- sql/set_var.cc | 4 ++++ sql/sql_class.h | 1 + sql/sql_select.cc | 41 +++++++++++++++++++++++---------- 17 files changed, 114 insertions(+), 65 deletions(-) diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result index 5f4f7cced1e..53a20eeea0b 100644 --- a/mysql-test/r/distinct.result +++ b/mysql-test/r/distinct.result @@ -161,7 +161,7 @@ SELECT DISTINCT UserId FROM t1 WHERE UserId=22; UserId drop table t1; CREATE TABLE t1 (a int(10) unsigned not null primary key,b int(10) unsigned); -INSERT INTO t1 VALUES (1,1),(2,1); +INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1); CREATE TABLE t2 (a int(10) unsigned not null, key (A)); INSERT INTO t2 VALUES (1),(2); CREATE TABLE t3 (a int(10) unsigned, key(A), b text); @@ -189,7 +189,7 @@ insert into t4 select * from t3; insert into t3 select * from t4; explain select distinct t1.a from t1,t3 where t1.a=t3.a; table type possible_keys key key_len ref rows Extra -t1 index PRIMARY PRIMARY 4 NULL 2 Using index; Using temporary +t1 index PRIMARY PRIMARY 4 NULL 4 Using index; Using temporary t3 ref a a 5 t1.a 10 Using where; Using index; Distinct select distinct t1.a from t1,t3 where t1.a=t3.a; a @@ -200,16 +200,16 @@ select distinct 1 from t1,t3 where t1.a=t3.a; 1 explain SELECT distinct t1.a from t1; table type possible_keys key key_len ref rows Extra -t1 index NULL PRIMARY 4 NULL 2 Using index +t1 index NULL PRIMARY 4 NULL 4 Using index explain SELECT distinct t1.a from t1 order by a desc; table type possible_keys key key_len ref rows Extra -t1 index NULL PRIMARY 4 NULL 2 Using index +t1 index NULL PRIMARY 4 NULL 4 Using index explain SELECT t1.a from t1 group by a order by a desc; table type possible_keys key key_len ref rows Extra -t1 index NULL PRIMARY 4 NULL 2 Using index +t1 index NULL PRIMARY 4 NULL 4 Using index explain SELECT distinct t1.a from t1 order by a desc limit 1; table type possible_keys key key_len ref rows Extra -t1 index NULL PRIMARY 4 NULL 2 Using index +t1 index NULL PRIMARY 4 NULL 4 Using index explain SELECT distinct a from t3 order by a desc limit 2; table type possible_keys key key_len ref rows Extra t3 index NULL a 5 NULL 204 Using index diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 94e1ce59585..67e6bec09f6 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -534,11 +534,11 @@ a b explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 6 Using temporary; Using filesort -t2 ALL a NULL NULL NULL 4 Using where +t2 ALL a NULL NULL NULL 3 Using where explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL; table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 6 Using temporary -t2 ALL a NULL NULL NULL 4 Using where +t2 ALL a NULL NULL NULL 3 Using where drop table t1,t2; create table t1 (a int, b int); insert into t1 values (1, 4),(10, 40),(1, 4),(10, 43),(1, 4),(10, 41),(1, 4),(10, 43),(1, 4); diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index d8905085e34..a04ddf3f302 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -166,7 +166,7 @@ alter table t1 add column new_col char(1) not null, add key (btn,new_col), drop update t1 set new_col=btn; explain select * from t1 where btn="a"; table type possible_keys key key_len ref rows Extra -t1 ALL btn NULL NULL NULL 14 Using where +t1 ALL btn NULL NULL NULL 11 Using where explain select * from t1 where btn="a" and new_col="a"; table type possible_keys key key_len ref rows Extra t1 ref btn btn 11 const,const 10 Using where diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result index e063b5c3e02..039b6e1cba3 100644 --- a/mysql-test/r/join.result +++ b/mysql-test/r/join.result @@ -104,9 +104,7 @@ KEY category (category,county,state) INSERT INTO t2 VALUES (3,2,11,12,5400,7800); INSERT INTO t2 VALUES (4,2,25,12,6500,11200); INSERT INTO t2 VALUES (5,1,37,6,10000,12000); -select a.id, b.category as catid, b.state as stateid, b.county as -countyid from t1 a, t2 b where (a.token = -'a71250b7ed780f6ef3185bfffe027983') and (a.count = b.id); +select a.id, b.category as catid, b.state as stateid, b.county as countyid from t1 a, t2 b ignore index (primary) where (a.token ='a71250b7ed780f6ef3185bfffe027983') and (a.count = b.id); id catid stateid countyid 27 2 12 11 28 2 12 11 diff --git a/mysql-test/r/key_diff.result b/mysql-test/r/key_diff.result index 4eaccc696f9..2d4bc19474f 100644 --- a/mysql-test/r/key_diff.result +++ b/mysql-test/r/key_diff.result @@ -36,7 +36,7 @@ a a a a explain select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B; table type possible_keys key key_len ref rows Extra t1 ALL a NULL NULL NULL 5 -t2 ALL b NULL NULL NULL 5 Using where +t2 ALL b NULL NULL NULL 4 Using where select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B order by binary t1.a,t2.a; a b a b A B a a diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index 9a653aff99e..c4368384bf8 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -335,12 +335,12 @@ t1 1 c_2 1 c A 5 NULL NULL YES BTREE t1 1 c_2 2 a A 5 NULL NULL BTREE explain select * from t1,t2 where t1.a=t2.a; table type possible_keys key key_len ref rows Extra -t1 ALL a NULL NULL NULL 5 -t2 ALL a NULL NULL NULL 2 Using where +t2 ALL a NULL NULL NULL 2 +t1 ALL a NULL NULL NULL 4 Using where explain select * from t1,t2 force index(a) where t1.a=t2.a; table type possible_keys key key_len ref rows Extra t2 ALL a NULL NULL NULL 2 -t1 ALL a NULL NULL NULL 5 Using where +t1 ALL a NULL NULL NULL 4 Using where explain select * from t1 force index(a),t2 force index(a) where t1.a=t2.a; table type possible_keys key key_len ref rows Extra t2 ALL a NULL NULL NULL 2 @@ -351,8 +351,8 @@ t2 ALL b NULL NULL NULL 2 t1 ref b b 5 t2.b 1 Using where explain select * from t1,t2 force index(c) where t1.a=t2.a; table type possible_keys key key_len ref rows Extra -t1 ALL a NULL NULL NULL 5 -t2 ALL NULL NULL NULL NULL 2 Using where +t2 ALL NULL NULL NULL NULL 2 +t1 ALL a NULL NULL NULL 4 Using where explain select * from t1 where a=0 or a=2; table type possible_keys key key_len ref rows Extra t1 ALL a NULL NULL NULL 5 Using where diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index ff2dd93311c..64fac8af872 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -307,17 +307,17 @@ table type possible_keys key key_len ref rows Extra t1 range a a 9 NULL 8 Using where; Using index explain select * from t1 where a = 2 and b >0 order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 5 Using where; Using index +t1 range a a 9 NULL 4 Using where; Using index explain select * from t1 where a = 2 and b is null order by a desc,b desc; table type possible_keys key key_len ref rows Extra t1 ref a a 9 const,const 1 Using where; Using index; Using filesort explain select * from t1 where a = 2 and (b is null or b > 0) order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 6 Using where; Using index +t1 range a a 9 NULL 5 Using where; Using index explain select * from t1 where a = 2 and b > 0 order by a desc,b desc; table type possible_keys key key_len ref rows Extra -t1 range a a 9 NULL 5 Using where; Using index +t1 range a a 9 NULL 4 Using where; Using index explain select * from t1 where a = 2 and b < 2 order by a desc,b desc; table type possible_keys key key_len ref rows Extra t1 range a a 9 NULL 2 Using where; Using index diff --git a/mysql-test/r/select_safe.result b/mysql-test/r/select_safe.result index 3303f19d9c7..830390ebe3c 100644 --- a/mysql-test/r/select_safe.result +++ b/mysql-test/r/select_safe.result @@ -1,6 +1,6 @@ drop table if exists t1; SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9; -create table t1 (a int auto_increment primary key, b char(20)); +create table t1 (a int auto_increment primary key, b char(20), key(b)); insert into t1 values(1,"test"); SELECT SQL_BUFFER_RESULT * from t1; a b @@ -13,7 +13,7 @@ a b 1 test 2 test2 update t1 set b="a" where a=1; -select 1 from t1,t1 as t2,t1 as t3,t1 as t4; +select 1 from t1,t1 as t2,t1 as t3; 1 1 1 @@ -22,11 +22,9 @@ select 1 from t1,t1 as t2,t1 as t3,t1 as t4; update t1 set b="a"; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column update t1 set b="a" where b="test"; -You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1 where b="test"; -You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1 where a+0=1; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column select 1 from t1,t1 as t2,t1 as t3,t1 as t4,t1 as t5; @@ -59,5 +57,22 @@ a b 2 test2 4 a 5 a +SELECT @@MAX_SEEKS_FOR_KEY; +@@max_seeks_for_key +4294967295 +analyze table t1; +Table Op Msg_type Msg_text +test.t1 analyze status OK +insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"); +explain select * from t1,t1 as t2 where t1.b=t2.b; +table type possible_keys key key_len ref rows Extra +t1 ALL b NULL NULL NULL 21 +t2 ALL b NULL NULL NULL 16 Using where +set MAX_SEEKS_FOR_KEY=1; +explain select * from t1,t1 as t2 where t1.b=t2.b; +table type possible_keys key key_len ref rows Extra +t1 ALL b NULL NULL NULL 21 +t2 ref b b 21 t1.b 6 Using where +SET MAX_SEEKS_FOR_KEY=DEFAULT; drop table t1; SET SQL_SAFE_UPDATES=0,SQL_SELECT_LIMIT=DEFAULT, SQL_MAX_JOIN_SIZE=DEFAULT; diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test index 7f75b6b1687..ecce2409571 100644 --- a/mysql-test/t/distinct.test +++ b/mysql-test/t/distinct.test @@ -60,7 +60,7 @@ drop table t1; # CREATE TABLE t1 (a int(10) unsigned not null primary key,b int(10) unsigned); -INSERT INTO t1 VALUES (1,1),(2,1); +INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1); CREATE TABLE t2 (a int(10) unsigned not null, key (A)); INSERT INTO t2 VALUES (1),(2); CREATE TABLE t3 (a int(10) unsigned, key(A), b text); diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test index 08cc5731723..19e04d2aa7e 100644 --- a/mysql-test/t/join.test +++ b/mysql-test/t/join.test @@ -98,10 +98,7 @@ CREATE TABLE t2 ( INSERT INTO t2 VALUES (3,2,11,12,5400,7800); INSERT INTO t2 VALUES (4,2,25,12,6500,11200); INSERT INTO t2 VALUES (5,1,37,6,10000,12000); - -select a.id, b.category as catid, b.state as stateid, b.county as -countyid from t1 a, t2 b where (a.token = -'a71250b7ed780f6ef3185bfffe027983') and (a.count = b.id); +select a.id, b.category as catid, b.state as stateid, b.county as countyid from t1 a, t2 b ignore index (primary) where (a.token ='a71250b7ed780f6ef3185bfffe027983') and (a.count = b.id); select a.id, b.category as catid, b.state as stateid, b.county as countyid from t1 a, t2 b where (a.token = 'a71250b7ed780f6ef3185bfffe027983') and (a.count = b.id) order by a.id; diff --git a/mysql-test/t/select_safe.test b/mysql-test/t/select_safe.test index a085cfee29d..049a35aa355 100644 --- a/mysql-test/t/select_safe.test +++ b/mysql-test/t/select_safe.test @@ -4,7 +4,7 @@ drop table if exists t1; SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9; -create table t1 (a int auto_increment primary key, b char(20)); +create table t1 (a int auto_increment primary key, b char(20), key(b)); insert into t1 values(1,"test"); SELECT SQL_BUFFER_RESULT * from t1; update t1 set b="a" where a=1; @@ -12,7 +12,7 @@ delete from t1 where a=1; insert into t1 values(1,"test"),(2,"test2"); SELECT SQL_BUFFER_RESULT * from t1; update t1 set b="a" where a=1; -select 1 from t1,t1 as t2,t1 as t3,t1 as t4; +select 1 from t1,t1 as t2,t1 as t3; # The following should give errors: --error 1175 @@ -49,6 +49,17 @@ SELECT * from t1; SET MAX_JOIN_SIZE=DEFAULT; SELECT * from t1; +# +# Test MAX_SEEKS_FOR_KEY +# +SELECT @@MAX_SEEKS_FOR_KEY; +analyze table t1; +insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"); +explain select * from t1,t1 as t2 where t1.b=t2.b; +set MAX_SEEKS_FOR_KEY=1; +explain select * from t1,t1 as t2 where t1.b=t2.b; +SET MAX_SEEKS_FOR_KEY=DEFAULT; + drop table t1; SET SQL_SAFE_UPDATES=0,SQL_SELECT_LIMIT=DEFAULT, SQL_MAX_JOIN_SIZE=DEFAULT; diff --git a/sql/handler.h b/sql/handler.h index 56f63d1d521..dfcfa44fbcd 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -184,40 +184,41 @@ class handler :public Sql_alloc { protected: struct st_table *table; /* The table definition */ - uint active_index; public: byte *ref; /* Pointer to current row */ byte *dupp_ref; /* Pointer to dupp row */ - uint ref_length; /* Length of ref (1-8 or the clustered - key length) */ - uint block_size; /* index block size */ - ha_rows records; /* Records i datafilen */ - ha_rows deleted; /* Deleted records */ ulonglong data_file_length; /* Length off data file */ ulonglong max_data_file_length; /* Length off data file */ ulonglong index_file_length; ulonglong max_index_file_length; ulonglong delete_length; /* Free bytes */ ulonglong auto_increment_value; - uint raid_type,raid_chunks; + ha_rows records; /* Records in table */ + ha_rows deleted; /* Deleted records */ ulong raid_chunksize; - uint errkey; /* Last dup key */ - uint sortkey, key_used_on_scan; + ulong mean_rec_length; /* physical reclength */ time_t create_time; /* When table was created */ time_t check_time; time_t update_time; - ulong mean_rec_length; /* physical reclength */ + uint errkey; /* Last dup key */ + uint sortkey, key_used_on_scan; + uint active_index; + /* Length of ref (1-8 or the clustered key length) */ + uint ref_length; + uint block_size; /* index block size */ + uint raid_type,raid_chunks; FT_INFO *ft_handler; bool auto_increment_column_changed; - handler(TABLE *table_arg) : table(table_arg),active_index(MAX_REF_PARTS), - ref(0),ref_length(sizeof(my_off_t)), block_size(0),records(0),deleted(0), - data_file_length(0), max_data_file_length(0), index_file_length(0), - delete_length(0), auto_increment_value(0), raid_type(0), - key_used_on_scan(MAX_KEY), - create_time(0), check_time(0), update_time(0), mean_rec_length(0), - ft_handler(0) + handler(TABLE *table_arg) :table(table_arg), + ref(0), data_file_length(0), max_data_file_length(0), index_file_length(0), + delete_length(0), auto_increment_value(0), + records(0), deleted(0), mean_rec_length(0), + create_time(0), check_time(0), update_time(0), + key_used_on_scan(MAX_KEY), active_index(MAX_REF_PARTS), + ref_length(sizeof(my_off_t)), block_size(0), + raid_type(0), ft_handler(0) {} virtual ~handler(void) {} int ha_open(const char *name, int mode, int test_if_locked); @@ -227,7 +228,7 @@ public: uint get_dup_key(int error); void change_table_ptr(TABLE *table_arg) { table=table_arg; } virtual double scan_time() - { return ulonglong2double(data_file_length) / IO_SIZE + 1; } + { return ulonglong2double(data_file_length) / IO_SIZE + 2; } virtual double read_time(uint index, uint ranges, ha_rows rows) { return rows2double(ranges+rows); } virtual bool fast_key_read() { return 0;} diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 770fe3c0232..78a63d84c61 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1175,8 +1175,8 @@ Item_cond::fix_fields(THD *thd,TABLE_LIST *tables) List_iterator li(list); Item *item; char buff[sizeof(char*)]; // Max local vars in function - used_tables_cache=0; - const_item_cache=0; + not_null_tables_cache= used_tables_cache= 0; + const_item_cache= 0; /* and_table_cache is the value that Item_cond_or() returns for not_null_tables() diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5613f1eeb07..f27ba435729 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3154,7 +3154,7 @@ enum options { OPT_MAX_BINLOG_CACHE_SIZE, OPT_MAX_BINLOG_SIZE, OPT_MAX_CONNECTIONS, OPT_MAX_CONNECT_ERRORS, OPT_MAX_DELAYED_THREADS, OPT_MAX_HEP_TABLE_SIZE, - OPT_MAX_JOIN_SIZE, OPT_MAX_SORT_LENGTH, + OPT_MAX_JOIN_SIZE, OPT_MAX_SORT_LENGTH, OPT_MAX_SEEKS_FOR_KEY, OPT_MAX_TMP_TABLES, OPT_MAX_USER_CONNECTIONS, OPT_MAX_WRITE_LOCK_COUNT, OPT_BULK_INSERT_BUFFER_SIZE, OPT_MYISAM_BLOCK_SIZE, OPT_MYISAM_MAX_EXTRA_SORT_FILE_SIZE, @@ -3832,6 +3832,11 @@ replicating a LOAD DATA INFILE command", (gptr*) &global_system_variables.max_join_size, (gptr*) &max_system_variables.max_join_size, 0, GET_HA_ROWS, REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0}, + { "max_seeks_for_key", OPT_MAX_SEEKS_FOR_KEY, + "Limit assumed max number of seeks when looking up rows based on a key", + (gptr*) &global_system_variables.max_seeks_for_key, + (gptr*) &max_system_variables.max_seeks_for_key, 0, GET_ULONG, + REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0 }, {"max_sort_length", OPT_MAX_SORT_LENGTH, "The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored).", (gptr*) &global_system_variables.max_sort_length, diff --git a/sql/set_var.cc b/sql/set_var.cc index 32603ec51d9..3edcdbc1f7f 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -154,6 +154,8 @@ sys_var_thd_ulong sys_max_heap_table_size("max_heap_table_size", sys_var_thd_ha_rows sys_max_join_size("max_join_size", &SV::max_join_size, fix_max_join_size); +sys_var_thd_ulong sys_max_seeks_for_key("max_seeks_for_key", + &SV::max_seeks_for_key); #ifndef TO_BE_DELETED /* Alias for max_join_size */ sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size", &SV::max_join_size, @@ -348,6 +350,7 @@ sys_var *sys_variables[]= &sys_max_delayed_threads, &sys_max_heap_table_size, &sys_max_join_size, + &sys_max_seeks_for_key, &sys_max_sort_length, &sys_max_tmp_tables, &sys_max_user_connections, @@ -492,6 +495,7 @@ struct show_var_st init_vars[]= { {sys_max_delayed_threads.name,(char*) &sys_max_delayed_threads, SHOW_SYS}, {sys_max_heap_table_size.name,(char*) &sys_max_heap_table_size, SHOW_SYS}, {sys_max_join_size.name, (char*) &sys_max_join_size, SHOW_SYS}, + {sys_max_seeks_for_key.name, (char*) &sys_max_seeks_for_key, SHOW_SYS}, {sys_max_sort_length.name, (char*) &sys_max_sort_length, SHOW_SYS}, {sys_max_user_connections.name,(char*) &sys_max_user_connections, SHOW_SYS}, {sys_max_tmp_tables.name, (char*) &sys_max_tmp_tables, SHOW_SYS}, diff --git a/sql/sql_class.h b/sql/sql_class.h index 3246f77c77a..d1b2ef82ccb 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -310,6 +310,7 @@ struct system_variables ulong tx_isolation; ulong table_type; ulong default_week_format; + ulong max_seeks_for_key; my_bool log_warnings; my_bool low_priority_updates; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 67bec77e245..f4c7a2ab031 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1271,14 +1271,14 @@ make_join_statistics(JOIN *join,TABLE_LIST *tables,COND *conds, /* Set a max range of how many seeks we can expect when using keys - This was (s->read_time*5), but this was too low with small rows + This is can't be to high as otherwise we are likely to use + table scan. */ - s->worst_seeks= (double) s->found_records / 5; + s->worst_seeks= min((double) s->found_records / 10, + (double) s->read_time*3); if (s->worst_seeks < 2.0) // Fix for small tables s->worst_seeks=2.0; - /* if (s->type == JT_EQ_REF) - continue; */ if (s->const_keys) { ha_rows records; @@ -1884,6 +1884,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, best=best_time=records=DBL_MAX; KEYUSE *best_key=0; uint best_max_key_part=0; + my_bool found_constrain= 0; if (s->keyuse) { /* Use key if possible */ @@ -1964,6 +1965,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, } else { + found_constrain= 1; /* Check if we found full key */ @@ -2000,16 +2002,18 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, records=2.0; // Can't be as good as a unique } } + /* Limit the number of matched rows */ + tmp= records; + set_if_smaller(tmp, (double) thd->variables.max_seeks_for_key); if (table->used_keys & ((key_map) 1 << key)) { /* we can use only index tree */ uint keys_per_block= table->file->block_size/2/ (keyinfo->key_length+table->file->ref_length)+1; - tmp=(record_count*(records+keys_per_block-1)/ - keys_per_block); + tmp=record_count*(tmp+keys_per_block-1)/keys_per_block; } else - tmp=record_count*min(records,s->worst_seeks); + tmp=record_count*min(tmp,s->worst_seeks); } } else @@ -2039,7 +2043,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, { /* Assume that the first key part matches 1% of the file - and that the hole key matches 10 (dupplicates) or 1 + and that the hole key matches 10 (duplicates) or 1 (unique) records. Assume also that more key matches proportionally more records @@ -2071,6 +2075,8 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, records=(ulong) tmp; } } + /* Limit the number of matched rows */ + set_if_smaller(tmp, (double) thd->variables.max_seeks_for_key); if (table->used_keys & ((key_map) 1 << key)) { /* we can use only index tree */ @@ -2113,20 +2119,31 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, s->table->used_keys && best_key) && !(s->table->force_index && best_key)) { // Check full join + ha_rows rnd_records= s->found_records; if (s->on_expr) { - tmp=rows2double(s->found_records); // Can't use read cache + tmp=rows2double(rnd_records); // Can't use read cache } else { tmp=(double) s->read_time; - /* Calculate time to read through cache */ + /* Calculate time to read previous rows through cache */ tmp*=(1.0+floor((double) cache_record_length(join,idx)* record_count / (double) thd->variables.join_buff_size)); } + + /* + If there is a restriction on the table, assume that 25% of the + rows can be skipped on next part. + This is to force tables that this table depends on before this + table + */ + if (found_constrain) + rnd_records-= rnd_records/4; + if (best == DBL_MAX || - (tmp + record_count/(double) TIME_FOR_COMPARE*s->found_records < + (tmp + record_count/(double) TIME_FOR_COMPARE*rnd_records < best + record_count/(double) TIME_FOR_COMPARE*records)) { /* @@ -2134,7 +2151,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, will ensure that this will be used */ best=tmp; - records= rows2double(s->found_records); + records= rows2double(rnd_records); best_key=0; } } From 863c563481c2275000dd327fedefde489db007a7 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Fri, 27 Jun 2003 06:40:24 +0300 Subject: [PATCH 16/26] Fixed testcase after last changes --- mysql-test/r/select_safe.result | 13 ++++++++----- mysql-test/t/select_safe.test | 7 ++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/select_safe.result b/mysql-test/r/select_safe.result index 830390ebe3c..ca5c03bdb50 100644 --- a/mysql-test/r/select_safe.result +++ b/mysql-test/r/select_safe.result @@ -1,6 +1,6 @@ drop table if exists t1; SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9; -create table t1 (a int auto_increment primary key, b char(20), key(b)); +create table t1 (a int auto_increment primary key, b char(20)); insert into t1 values(1,"test"); SELECT SQL_BUFFER_RESULT * from t1; a b @@ -22,9 +22,11 @@ select 1 from t1,t1 as t2,t1 as t3; update t1 set b="a"; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column update t1 set b="a" where b="test"; +You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1 where b="test"; +You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column delete from t1 where a+0=1; You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column select 1 from t1,t1 as t2,t1 as t3,t1 as t4,t1 as t5; @@ -33,18 +35,19 @@ update t1 set b="a" limit 1; update t1 set b="a" where b="b" limit 2; delete from t1 where b="test" limit 1; delete from t1 where a+0=1 limit 2; +alter table t1 add key b (b); SET MAX_JOIN_SIZE=2; SELECT @@MAX_JOIN_SIZE, @@SQL_BIG_SELECTS; @@max_join_size @@sql_big_selects 2 0 insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"); -SELECT * from t1; +SELECT * from t1 order by a; The SELECT would examine more rows than MAX_JOIN_SIZE. Check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is ok SET SQL_BIG_SELECTS=1; -SELECT * from t1; +SELECT * from t1 order by a; a b -3 a 2 test2 +3 a 4 a 5 a SET MAX_JOIN_SIZE=2; @@ -53,8 +56,8 @@ The SELECT would examine more rows than MAX_JOIN_SIZE. Check your WHERE and use SET MAX_JOIN_SIZE=DEFAULT; SELECT * from t1; a b -3 a 2 test2 +3 a 4 a 5 a SELECT @@MAX_SEEKS_FOR_KEY; diff --git a/mysql-test/t/select_safe.test b/mysql-test/t/select_safe.test index 049a35aa355..206f911d028 100644 --- a/mysql-test/t/select_safe.test +++ b/mysql-test/t/select_safe.test @@ -4,7 +4,7 @@ drop table if exists t1; SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=4, SQL_MAX_JOIN_SIZE=9; -create table t1 (a int auto_increment primary key, b char(20), key(b)); +create table t1 (a int auto_increment primary key, b char(20)); insert into t1 values(1,"test"); SELECT SQL_BUFFER_RESULT * from t1; update t1 set b="a" where a=1; @@ -36,13 +36,14 @@ delete from t1 where a+0=1 limit 2; # Test SQL_BIG_SELECTS +alter table t1 add key b (b); SET MAX_JOIN_SIZE=2; SELECT @@MAX_JOIN_SIZE, @@SQL_BIG_SELECTS; insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"); --error 1104 -SELECT * from t1; +SELECT * from t1 order by a; SET SQL_BIG_SELECTS=1; -SELECT * from t1; +SELECT * from t1 order by a; SET MAX_JOIN_SIZE=2; --error 1104 SELECT * from t1; From 81a84424ee250b77ed8981e301bca64ec1c35f7e Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Sun, 29 Jun 2003 12:58:43 +0300 Subject: [PATCH 17/26] SET CHARACTER SET DEFAULT didn't work (Bug #462) --- BUILD/compile-pentium-debug-max | 2 +- mysql-test/r/convert.result | 17 +++++++++++++++++ mysql-test/t/convert.test | 11 +++++++++++ sql/set_var.cc | 5 +++++ sql/set_var.h | 1 + 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/convert.result create mode 100644 mysql-test/t/convert.test diff --git a/BUILD/compile-pentium-debug-max b/BUILD/compile-pentium-debug-max index f71b849384f..1684686ce8c 100755 --- a/BUILD/compile-pentium-debug-max +++ b/BUILD/compile-pentium-debug-max @@ -3,7 +3,7 @@ path=`dirname $0` . "$path/SETUP.sh" -extra_flags="$pentium_cflags $debug_cflags -DBIG_TABLES" +extra_flags="$pentium_cflags $debug_cflags" c_warnings="$c_warnings $debug_extra_warnings" cxx_warnings="$cxx_warnings $debug_extra_warnings" extra_configs="$pentium_configs $debug_configs" diff --git a/mysql-test/r/convert.result b/mysql-test/r/convert.result new file mode 100644 index 00000000000..f8dad8c69ba --- /dev/null +++ b/mysql-test/r/convert.result @@ -0,0 +1,17 @@ +select @@convert_character_set; +@@convert_character_set + +select @@global.convert_character_set; +@@global.convert_character_set + +show variables like "%convert_character_set%"; +Variable_name Value +convert_character_set +SET CHARACTER SET cp1251_koi8; +select @@convert_character_set; +@@convert_character_set +cp1251_koi8 +SET CHARACTER SET DEFAULT; +select @@convert_character_set; +@@convert_character_set + diff --git a/mysql-test/t/convert.test b/mysql-test/t/convert.test new file mode 100644 index 00000000000..f26ef3a8c72 --- /dev/null +++ b/mysql-test/t/convert.test @@ -0,0 +1,11 @@ +# Test of character set conversions + +# Test that SET DEFAULT works + +select @@convert_character_set; +select @@global.convert_character_set; +show variables like "%convert_character_set%"; +SET CHARACTER SET cp1251_koi8; +select @@convert_character_set; +SET CHARACTER SET DEFAULT; +select @@convert_character_set; diff --git a/sql/set_var.cc b/sql/set_var.cc index 3edcdbc1f7f..b66c410c6d5 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -1083,6 +1083,11 @@ byte *sys_var_thd_conv_charset::value_ptr(THD *thd, enum_var_type type) } +void sys_var_thd_conv_charset::set_default(THD *thd, enum_var_type type) +{ + thd->variables.convert_set= global_system_variables.convert_set; +} + bool sys_var_timestamp::update(THD *thd, set_var *var) { diff --git a/sql/set_var.h b/sql/set_var.h index f33f53c5acc..e22c55276a7 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -412,6 +412,7 @@ public: return type != STRING_RESULT; /* Only accept strings */ } bool check_default(enum_var_type type) { return 0; } + void set_default(THD *thd, enum_var_type type); }; From 730776c4526fcba5264d6513c9cc019d5a265781 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Sun, 29 Jun 2003 21:15:51 +0300 Subject: [PATCH 18/26] Fixed 'Unknown error' when doing ORDER BY on reference table which was used with NULL value on NOT NULL column. (Bug #479) --- mysql-test/r/order_by.result | 4 ++++ mysql-test/t/order_by.test | 23 +++++++++++++++++++++++ sql/sql_select.cc | 14 +++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 1a292b1203c..d45ae6b6dec 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -142,3 +142,7 @@ t3 eq_ref PRIMARY PRIMARY 2 t1.gid 1 where used table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 6 Using temporary; Using filesort t3 eq_ref PRIMARY PRIMARY 2 t1.skr 1 where used +t2_id str +112633 t2 112633 +112634 t2 112634 +t2_id str diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 16094206745..d6be4c1c45c 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -247,3 +247,26 @@ EXPLAIN SELECT t1.gid, t2.sid, t3.uid from t2, t1, t3 where t2.gid = t1.gid and EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t3.skr,t1.gid; EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.skr = t3.uid order by t1.gid,t3.skr; drop table t1,t2,t3; + +# +# Problem with lookup on NULL (Bug 479) +# + +CREATE TABLE t1 ( + t1_id int(10) unsigned NOT NULL default '0', + ref_id int(10) unsigned default NULL, + PRIMARY KEY (t1_id) +) TYPE=MyISAM; +INSERT INTO t1 VALUES (2401,14590),(2425,NULL); +CREATE TABLE t2 ( + t2_id int(10) unsigned NOT NULL default '0', + ref_id int(10) unsigned NOT NULL default '0', + str varchar(20) default NULL, + PRIMARY KEY (t2_id), + KEY ref_id (ref_id) +) TYPE=MyISAM; +INSERT INTO t2 VALUES (112633,14590,'t2 112633'),(112634,14590,'t2 112634'),(113166,14641,'t2 113166'),(113167,14641,'t2 113167'),(113168,14641,'t2 113168'),(113169,14641,'t2 113169'),(113170,14641,'t2 113170'),(113171,14641,'t2 113171'),(113172,14641,'t2 113172'),(113173,14641,'t2 113173'),(113174,14641,'t2 113174'),(113175,14641,'t2 113175'),(113436,14674,'t2 113436'),(113437,14674,'t2 113437'),(113486,14689,'t2 113486'),(113487,14689,'t2 113487'),(113488,14689,'t2 113488'),(113489,14689,'t2 113489'),(113504,14795,'t2 113504'),(115396,15024,'t2 115396'),(115397,15024,'t2 115397'); +SELECT t2_id, str FROM t1, t2 WHERE t1_id = 2401 AND t1.ref_id = t2.ref_id ORDER BY str, t2_id; +# This one gave an error +SELECT t2_id, str FROM t1, t2 WHERE t1_id = 2425 AND t1.ref_id = t2.ref_id ORDER BY str, t2_id; +DROP TABLE t1,t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index cafafee243e..b9e9c0a14fa 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5326,11 +5326,23 @@ create_sort_index(JOIN_TAB *tab,ORDER *order,ha_rows select_limit) can use. */ if (!(select->quick=get_ft_or_quick_select_for_ref(table, tab))) - goto err; + { + if (current_thd->fatal_error) + goto err; // End of memory + /* + Impossible range (for example lookup on NULL on not null field) + Create empty result set + */ + if (!(table->record_pointers= my_malloc(1, MYF(MY_WME)))) + goto err; + table->found_records= 0; + goto end; + } } } table->found_records=filesort(&table,sortorder,length, select, 0L, select_limit, &examined_rows); +end: delete select; // filesort did select tab->select=0; tab->select_cond=0; From f2e0db481162cd1f6fe73a33bb6abcf311590cd7 Mon Sep 17 00:00:00 2001 From: "lenz@mysql.com" <> Date: Mon, 30 Jun 2003 15:00:28 +0200 Subject: [PATCH 19/26] - make sure to compile with the correct --localstatedir and --libexedir paths for the binary distributions (this will hopefully resolve the "file /usr/local/mysql/libexec/mysqld doesn't exist" error that many people are facing) --- Build-tools/Do-compile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Build-tools/Do-compile b/Build-tools/Do-compile index b83eadcac63..45037c2f3f0 100755 --- a/Build-tools/Do-compile +++ b/Build-tools/Do-compile @@ -248,7 +248,8 @@ if ($opt_stage <= 1) $opt_config_options.= $opt_with_other_libc; } - check_system("$opt_config_env ./configure --prefix=/usr/local/mysql --with-comment=\"Official MySQL$opt_version_suffix binary\" --with-extra-charsets=complex --with-server-suffix=\"$opt_version_suffix\" --enable-thread-safe-client --enable-local-infile $opt_config_options","Thank you for choosing MySQL"); + $prefix="/usr/local/mysql"; + check_system("$opt_config_env ./configure --prefix=$prefix --localstatedir=$prefix/data --libexecdir=$prefix/bin --with-comment=\"Official MySQL$opt_version_suffix binary\" --with-extra-charsets=complex --with-server-suffix=\"$opt_version_suffix\" --enable-thread-safe-client --enable-local-infile $opt_config_options","Thank you for choosing MySQL"); if (-d "$pwd/$host/include-mysql") { safe_system("cp -r $pwd/$host/include-mysql/* $pwd/$host/$ver/include"); From d71b51323b8734955a1cca7c7f328dfecad836dd Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Mon, 30 Jun 2003 17:00:11 +0200 Subject: [PATCH 20/26] REPAIR/OPTIMIZE/CHECK/RESTORE/etc commands close relevant open HANDLERs --- sql/sql_table.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index f3620b860a7..5a53ba30631 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1198,6 +1198,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables, if (send_fields(thd, field_list, 1)) DBUG_RETURN(-1); + mysql_ha_closeall(thd, tables); for (table = tables; table; table = table->next) { char table_name[NAME_LEN*2+2]; From 9c89341fd6538b709af134f20156f6aa8d3e81d0 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Mon, 30 Jun 2003 22:24:03 +0200 Subject: [PATCH 21/26] new syntax: CREATE TABLE ...(SELECT ...) UNION ... INSERT ... (SELECT ...) UNION ... --- sql/sql_yacc.yy | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 0ff09a52a9e..cf580b3f3df 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -803,18 +803,35 @@ create: }; create2: - '(' field_list ')' opt_create_table_options create3 {} + '(' create2a {} | opt_create_table_options create3 {}; +create2a: + field_list ')' opt_create_table_options create3 {} + | create_select ')' { Select->braces= 1;} union_opt {} + ; + create3: /* empty */ {} - | opt_duplicate opt_as SELECT_SYM + | opt_duplicate opt_as create_select + { Select->braces= 0;} opt_union {} + | opt_duplicate opt_as '(' create_select ')' + { Select->braces= 1;} union_opt {} + ; + +create_select: + SELECT_SYM { LEX *lex=Lex; lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ; + switch(lex->sql_command) { + case SQLCOM_INSERT: lex->sql_command=SQLCOM_INSERT_SELECT; break; + case SQLCOM_REPLACE: lex->sql_command=SQLCOM_REPLACE_SELECT; break; + } mysql_init_select(lex); } - select_options select_item_list opt_select_from opt_union {}; + select_options select_item_list opt_select_from + ; opt_as: /* empty */ {} @@ -1490,7 +1507,7 @@ select: select_init: SELECT_SYM select_part2 { Select->braces= 0; } opt_union | - '(' SELECT_SYM select_part2 ')' { Select->braces= 1;} union_opt; + '(' SELECT_SYM select_part2 ')' { Select->braces= 1;} union_opt; select_part2: @@ -2565,7 +2582,7 @@ opt_temporary: insert: INSERT { Lex->sql_command = SQLCOM_INSERT; } insert_lock_option - opt_ignore insert2 + opt_ignore insert2 { set_lock_for_tables($3); } @@ -2576,7 +2593,7 @@ insert: replace: REPLACE { - LEX *lex=Lex; + LEX *lex=Lex; lex->sql_command = SQLCOM_REPLACE; lex->duplicates= DUP_REPLACE; } @@ -2593,7 +2610,7 @@ insert_lock_option: | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } | DELAYED_SYM { $$= TL_WRITE_DELAYED; } | HIGH_PRIORITY { $$= TL_WRITE; } - ; + ; replace_lock_option: opt_low_priority { $$= $1; } @@ -2613,7 +2630,9 @@ insert_table: }; insert_field_spec: - opt_field_spec insert_values {} + insert_values {} + | '(' ')' insert_values {} + | '(' fields ')' insert_values {} | SET { LEX *lex=Lex; @@ -2634,16 +2653,9 @@ fields: insert_values: VALUES values_list {} - | SELECT_SYM - { - LEX *lex=Lex; - lex->sql_command = (lex->sql_command == SQLCOM_INSERT ? - SQLCOM_INSERT_SELECT : SQLCOM_REPLACE_SELECT); - lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ; - mysql_init_select(lex); - } - select_options select_item_list select_from select_lock_type - opt_union {}; + | create_select { Select->braces= 0;} opt_union {} + | '(' create_select ')' { Select->braces= 1;} union_opt {} + ; values_list: values_list ',' no_braces From 048d545a5888821af61ba0493d21c091b1302269 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Tue, 1 Jul 2003 13:29:55 +0300 Subject: [PATCH 22/26] Code/testcase cleanups --- mysql-test/r/insert_select.result | 19 ++++++++----------- mysql-test/r/join_outer.result | 8 ++++++++ mysql-test/t/insert_select.test | 23 ++++++++++------------- mysql-test/t/join_outer.test | 12 ++++++++++++ sql/slave.cc | 3 +-- 5 files changed, 39 insertions(+), 26 deletions(-) diff --git a/mysql-test/r/insert_select.result b/mysql-test/r/insert_select.result index b49ca3a6c2f..c403ff8532d 100644 --- a/mysql-test/r/insert_select.result +++ b/mysql-test/r/insert_select.result @@ -21,8 +21,7 @@ payoutID 20 22 drop table t1,t2; -DROP TABLE IF EXISTS crash1,crash2; -CREATE TABLE `crash1` ( +CREATE TABLE `t1` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, @@ -37,7 +36,7 @@ KEY `date` (`date`), KEY `pseudo` (`pseudo`), KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; -CREATE TABLE `crash2` ( +CREATE TABLE `t2` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, @@ -52,22 +51,20 @@ KEY `date` (`date`), KEY `pseudo` (`pseudo`), KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; -INSERT INTO crash2 +INSERT INTO t2 (numeropost,icone,numreponse,contenu,pseudo,date,ip,signature) VALUES (9,1,56,'test','joce','2001-07-25 13:50:53' ,3649052399,0); -INSERT INTO crash1 (numeropost,icone,contenu,pseudo,date,signature,ip) -SELECT 1618,icone,contenu,pseudo,date,signature,ip FROM crash2 +INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) +SELECT 1618,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; show variables like '%bulk%'; Variable_name Value bulk_insert_buffer_size 8388608 -INSERT INTO crash1 (numeropost,icone,contenu,pseudo,date,signature,ip) -SELECT 1718,icone,contenu,pseudo,date,signature,ip FROM crash2 +INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) +SELECT 1718,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; -DROP TABLE IF EXISTS crash1,crash2; -drop table if exists t1; -drop table if exists t2; +DROP TABLE t1,t2; create table t1(a int, unique(a)); insert into t1 values(2); create table t2(a int); diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index 81266f6562e..8f3f82201c3 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -659,3 +659,11 @@ i i i 1 NULL NULL 2 2 2 drop table t1,t2,t3; +create table t1 (f1 integer,f2 integer,f3 integer); +create table t2 (f2 integer,f4 integer); +create table t3 (f3 integer,f5 integer); +select * from t1 +left outer join t2 using (f2) +left outer join t3 using (f3); +Unknown column 'test.t2.f3' in 'on clause' +drop table t1,t2,t3; diff --git a/mysql-test/t/insert_select.test b/mysql-test/t/insert_select.test index 695f891f678..3b51168269d 100644 --- a/mysql-test/t/insert_select.test +++ b/mysql-test/t/insert_select.test @@ -12,13 +12,13 @@ insert into t2 (payoutID) SELECT payoutID+10 FROM t1; insert ignore into t2 (payoutID) SELECT payoutID+10 FROM t1; select * from t2; drop table t1,t2; + # # bug in bulk insert optimization # test case by Fournier Jocelyn # -DROP TABLE IF EXISTS crash1,crash2; -CREATE TABLE `crash1` ( +CREATE TABLE `t1` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, @@ -34,7 +34,7 @@ CREATE TABLE `crash1` ( KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; -CREATE TABLE `crash2` ( +CREATE TABLE `t2` ( `numeropost` bigint(20) unsigned NOT NULL default '0', `icone` tinyint(4) unsigned NOT NULL default '0', `numreponse` bigint(20) unsigned NOT NULL auto_increment, @@ -50,30 +50,27 @@ CREATE TABLE `crash2` ( KEY `numreponse` (`numreponse`) ) TYPE=MyISAM; -INSERT INTO crash2 +INSERT INTO t2 (numeropost,icone,numreponse,contenu,pseudo,date,ip,signature) VALUES (9,1,56,'test','joce','2001-07-25 13:50:53' ,3649052399,0); -INSERT INTO crash1 (numeropost,icone,contenu,pseudo,date,signature,ip) -SELECT 1618,icone,contenu,pseudo,date,signature,ip FROM crash2 +INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) +SELECT 1618,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; show variables like '%bulk%'; -INSERT INTO crash1 (numeropost,icone,contenu,pseudo,date,signature,ip) -SELECT 1718,icone,contenu,pseudo,date,signature,ip FROM crash2 +INSERT INTO t1 (numeropost,icone,contenu,pseudo,date,signature,ip) +SELECT 1718,icone,contenu,pseudo,date,signature,ip FROM t2 WHERE numeropost=9 ORDER BY numreponse ASC; -DROP TABLE IF EXISTS crash1,crash2; +DROP TABLE t1,t2; - -# Addendum by Guilhem: # Check if a partly-completed INSERT SELECT in a MyISAM table goes # into the binlog -drop table if exists t1; -drop table if exists t2; + create table t1(a int, unique(a)); insert into t1 values(2); create table t2(a int); diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index e172d54194e..ee7d55d2a4e 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -425,3 +425,15 @@ insert into t2 values(2),(3); insert into t3 values(2),(4); select * from t1 natural left join t2 natural left join t3; drop table t1,t2,t3; + +# +# Test of USING +# +create table t1 (f1 integer,f2 integer,f3 integer); +create table t2 (f2 integer,f4 integer); +create table t3 (f3 integer,f5 integer); +--error 1054 +select * from t1 + left outer join t2 using (f2) + left outer join t3 using (f3); +drop table t1,t2,t3; diff --git a/sql/slave.cc b/sql/slave.cc index fe668900da0..851c6ba4f02 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2146,8 +2146,7 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) DBUG_ASSERT(rli->sql_thd==thd); if (sql_slave_killed(thd,rli)) { - /* do not forget to free ev ! */ - if (ev) delete ev; + delete ev; return 1; } if (ev) From 9fb7e863ad7d5f701a7b27f75a8b279e19232ef2 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Tue, 1 Jul 2003 14:38:38 +0300 Subject: [PATCH 23/26] Optimized old patches Don't set field to DEFAULT value when set to NULL --- mysql-test/r/insert.result | 2 +- sql/field_conv.cc | 6 +++--- sql/item_strfunc.cc | 17 +++++------------ sql/opt_range.cc | 6 +++++- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result index d019cfcbfa9..ebcb7721822 100644 --- a/mysql-test/r/insert.result +++ b/mysql-test/r/insert.result @@ -65,7 +65,7 @@ insert into t1 values (1), (NULL), (2); select * from t1; id 1 -8 +0 2 drop table t1; drop database if exists foo; diff --git a/sql/field_conv.cc b/sql/field_conv.cc index ce67455881b..db0cc71c6bf 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +/* Copyright (C) 2000-2003 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 @@ -118,7 +118,7 @@ set_field_to_null(Field *field) field->reset(); return 0; } - field->set_default(); + field->reset(); if (current_thd->count_cuted_fields) { current_thd->cuted_fields++; // Increment error counter @@ -170,7 +170,7 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions) ((Field_timestamp*) field)->set_time(); return 0; // Ok to set time to NULL } - field->set_default(); + field->reset(); if (field == field->table->next_number_field) return 0; // field is set in handler.cc if (current_thd->count_cuted_fields) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 995d413626c..d18436d2c61 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1546,13 +1546,11 @@ double Item_func_elt::val() return 0.0; double result= args[tmp-1]->val(); - if (args[tmp-1]->is_null()) - return 0.0; - - null_value=0; + null_value= args[tmp-1]->null_value; return result; } + longlong Item_func_elt::val_int() { uint tmp; @@ -1561,13 +1559,11 @@ longlong Item_func_elt::val_int() return 0; int result= args[tmp-1]->val_int(); - if (args[tmp-1]->is_null()) - return 0; - - null_value=0; + null_value= args[tmp-1]->null_value; return result; } + String *Item_func_elt::val_str(String *str) { uint tmp; @@ -1576,10 +1572,7 @@ String *Item_func_elt::val_str(String *str) return NULL; String *result= args[tmp-1]->val_str(str); - if (args[tmp-1]->is_null()) - return NULL; - - null_value=0; + null_value= args[tmp-1]->null_value; return result; } diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 5704ce6e432..2d949810b63 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2409,7 +2409,11 @@ QUICK_SELECT *get_quick_select_for_ref(TABLE *table, TABLE_REF *ref) if (!quick) return 0; if (cp_buffer_from_ref(ref)) - return quick; /* empty range */ + { + if (current_thd->fatal_error) + return 0; // End of memory + return quick; // empty range + } QUICK_RANGE *range= new QUICK_RANGE(); if (!range) From 7b34e1c39d7824057010b3fe48cbec550478bd4c Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Tue, 1 Jul 2003 15:38:11 +0300 Subject: [PATCH 24/26] Updated results after merge --- mysql-test/r/user_var.result | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index 0d4f7b401e6..67e55acb29b 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -30,11 +30,15 @@ explain select * from t1 where i=@vv1; table type possible_keys key key_len ref rows Extra t1 ref i i 4 const 1 Using where drop table t1,t2; +select @a:=10, @b:=1, @a > @b, @a < @b; @a:=10 @b:=1 @a > @b @a < @b 10 1 1 0 +select @a:="10", @b:="1", @a > @b, @a < @b; @a:="10" @b:="1" @a > @b @a < @b 10 1 1 0 +select @a:=10, @b:=2, @a > @b, @a < @b; @a:=10 @b:=2 @a > @b @a < @b 10 2 1 0 +select @a:="10", @b:="2", @a > @b, @a < @b; @a:="10" @b:="2" @a > @b @a < @b 10 2 0 1 From 20081b62932e769deaefbb4f42e871b1b04e4ff4 Mon Sep 17 00:00:00 2001 From: "vva@eagle.mysql.r18.ru" <> Date: Tue, 1 Jul 2003 13:17:03 -0400 Subject: [PATCH 25/26] removed --table option (fixed Bug #671) --- client/mysqlbinlog.cc | 54 ++++--------------------------------------- 1 file changed, 4 insertions(+), 50 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 75b875b4f4e..d6da9d81664 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -55,13 +55,11 @@ static ulonglong position = 0; static bool use_remote = 0; static short binlog_flags = 0; static MYSQL* mysql = NULL; -static const char* table = 0; static void dump_local_log_entries(const char* logname); static void dump_remote_log_entries(const char* logname); static void dump_log_entries(const char* logname); static void dump_remote_file(NET* net, const char* fname); -static void dump_remote_table(NET* net, const char* db, const char* table); static void die(const char* fmt, ...); static MYSQL* safe_connect(); @@ -96,8 +94,6 @@ static struct my_option my_long_options[] = {"short-form", 's', "Just show the queries, no extra info", (gptr*) &short_form, (gptr*) &short_form, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, - {"table", 't', "Get raw table dump using COM_TABLE_DUMB", (gptr*) &table, - (gptr*) &table, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"user", 'u', "Connect to the remote server as username", (gptr*) &user, (gptr*) &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -252,35 +248,6 @@ static void dump_log_entries(const char* logname) dump_local_log_entries(logname); } -static void dump_remote_table(NET* net, const char* db, const char* table) -{ - char buf[1024]; - char * p = buf; - uint table_len = (uint) strlen(table); - uint db_len = (uint) strlen(db); - if (table_len + db_len > sizeof(buf) - 2) - die("Buffer overrun"); - - *p++ = db_len; - memcpy(p, db, db_len); - p += db_len; - *p++ = table_len; - memcpy(p, table, table_len); - - if (simple_command(mysql, COM_TABLE_DUMP, buf, p - buf + table_len, 1)) - die("Error sending the table dump command"); - - for (;;) - { - uint packet_len = my_net_read(net); - if (packet_len == 0) break; // end of file - if (packet_len == packet_error) - die("Error reading packet in table dump"); - my_fwrite(result_file, (byte*)net->read_pos, packet_len, MYF(MY_WME)); - fflush(result_file); - } -} - static int check_master_version(MYSQL* mysql) { MYSQL_RES* res = 0; @@ -516,7 +483,7 @@ int main(int argc, char** argv) MY_INIT(argv[0]); parse_args(&argc, (char***)&argv); - if (!argc && !table) + if (!argc) { usage(); return -1; @@ -525,22 +492,9 @@ int main(int argc, char** argv) if (use_remote) mysql = safe_connect(); - if (table) - { - if (!use_remote) - die("You must specify connection parameter to get table dump"); - char* db = (char*) table; - char* tbl = (char*) strchr(table, '.'); - if (!tbl) - die("You must use database.table syntax to specify the table"); - *tbl++ = 0; - dump_remote_table(&mysql->net, db, tbl); - } - else - { - while (--argc >= 0) - dump_log_entries(*(argv++)); - } + while (--argc >= 0) + dump_log_entries(*(argv++)); + if (result_file != stdout) my_fclose(result_file, MYF(0)); if (use_remote) From c34eec515e2e554024daaacf1bfea406972439b1 Mon Sep 17 00:00:00 2001 From: "vva@eagle.mysql.r18.ru" <> Date: Tue, 1 Jul 2003 14:00:57 -0400 Subject: [PATCH 26/26] made error output more detailed --- client/mysqlbinlog.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 98e03a7e8f1..842dfa28f88 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -346,7 +346,7 @@ static void dump_remote_log_entries(const char* logname) } -static int check_header(IO_CACHE* file) +static int check_header(IO_CACHE* file, const char *fname) { byte header[BIN_LOG_HEADER_SIZE]; byte buf[PROBE_HEADER_LEN]; @@ -357,7 +357,7 @@ static int check_header(IO_CACHE* file) if (my_b_read(file, header, sizeof(header))) die("Failed reading header; Probably an empty file"); if (memcmp(header, BINLOG_MAGIC, sizeof(header))) - die("File is not a binary log file"); + die("File %s is not a binary log file",fname); if (!my_b_read(file, buf, sizeof(buf))) { if (buf[4] == START_EVENT) @@ -390,14 +390,14 @@ static void dump_local_log_entries(const char* logname) if (init_io_cache(file, fd, 0, READ_CACHE, (my_off_t) position, 0, MYF(MY_WME | MY_NABP))) exit(1); - old_format = check_header(file); + old_format = check_header(file,logname); } else { if (init_io_cache(file, fileno(result_file), 0, READ_CACHE, (my_off_t) 0, 0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE))) exit(1); - old_format = check_header(file); + old_format = check_header(file,""); if (position) { /* skip 'position' characters from stdout */