Details
-
Task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.3.3-1
Description
SQL Standards starting from SQL-1999 uses the construct <table value constructor> as
one of the alternatives for <simple table>:
<simple table> ::=
|
<query specification>
|
| <table value constructor>
|
| <explicit table>
|
Currently MariaDB uses <table value constructor> only in insert statements:
INSERT INTO t VALUES (1,'xx'), (5,'yyy'), (1,'zzz'); |
With <table value constructor> it will be possible to use such CTE specification:
WITH t (a,c) AS (SELECT * FROM VALUES (1,'xx'), (5,'yyy'), (1,'zzz')) ... |
Now instead of this we have to use something like this:
WITH t (a,c) AS (SELECT 1, 'xx' UNION ALL SELECT 5, 'yyy' UNION ALL 1, 'zzz') ... |
Processing of the latter will take much more memory.
Besides with the possibility of using table value constructors in CTE specifications some optimization transformations for IN predicates will be possible.
Attachments
Issue Links
- blocks
-
MDEV-12176 Transform [NOT] IN predicate with long list of values INTO [NOT] IN subquery.
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Component/s | Optimizer [ 10200 ] | |
Fix Version/s | 10.3.0 [ 22127 ] | |
Assignee | Igor Babaev [ igor ] |
Description |
SQL Standards starting from SQL-1999 uses the construct <table value constructor> as
one of the alternatives for <simple table>: {noformat} <simple table> ::= <query specification> | <table value constructor> | <explicit table> {noformat} Currently MariaDB uses <table value constructor> only in insert statements: {noformat} INSERT INTO t VALUES (1,'xx'), (5,'yyy'), (1,'zzz'); {noformat} With <table value constructor> it will be possible to use such CTE specification: {noformat} WITH t (a,c) AS (VALUES (1,'xx'), (5,'yyy'), (1,'zzz')) ... {noformat} Now instead of this we have to use something like this: {noformat} WITH t (a,c) AS (SELECT 1, 'xx' UNION ALL SELECT 5, 'yyy' UNION ALL 1, 'zzz') ... {noformat} Processing of the latter will take much more memory. Besides with the possibility of using table value constructors in CTE specifications some optimization transformations for IN predicates will be possible. |
SQL Standards starting from SQL-1999 uses the construct <table value constructor> as
one of the alternatives for <simple table>: {noformat} <simple table> ::= <query specification> | <table value constructor> | <explicit table> {noformat} Currently MariaDB uses <table value constructor> only in insert statements: {code:sql} INSERT INTO t VALUES (1,'xx'), (5,'yyy'), (1,'zzz'); {code} With <table value constructor> it will be possible to use such CTE specification: {code:sql} WITH t (a,c) AS (VALUES (1,'xx'), (5,'yyy'), (1,'zzz')) ... {code} Now instead of this we have to use something like this: {code:sql} WITH t (a,c) AS (SELECT 1, 'xx' UNION ALL SELECT 5, 'yyy' UNION ALL 1, 'zzz') ... {code} Processing of the latter will take much more memory. Besides with the possibility of using table value constructors in CTE specifications some optimization transformations for IN predicates will be possible. |
Labels | gsoc17 |
Link |
This issue blocks |
Description |
SQL Standards starting from SQL-1999 uses the construct <table value constructor> as
one of the alternatives for <simple table>: {noformat} <simple table> ::= <query specification> | <table value constructor> | <explicit table> {noformat} Currently MariaDB uses <table value constructor> only in insert statements: {code:sql} INSERT INTO t VALUES (1,'xx'), (5,'yyy'), (1,'zzz'); {code} With <table value constructor> it will be possible to use such CTE specification: {code:sql} WITH t (a,c) AS (VALUES (1,'xx'), (5,'yyy'), (1,'zzz')) ... {code} Now instead of this we have to use something like this: {code:sql} WITH t (a,c) AS (SELECT 1, 'xx' UNION ALL SELECT 5, 'yyy' UNION ALL 1, 'zzz') ... {code} Processing of the latter will take much more memory. Besides with the possibility of using table value constructors in CTE specifications some optimization transformations for IN predicates will be possible. |
SQL Standards starting from SQL-1999 uses the construct <table value constructor> as
one of the alternatives for <simple table>: {noformat} <simple table> ::= <query specification> | <table value constructor> | <explicit table> {noformat} Currently MariaDB uses <table value constructor> only in insert statements: {code:sql} INSERT INTO t VALUES (1,'xx'), (5,'yyy'), (1,'zzz'); {code} With <table value constructor> it will be possible to use such CTE specification: {code:sql} WITH t (a,c) AS (SELECT * FROM VALUES (1,'xx'), (5,'yyy'), (1,'zzz')) ... {code} Now instead of this we have to use something like this: {code:sql} WITH t (a,c) AS (SELECT 1, 'xx' UNION ALL SELECT 5, 'yyy' UNION ALL 1, 'zzz') ... {code} Processing of the latter will take much more memory. Besides with the possibility of using table value constructors in CTE specifications some optimization transformations for IN predicates will be possible. |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.3.0 [ 22127 ] |
Sprint | 10.3.3-1 [ 200 ] |
Rank | Ranked higher |
Fix Version/s | 10.3.3 [ 22644 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 79827 ] | MariaDB v4 [ 133143 ] |