Commit graph

532 commits

Author SHA1 Message Date
konstantin@mysql.com
4d25d2154c Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  mysql.com:/opt/local/work/mysql-5.0-17199
2006-06-27 00:52:56 +04:00
konstantin@mysql.com
117b76a562 A fix and a test case for
Bug#19022 "Memory bug when switching db during trigger execution"
 Bug#17199 "Problem when view calls function from another database."
 Bug#18444 "Fully qualified stored function names don't work correctly in
            SELECT statements"

 Documentation note: this patch introduces a change in behaviour of prepared
 statements.

 This patch adds a few new invariants with regard to how THD::db should
 be used. These invariants should be preserved in future:

  - one should never refer to THD::db by pointer and always make a deep copy
    (strmake, strdup)
  - one should never compare two databases by pointer, but use strncmp or
    my_strncasecmp
  - TABLE_LIST object table->db should be always initialized in the parser or
    by creator of the object.

    For prepared statements it means that if the current database is changed
    after a statement is prepared, the database that was current at prepare
    remains active. This also means that you can not prepare a statement that
    implicitly refers to the current database if the latter is not set.
    This is not documented, and therefore needs documentation. This is NOT a
    change in behavior for almost all SQL statements except:
     - ALTER TABLE t1 RENAME t2 
     - OPTIMIZE TABLE t1
     - ANALYZE TABLE t1
     - TRUNCATE TABLE t1 --
     until this patch t1 or t2 could be evaluated at the first execution of
     prepared statement. 

     CURRENT_DATABASE() still works OK and is evaluated at every execution
     of prepared statement.

     Note, that in stored routines this is not an issue as the default
     database is the database of the stored procedure and "use" statement
     is prohibited in stored routines.

  This patch makes obsolete the use of check_db_used (it was never used in the
  old code too) and all other places that check for table->db and assign it
  from THD::db if it's NULL, except the parser.

 How this patch was created: THD::{db,db_length} were replaced with a
 LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
 manually checked and:
  - if the place uses thd->db by pointer, it was fixed to make a deep copy
  - if a place compared two db pointers, it was fixed to compare them by value
    (via strcmp/my_strcasecmp, whatever was approproate)
 Then this intermediate patch was used to write a smaller patch that does the
 same thing but without a rename.

 TODO in 5.1:
   - remove check_db_used
   - deploy THD::set_db in mysql_change_db

 See also comments to individual files.
2006-06-27 00:47:52 +04:00
konstantin@mysql.com
a04bfd8e2a Merge mysql.com:/opt/local/work/tmp_merge
into  mysql.com:/opt/local/work/mysql-5.1-runtime
2006-06-26 18:49:20 +04:00
konstantin@mysql.com
e20898a507 A fix and a test case for Bug#15217 "Using a SP cursor on a table created
with PREPARE fails with weird error".
More generally, re-executing a stored procedure with a complex SP cursor query
could lead to a crash.

