diff options
author | unknown <monty@hundin.mysql.fi> | 2002-11-05 22:45:42 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-11-05 22:45:42 +0200 |
commit | 841fa6f694a5d998b94a6cd4508fe7d26e8407f3 (patch) | |
tree | 35c29682f33da14c65ad84bda65e02a747878d55 | |
parent | 54ebb4175bc98d1ba2ca0e72abd83150d722ce8a (diff) | |
download | mariadb-git-841fa6f694a5d998b94a6cd4508fe7d26e8407f3.tar.gz |
Removed wrong patch to fix DATE BETWEEN TIMESTAMP1 AND TIMESTAMP2
Some simple optimizations
Docs/manual.texi:
Updted how binary log works
mysql-test/mysql-test-run.sh:
Added usage of --port to mysqltest
mysql-test/r/func_test.result:
Moved test of datetime comparison to func_time
mysql-test/r/func_time.result:
New test
mysql-test/t/func_test.test:
Moved test of datetime comparison to func_time
mysql-test/t/func_time.test:
Test of DATE BETWEEN TIMESTAMPS
sql/field.h:
Removed wrong patch
sql/item_cmpfunc.cc:
Removed wrong patch
(Need to be fixed by taking into account all arguments to between)
sql/lock.cc:
Removed call to current_thd
sql/set_var.cc:
Don't show 'socket' variable if sockets are not used
sql/sql_base.cc:
Simple optimisation
-rw-r--r-- | Docs/manual.texi | 14 | ||||
-rw-r--r-- | mysql-test/mysql-test-run.sh | 2 | ||||
-rw-r--r-- | mysql-test/r/func_test.result | 14 | ||||
-rw-r--r-- | mysql-test/r/func_time.result | 17 | ||||
-rw-r--r-- | mysql-test/t/func_test.test | 10 | ||||
-rw-r--r-- | mysql-test/t/func_time.test | 19 | ||||
-rw-r--r-- | sql/field.h | 1 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 1 | ||||
-rw-r--r-- | sql/lock.cc | 7 | ||||
-rw-r--r-- | sql/set_var.cc | 2 | ||||
-rw-r--r-- | sql/sql_base.cc | 2 |
11 files changed, 50 insertions, 39 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 1e1c080d6b3..049f4099eef 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -23510,17 +23510,21 @@ will be logged in the execution order. Updates to non-transactional tables are stored in the binary log immediately after execution. For transactional tables such as @code{BDB} or @code{InnoDB} tables, all updates (@code{UPDATE}, @code{DELETE} -or @code{INSERT}) that change tables are cached until a @code{COMMIT}. +or @code{INSERT}) that change tables are cached until a @code{COMMIT} command +is sent to the server. At this point mysqld writes the whole transaction to +the binary log before the @code{COMMIT} is executed. Every thread will, on start, allocate a buffer of @code{binlog_cache_size} to buffer queries. If a query is bigger than this, the thread will open -a temporary file to handle the bigger cache. The temporary file will +a temporary file to store the transcation. The temporary file will be deleted when the thread ends. -The @code{max_binlog_cache_size} can be used to restrict the total size used -to cache a multi-query transaction. +The @code{max_binlog_cache_size} (default 4G) can be used to restrict +the total size used to cache a multi-query transaction. If a transaction is +bigger than this it will fail and roll back. If you are using the update or binary log, concurrent inserts will -not work together with @code{CREATE ... SELECT} and @code{INSERT ... SELECT}. +be converted to normal inserts when using @code{CREATE ... SELECT} and +@code{INSERT ... SELECT}. This is to ensure that you can recreate an exact copy of your tables by applying the log on a backup. diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index ac312af02cb..4317ba0e749 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -468,7 +468,7 @@ fi MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \ --user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \ - --tmpdir=$MYSQL_TMP_DIR" + --tmpdir=$MYSQL_TMP_DIR --port=$MASTER_MYPORT" MYSQL_TEST_BIN=$MYSQL_TEST MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS" GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result index ef93096478f..8cfae44b9dd 100644 --- a/mysql-test/r/func_test.result +++ b/mysql-test/r/func_test.result @@ -46,20 +46,6 @@ select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1; select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL; 1 XOR 1 1 XOR 0 0 XOR 1 0 XOR 0 NULL XOR 1 1 XOR NULL 0 XOR NULL 0 1 1 0 NULL NULL NULL -drop table if exists t1,t2; -CREATE TABLE t1 ( start datetime default NULL) TYPE=MyISAM; -INSERT INTO t1 VALUES ('2002-10-21 00:00:00'); -INSERT INTO t1 VALUES ('2002-10-28 00:00:00'); -INSERT INTO t1 VALUES ('2002-11-04 00:00:00'); -CREATE TABLE t2 ( ctime1 timestamp(14) NOT NULL, ctime2 timestamp(14) NOT NULL) TYPE=MyISAM; -INSERT INTO t2 VALUES (20021029165106,20021105164731); -select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2; -start ctime1 ctime2 -2002-11-04 00:00:00 20021029165106 20021105164731 -select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2; -start ctime1 ctime2 -2002-11-04 00:00:00 20021029165106 20021105164731 -drop table if exists t1,t2; select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1; 5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1 0 1 diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 5433194c719..671b56ef005 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -1,4 +1,4 @@ -drop table if exists t1,t2; +drop table if exists t1,t2,t3; select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29"); from_days(to_days("960101")) to_days(960201)-to_days("19960101") to_days(date_add(curdate(), interval 1 day))-to_days(curdate()) weekday("1997-11-29") 1996-01-01 31 1 5 @@ -372,3 +372,18 @@ select extract(MONTH FROM "0000-00-00"),extract(MONTH FROM d),extract(MONTH FROM extract(MONTH FROM "0000-00-00") extract(MONTH FROM d) extract(MONTH FROM dt) extract(MONTH FROM t) extract(MONTH FROM c) 0 0 0 0 0 drop table t1; +CREATE TABLE t1 ( start datetime default NULL); +INSERT INTO t1 VALUES ('2002-10-21 00:00:00'),('2002-10-28 00:00:00'),('2002-11-04 00:00:00'); +CREATE TABLE t2 ( ctime1 timestamp(14) NOT NULL, ctime2 timestamp(14) NOT NULL); +INSERT INTO t2 VALUES (20021029165106,20021105164731); +CREATE TABLE t3 (ctime1 char(19) NOT NULL, ctime2 char(19) NOT NULL); +INSERT INTO t3 VALUES ("2002-10-29 16:51:06","2002-11-05 16:47:31"); +select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2; +start ctime1 ctime2 +select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2; +start ctime1 ctime2 +2002-11-04 00:00:00 20021029165106 20021105164731 +select * from t1, t3 where t1.start between t3.ctime1 and t3.ctime2; +start ctime1 ctime2 +2002-11-04 00:00:00 2002-10-29 16:51:06 2002-11-05 16:47:31 +drop table t1,t2,t3; diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test index 1486e5bcca8..f5ad2e21c73 100644 --- a/mysql-test/t/func_test.test +++ b/mysql-test/t/func_test.test @@ -17,16 +17,6 @@ select 2 in (3,2,5,9,5,1),"monty" in ("david","monty","allan"), 1.2 in (1.4,1.2, select -1.49 or -1.49,0.6 or 0.6; select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1; select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL; -drop table if exists t1,t2; -CREATE TABLE t1 ( start datetime default NULL) TYPE=MyISAM; -INSERT INTO t1 VALUES ('2002-10-21 00:00:00'); -INSERT INTO t1 VALUES ('2002-10-28 00:00:00'); -INSERT INTO t1 VALUES ('2002-11-04 00:00:00'); -CREATE TABLE t2 ( ctime1 timestamp(14) NOT NULL, ctime2 timestamp(14) NOT NULL) TYPE=MyISAM; -INSERT INTO t2 VALUES (20021029165106,20021105164731); -select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2; -select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2; -drop table if exists t1,t2; # # Wrong usage of functions diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index a052f5f2d92..7d5ab73fa4c 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -1,7 +1,7 @@ # # time functions # -drop table if exists t1,t2; +drop table if exists t1,t2,t3; select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29"); select period_add("9602",-12),period_diff(199505,"9404") ; @@ -160,3 +160,20 @@ select yearweek("0000-00-00"),yearweek(d),yearweek(dt),yearweek(t),yearweek(c) f select to_days("0000-00-00"),to_days(d),to_days(dt),to_days(t),to_days(c) from t1; select extract(MONTH FROM "0000-00-00"),extract(MONTH FROM d),extract(MONTH FROM dt),extract(MONTH FROM t),extract(MONTH FROM c) from t1; drop table t1; + +# +# Test problem with TIMESTAMP and BETWEEN +# + +CREATE TABLE t1 ( start datetime default NULL); +INSERT INTO t1 VALUES ('2002-10-21 00:00:00'),('2002-10-28 00:00:00'),('2002-11-04 00:00:00'); +CREATE TABLE t2 ( ctime1 timestamp(14) NOT NULL, ctime2 timestamp(14) NOT NULL); +INSERT INTO t2 VALUES (20021029165106,20021105164731); +CREATE TABLE t3 (ctime1 char(19) NOT NULL, ctime2 char(19) NOT NULL); +INSERT INTO t3 VALUES ("2002-10-29 16:51:06","2002-11-05 16:47:31"); + +# The following statement should be fixed to return a row in 4.1 +select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2; +select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2; +select * from t1, t3 where t1.start between t3.ctime1 and t3.ctime2; +drop table t1,t2,t3; diff --git a/sql/field.h b/sql/field.h index de9e98290e7..4290f99ea3e 100644 --- a/sql/field.h +++ b/sql/field.h @@ -544,7 +544,6 @@ public: enum Item_result result_type () const { return field_length == 8 || field_length == 14 ? INT_RESULT : STRING_RESULT; } enum_field_types type() const { return FIELD_TYPE_TIMESTAMP;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; } - enum Item_result cmp_type () const { return INT_RESULT; } void store(const char *to,uint length); void store(double nr); void store(longlong nr); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 42cd0a2ee4f..79d695eea1e 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -360,7 +360,6 @@ void Item_func_between::fix_length_and_dec() if (args[0]->type() == FIELD_ITEM) { Field *field=((Item_field*) args[0])->field; - cmp_type=field->cmp_type(); if (field->store_for_compare()) { if (convert_constant_item(field,&args[1])) diff --git a/sql/lock.cc b/sql/lock.cc index aed0e1988ea..9063b1273e0 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -74,7 +74,7 @@ extern HASH open_cache; static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table,uint count, bool unlock, TABLE **write_locked); -static int lock_external(TABLE **table,uint count); +static int lock_external(THD *thd, TABLE **table,uint count); static int unlock_external(THD *thd, TABLE **table,uint count); static void print_lock_error(int error); @@ -110,7 +110,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd,TABLE **tables,uint count) } thd->proc_info="System lock"; - if (lock_external(tables,count)) + if (lock_external(thd, tables, count)) { my_free((gptr) sql_lock,MYF(0)); sql_lock=0; @@ -159,11 +159,10 @@ retry: } -static int lock_external(TABLE **tables,uint count) +static int lock_external(THD *thd, TABLE **tables, uint count) { reg1 uint i; int lock_type,error; - THD *thd=current_thd; DBUG_ENTER("lock_external"); for (i=1 ; i <= count ; i++, tables++) diff --git a/sql/set_var.cc b/sql/set_var.cc index 80a0e0625cb..a992ddf6044 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -502,7 +502,9 @@ struct show_var_st init_vars[]= { {"skip_networking", (char*) &opt_disable_networking, SHOW_BOOL}, {"skip_show_database", (char*) &opt_skip_show_db, SHOW_BOOL}, {sys_slow_launch_time.name, (char*) &sys_slow_launch_time, SHOW_SYS}, +#ifdef HAVE_SYS_UN_H {"socket", (char*) &mysql_unix_port, SHOW_CHAR_PTR}, +#endif {sys_sort_buffer.name, (char*) &sys_sort_buffer, SHOW_SYS}, {"sql_mode", (char*) &opt_sql_mode, SHOW_LONG}, {"table_cache", (char*) &table_cache_size, SHOW_LONG}, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index fa967d645ef..3b46c53f75c 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1275,7 +1275,7 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, int error; DBUG_ENTER("open_unireg_entry"); - (void) sprintf(path,"%s/%s/%s",mysql_data_home,db,name); + strxmov(path, mysql_data_home, "/", db, "/", name, NullS); if (openfrm(path,alias, (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX | HA_TRY_READ_ONLY), |