when we open the HEAP table for the first time since server restart,
in hp_open(), we set a flag to propagate this info to the handler level
which then writes a DELETE FROM this_heap_table to the binlog.
It is not a perfect solution for the bug, because between the server start and
the first open of the table, the slave still had old data in his table so
a SELECT on the slave may show wrong content. But if there is a --init-file
to populate the HEAP table on master as startup, then this is a safe fix
(I'll put a note about init-file in the HEAP section of the manual).
heap/hp_info.c:
new info variable implicit_emptied
heap/hp_open.c:
If this is the first open of the HEAP table, it means it is empty,
so we mark it.
include/heap.h:
new variables implicit_emptied
(we need one in HEAPINFO for the hp_info() call).
sql/ha_heap.cc:
report info to upper level
sql/handler.h:
new info 'implicit_emptied' in the handler level; only HEAP uses it.
sql/sql_base.cc:
When a HEAP table is opened for the first time, write a DELETE FROM to the binlog,
for replication and mysqlbinlog|mysql.
Monty: I added the
entry->file->implicit_emptied= 0;
(as long as replicate-*-table rules were defined, multi-table DELETE was never
replicated by the slave).
sql/sql_parse.cc:
For a multi-table DELETE, there are two lists of tables:
- 'tables' contains the tables in the FROM. They have 'updating==0'.
- 'thd->lex.auxilliary_table_list.first' contains the tables between the DELETE and the FROM. They have 'updating==1'.
So the bug was that the slave only tests 'tables' and as all its elements have updating==0,
tables_ok() always returns 0.
So for a multi DELETE the slave now tests the 2nd list too.
I started with the other tip of the sausage: I thought of changing multi DELETE to use
only one list (given that 'updating' can be used to separate it in two when needed)
(with one list we wouldn't need to change the slave code), but finally hit the unicity
check in add_table_to_list() which started to return ER_NONUNIQ_TABLE (logical).
This fixed problem with index reads on character fields with BDB tables. (Bug #2509)
BitKeeper/etc/ignore:
added man/*.1
mysql-test/r/bdb.result:
New test
mysql-test/r/myisam.result:
More tests
mysql-test/t/bdb.test:
Test for idnex only read
mysql-test/t/myisam.test:
More test to verify pushed bug fix
sql/ha_berkeley.h:
Mark that strings may change on index only reads
sql/item_strfunc.cc:
Cleanup
sql/table.cc:
Allow index only reads on binary strings
The problem was that memory was free'd, but it was referenced
later. This free was unneccessary anyway, because join_free() /
JOIN::cleanup takes care of this later on.
Added test case into t/subselect.test for it.
Regards,
Jani
mysql-test/r/subselect.result:
Added a test case for Bug#2479.
mysql-test/t/subselect.test:
Added a test case for Bug#2479.
sql/sql_select.cc:
Fixed Bug#2479, "dependant subquery with limit crash".
The problem was that memory was free'd, but it was referenced
later. This free was unneccessary anyway, because join_free() /
JOIN::cleanup takes care of this later on.
dump when result was NULL.
mysql-test/r/func_test.result:
Added a test for GREATEST() and LEAST() core dump bug.
mysql-test/t/func_test.test:
Added a test for GREATEST() and LEAST() core dump bug.
Moved the UDF and stored procedure lookup from sql_lex.cc to sql_yacc.yy.
This will improve performance (since we don't have to check for stored
functions in the lexer all the time), and make it possible to implement
db qualified SPs.
mysql-test/r/show_check.result:
mysql.proc is not used in lex anymore (unless stored functions are really used).
mysql-test/r/status.result:
mysql.proc is not used in lex anymore (unless stored functions are really used).
sql/sql_lex.cc:
Moved the UDF and stored procedure lookup to sql_yacc.yy.
sql/sql_yacc.yy:
Moved the UDF and stored procedure lookup from sql_lex.cc.
As a result, both stored function and UDF function calls get the
argument list parsed the same way, so the "AS ..." syntax is
recognized for both, eventhough it has no meaning for stored
function.
<monty> ramil, in MySQL/MyISAM we should only strip end space, not 'space-like' characters.
<monty> This is according to SQL; When doing a comparision end space and only end space are ignored.
myisam/mi_key.c:
a proper fix for the bug #2298 Trailing whitespace inconsistently handled in WHERE clause.
myisam/mi_search.c:
a proper fix for the bug #2298 Trailing whitespace inconsistently handled in WHERE clause.
mysql-test/r/select.result:
test case for the bug #2298 Trailing whitespace inconsistently handled in WHERE clause.
mysql-test/t/select.test:
test case for the bug #2298 Trailing whitespace inconsistently handled in WHERE clause.
sql/sql_string.cc:
a proper fix for the bug #2298 Trailing whitespace inconsistently handled in WHERE clause.
(Meaning "... with SELECT v", where v is a local variable.)
mysql-test/r/sp.result:
Test case for BUG#2227
mysql-test/t/sp.test:
Test case for BUG#2227
sql/item.h:
Item_splocal::send() needed for "SELEC v", where "v" is a local variable.
Also set the field name.
sql/sp_head.cc:
Have to get decimals and max_length right for reals, when SELECT of local variables.
sql/sql_parse.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
mysql-test/r/derived.result:
SCCS merged
mysql-test/t/derived.test:
e
merge
mysql-test/t/multi_update.test:
new results of changed multi-delete
mysql-test/t/update.test:
new results of changed multi-delete
mysql-test/r/multi_update.result:
new results of changed multi-delete
mysql-test/r/update.result:
new results of changed multi-delete
Fixed bug in optimizer where it didn't choose right table order in some cases
myisam/mi_delete.c:
Remove not needed include errno.h
myisam/mi_delete_table.c:
Remove not needed include errno.h
myisam/mi_extra.c:
Remove not needed include errno.h
myisam/mi_locking.c:
Remove not needed include errno.h
myisam/mi_log.c:
Remove not needed include errno.h
myisam/mi_page.c:
Remove not needed include errno.h
myisam/mi_rename.c:
Remove not needed include errno.h
myisam/mi_update.c:
Remove not needed include errno.h
myisam/mi_write.c:
Remove not needed include errno.h
mysql-test/r/subselect.result:
Update of test after optimzier fix
mysys/charset.c:
Code cleanup
sql/item_cmpfunc.cc:
Removed not needed comment
Indentation cleanup
sql/item_cmpfunc.h:
Indentation cleanup
sql/mysqld.cc:
Updated comment for expire_logs_days
sql/set_var.cc:
Remved duplicate code
sql/sql_select.cc:
Fixed bug in optimizer where it didn't choose right table order in some cases (Bug found and fixed by Igor)
mysql-test/r/func_misc.result:
added new test for inet_aton (short-forms addresses)
mysql-test/t/func_misc.test:
added new test for inet_aton (short-forms addresses)
sql/item_func.cc:
Change Item_func_inet_aton::val_int to parse short-forms addresses correctly
check of memory allocation operation was added
mysql-test/r/subselect_innodb.result:
switched to new syntax
mysql-test/t/subselect_innodb.test:
switched to new syntax
sql/sql_select.cc:
check of memory allocation operation
into sanja.is.com.ua:/home/bell/mysql/bk/work-sub-4.1
mysql-test/r/subselect_innodb.result:
Auto merged
mysql-test/t/subselect_innodb.test:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_union.cc:
Auto merged