The cause of the problem was that SP cursor queries were not optimized 
properly at first execution: their parse tree belongs to sp_instr_cpush,
not sp_instr_copen, and thus the tree was tagged "EXECUTED" when the
cursor was declared, not when it was opened. This led to loss of optimization
transformations performed at first execution, as sp_instr_copen saw that the
query is already "EXECUTED" and therefore either not ran first-execution 
related blocks or wrongly rolled back the transformations caused by 
first-execution code.
The fix is to update the state of the parsed tree only when the tree is
executed, as opposed to when the instruction containing the tree is executed.
Assignment if i->state is moved to reset_lex_and_exec_core.
2006-06-22 19:29:48 +04:00
lars@mysql.com
5f37fc4a76 Merge mysql.com:/users/lthalmann/bkroot/mysql-5.1-new-rpl
into  mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge
2006-06-16 01:15:19 +02:00
msvensson@neptunus.(none)
2c538f6cde Merge bk-internal:/home/bk/mysql-5.1
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint
2006-06-10 20:33:50 +02:00
mats@mysql.com
321d9d842f Bug#19066 (DELETE FROM inconsistency for NDB):
Under row-based replication, DELETE FROM will now always be
replicated as individual row deletions, while TRUNCATE TABLE will
always be replicated as a statement.
2006-06-01 11:53:27 +02:00
jani@a193-229-222-105.elisa-laajakaista.fi
c81b4c01bf Merge a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0
into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.1-new
2006-05-30 16:07:49 +03:00
msvensson@shellback.(none)
f4920b706f Merge bk-internal:/home/bk/mysql-5.1-new
into  shellback.(none):/home/msvensson/mysql/mysql-5.1-new-maint
2006-05-18 20:21:43 +02:00
msvensson@shellback.(none)
6ce0113d5a Move test that requires innodb to sp_trans 2006-05-18 19:26:53 +02:00
anozdrin@mysql.com
6699f81cc1 Test case for BUG#18037: Server crash when returning system
variable in stored procedures.
2006-05-18 14:44:15 +04:00
knielsen@mysql.com
a061c90d8a Merge mysql.com:/usr/local/mysql/tmp_merge
into  mysql.com:/usr/local/mysql/merge-5.1
2006-05-18 11:56:50 +02:00
anozdrin@mysql.com
65b87b86a3 Fix for BUG#18587: Function that accepts and returns TEXT
garbles data if longer than 766 chars.

The problem is that a stored routine returns BLOBs to the previous
caller, BLOBs are shallow-copied (i.e. only pointers to the data are
copied). The fix is to also copy data of BLOBs.
2006-05-10 23:16:30 +04:00
dlenev@mysql.com
b9d49ee894 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  mysql.com:/home/dlenev/mysql-5.0-bg12472
2006-05-09 16:48:23 +04:00
dlenev@mysql.com
589daad10f Fix for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly
or implicitly uses stored function gives "Table not locked" error'

CREATE TABLE ... SELECT ... statement which was explicitly or implicitly
(through view) using stored function gave "Table not locked" error.

The actual bug resides in the current locking scheme of CREATE TABLE SELECT
code, which first opens and locks tables of the SELECT statement itself,
and then, having SELECT tables locked, creates the .FRM, opens the .FRM and
acquires lock on it. This scheme opens a possibility for a deadlock, which
was present and ignored since version 3.23 or earlier. This scheme also
conflicts with the invariant of the prelocking algorithm -- no table can
be open and locked while there are tables locked in prelocked mode.

The patch makes an exception for this invariant when doing CREATE TABLE ...
SELECT, thus extending the possibility of a deadlock to the prelocked mode.
We can't supply a better fix in 5.0.
2006-05-09 16:39:11 +04:00
pem@mysql.com
0e2d20b1cb Merge mysql.com:/extern/mysql/5.1/generic/mysql-5.0-merge
into  mysql.com:/extern/mysql/5.1/generic/mysql-5.1-new
2006-04-25 16:20:49 +02:00
kroki@mysql.com
b0c1e49a11 Bug#15728: LAST_INSERT_ID function inside a stored function returns 0
Do not reset value of LAST_INSERT_ID() in sub-statement.
2006-04-21 18:55:04 +04:00
pem@mysql.com
9eb230f9bd Fixed BUG#18344: DROP DATABASE does not drop associated routines
We must use the db key length in sp_drop_db_routines (and not the
  number of characters), or long db names will be truncated in the key.
