mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
MDEV-5317 out parameters in PREPARE "SELECT ... INTO"
originally based on the patch by Antony T Curtis
This commit is contained in:
parent
278f7fdd7e
commit
a99af484cd
14 changed files with 351 additions and 9 deletions
|
@ -256,9 +256,14 @@ execute stmt1 using @my_key ;
|
|||
execute full_info ;
|
||||
--disable_metadata
|
||||
|
||||
# the next statement must fail
|
||||
--error 1064
|
||||
# the next statement does not fail anymore
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
execute stmt1 using @result;
|
||||
--enable_metadata
|
||||
execute full_info ;
|
||||
--disable_metadata
|
||||
select @result;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -2265,7 +2265,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
|
|
@ -2248,7 +2248,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
|
|
@ -2249,7 +2249,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 0 31 8
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 0 31 8
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 0 31 8
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 0 31 8
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
|
|
@ -2185,7 +2185,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
@ -5539,7 +5578,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
|
|
@ -2265,7 +2265,46 @@ def @arg32 250 16777215 0 Y 0 31 8
|
|||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? from t9 where c1= 1' at line 1
|
||||
execute stmt1 using @result;
|
||||
execute full_info ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg01 8 20 1 Y 32896 0 63
|
||||
def @arg02 8 20 0 Y 32896 0 63
|
||||
def @arg03 8 20 0 Y 32896 0 63
|
||||
def @arg04 8 20 0 Y 32896 0 63
|
||||
def @arg05 8 20 0 Y 32896 0 63
|
||||
def @arg06 8 20 0 Y 32896 0 63
|
||||
def @arg07 5 23 0 Y 32896 31 63
|
||||
def @arg08 5 23 0 Y 32896 31 63
|
||||
def @arg09 5 23 0 Y 32896 31 63
|
||||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
test_sequence
|
||||
-- insert into numeric columns --
|
||||
insert into t9
|
||||
|
|
26
mysql-test/suite/rpl/r/prepare_select_into.result
Normal file
26
mysql-test/suite/rpl/r/prepare_select_into.result
Normal file
|
@ -0,0 +1,26 @@
|
|||
include/master-slave.inc
|
||||
[connection master]
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (c int);
|
||||
insert t1 values (1, 2), (3, 4);
|
||||
create function fn1(x int) returns int deterministic
|
||||
begin
|
||||
insert t2 values (x);
|
||||
return x;
|
||||
end|
|
||||
prepare stmt1 from "select fn1(a) into ? from t1 where b= 2";
|
||||
execute stmt1 using @result;
|
||||
select * from t2;
|
||||
c
|
||||
1
|
||||
1
|
||||
select @result;
|
||||
@result
|
||||
1
|
||||
select * from t2;
|
||||
c
|
||||
1
|
||||
1
|
||||
drop table t1, t2;
|
||||
drop function fn1;
|
||||
include/rpl_end.inc
|
27
mysql-test/suite/rpl/t/prepare_select_into.test
Normal file
27
mysql-test/suite/rpl/t/prepare_select_into.test
Normal file
|
@ -0,0 +1,27 @@
|
|||
source include/master-slave.inc;
|
||||
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (c int);
|
||||
insert t1 values (1, 2), (3, 4);
|
||||
|
||||
delimiter |;
|
||||
create function fn1(x int) returns int deterministic
|
||||
begin
|
||||
insert t2 values (x);
|
||||
return x;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
prepare stmt1 from "select fn1(a) into ? from t1 where b= 2";
|
||||
execute stmt1 using @result;
|
||||
select * from t2;
|
||||
select @result;
|
||||
sync_slave_with_master;
|
||||
select * from t2;
|
||||
|
||||
connection master;
|
||||
drop table t1, t2;
|
||||
drop function fn1;
|
||||
|
||||
source include/rpl_end.inc;
|
||||
|
|
@ -3230,7 +3230,7 @@ default_set_param_func(Item_param *param,
|
|||
|
||||
|
||||
Item_param::Item_param(uint pos_in_query_arg) :
|
||||
state(NO_VALUE),
|
||||
state(NO_VALUE), inout(IN_PARAM),
|
||||
item_result_type(STRING_RESULT),
|
||||
/* Don't pretend to be a literal unless value for this item is set. */
|
||||
item_type(PARAM_ITEM),
|
||||
|
|
|
@ -2242,6 +2242,7 @@ public:
|
|||
STRING_VALUE, TIME_VALUE, LONG_DATA_VALUE,
|
||||
DECIMAL_VALUE
|
||||
} state;
|
||||
enum { IN_PARAM, OUT_PARAM } inout;
|
||||
|
||||
/*
|
||||
A buffer for string and long data values. Historically all allocated
|
||||
|
|
|
@ -3743,6 +3743,11 @@ bool my_var_sp::set(THD *thd, Item *item)
|
|||
return thd->spcont->set_variable(thd, offset, &item);
|
||||
}
|
||||
|
||||
bool my_var_param::set(THD *thd, Item *item)
|
||||
{
|
||||
return param->set_value(thd, 0, &item);
|
||||
}
|
||||
|
||||
int select_dumpvar::send_data(List<Item> &items)
|
||||
{
|
||||
List_iterator_fast<my_var> var_li(var_list);
|
||||
|
|
|
@ -4781,6 +4781,17 @@ public:
|
|||
virtual bool set(THD *thd, Item *val) = 0;
|
||||
};
|
||||
|
||||
class my_var_param: public my_var {
|
||||
public:
|
||||
Settable_routine_parameter *param;
|
||||
my_var_param(Item_param *p)
|
||||
: my_var(null_lex_str, PARAM_VAR),
|
||||
param(p->get_settable_routine_parameter())
|
||||
{ p->inout= Item_param::OUT_PARAM; }
|
||||
~my_var_param() { }
|
||||
bool set(THD *thd, Item *val);
|
||||
};
|
||||
|
||||
class my_var_sp: public my_var {
|
||||
public:
|
||||
uint offset;
|
||||
|
|
|
@ -1186,6 +1186,30 @@ static bool insert_params_from_vars(Prepared_statement *stmt,
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
static bool update_vars_from_params(Prepared_statement *stmt,
|
||||
List<LEX_STRING>& varnames)
|
||||
{
|
||||
Item_param **begin= stmt->param_array;
|
||||
Item_param **end= begin + stmt->param_count;
|
||||
LEX_STRING *varname;
|
||||
List_iterator<LEX_STRING> var_it(varnames);
|
||||
DBUG_ENTER("update_vars_from_params");
|
||||
|
||||
for (Item_param **it= begin; it < end; ++it)
|
||||
{
|
||||
Item_param *param= *it;
|
||||
varname= var_it++;
|
||||
if (param->inout != Item_param::OUT_PARAM)
|
||||
continue;
|
||||
Item_func_set_user_var *suv= new Item_func_set_user_var(*varname, param);
|
||||
if (suv->fix_fields(stmt->thd, 0))
|
||||
DBUG_RETURN(1);
|
||||
suv->save_item_result(param);
|
||||
if (suv->update())
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/**
|
||||
Do the same as insert_params_from_vars but also construct query text for
|
||||
|
@ -3681,6 +3705,11 @@ reexecute:
|
|||
if (! error) /* Success */
|
||||
goto reexecute;
|
||||
}
|
||||
|
||||
/* Assign values for OUT-parameters (SELECT INTO) in the SQL PS */
|
||||
if (!packet)
|
||||
update_vars_from_params(this, thd->lex->prepared_stmt_params);
|
||||
|
||||
reset_stmt_params(this);
|
||||
|
||||
return error;
|
||||
|
|
|
@ -11527,6 +11527,10 @@ select_outvar:
|
|||
{
|
||||
$$ = Lex->result ? new my_var_user($2) : NULL;
|
||||
}
|
||||
| param_marker
|
||||
{
|
||||
$$ = Lex->result ? new my_var_param($1) : NULL;
|
||||
}
|
||||
| ident_or_text
|
||||
{
|
||||
sp_variable *t;
|
||||
|
|
Loading…
Add table
Reference in a new issue