Commit graph

242 commits

Author SHA1 Message Date
unknown
9fcda7fcc5 A fix and test case for Bug#9096 "select doesn't return all matched
records if prepared statements is used".
This fix changes equality evaluation method of basic constants from
by-name to by-value, thus effectively enabling use of parameter markers
in some optimizations (constants propagation, evaluation of possible
keys for query).


mysql-test/r/ps.result:
  Test results for the test case for Bug#9096
mysql-test/t/ps.test:
  A short test case for Bug#9096 "select doesn't return all matched records if
   prepared statements is used". The is enough to reproduce the
  glitch in update_ref_and_keys causing the bug to occur.
sql/item.cc:
  Implement by-value equality evaluation of basic constants.
  This is needed to work with Item_param values. Until now
  Item_param was compared with other items by its name, which is always "?".
  The bug at hand showed up when an integer
  constant was created from one parameter marker (with value 200887 and
   name "?") and then compared by-name with another parameter marker
  (with value 860 and name "?"). True returned by this comparison resulted
  in a wrong table access method used to evaluate the query.
  Implement Item_param methods needed to emulate "basic constant" mode at 
  full.
sql/item.h:
  Change declaration of basic_const_item(): now it also widens its 
  argument from const Item * to Item * if the argument is a basic constant.
  Declare eq() for all basic constatns, as long as now they 
  are compared by value, not by name. Each constant needs its own
  comparison method.
  Declarations of Item_param methods needed to fully emulate 
  a basic constant when parameter value is set.
sql/item_func.cc:
  Fix wrong casts.
2005-05-03 12:47:27 +04:00
unknown
c23c4c7cfa Allow SQLCOM_CALL in prepared mode.
mysql-test/r/ps.result:
  Test results: adding tests for CALL statement in prepared mode.
mysql-test/t/ps.test:
  Adding tests for CALL statement in prepared mode.
2005-04-13 12:36:15 -07:00
unknown
b419262fe4 Fix for bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
restore original 'lex->query_tables' table list after
   processing of information schema table
   remove unnecessary operations


mysql-test/r/ps.result:
  Fix for bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
mysql-test/t/ps.test:
  Fix for bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
sql/sql_lex.h:
  Fix for bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
sql/sql_show.cc:
  Fix for bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
2005-04-05 16:09:56 +05:00
unknown
2860a7723e Fixes for bug#8115 "Server Crash with prepared statement"
and bug#8849 "problem with insert statement with table alias's": 
make equality propagation work in stored procedures and prepared 
statements.
Equality propagation can change AND/OR structure of ON expressions,
so the fix is to provide each execution of PS/SP with it's own
copy of AND/OR tree. We have been doing that already for WHERE clauses,
now ON clauses are also copied.


mysql-test/r/ps.result:
  Bug#8115: test results fixed.
mysql-test/r/sp.result:
  Bug#8849: test results fixed.
mysql-test/t/ps.test:
  A test case for Bug#8115 "Server Crash with prepared statement".
mysql-test/t/sp.test:
  A test case for Bug#8849 "problem with insert statement with table 
  alias's".
sql/item_cmpfunc.cc:
  Comment a parse tree transformation.
sql/item_cmpfunc.h:
  Comment how Item_equal works with PS/SP.
sql/mysql_priv.h:
  Add declaration for init_stmt_after_parse.
sql/sp_head.cc:
  Call init_stmt_after_parse in restore_lex(), which is used to
  grab TABLE_LIST and SELECT_LEX list of a parsed substatement of
  stored procedure. This is a necessary post-init step which 
  must be done for any statement which can be executed many times.
sql/sql_prepare.cc:
  Implement init_stmt_after_parse() which prepares AND/OR
  structure of all ON expressions and WHERE clauses of a statement
  for copying.
sql/sql_select.cc:
  Implementation of equality propagation inspected with regard to 
  prepared statements and stored procedures. We now restore
  AND/OR structure of every ON expression in addition to AND/OR
  structure of WHERE clauses when reexecuting a PS/SP.
sql/table.h:
  Add declaration for TABLE::prep_on_expr.
