mirror of
https://github.com/MariaDB/server.git
synced 2025-10-24 07:13:33 +03:00
according to the standard.
The idea is to use Field-classes to implement stored routines
variables. Also, we should provide facade to Item-hierarchy
by Item_field class (it is necessary, since SRVs take part
in expressions).
The patch fixes the following bugs:
- BUG#8702: Stored Procedures: No Error/Warning shown for inappropriate data
type matching;
- BUG#8768: Functions: For any unsigned data type, -ve values can be passed
and returned;
- BUG#8769: Functions: For Int datatypes, out of range values can be passed
and returned;
- BUG#9078: STORED PROCDURE: Decimal digits are not displayed when we use
DECIMAL datatype;
- BUG#9572: Stored procedures: variable type declarations ignored;
- BUG#12903: upper function does not work inside a function;
- BUG#13705: parameters to stored procedures are not verified;
- BUG#13808: ENUM type stored procedure parameter accepts non-enumerated
data;
- BUG#13909: Varchar Stored Procedure Parameter always BINARY string (ignores
CHARACTER SET);
- BUG#14161: Stored procedure cannot retrieve bigint unsigned;
- BUG#14188: BINARY variables have no 0x00 padding;
- BUG#15148: Stored procedure variables accept non-scalar values;
mysql-test/r/ctype_ujis.result:
Explicitly specify correct charset.
mysql-test/r/schema.result:
Drop our test database to not affect this test if some test
left it cause of failure.
mysql-test/r/show_check.result:
Drop our test database to not affect this test if some test
left it cause of failure.
mysql-test/r/skip_name_resolve.result:
Ignore columns with unpredictable values.
mysql-test/r/sp-big.result:
Add cleanup statement.
mysql-test/r/sp-dynamic.result:
Add cleanup statements.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sum_distinct-big.result:
Update result file.
mysql-test/r/type_newdecimal-big.result:
Update result file.
mysql-test/t/ctype_ujis.test:
Explicitly specify correct charset.
mysql-test/t/schema.test:
Drop our test database to not affect this test if some test
left it cause of failure.
mysql-test/t/show_check.test:
Drop our test database to not affect this test if some test
left it cause of failure.
mysql-test/t/skip_name_resolve.test:
Ignore columns with unpredictable values.
mysql-test/t/sp-big.test:
Add cleanup statement.
mysql-test/t/sp-dynamic.test:
Add cleanup statements.
mysql-test/t/sp.test:
Non-scalar values prohibited for assignment to SP-vars;
polishing.
mysql-test/t/type_newdecimal-big.test:
Update type specification so that the variables
can contain the large values used in the test.
sql/field.cc:
Extract create_field::init() to initialize an existing
instance of create_field from new_create_field().
sql/field.h:
Extract create_field::init() to initialize an existing
instance of create_field from new_create_field().
sql/item.cc:
- Introduce a new class: Item_sp_variable -- a base class
of stored-routine-variables classes;
- Introduce Item_case_expr -- an Item, which is used to access
to the expression of CASE statement;
sql/item.h:
- Introduce a new class: Item_sp_variable -- a base class
of stored-routine-variables classes;
- Introduce Item_case_expr -- an Item, which is used to access
to the expression of CASE statement;
sql/item_func.cc:
Pass the Field (instead of Item) for the return value of
a function to the function execution routine.
sql/item_func.h:
Pass the Field (instead of Item) for the return value of
a function to the function execution routine.
sql/mysql_priv.h:
Move create_virtual_tmp_table() out of sql_select.h.
sql/sp.cc:
Use create_result_field() instead of make_field().
sql/sp_head.cc:
- Add a function to map enum_field_types to Item::Type;
- Add sp_instr_push_case_expr instruction -- an instruction
to push CASE expression into the active running context;
- Add sp_instr_pop_case_expr instruction -- an instruction
to pop CASE expression from the active running context;
- Adapt the SP-execution code to using Fields instead of Items
for SP-vars;
- Use create_field structure for field description instead of
a set of members.
sql/sp_head.h:
- Add a function to map enum_field_types to Item::Type;
- Add sp_instr_push_case_expr instruction -- an instruction
to push CASE expression into the active running context;
- Add sp_instr_pop_case_expr instruction -- an instruction
to pop CASE expression from the active running context;
- Adapt the SP-execution code to using Fields instead of Items
for SP-vars;
- Use create_field structure for field description instead of
a set of members.
sql/sp_pcontext.cc:
- Change rules to assign an index of SP-variable: use
transparent index;
- Add an operation to retrieve a list of defined SP-vars
from the processing context recursively.
sql/sp_pcontext.h:
- Change rules to assign an index of SP-variable: use
transparent index;
- Add an operation to retrieve a list of defined SP-vars
from the processing context recursively.
sql/sp_rcontext.cc:
- Change rules to assign an index of SP-variable: use
transparent index;
- Use a tmp virtual table to store SP-vars instead of Items;
- Provide operations to work with CASE expresion.
sql/sp_rcontext.h:
- Change rules to assign an index of SP-variable: use
transparent index;
- Use a tmp virtual table to store SP-vars instead of Items;
- Provide operations to work with CASE expresion.
sql/sql_class.cc:
- Reflect Item_splocal ctor changes;
- Item_splocal::get_offset() has been renamed to get_var_idx().
sql/sql_class.h:
Polishing.
sql/sql_parse.cc:
Extract create_field::init() to initialize an existing
instance of create_field from new_create_field().
sql/sql_select.cc:
Take care of BLOB columns in create_virtual_tmp_table().
sql/sql_select.h:
Move create_virtual_tmp_table() out of sql_select.h.
sql/sql_trigger.cc:
Use boolean constants for boolean type instead of numerical ones.
sql/sql_yacc.yy:
Provide an instance of create_field for each SP-var.
mysql-test/include/sp-vars.inc:
The definitions of common-procedures, which are created
under different circumstances.
mysql-test/r/sp-vars.result:
Result file for the SP-vars test.
mysql-test/sp-vars.test:
A new test for checking SP-vars functionality.
108 lines
2.0 KiB
Plaintext
108 lines
2.0 KiB
Plaintext
DROP TABLE IF EXISTS t1, t2;
|
|
CREATE TABLE t1 (id INTEGER);
|
|
CREATE TABLE t2 (id INTEGER);
|
|
INSERT INTO t1 (id) VALUES (1), (1), (1),(1);
|
|
INSERT INTO t1 (id) SELECT id FROM t1;
|
|
/* 8 */
|
|
INSERT INTO t1 (id) SELECT id FROM t1;
|
|
/* 12 */
|
|
INSERT INTO t1 (id) SELECT id FROM t1;
|
|
/* 16 */
|
|
INSERT INTO t1 (id) SELECT id FROM t1;
|
|
/* 20 */
|
|
INSERT INTO t1 (id) SELECT id FROM t1;
|
|
/* 24 */
|
|
INSERT INTO t1 SELECT id+1 FROM t1;
|
|
INSERT INTO t1 SELECT id+2 FROM t1;
|
|
INSERT INTO t1 SELECT id+4 FROM t1;
|
|
INSERT INTO t1 SELECT id+8 FROM t1;
|
|
INSERT INTO t1 SELECT id+16 FROM t1;
|
|
INSERT INTO t1 SELECT id+32 FROM t1;
|
|
INSERT INTO t1 SELECT id+64 FROM t1;
|
|
INSERT INTO t1 SELECT id+128 FROM t1;
|
|
INSERT INTO t1 SELECT id+256 FROM t1;
|
|
INSERT INTO t1 SELECT id+512 FROM t1;
|
|
SELECT AVG(DISTINCT id) FROM t1 GROUP BY id % 13;
|
|
AVG(DISTINCT id)
|
|
513.5000
|
|
508.0000
|
|
509.0000
|
|
510.0000
|
|
511.0000
|
|
512.0000
|
|
513.0000
|
|
514.0000
|
|
515.0000
|
|
516.0000
|
|
517.0000
|
|
511.5000
|
|
512.5000
|
|
SELECT SUM(DISTINCT id)/COUNT(DISTINCT id) FROM t1 GROUP BY id % 13;
|
|
SUM(DISTINCT id)/COUNT(DISTINCT id)
|
|
513.5000
|
|
508.0000
|
|
509.0000
|
|
510.0000
|
|
511.0000
|
|
512.0000
|
|
513.0000
|
|
514.0000
|
|
515.0000
|
|
516.0000
|
|
517.0000
|
|
511.5000
|
|
512.5000
|
|
INSERT INTO t1 SELECT id+1024 FROM t1;
|
|
INSERT INTO t1 SELECT id+2048 FROM t1;
|
|
INSERT INTO t1 SELECT id+4096 FROM t1;
|
|
INSERT INTO t1 SELECT id+8192 FROM t1;
|
|
INSERT INTO t2 SELECT id FROM t1 ORDER BY id*rand();
|
|
SELECT SUM(DISTINCT id) sm FROM t1;
|
|
sm
|
|
134225920
|
|
SELECT SUM(DISTINCT id) sm FROM t2;
|
|
sm
|
|
134225920
|
|
SELECT SUM(DISTINCT id) sm FROM t1 group by id % 13;
|
|
sm
|
|
10327590
|
|
10328851
|
|
10330112
|
|
10331373
|
|
10332634
|
|
10317510
|
|
10318770
|
|
10320030
|
|
10321290
|
|
10322550
|
|
10323810
|
|
10325070
|
|
10326330
|
|
SET max_heap_table_size=16384;
|
|
SHOW variables LIKE 'max_heap_table_size';
|
|
Variable_name Value
|
|
max_heap_table_size 16384
|
|
SELECT SUM(DISTINCT id) sm FROM t1;
|
|
sm
|
|
134225920
|
|
SELECT SUM(DISTINCT id) sm FROM t2;
|
|
sm
|
|
134225920
|
|
SELECT SUM(DISTINCT id) sm FROM t1 GROUP BY id % 13;
|
|
sm
|
|
10327590
|
|
10328851
|
|
10330112
|
|
10331373
|
|
10332634
|
|
10317510
|
|
10318770
|
|
10320030
|
|
10321290
|
|
10322550
|
|
10323810
|
|
10325070
|
|
10326330
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|