2006-04-18 16:01:01 +02:00
pem@mysql.com
868ffcca86 Merge mysql.com:/extern/mysql/bk/mysql-5.0-runtime
into  mysql.com:/extern/mysql/5.0/bug18787/mysql-5.0-runtime
2006-04-18 11:20:18 +02:00
pem@mysql.com
57107fc975 Fixed BUG#18787: Server crashed when calling a stored procedure containing
a misnamed function
  ... in the presence of a continue handler. The problem was that with a
  handler, it continued to execute as if function existed and had set a
  useful return value (which it hadn't).
  The fix is to set a null return value and do an error return when a function
  wasn't found.
2006-04-11 12:17:57 +02:00
svoj@april.(none)
fb37c30699 Merge april.(none):/home/svoj/devel/mysql/BUG14945/mysql-5.0
into  april.(none):/home/svoj/devel/mysql/BUG14945/mysql-5.1-new
2006-04-06 16:44:26 +05:00
svoj@april.(none)
209682e051 Fix for bug#14945 "Truncate table doesn't reset the auto_increment
counter".

When TRUNCATE TABLE was called within an stored procedure the
auto_increment counter was not reset to 0 even if straight
TRUNCATE for this table did this.

This fix makes TRUNCATE in stored procedures to be handled exactly
in the same way as straight TRUNCATE. We achieve this by rolling
back the fix for bug 8850, which is no longer needed since stored
procedures don't require prelocked mode anymore (and TRUNCATE is
not allowed in stored functions or triggers).
2006-04-06 15:19:01 +05:00
konstantin@mysql.com
08eff11273 Merge mysql.com:/opt/local/work/tmp_merge2
into  mysql.com:/opt/local/work/mysql-5.1-merge
2006-03-30 19:12:10 +04:00
pem@mysql.com
1a1da0e3ef Merge mysql.com:/extern/mysql/bk/mysql-5.0-runtime
into  mysql.com:/extern/mysql/5.0/bug16474/mysql-5.0-runtime
2006-03-28 14:18:47 +02:00
pem@mysql.com
b310d4fb4d Post review fixes for BUG#16474: SP crashed MySQL. 2006-03-28 14:16:21 +02:00
lars@mysql.com
681c8717ae Merge mysql.com:/users/lthalmann/bkroot/mysql-5.1-new
into  mysql.com:/users/lthalmann/bk/mysql-5.1-new-wl3023-mats
2006-03-10 17:31:06 +01:00
pem@mysql.com
61f2dc713b Fixed BUG#16474: SP crashed MySQL
fix_fields() was not called for "order by" variables if the type was a
  "constant integer", and thus interpreted as a column index.
  However, a local variable is an expression and should not be interpreted
  as a column index. Instead it behaves just like when using a user variable
  for instance (i.e. it will not affect the ordering).
2006-03-10 14:04:56 +01:00
anozdrin@mysql.com
bceb52b34e Merge mysql.com:/home/alik/Documents/AllProgs/MySQL/devel/5.0-tree
into  mysql.com:/home/alik/Documents/AllProgs/MySQL/devel/5.1-merged
2006-03-10 14:48:18 +03:00
evgen@moonbone.local
c5493b6316 Fixed bug#13575: SP funcs in select with distinct/group and order by can
produce wrong data

By default Item_sp_func::val_str() returns string from it's result_field 
internal buffer. When grouping is present Item_copy_string is used to 
store SP function result, but it doesn't additionally buffer the result.
When the next record is read, internal buffer is overwritten, due to
this Item_copy_string::val_str() will have wrong data. Thus producing
weird query result.

