mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
MDEV-21201 No records produced in information_schema query, depending on projection
In case of NATURAL JOIN / USING mark all field (one table can not be opened in any case so optimisation does not worth it). IMHO table should be checked for used fields and filled after prepare, when we will fave whole info about used fields but it is too big change for a bugfix. Which will be made later by Serg patch
This commit is contained in:
parent
78c2a5ab70
commit
a8458a2345
5 changed files with 133 additions and 1 deletions
|
@ -2201,3 +2201,67 @@ SCHEMA_NAME
|
|||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-21201:No records produced in information_schema query,
|
||||
# depending on projection
|
||||
#
|
||||
create table t (i int, constraint a check (i > 0));
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
join information_schema.CHECK_CONSTRAINTS cc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
TABLE_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
||||
test t a `i` > 0
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.CHECK_CONSTRAINTS cc
|
||||
join information_schema.TABLE_CONSTRAINTS tc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
TABLE_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
||||
test t a `i` > 0
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
NATURAL join information_schema.CHECK_CONSTRAINTS cc
|
||||
;
|
||||
TABLE_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
||||
test t a `i` > 0
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.CHECK_CONSTRAINTS cc
|
||||
NATURAL join information_schema.TABLE_CONSTRAINTS tc
|
||||
;
|
||||
TABLE_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
||||
test t a `i` > 0
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE,
|
||||
tc.CONSTRAINT_CATALOG,
|
||||
tc.CONSTRAINT_SCHEMA
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
join information_schema.CHECK_CONSTRAINTS cc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
TABLE_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE CONSTRAINT_CATALOG CONSTRAINT_SCHEMA
|
||||
test t a `i` > 0 def test
|
||||
drop table t;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
|
|
@ -1922,3 +1922,65 @@ SELECT SCHEMA_NAME from information_schema.schemata where schema_name=REPEAT('a'
|
|||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-21201:No records produced in information_schema query,
|
||||
--echo # depending on projection
|
||||
--echo #
|
||||
|
||||
create table t (i int, constraint a check (i > 0));
|
||||
|
||||
--disable_warnings
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
join information_schema.CHECK_CONSTRAINTS cc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.CHECK_CONSTRAINTS cc
|
||||
join information_schema.TABLE_CONSTRAINTS tc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
NATURAL join information_schema.CHECK_CONSTRAINTS cc
|
||||
;
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE
|
||||
from information_schema.CHECK_CONSTRAINTS cc
|
||||
NATURAL join information_schema.TABLE_CONSTRAINTS tc
|
||||
;
|
||||
select
|
||||
tc.TABLE_SCHEMA,
|
||||
tc.TABLE_NAME,
|
||||
cc.CONSTRAINT_NAME,
|
||||
cc.CHECK_CLAUSE,
|
||||
tc.CONSTRAINT_CATALOG,
|
||||
tc.CONSTRAINT_SCHEMA
|
||||
from information_schema.TABLE_CONSTRAINTS tc
|
||||
join information_schema.CHECK_CONSTRAINTS cc
|
||||
using (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME)
|
||||
;
|
||||
--enable_warnings
|
||||
|
||||
drop table t;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
|
|
@ -8904,6 +8904,8 @@ void add_join_natural(TABLE_LIST *a, TABLE_LIST *b, List<String> *using_fields,
|
|||
SELECT_LEX *lex)
|
||||
{
|
||||
b->natural_join= a;
|
||||
a->part_of_natural_join= TRUE;
|
||||
b->part_of_natural_join= TRUE;
|
||||
lex->prev_join_using= using_fields;
|
||||
}
|
||||
|
||||
|
|
|
@ -8183,7 +8183,10 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
|||
else
|
||||
all_items= thd->free_list;
|
||||
|
||||
mark_all_fields_used_in_query(thd, fields_info, &bitmap, all_items);
|
||||
if (table_list->part_of_natural_join)
|
||||
bitmap_set_all(&bitmap);
|
||||
else
|
||||
mark_all_fields_used_in_query(thd, fields_info, &bitmap, all_items);
|
||||
|
||||
for (field_count=0; fields_info->field_name; fields_info++)
|
||||
{
|
||||
|
|
|
@ -2183,6 +2183,7 @@ struct TABLE_LIST
|
|||
parsing 'this' is a NATURAL/USING join iff (natural_join != NULL).
|
||||
*/
|
||||
TABLE_LIST *natural_join;
|
||||
bool part_of_natural_join;
|
||||
/*
|
||||
True if 'this' represents a nested join that is a NATURAL JOIN.
|
||||
For one of the operands of 'this', the member 'natural_join' points
|
||||
|
|
Loading…
Add table
Reference in a new issue