2005-03-03 17:38:59 +03:00
unknown
0abf1f6d3f manual merge 2005-03-03 14:29:37 +04:00
unknown
737f7292b4 a fix for --ps-protocol (bug #6089: FOUND_ROWS returns wrong values when no table/view is used)
sql/sql_union.cc:
  a fix for --ps-protocol (bug #6089: FOUND_ROWS returns wrong values when no table/view is used)
  Don't touch options as itit's not needed.
2005-03-02 20:00:48 +04:00
unknown
bb2d3eaa30 Merge with 4.1
BitKeeper/etc/ignore:
  auto-union
BitKeeper/etc/logging_ok:
  auto-union
Build-tools/Do-compile:
  Auto merged
VC++Files/sql/mysqld.dsp:
  Auto merged
client/Makefile.am:
  Auto merged
client/mysql.cc:
  Auto merged
BitKeeper/deleted/.del-acinclude.m4~f4ab416bac5003:
  Auto merged
client/mysqltest.c:
  Auto merged
include/my_base.h:
  Auto merged
innobase/dict/dict0dict.c:
  Auto merged
innobase/dict/dict0load.c:
  Auto merged
innobase/include/dict0dict.h:
  Auto merged
innobase/include/row0mysql.h:
  Auto merged
innobase/os/os0file.c:
  Auto merged
innobase/srv/srv0srv.c:
  Auto merged
libmysql/libmysql.c:
  Auto merged
myisam/mi_check.c:
  Auto merged
myisam/mi_rnext_same.c:
  Auto merged
myisam/mi_write.c:
  Auto merged
myisam/sort.c:
  Auto merged
mysql-test/mysql-test-run.sh:
  Auto merged
mysql-test/r/ctype_ucs.result:
  Auto merged
mysql-test/r/ctype_ujis.result:
  Auto merged
mysql-test/r/gis-rtree.result:
  Auto merged
mysql-test/r/group_by.result:
  Auto merged
mysql-test/r/merge.result:
  Auto merged
mysql-test/r/metadata.result:
  Auto merged
mysql-test/r/ndb_alter_table.result:
  Auto merged
mysql-test/r/ps_1general.result:
  Auto merged
mysql-test/r/insert_update.result:
  Auto merged
mysql-test/r/timezone2.result:
  Auto merged
mysql-test/r/type_enum.result:
  Auto merged
mysql-test/r/variables.result:
  Auto merged
mysql-test/t/ctype_ucs.test:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
mysql-test/t/ps_1general.test:
  Auto merged
mysql-test/t/subselect.test:
  Auto merged
mysql-test/t/system_mysql_db_fix.test:
  Auto merged
mysql-test/t/variables.test:
  Auto merged
ndb/include/ndbapi/NdbConnection.hpp:
  Auto merged
ndb/include/ndbapi/NdbDictionary.hpp:
  Auto merged
ndb/src/common/util/version.c:
  Auto merged
ndb/src/kernel/blocks/dbacc/DbaccInit.cpp:
  Auto merged
ndb/src/kernel/blocks/dbacc/Makefile.am:
  Auto merged
ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
  Auto merged
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
ndb/src/kernel/blocks/dblqh/DblqhInit.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtux/Dbtux.hpp:
  Auto merged
ndb/src/ndbapi/NdbBlob.cpp:
  Auto merged
ndb/src/ndbapi/NdbConnection.cpp:
  Auto merged
ndb/src/ndbapi/NdbDictionary.cpp:
  Auto merged
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  Auto merged
ndb/src/ndbapi/NdbDictionaryImpl.hpp:
  Auto merged
ndb/src/ndbapi/NdbOperationExec.cpp:
  Auto merged
ndb/src/ndbapi/NdbScanOperation.cpp:
  Auto merged
ndb/test/ndbapi/Makefile.am:
  Auto merged
scripts/make_win_src_distribution.sh:
  Auto merged
scripts/mysql_install_db.sh:
  Auto merged
sql/field.cc:
  Auto merged
sql/ha_innodb.cc:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/ha_ndbcluster.h:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_create.h:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/item_geofunc.cc:
  Auto merged
sql/item_row.cc:
  Auto merged
sql/item_strfunc.cc:
  Auto merged
sql/item_strfunc.h:
  Auto merged
sql/item_sum.cc:
  Auto merged
sql/item_sum.h:
  Auto merged
sql/log.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/net_serv.cc:
  Auto merged
sql/password.c:
  Auto merged
sql/protocol.cc:
  Auto merged
sql/repl_failsafe.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/slave.cc:
  Auto merged
sql/sql_acl.cc:
  Auto merged
sql/sql_cache.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_derived.cc:
  Auto merged
sql/sql_do.cc:
  Auto merged
sql/sql_handler.cc:
  Auto merged
sql/sql_help.cc:
  Auto merged
sql/sql_lex.cc:
  Auto merged
sql/sql_lex.h:
  Auto merged
sql/sql_repl.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_union.cc:
  Auto merged
sql/examples/ha_archive.cc:
  Auto merged
sql/strfunc.cc:
  Auto merged
sql/table.cc:
  Auto merged
sql/table.h:
  Auto merged
sql/tztime.h:
  Auto merged
sql/udf_example.cc:
  Auto merged
sql/unireg.cc:
  Auto merged
Makefile.am:
  Simple merge
client/mysqldump.c:
  Simple merge
configure.in:
  Simple merge
libmysqld/lib_sql.cc:
  Automatic merge
mysql-test/r/func_str.result:
  Automatic merge
mysql-test/r/grant.result:
  simple merge
mysql-test/r/multi_update.result:
  automatc merge
mysql-test/r/ps.result:
  automatic merge
mysql-test/r/ps_2myisam.result:
  Automatic merge
mysql-test/r/ps_3innodb.result:
  Automatic merge
mysql-test/r/ps_4heap.result:
  Automatic merge
mysql-test/r/ps_5merge.result:
  Automatic merge
mysql-test/r/ps_6bdb.result:
  Automatic merge
mysql-test/r/ps_7ndb.result:
  Automatic merge
mysql-test/r/show_check.result:
  Automatic merge
mysql-test/r/subselect.result:
  Automatic merge
mysql-test/t/grant.test:
  Automatic merge
mysql-test/t/multi_update.test:
  Automatic merge
mysql-test/t/ps.test:
  Automatic merge
mysql-test/t/show_check.test:
  Automatic merge
ndb/docs/wl2077.txt:
  merge
ndb/src/mgmsrv/main.cpp:
  merge
scripts/mysql_fix_privilege_tables.sh:
  merge
sql/item.cc:
  Merge (difficult)
sql/item.h:
  simple merge
sql/item_cmpfunc.h:
  Automatic merge
sql/item_subselect.cc:
  Simple merge
sql/item_subselect.h:
  Automatic merge
sql/mysql_priv.h:
  Simple merge
sql/slave.h:
  Automatic merge
sql/sql_base.cc:
  Removed code that was backported to 4.1
sql/sql_class.h:
  Merge (some code moved to sql_insert.cc)
sql/sql_db.cc:
  simple merge
sql/sql_insert.cc:
  Merge (difficult as logic had changed both in 4.1 and 5.0)
  Some coded moved here from sql_class.h
sql/sql_parse.cc:
  Merge (difficult)
sql/sql_prepare.cc:
  Simple merge
sql/sql_select.cc:
  Automatic merge
sql/sql_table.cc:
  Simple merge
sql/sql_update.cc:
  Difficult merge because of different logic for multi-updates
sql/sql_yacc.yy:
  Simple merge
tests/client_test.c:
  Simple merge
2004-12-22 13:54:39 +02:00
unknown
998209d36b A fix and test case for Bug#6873 "PS, having with subquery, crash
during execute"


mysql-test/r/ps.result:
  Test results updated (Bug#6873)
mysql-test/t/ps.test:
  A test case for Bug#6873 "PS, having with subquery, crash during execute".
sql/item_subselect.cc:
  If we transform having subtree, modify SELECT_LEX::having pointer 
  to point to the new having tree root.
2004-12-09 00:37:17 +03:00
unknown
93cf297fcb Cleanups during review stage
Added auto-correct of field length for enum/set tables for ALTER TABLE
This is becasue of a bug in previous MySQL 4.1 versions where the length for enum/set was set incorrectly after ALTER TABLE


mysql-test/r/rpl_start_stop_slave.result:
  Fixed wrong test
mysql-test/r/type_enum.result:
  Added test for wrong enum/set length after alter table
mysql-test/t/ps.test:
  removed empty line
mysql-test/t/type_enum.test:
  Added test for wrong enum/set length after alter table
sql/field.cc:
  Added auto-correct of field length for enum/set tables.
  This is becasue of a bug in previous MySQL 4.1 versions where the length for enum/set was set incorrectly after ALTER TABLE
sql/item_cmpfunc.cc:
  Simple optimization
sql/mysql_priv.h:
  Made local function global
sql/set_var.cc:
  Simple cleanup
sql/sql_table.cc:
  Simple cleanups & optimizations
2004-12-02 14:43:51 +02:00
unknown
6627dc7d1b merged
BitKeeper/etc/ignore:
  auto-union
BitKeeper/etc/logging_ok:
  auto-union
Docs/Support/texi2html:
  Auto merged
client/mysqltest.c:
  Auto merged
innobase/lock/lock0lock.c:
  Auto merged
innobase/row/row0sel.c:
  Auto merged
mysql-test/r/fulltext.result:
  Auto merged
mysql-test/r/heap.result:
  Auto merged
mysql-test/r/key.result:
  Auto merged
mysql-test/r/myisam.result:
  Auto merged
mysql-test/r/rpl000015.result:
  Auto merged
mysql-test/r/rpl_log_pos.result:
  Auto merged
mysql-test/r/rpl_rotate_logs.result:
  Auto merged
mysql-test/r/subselect.result:
  Auto merged
mysql-test/r/type_blob.result:
  Auto merged
mysql-test/t/key.test:
  Auto merged
mysql-test/t/myisam.test:
  Auto merged
mysql-test/t/rpl000015.test:
  Auto merged
mysql-test/t/rpl_log_pos.test:
  Auto merged
mysql-test/t/rpl_rotate_logs.test:
  Auto merged
mysql-test/t/subselect.test:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/ha_ndbcluster.h:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/sql_do.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
2004-11-22 21:33:15 +01:00
unknown
3507a52e60 A fix and test case for Bug#6297 "prepared statement, wrong handling
of <parameter> IS NULL":
we must not only set Item::null_value in Item_param, but implement
Item_param::is_null() to work well with IS NULL/IS NOT NULL clauses.


mysql-test/r/ps.result:
  Test case for Bug#6297: test results fixed.
mysql-test/t/ps.test:
  A test case for Bug#6297 "prepared statement, wrong handling of 
  <parameter> IS NULL"
sql/item.h:
  A fix for Bug#6297: we must not only set null_value in Item_param, but
  also implement Item_param::is_null() to work well with  IS NULL/
  IS NOT NULL.
  Item::is_null() commented.
2004-11-21 12:04:27 +03:00
unknown
e0bf844c8a merge on pull
BitKeeper/etc/logging_ok:
  auto-union
BitKeeper/deleted/.del-Makefile.am:
  Delete: Docs/Images/Makefile.am
configure.in:
  Auto merged
innobase/include/row0mysql.h:
  Auto merged
innobase/lock/lock0lock.c:
  Auto merged
innobase/row/row0mysql.c:
  Auto merged
mysql-test/r/ps.result:
  Auto merged
mysql-test/t/ps.test:
  Auto merged
sql/ha_innodb.cc:
  Auto merged
sql/ha_innodb.h:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_prepare.cc:
  Auto merged
sql/table.cc:
  Auto merged
2004-11-09 04:06:44 +02:00
unknown
714fc4b76c A fix and test case for Bug#6102 "Server crash with prepared statement
and blank after function name".
Crop fruits of copy-paste programming: pre-caching of stored functions
wasn't performed for prepared statements just because implementation
of prepared statements is done as an add-on to the main execution flow, 
and the preload was originally implemented for main execution branch
only (mysql_execute_command).


mysql-test/r/ps.result:
  Test results fixed: bug#6102
mysql-test/t/ps.test:
  A test case for Bug#6102 "Server crash with prepared statement
   and blank after functionname"
sql/sql_prepare.cc:
  A fix for Bug#6102 "Server crash with prepared statement and blank 
  after functionname": we need to preload stored functions from system tables
   before we open any other tables.
2004-11-05 22:02:07 +03:00
unknown
8264d83dfa ps.result, ctype_ucs.result, ctype_ucs.test, ps.test:
Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.


mysql-test/t/ps.test:
  Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.
  Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.
mysql-test/t/ctype_ucs.test:
  Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.
mysql-test/r/ctype_ucs.result:
  Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.
mysql-test/r/ps.result:
  Bug #6351 make test failure "Unknown character set"
  UCS2 related tests were moved into ctype_ucs.
2004-11-05 10:12:33 +04:00
unknown
08c39dd283 Fixed wrong range test code for HEAP tables. This caused a crash when doing a range test with a key that didn't have lower or upper bound (Bug #6082)
More test cases



mysql-test/r/heap.result:
  Test for bug #6082 (delete with NOT NULL)
mysql-test/r/key.result:
  More tests for BUG#6151 - myisam index corruption
mysql-test/r/ps.result:
  Test of bug #6047 "Permission problem when executing mysql_stmt_execute with derived table"
mysql-test/t/heap.test:
  Test for bug #6082 (delete with NOT NULL)
mysql-test/t/key.test:
  More tests for BUG#6151 - myisam index corruption
mysql-test/t/ps.test:
  Test of bug #6047 "Permission problem when executing mysql_stmt_execute with derived table"
sql/ha_heap.cc:
  Fixed wrong range test code for HEAP tables. This caused a crash when doing a range test with a key that didn't have lower or upper bound
2004-10-23 03:30:27 +03:00
unknown
61c1dd02f3 Manual merge
mysql-test/r/ps.result:
  Manual merge.
2004-10-22 22:55:49 +04:00
unknown
9b5cf9464c A fix and test case for Bug#6088 "FOUND_ROWS returns wrong values for
prepared statements when LIMIT is used" and post-review comments.
The fix changes the approach we calculate the need for ORDER BY 
in UNION: the previous was not PS friendly, as it damaged SELECT_LEX 
options in case of single select.


mysql-test/r/ps.result:
  Test results fixed: the test case for Bug#6088
mysql-test/r/subselect.result:
  Test results fixed: now we don't perform ORDER BY for parts of UNION
  if there is no LIMIT clause.
mysql-test/t/ps.test:
  A test case for Bug#6088 "FOUND_ROWS returns wrong values for
   prepared statements when LIMIT is used".
sql/sql_union.cc:
  The actual fix for Bug#6088:
  - don't modify SELECT_LEX'es
  - use boolean variable can_skip_order_by to check if we can skip
    ORDER BY in UNION
2004-10-22 22:51:16 +04:00
unknown
bc6652db9b Fix compiler warnings (detected by Intel's C++ compiler)
Fixed checking of privilege handling in CREATE ... SELECT (Bug #6094)


client/mysql.cc:
  Fix compiler warnings
client/mysqltest.c:
  Fix wrong counting of lines
  Remove compiler warnings
heap/hp_hash.c:
  Fix compiler warnings
innobase/dict/dict0load.c:
  Fix compiler warnings
innobase/include/mem0mem.h:
  Fix compiler warnings
libmysql/client_settings.h:
  Fix compiler warnings
myisam/ft_nlq_search.c:
  Add comments about compiler warnings
myisam/rt_index.c:
  Add comments about compiler warnings
myisam/rt_mbr.c:
  Add comments about compiler warnings
mysql-test/r/ps.result:
  Test case for bug#6094
mysql-test/t/ps.test:
  Test case for bug#6094
mysys/hash.c:
  Fix compiler warnings
mysys/my_handler.c:
  Add comments about compiler warnings
mysys/my_thr_init.c:
  Add comments about compiler warnings
ndb/include/mgmapi/mgmapi.h:
  Fix compiler warnings
regex/main.c:
  Fix compiler warnings
sql/item.h:
  Fix compiler warnings
sql/item_func.h:
  Add comments about compiler warnings
sql/spatial.h:
  Add comments about compiler warnings
sql/sql_lex.h:
  Fix compiler warning
sql/sql_list.h:
  Fix compiler warning
sql/sql_parse.cc:
  Move testing of access rights of tables in CREATE ... SELECT to create_table_precheck() to fix privilege checking in CREATE ... SELECT
  (Bug #6094)
sql/sql_prepare.cc:
  Remove not needed empty line
sql/sql_string.h:
  Fix compiler warnings
strings/ctype-mb.c:
  Fix compiler warnings
2004-10-22 18:44:51 +03:00
unknown
4512a46e65 A fix and test case for Bug#6050 "EXECUTE stmt reports ambiguous field
names with ident. tables fr. diff. schemata": revise all uses of
Item_field and make them prepared-statements friendly when necessary.


mysql-test/r/ps.result:
  Test results fixed: the test case for Bug#6050
mysql-test/r/ps_1general.result:
  Test results fixed: in prepared statements we expand '*' to a list
  of fully qualified fields (db.table.column).
mysql-test/t/ps.test:
  A test for Bug#6050 "EXECUTE stmt reports ambiguous fieldnames with 
  ident. tables fr. diff. schemata"
sql/item.cc:
  Revise all Item_field constructors: we need to make sure that no Item_field
  object points to unaccessible memory in prepared statements.
sql/item.h:
  Revise all Item_field constructors: we need to make sure that no Item_field
  object points to unaccessible memory in prepared statements.
sql/sql_base.cc:
  Item_field use changed to be prepared statements friendly.
sql/sql_class.h:
  New check of Item_arena state.
sql/sql_union.cc:
  Fixing the problem with name resolving in UNION and prepared statements:
  In case of SELECT a, b, c FROM t1 UNION SELECT a, b, c FROM t2 the list of
  selected items is represented as a List<Item_field>, where each 
  Item_field points to a field of temporary table.
  But the temporary table is created anew on each execution of the prepared 
  statement. So on each subsequent execution we should reset Item_field
  items to point to fields from freshly-created temporary table.
sql/table.h:
  Comment TABLE member.
2004-10-22 14:47:35 +04:00
unknown
54b00f5453 A fix and test case for Bug#5985 ""prepare stmt from "select rand(?)"
crashes server." The fix makes Item_func_rand prepared-statements
aware plus it fixes the case when RAND is used in prepared
statements and replication is on (as well as several similar issues).
Until now we did not reset THD before every execution of a prepared
statement, so if some execution had set thd->time_zone_used
or thd->rand_used they would not be reset until next mysql_parse.
Some of post-review fixes done.


mysql-test/r/ps.result:
  A test case for Bug#5985: test results fixed.
mysql-test/t/ps.test:
  A test case for Bug#5985 "prepare stmt from "select rand(?)" crashes
  server."
sql/item_func.cc:
  Actual fix for Bug#5985: Item_func_rand rewritten to be 
  prepared statements aware.
sql/item_func.h:
  Actual fix for Bug#5985: Item_func_rand rewritten to be 
  prepared statements aware.
sql/mysql_priv.h:
  We need a separate call to reset THD state before every execute of
  a prepared statement. Otherwise things like THD->user_var_events
  are never cleaned up and bloat binary log (as the list of events
  grows from execution to execution).
sql/sql_class.cc:
  Statement::end_statement -> THD::end_statement()
  (a leftover from some design change which is not to pushed now, but the
  leftover is to be pushed).
sql/sql_class.h:
  Statement::end_statement -> THD::end_statement()
  (a leftover from some design change which is not to pushed now, but the
  leftover is to be pushed).
sql/sql_lex.cc:
  Move the part responsible for initializing LEX from mysql_init_query
  to lex_start.
sql/sql_lex.h:
  All lex-related initialization is now in lex_start.
  Move thd->select_number to lex->select_number to be able to use it
  easily in lex_start.
sql/sql_parse.cc:
  Split mysql_init_query into two functions: mysql_reset_thd_for_next_query,
  which is used in PS and conventional execution, and lex_start, used only
  when we want to parse something.
  Fix init_connect to use initialized THD.
sql/sql_prepare.cc:
  Deploy mysql_reset_thd_for_next_query to reset THD state before
  execution of a prepared statement.
  Normally this should have been added to just one place, but
  we have to reset thd before assigning placeholders from variables,
  thus we can't do that in execute_stmt (yuck).
2004-10-14 02:53:59 +04:00
unknown
d007600b9b ps.test, ps.result: a test case for Bug#6042 "constants
propogation works only once (prepared statements)".


mysql-test/r/ps.result:
  Test case for Bug#6042: test results fixed
mysql-test/t/ps.test:
  A test case for Bug#6042 "constants propogation works only once
  (prepared statements).
2004-10-12 21:16:07 +04:00
unknown
1d48aec228 A fix and test case for Bug#5987 "subselect in bool function
crashes server (prepared statements)": the bug was that all boolean
items always recovered its original arguments at statement cleanup 
stage.
This collided with Item_subselect::select_transformer, which tries to 
permanently change the item tree to use a transformed subselect instead of
original one.
So we had this call sequence for prepare:
mysql_stmt_prepare -> JOIN::prepare -> 
Item_subselect::fix_fields -> the item tree gets transformed ->
Item_bool_rowready_func2::cleanup, item tree is recovered to original
state, while it shouldn't have been;
mysql_stmt_execute -> attempts to execute a broken tree -> crash.
Now instead of bluntly recovering all arguments of bool functions in 
Item_bool_rowready_func2::cleanup, we recover only those
which were changed, and do it in one place.
There still would exist a possibility for a collision with subselect
tranformation, if permanent and temporary changes were performed at the 
same stage.
But fortunately subselect transformation is always done first, so it 
doesn't conflict with the optimization done by propogate_cond_constants.
Now we have: 
mysql_stmt_prepare -> JOIN::prepare -> subselect transformation 
permanently changes the tree -> cleanup doesn't recover anything, 
because nothing was registered for recovery.
mysql_stmt_execute -> JOIN::prepare (the tree is already transformed, 
so it doesn't change), JOIN::optimize -> 
propogate_cond_constants -> temporary changes the item tree 
with constants -> JOIN::execute -> cleanup -> 
the changes done by propogate_cond_constants are recovered, as
they were registered for recovery.


mysql-test/r/ps.result:
  Bug#5987: test results fixed.
mysql-test/t/ps.test:
  A test for bug#5987 "subselect in bool function crashes server 
  (prepared statements)"
sql/item.cc:
  resolve_const_item is now responsible to register all changes of the 
  item tree for recovery
sql/item.h:
  resolve_const_item signagture changed
sql/item_cmpfunc.h:
  Arguments of boolean functions are now recovered using the 
  centralized registry of THD.
sql/sql_class.cc:
  It's crucial to add new items to the beginning of the recovery list,
  so that the recovery is performed in LIFO mode: otherwise if we 
  change one node of a tree twice, it will be recovered to some intermediate
  state.
sql/sql_select.cc:
  change_cond_ref_to_const and propogate_cond_constants are now responsible
  to register all changes of the item tree for recovery.
  The recovery is done using the centralized THD registry of
  changed tree items.
2004-10-10 02:39:22 +04:00
unknown
8fa6f37a29 A fix for Bug#5748 "Prepared statement with BETWEEN and bigint values
crashes mysqld": implementation for a generic item tree modifications
registry. Every item tree modification which should be rolled back for
subsequent execution of a prepared statement or stored procedure should
be saved in the registry. All such modifications are rolled back at once
during cleanup stage of PS.
Actual fix for the bug just adds a call to register modifications to
convert_constant_item.
Post review fixes implemented.


mysql-test/r/ps.result:
  A fix for bug#5748, test results fixed.
mysql-test/t/ps.test:
  A test case for Bug#5748 "Prepared statement with BETWEEN and bigint 
  values crashes mysqld"
sql/item.cc:
  Fix for Bug#5748 "Prepared statement with BETWEEN and bigint values
  crashes mysqld":
  First step in removing up item-specific cleanups: now all such
  tree modifications should be done using the genericm mechanism implemented
  in this changeset.
sql/item.h:
  Fix for Bug#5748 "Prepared statement with BETWEEN and bigint values
  crashes mysqld": no need for an item-specific change record any more.
sql/item_cmpfunc.cc:
  A fix for Bug#5748 "Prepared statement with BETWEEN and bigint 
  values crashes mysqld": register item tree transformation performed by
  convert_constant_item.
sql/sql_class.cc:
  Implementation for item tree transformations registry.
sql/sql_class.h:
  Declarations, necessary for the tree transformations registry.
sql/sql_parse.cc:
  Assert that the item tree transformations registry is not used for 
  conventional execution.
sql/sql_prepare.cc:
  Use of the item tree modifications registry in prepared statements:
  rollback all modifications in the end of statement prepare and execute.
  Also we now always set thd->current_arena to be able to determine that
  this is an execution of prepared statement inside the registry code.
tests/client_test.c:
  A typo fixed.
2004-10-08 02:21:19 +04:00
unknown
edcccfbc4b A fix and test case for bug#5688 "Upgraded 4.1.5 Server seg faults"
mysql-test/r/ps.result:
  Test results fixed: the test case for bug#5688 "Upgraded 4.1.5 Server 
  seg faults"
mysql-test/t/ps.test:
  Test case for bug#5688 "Upgraded 4.1.5 Server seg faults"
sql/item_cmpfunc.cc:
  A fix for bug#5688 "Upgraded 4.1.5 Server seg faults":
  fix just another place where we use wrong memory root for an Item
  in statement prepare.
  In addition, make the check for charsets in Item_bool_func2
  more generic (fixes the test case when we use LIKE to compare BLOBs
  with TEXT data).
2004-09-23 18:01:55 +04:00
unknown
52683755d3 A fix and test case for bug#5510 "inserting Null in AutoIncrement primary
key Column Fails".


mysql-test/r/ps.result:
  Test results updated: a test case for Bug#5510 "inserting Null in 
  AutoIncrement primary key Column Fails".
mysql-test/r/ps_2myisam.result:
  Bug#5510: a different warning in case of NULL->default truncation.This is 
  OK, the new warning is the same as produced by conventional execution.
mysql-test/r/ps_3innodb.result:
  Bug#5510: a different warning in case of NULL->default truncation.This is 
  OK, the new warning is the same as produced by conventional execution.
mysql-test/r/ps_4heap.result:
  Bug#5510: a different warning in case of NULL->default truncation.This is 
  OK, the new warning is the same as produced by conventional execution.
mysql-test/r/ps_5merge.result:
  Bug#5510: a different warning in case of NULL->default truncation.This is 
  OK, the new warning is the same as produced by conventional execution.
mysql-test/r/ps_6bdb.result:
  Bug#5510: a different warning in case of NULL->default truncation.This is 
  OK, the new warning is the same as produced by conventional execution.
mysql-test/t/ps.test:
  A test case for Bug#5510 "inserting Null in AutoIncrement primary key Column 
  Fails".
sql/item.cc:
  A fix for bug#5510 "inserting Null in AutoIncrement primary key Column 
  Fails": use proper Field API function for NULL placholeders.
2004-09-18 01:10:09 +04:00
unknown
38628bca1b A quick fix for bug#5556: replace a column of SHOW TABLE STATUS result
with a fixed constant to pass on QNX:
max_data_file_length is calculated depending on max possible value of
record pointer. It's different on QNX, so the difference in results is OK.


mysql-test/t/ps.test:
  A quick fix for bug#5556: replace a column of SHOW TABLE STATUS result
  with a fixed constant to pass on QNX:
  max_data_file_length is calculated depending on max value of record
  pointer. It's different on QNX, so the result difference is intentional.
2004-09-16 22:13:24 +04:00
unknown
14c4d0d72e A fix for bug#4368 '"like" fails in PreparedStatement, crashes
server': the bug occurs when arguments of LIKE function are in 
differentcharacter sets. If these character sets are compatible, 
we create an item-converter. In prepared mode, this item
needs to be created in memory of current prepared statement.


mysql-test/r/ps.result:
  Test for Bug#4368 added.
mysql-test/t/ps.test:
  A test case for bug#4368 '"like" fails in PreparedStatement, 
  crashes server'.
2004-09-03 23:28:49 +04:00
unknown
02d3c02281 Fix for BUG#5242: Made SQL Syntax Prepared Statement names case-insensitive.
mysql-test/r/ps.result:
  Testcase for BUG#5242
mysql-test/t/ps.test:
  Testcase for BUG#5242
2004-08-29 19:44:28 +04:00
unknown
49bd559eb8 Fix for Bug#5034 "prepared "select 1 into @arg15", second
execute crashes server": we were deleting lex->result
after each execute, but prepared statements assumed that
it's left intact.
The fix adds cleanup() method to select_result hierarchy,
so that result objects can be reused.
Plus we now need to delete result objects more wisely.


mysql-test/r/ps.result:
  Test results fixed: test case for bug#5034
mysql-test/t/ps.test:
  A test case for bug#5034, few followups
sql/sql_class.cc:
  - fix warning in THD::THD
  - implementation of cleanup() for select_result hierarchy
  - select_export::send_eof was identical to 
    select_dump::send_eof: moved to the base class select_to_file.
  - Statement::end_statement() to end lex, free items, and
    delete possible select_result
sql/sql_class.h:
  - select_result::cleanup() declaration
  -
sql/sql_insert.cc:
  - implementation of select_insert::cleanup(): currently
    we always create a new instance of select_insert/
    select_create on each execute.
sql/sql_lex.cc:
  - with more complicated logic of freeing lex->result it's 
    easier to have it non-zero only if it points to a valid
    result.
sql/sql_lex.h:
  Now st_lex::st_lex is not empty.
sql/sql_parse.cc:
  mysql_execute_command():
  - delete select_result *result only if it was created in
    this function.
  - use end_statement() to cleanup lex and thd in the end of
    each statement.
  - no need to save THD::lock if this is explain. This save
    apparently left from times when derived tables were 
    materialized here, not in open_and_lock_tables.
sql/sql_prepare.cc:
  - call result->cleanup() in reset_stmt_for_execute
  - now Statement is responsible for freeing its lex->result.
sql/sql_select.cc:
  handle_select():
  - don't delete result, it might be needed
    for next executions
  - result is never null
2004-08-24 20:17:11 +04:00
unknown
095b686c09 Fix for bug#4912 "mysqld crashs in case a statement is executed
a second time". The bug was caused by incompatibility of
negations elimination algorithm and PS: during first statement 
execute a subtree with negation was replaced with equivalent 
subtree without NOTs.
The problem was that although this transformation was permanent, 
items of the new subtree were created in execute-local memory.
The patch adds means to check if it is the first execute of a
prepared statement, and if this is the case, to allocate items
in memory of the prepared statement.
The implementation:
- backports Item_arena from 5.0
- adds Item_arena::is_stmt_prepare(), 
  Item_arena::is_first_stmt_execute().
- deletes THD::allocate_temporary_pool_for_ps_preparing(),
  THD::free_temporary_pool_for_ps_preparing(); they
  were redundant.
and adds a few invariants:
- thd->free_list never contains junk (= freed items)
- thd->current_arena is never null. If there is no
  prepared statement, it points at the thd. 
The rest of the patch contains mainly mechanical changes and
cleanups.


mysql-test/r/ps.result:
  Test results updated (test case for Bug#4912)
mysql-test/t/ps.test:
  A test case for Bug#4912 "mysqld crashs in case a statement is 
  executed a second time"
sql/item_cmpfunc.cc:
  current_statement -> current_arena
sql/item_subselect.cc:
  Statement -> Item_arena, current_statement -> current_arena
sql/item_subselect.h:
  Item_subselect does not need to save thd->current_statement.
sql/item_sum.cc:
  Statement -> Item_arena
sql/item_sum.h:
  Statement -> Item_arena
sql/mysql_priv.h:
  Statement -> Item_arena
sql/sql_base.cc:
  current_statement -> current_arena
sql/sql_class.cc:
  - Item_arena
  - convenient set_n_backup_statement, restore_backup_statement
  (nice idea, Sanja)
sql/sql_class.h:
  - Item_arena: backport from 5.0
  - allocate_temporary_pool_for_ps_preparing,
    free_temporary_pool_for_ps_preparing removed.
sql/sql_derived.cc:
  current_statement -> current_arena
sql/sql_lex.cc:
  current_statement -> current_arena
sql/sql_parse.cc:
  Deploy invariant that thd->free_list never contains junk items
  (backport from 5.0).
sql/sql_prepare.cc:
  - backporting Item_arena
  - no need to allocate_temporary_pool_for_ps_preparing().
sql/sql_select.cc:
  Fix for bug#4912 "mysqld crashs in case a statement is 
  executed a second time": if this is the first execute of
  a prepared statement, negation elimination is
  done in memory of the prepared statement.
sql/sql_union.cc:
  Backporting Item_arena from 5.0.
2004-08-21 02:02:46 +04:00
unknown
f7b9e75b15 removed using lex->select_lex.options is SHOW TABLE [STATUS] commands (BUG#4288)
mysql-test/r/func_group.result:
  fixed
mysql-test/r/ps.result:
  SHOW TABLE STATUS test
mysql-test/t/ps.test:
  SHOW TABLE STATUS test
sql/sql_parse.cc:
  Use lex->describe instead of lex->select_lex.options
sql/sql_yacc.yy:
  removed unneed initialization of lex->select_lex.options
2004-06-27 00:34:05 +02:00
unknown
1249934266 correct eq() method for Item_param (BUG#4233)
mysql-test/r/ps.result:
  eq() for parameters test
mysql-test/t/ps.test:
  eq() for parameters test
sql/item.h:
  correct eq() method for Item_param
2004-06-26 23:55:38 +02:00
unknown
2cf6338bda merge 2004-06-25 18:33:31 +03:00
unknown
ef0b6f0703 type of parameter assignment for parameters from variables added (BUG#4280)
mysql-test/r/ps.result:
  parameters from variables (for field creation)
mysql-test/t/ps.test:
  parameters from variables (for field creation)
sql/item.cc:
  type of parameter assignment for parameters from variables
sql/item.h:
  removed spaces at line ends in Item_param definition
2004-06-25 15:16:00 +03:00
unknown
e80cfbc068 fixed EXPLAIN behaviour with prepared statements (BUG#4271)
mysql-test/r/ps.result:
  test of prepared EXPLAIN
mysql-test/t/ps.test:
  fix layout and table removing of previous tests
  test of prepared EXPLAIN
sql/sql_prepare.cc:
  explain pave to be prepared, too
  cleanup options after explain execution
sql/sql_select.cc:
  removed unneed assignment
2004-06-25 11:37:43 +03:00
unknown
3df8b829b6 Fixed BUG#3486: FOUND_ROWS() fails inside stored procedure [and prepared statement].
mysql-test/r/ps.result:
  New test case for BUG#3486.
mysql-test/t/ps.test:
  New test case for BUG#3486.
sql/item_create.cc:
  Create an Item_func_found_rows() at parse time, not an Item_int.
sql/item_func.cc:
  Added val_int() method for new Item_func_found_rows class.
sql/item_func.h:
  New class Item_func_found_rows for FOUND_ROWS() function.
sql/sql_select.cc:
  Don't reset thd->limit_found_rows too early, or FOUND_ROWS() wont work.
2004-06-22 19:38:07 +02:00
unknown
cbfe9f0517 Fix for bug#4105 "Server crash on attempt to prepare a statement with
character set introducer": add new item type to be returned before from 
Item_param until it's value is set.
This way items like Item_bool_func2 and udf_handler won't treat this item
as constant literal when statement is prepared.


mysql-test/r/ps.result:
  Test results fixed (test case for bug #4105)
mysql-test/t/ps.test:
  Followup to bug #4105: a test case.
sql/item.cc:
  Fix for bug#4105 "Server crash on attempt to prepare a statement with 
  character set introducer": add new item type to be returned before from 
  Item_param until it's value is set.
sql/item.h:
  Fix for bug#4105 "Server crash on attempt to prepare a statement with 
  character set introducer": add new item type to be returned before from 
  Item_param until it's value is set.
2004-06-18 04:16:08 +04:00
unknown
e7710af7f4 WL#1622 "SQL Syntax for Prepared Statements": Post-review fixes (1 of 2)
mysql-test/r/ps.result:
  Added tests for PREPARE stmt1 FROM @var syntax
mysql-test/t/ps.test:
  Added tests for PREPARE stmt1 FROM @var syntax
mysys/my_error.c:
  Added support for "%.*s" format
sql/item.cc:
  Removed one redundant Item_param::set_value function
sql/item.h:
  Removed one redundant Item_param::set_value function
sql/mysqld.cc:
  Reformmated the code
sql/share/czech/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/dutch/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/english/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/estonian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/french/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/german/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/greek/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/hungarian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/italian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/japanese/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/korean/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/norwegian-ny/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/norwegian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/polish/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/portuguese/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/romanian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/russian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/slovak/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/spanish/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/swedish/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/share/ukrainian/errmsg.txt:
  Changed ER_UNKNOWN_STMT_HANDLER format string
sql/sql_class.h:
  SQL Prepared statements now can't be used by binary protocol commands
sql/sql_lex.h:
  Added support for PREPARE stmt1 FROM @var syntax.
sql/sql_parse.cc:
  Added support for PREPARE stmt1 FROM @var syntax.
sql/sql_prepare.cc:
  Code cleanup
sql/sql_yacc.yy:
  Added support for PREPARE stmt1 FROM @var syntax.
2004-05-21 04:27:50 +04:00
unknown
dee8f22c07 Added a test for a problem that was fixed by automerge and fixed a typo. 2004-05-07 03:32:51 +04:00
unknown
47322bf9b8 WL#1622 "SQL Syntax for Prepared Statements" - cosmetic code review fixes
mysql-test/r/ps.result:
  Added check if multiple SQL statements inside a PS are disabled
mysql-test/t/ps.test:
  Added check if multiple SQL statements inside a PS are disabled
2004-04-30 20:08:38 +04:00
unknown
4ceaf3a629 Correct handling of parameter variables with NULL values in PREPARE queries 2004-04-07 12:58:28 +04:00
unknown
ef8a5401f1 Many files:
SQL Syntax for Prepared Statements (WL#1622)
ps.test, ps.result:
  new file


sql/item.cc:
  SQL Syntax for Prepared Statements (WL#1622)
sql/item.h:
  SQL Syntax for Prepared Statements (WL#1622)
sql/lex.h:
  SQL Syntax for Prepared Statements (WL#1622)
sql/mysql_priv.h:
  SQL Syntax for Prepared Statements (WL#1622)
sql/mysqld.cc:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_class.cc:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_class.h:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_lex.h:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_parse.cc:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_prepare.cc:
  SQL Syntax for Prepared Statements (WL#1622)
sql/sql_yacc.yy:
  SQL Syntax for Prepared Statements (WL#1622)
2004-04-05 19:43:37 +04:00