The Item_func_sp::val_str() now makes a copy of returned value to prevent
occasional corruption.
2006-03-10 13:53:00 +03:00
msvensson@neptunus.(none)
ebb3f2c348 Merge neptunus.(none):/home/msvensson/mysql/bug10656/my51-bug10656
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1
2006-03-09 13:12:20 +01:00
msvensson@neptunus.(none)
e28000c201 Merge neptunus.(none):/home/msvensson/mysql/bug10656/my50-bug10656
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0
2006-03-09 13:11:40 +01:00
msvensson@neptunus.(none)
64003dae21 Merge neptunus.(none):/home/msvensson/mysql/bug10656/my50-bug10656
into  neptunus.(none):/home/msvensson/mysql/bug10656/my51-bug10656
2006-03-09 12:55:56 +01:00
msvensson@neptunus.(none)
a7b954447f Bug#10656 Stored Procedure - Create index and Truncate table command error
-Add test case
Move testcase that needs innodb from sp.test => sp_trans.test
2006-03-09 12:08:23 +01:00
mats@mysql.com
8d10f7b7a1 Merge mysql.com:/home/bkroot/mysql-5.1-new
into  mysql.com:/home/bk/w3023-mysql-5.1-new
2006-03-07 10:00:13 +01:00
pem@mysql.com
a065843799 Merge mysql.com:/extern/mysql/5.0/generic/mysql-5.0
into  mysql.com:/extern/mysql/5.1/generic/mysql-5.1-new
2006-03-06 19:46:17 +01:00
kent@mysql.com
dfae81d014 Merge mysql.com:/Users/kent/mysql/bk/mysql-5.0-tmp
into mysql.com:/Users/kent/mysql/bk/mysql-5.1-new
2006-03-06 12:15:26 +01:00
pem@mysql.com
2b6f510350 Merge mysql.com:/extern/mysql/5.0/bug16887/mysql-5.0-runtime
into  mysql.com:/extern/mysql/5.0/bug16887/mysql-5.0
2006-03-03 19:18:17 +01:00
pem@mysql.com
015ab71a50 Merge mysql.com:/extern/mysql/5.0/bug17476/mysql-5.0
into  mysql.com:/extern/mysql/5.1/generic/mysql-5.1-new
2006-03-03 12:03:27 +01:00
ramil@mysql.com
1a07140515 Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/usr/home/ram/work/5.0.b17615
2006-03-03 09:35:25 +04:00
pem@mysql.com
d85e929547 Fixed BUG#17476: Stored procedure not returning data when it is called first
time per connection
  Removed const_string() method from Item_string (it was only used in one
  place, in a bad way). Defer possible SP variable, and access data directly
  instead, in date_format item.
2006-03-02 14:54:04 +01:00
ramil@mysql.com
72da0c6091 Fix for bug #17615: invalid handling of function results in UPDATE...SET statement. 2006-03-02 15:05:55 +04:00
mats@mysql.com
1e66bc0d16 Merge mysql.com:/home/bkroot/mysql-5.1-new
into  mysql.com:/home/bk/w3023-mysql-5.1-new
2006-02-28 10:06:58 +01:00
monty@mysql.com
1e2e9e2856 Merge mysql.com:/home/my/mysql-5.0
into  mysql.com:/home/my/mysql-5.1
2006-02-25 21:54:34 +02:00
monty@mysql.com
82b77cdd90 Fixes to embedded server to be able to run tests with it
(Needed for "list of pushes" web page and autopush)
2006-02-24 18:34:15 +02:00
mats@mysql.com
13a61982a9 Merge mysqldev@production.mysql.com:my/mysql-5.1-release
into  mysql.com:/home/bk/w3023-mysql-5.1-new
2006-02-24 16:31:38 +01:00
mats@mysql.com
101edab125 WL#3023 (RBR: Use locks in a statement-like manner):
Adaptions to make it work with NDB.
2006-02-24 16:19:55 +01:00
msvensson@neptunus.(none)
71ef9102c1 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0
2006-02-23 10:45:39 +01:00
msvensson@neptunus.(none)
8d78cd3e3c Merge bk-internal:/home/bk/mysql-5.1-new
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1
2006-02-23 10:41:37 +01:00
konstantin@mysql.com
a27e32b565 Merge mysql.com:/home/kostja/mysql/mysql-5.0-root
into  mysql.com:/home/kostja/mysql/mysql-5.1-merge
2006-02-22 14:04:24 +03:00
msvensson@neptunus.(none)
8e760bc6cc Merge neptunus.(none):/home/msvensson/mysql/mysqltest_replace/my51-mysqltest_replace
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1
2006-02-21 10:37:10 +01:00