New formats added for 'week()' function and 'default_week_format' option(4 - 7).
Next formats is supported now:
*Value* *Meaning*
`0' Week starts on Sunday; First Sunday of the year starts week 1.
Week() returns 0-53.
`1' Week starts on Monday; Weeks numbered according to ISO 8601:1988.
Week() returns 0-53.
`2' Week starts on Sunday; First Sunday of the year starts week 1.
Week() returns 1-53.
`3' Week starts on Monday; Weeks numbered according to ISO 8601:1988.
Week() returns 1-53.
`4' Week starts on Sunday; Weeks numbered according to ISO 8601:1988.
Week() returns 0-53.
`5' Week starts on Monday; First Monday of the year starts week 1.
Week() returns 0-53.
`6' Week starts on Sunday; Weeks numbered according to ISO 8601:1988.
Week() returns 1-53.
`7' Week starts on Monday; First Monday of the year starts week 1.
Week() returns 1-53.
mysql-test/r/func_time.result:
Test for 'default_week_format' option and 'week' function
mysql-test/t/func_time.test:
Test for 'default_week_format' option and 'week' function
sql/item_timefunc.cc:
WL#1175 more default_week_formats for iso compatibility
sql/mysql_priv.h:
WL#1175 more default_week_formats for iso compatibility
sql/mysqld.cc:
WL#1175 more default_week_formats for iso compatibility
sql/time.cc:
WL#1175 more default_week_formats for iso compatibility
rli->save_temporary_tables and slave_open_temp_tables
(in old 4.0 you could make "SHOW STATUS LIKE 'slave_open_temp_tables'" grow
indefinitely by doing RESET SLAVE and replicating always the same CREATE
TEMPORARY TABLE).
It's critical to reset save_temporary_tables to 0 (otherwise you may later
read memory which has been freed) so this changeset should go into 4.1.
mysql-test/r/rpl_reset_slave.result:
result update
mysql-test/t/rpl_reset_slave.test:
test for RESET SLAVE and creating twice the same temp table in the slave.
sql/slave.cc:
when we delete the slave's temp tables (when slave server shuts down and when
RESET SLAVE), we reset 2 variables: rli->save_temporary_tables & slave_open_temp_tables.
has changed since 4.0.14'
We need to calculate cost of RANGE
scan if it is present instead of cost of
FULL scan.
mysql-test/r/order_by.result:
more accurate row estimation
for RANGE scan
mysql-test/r/range.result:
added test case for bug #1724
'WHERE ... IN() optimizer behaviour has changed since 4.0.14'
mysql-test/r/select.result:
please ignore
mysql-test/t/range.test:
added test case for bug #1724
'WHERE ... IN() optimizer behaviour has changed since 4.0.14'
sql/sql_select.cc:
fix for bug #1724 'WHERE ... IN() optimizer behaviour
has changed since 4.0.14'
We need to calculate cost of RANGE
scan instead of cost of FULL scan
if RANGE is present
Few comments cleaned up.
- when we don't have in_addr_t, use uint32.
- a forgotten initialization of slave_proxy_id in sql/log_event.cc (was not really "forgot", was
"we needn't init it there", but there was one case where we needed...).
- made slave_proxy_id always meaningful in THD and Log_event, so we can
rely more on it (no need to test if it's meaningful). THD::slave_proxy_id
is equal to THD::thread_id except for the slave SQL thread.
- clean up the slave's temporary table (i.e. free their memory) when slave
server shuts down.
extra/resolveip.c:
removed #define as it is simpler to put it in my_net.h
(because we need the #define elsewhere)
include/my_net.h:
When in_addr_t is not defined, use uint32.
libmysql/libmysql.c:
using in_addr_t is more generic.
libmysql/manager.c:
using in_addr_t is more generic.
mysql-test/t/rpl_chain_temp_table.test:
comments
sql/log_event.cc:
* Had forgot to initialize slave_proxy_id in the event constructor (char* buf...).
Initializing is in fact only needed for Create_file_log_event, because
it uses slave_proxy_id even if it does not write an event to the binlog
(it uses slave_proxy_id to write it to SQL-LOAD.info).
* When we write events we now always write slave_proxy_id, which is now always
meaningful (as thd->slave_proxy_id is now always meaningful, see change in
sql_class.cc).
sql/mini_client.cc:
in_addr_t is more generic.
sql/slave.cc:
A RELAY_LOG_INFO method to free the slave's temporary tables from memory
at slave's server shutdown.
It is called by end_slave(), which is called by close_connections(),
which is called when the server terminates
(close_connections() is just before clean_up(); putting the call in
clean_up() was buggy, as active_mi is already deleted by close_connections().
sql/slave.h:
new method
sql/sql_class.cc:
By default we set THD::slave_proxy_id to THD::thread_id,
so THD::slave_proxy_id is always meaningful (not 0).
It's always the same as the thread id except for the slave
SQL thread.
"If 2 master threads with same-name temp table, slave makes bad binlog"
and (two birds with one stone) for
BUG#1240 "slave of slave breaks when STOP SLAVE was issud on parent slave
and temp tables".
Here is the design change:
in a slave running with --log-slave-updates, events are now logged with the
thread id they had on the master. So no more id conflicts between master threads,
but introduces id conflicts between one master thread and one normal
client thread connected to the slave. This is solved by storing the server id
in the temp table's name.
New test which requires mysql-test-run to be run with --manager,
otherwise it will be skipped.
Undoing a Monty's change (hum, a chill runs down my spine ;) which was
"Cleanup temporary tables when slave ends" in ChangeSet 1.1572.1.1.
mysql-test/mysql-test-run.sh:
One new test which needs more than one slave so must be hardcoded in mysql-test-run.sh.
sql/log_event.cc:
The event needs to carry a slave_proxy_id (which is set at event's creation
and used at event's logging).
This is used for events created by ::exec_event() in the slave SQL thread:
now we want to log these events with the thread id they had on the master.
This is so that several same-name temp tables simultaneously created on
the master end up with not the same thread id in the slave's binlog.
sql/log_event.h:
Query and Load need to carry a slave_proxy_id, like they carried a thread_id
(to replicate temp tables well).
sql/slave.cc:
Do not free temp tables in the slave SQL thread. Or they will be lost when
one does STOP SLAVE / START SLAVE.
We even save them in rli->save_temporary_tables and set thd->temporary_tables=0
to prevent them to be freed.
sql/sql_base.cc:
Put the server id in the table cache key name for temp tables
(we already put the slave_proxy_id, but we also need the server id
in case normal clients (not slave threads) are using temp tables
on the slave).
sql/unireg.h:
4 more bytes, to store the server id.
BitKeeper/etc/logging_ok:
auto-union
sql/mini_client.cc:
Auto merged
client/mysqlbinlog.cc:
use local file
mysql-test/t/myisam.test:
Remove uncessesary drop table
sql/sql_parse.cc:
Use local
sql/sql_repl.cc:
use local
while the slave is connected.
mysql-test/t/rpl_trunc_binlog.test:
don't RESET MASTER while the slave is connected; this could confuse the master or slave.
(In replication you don't RESET MASTER while a slave is connected!)
sql/slave.cc:
typo
Fixed chsize() problem on windows
Extend default timeout on windows clients to 1 year (to avoid timeout problems)
include/mysql.h:
Added client timeouts (for TCP/IP)
libmysql/libmysql.c:
Added client timeouts (for TCP/IP)
mysql-test/r/create.result:
More tests for CREATE TABLE IF NOT EXISTS ... SELECT
mysql-test/t/create.test:
More tests for CREATE TABLE IF NOT EXISTS ... SELECT
mysys/my_chsize.c:
Fix for windows
sql/handler.h:
Remove not used field 'if_not_exists'
Ordered fields to be more optimized for new CPU's
Added field 'table_existed'
sql/slave.cc:
Cleanup temporary tables when slave ends
sql/sql_class.h:
Remove not used 'do_not_drop' field
sql/sql_insert.cc:
Better fix for CREATE TABLE IF NOT EXISTS ... SELECT
sql/sql_table.cc:
Better fix for CREATE TABLE IF NOT EXISTS ... SELECT
into mashka.mysql.fi:/home/my/mysql-4.0
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
BitKeeper/etc/ignore:
added scripts/make_sharedlib_distribution
mysql-test/r/variables.result:
Add test for enum_system_variable=NULL
mysql-test/t/variables.test:
Add test for enum_system_variable=NULL
sql/set_var.cc:
Fixed bug in SET enum_system_variable=NULL
Moved some array elements to get result sorted
query_alloc_block_size, query_prealloc_size, range_alloc_block_size,transaction_alloc_block_size and transaction_prealloc_size
Add more checks for "out of memory" detection in range optimization
configure.in:
Added detection of mallinfo
mysql-test/r/variables.result:
Test of new variables
mysql-test/t/variables.test:
Test of new variables
sql/ha_berkeley.cc:
Use init_sql_alloc instead of init_alloc_root for better OOM detection
sql/log_event.cc:
Add new user variables for tuning memory usage
sql/mysql_priv.h:
Add new user variables for tuning memory usage
sql/mysqld.cc:
Add new user variables for tuning memory usage
sql/opt_ft.cc:
Add new user variables for tuning memory usage
sql/opt_ft.h:
Add new user variables for tuning memory usage
sql/opt_range.cc:
Add new user variables for tuning memory usage
Add more checks for out of memory conditions
sql/opt_range.h:
Add new user variables for tuning memory usage
sql/set_var.cc:
Add new user variables for tuning memory usage
sql/sql_acl.cc:
Add new user variables for tuning memory usage
sql/sql_class.h:
Add new user variables for tuning memory usage
sql/sql_delete.cc:
Add new user variables for tuning memory usage
sql/sql_parse.cc:
Add new user variables for tuning memory usage
sql/sql_select.cc:
Add new user variables for tuning memory usage
sql/sql_test.cc:
Add information about memory useage if system supports mallinfo()
sql/sql_udf.cc:
Add new user variables for tuning memory usage
sql/sql_update.cc:
Add new user variables for tuning memory usage
sql/table.cc:
Add new user variables for tuning memory usage
Changed --remote to --read-from-remote-server (mysqlbinlog)
client/mysqlbinlog.cc:
Changed --remote to --read-from-remote-server to make option more understandable
mysql-test/t/mysqlbinlog.test:
Fixed test case that --remote broke
Rotate_log_event::exec_event() believed that the relay log was corrupted. Fixed it
by moving the test for corruption to Start_log_event::exec_event().
Changed Rotate_log_event::exec_event() to not increment positions when the
event is seen in the middle of a transaction.
I did a separate commit in 4.1 (so this should not be merged to 4.0) because
code is a bit different in 4.1.
A test to see if the slave detects when the master died while writing a
transaction to the binlog (uses a forged truncated binlog I made).
sql/log_event.cc:
When the I/O thread was stopped while copying a long transaction, and restarted,
Rotate_log_event::exec_event() believed that the relay log was corrupted. Fixed it
by moving the test for corruption to Start_log_event::exec_event().
Changed Rotate_log_event::exec_event() to not increment positions when the
event is seen in the middle of a transaction.
Use forced close of socket to make mysqld shutdown faster when used under valgrind
mysql-test/mysql-test-run.sh:
Added --skip-bdb for valgrind
mysql-test/r/user_var.result:
Extended test for user variables
mysql-test/t/user_var.test:
Extended test for user variables
sql/item_func.cc:
Optimized code for setting user variables with := and fixed some bugs in old code
sql/item_func.h:
Optimized code for setting user variables
sql/log.cc:
Fixed comments
sql/mysqld.cc:
Use forced close of socket to make mysqld shutdown faster when used under valgrind
sql/sql_class.h:
Optimized code for setting user variables
(a missing synchronization in the test)
mysql-test/r/drop_temp_table.result:
result update
mysql-test/t/drop_temp_table.test:
synchronize to be sure that the ending connection has finished binlogging.
client/mysqltest.c:
Now resetting replace_result patterns after --exec command (in order to be consistent with ordinary query execution).
mysql-test/t/mysqlbinlog.test:
Added additional replaces potentially needed after adding reset of replace conditions for exec
Add quoting for use `database` for mysqlbinlog
Removed test ins0000001
Add support for --replace for exec in mysqltest
Don't refer to install dir in mysqlbinlog.result
BitKeeper/deleted/.del-ins000001.result~f45c599efdf8352b:
Delete: mysql-test/r/ins000001.result
BitKeeper/deleted/.del-ins000001.test~2428ee5c9b1bc483:
Delete: mysql-test/t/ins000001.test
client/mysqlbinlog.cc:
Removed random chars after filename for LOAD DATA INFILE
client/mysqltest.c:
Add support for --replace for 'exec'
mysql-test/r/drop_temp_table.result:
Updated results after quoting change
mysql-test/r/fulltext_multi.result:
Updated results after quoting change
mysql-test/r/fulltext_order_by.result:
Updated results after quoting change
mysql-test/r/insert.result:
New tests
mysql-test/r/insert_select.result:
Updated results after quoting change
mysql-test/r/mix_innodb_myisam_binlog.result:
Updated results after quoting change
mysql-test/r/mysqlbinlog.result:
Updated results after quoting change
mysql-test/r/rpl_log.result:
Updated results after quoting change
mysql-test/t/fulltext_multi.test:
Remove 'use'
mysql-test/t/fulltext_order_by.test:
Remove 'use'
mysql-test/t/insert.test:
Merge test with ins0000001.test
mysql-test/t/mysqlbinlog.test:
Don't refer to install dir in result
sql/log_event.cc:
Add quoting for use `database` for mysqlbinlog
support-files/mysql.server.sh:
Move pid_file test after arguments have been parsed
it's just backquoting the db's and table's names
when writing DROP TEMPORARY TABLE to the binlog when a connection ends.
A testcase for this.
sql/sql_base.cc:
backquote db and table name when writing DROP TEMPORARY TABLE to the binlog
when a connection ends.
"If LOAD DATA INFILE 'small_file' fails on master, slave leaves temp files"
(the bug is in the master)
mysql-test/r/rpl_loaddata.result:
result update
mysql-test/std_data/rpl_loaddata2.dat:
change to introduce a unique key violation
mysql-test/t/rpl_loaddata.test:
testcase for bug#1391.
sql/sql_load.cc:
fix for bug#1391:
for a small file, we had in the binlog only the Create_file, not the Delete_file
(the Create_file was written when the READ_INFO was destroyed).
Particularly for BUG#1340 mysqlbinlog coredumps when reading Exec
event without seeing Create_file event before
mysql-test/mysql-test-run.sh:
Now mysqlbinlog will use proper temporary directory
(kind request from the Novell team).
Note that old chmods in rpl_rotate_logs remain.
mysql-test/r/rpl000009.result:
result update
mysql-test/t/rpl000009.test:
removing my chmods so that the test can be run on non-Unix platforms.
removed server options
BitKeeper/deleted/.del-query_cache-master.opt~c4daeaa5e40881:
Delete: mysql-test/t/query_cache-master.opt
mysql-test/r/query_cache.result:
test for BUG#988
mysql-test/t/query_cache.test:
test for BUG#988
removed server options
sql/sql_cache.cc:
fixed moving query block with pointers to same table in it
Now LOAD DATA FROM MASTER does not drop the database, instead it only tries to
create it, and drops/creates table-by-table.
* replicate_wild_ignore_table='db1.%' is now considered as "ignore the 'db1'
database as a whole", as it already works for CREATE DATABASE and DROP DATABASE.
mysql-test/r/rpl000009.result:
result update
mysql-test/t/rpl000009.test:
test that LOAD DATA FROM MASTER does not drop databases,
but rather table by table, thus preserving non-replicated tables.
Test that LOAD DATA FROM MASTER reports the error when a table could not
be dropped (system's "permission denied" for example).
Test that LOAD TABLE FROM MASTER reports the error when the table already exists.
sql/repl_failsafe.cc:
* replicate_wild_ignore_table='db1.%' is now considered as "ignore the 'db1'
database as a whole", as it already works for CREATE DATABASE and DROP DATABASE.
* If a db matches replicate_*_db rules, we don't drop/recreate it because this
could drop some tables in this db which could be slave-specific. Instead,
we do a CREATE DATABASE IF EXISTS, and we will drop each table which has
an equivalent on the master, table-by-table.
sql/slave.cc:
New argument to drop the table in create_table_from_dump()
(LOAD TABLE/DATA FROM MASTER are the only places where this function is used).
This is needed because LOAD DATA FROM MASTER does not drop the database anymore.
The behaviour when the table exists is unchanged: LOAD DATA silently replaces
the table, LOAD TABLE gives error.
sql/slave.h:
new argument to drop the table in fetch_master_table
sql/sql_parse.cc:
do not drop the table in LOAD TABLE FROM MASTER (this behaviour is already
true; but changes in LOAD DATA FROM MASTER made the argument needed).
Fix bug in SHOW GRANTS when there is a column privilege but no table privilege
include/mysql.h:
Make server_inited external
libmysqld/libmysqld.c:
Remove reference to (wrong) external variable
mysql-test/r/grant.result:
Fixed up grant test to not user 'user1' or 'user2'
Check for bug in SHOW GRANTS when there is a column privilege but no table privilege
mysql-test/r/mix_innodb_myisam_binlog.result:
Change to use tables t1 and t2
mysql-test/t/grant.test:
Fixed up grant test to not user 'user1' or 'user2'
Check for bug in SHOW GRANTS when there is a column privilege but no table privilege
mysql-test/t/mix_innodb_myisam_binlog.test:
Change to use tables t1 and t2
sql/sql_acl.cc:
Fix bug in SHOW GRANTS when there is a column privilege but no table privilege
sql/sql_parse.cc:
Use HAVE_REPLICATION instead of EMBEDDED_LIBRARY
myisam/mi_locking.c:
Added DBUG info
myisam/mi_open.c:
Added DBUG info
myisam/mi_update.c:
More comments
Fixed rare bug in MYISAM introduced in 4.0.3 where the index file header
was not updated directly after an UPDATE of split dynamic rows.
mysql-test/r/myisam.result:
Added test case for MyISAM UPDATE bug
mysql-test/t/myisam.test:
Added test case for MyISAM UPDATE bug