Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
ffea2073
Commit
ffea2073
authored
Oct 23, 2007
by
gluh@mysql.com/eagle.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug#31633 Information schema = NULL queries crash the server
added correct handling of NULL values for lookup fields
parent
9e6091fc
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
107 additions
and
22 deletions
+107
-22
mysql-test/r/information_schema.result
mysql-test/r/information_schema.result
+40
-0
mysql-test/t/information_schema.test
mysql-test/t/information_schema.test
+24
-0
sql/sql_show.cc
sql/sql_show.cc
+43
-22
No files found.
mysql-test/r/information_schema.result
View file @
ffea2073
...
...
@@ -1564,4 +1564,44 @@ SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='mysql' and TABLE_NAME= 'db';
TABLE_COLLATION
utf8_bin
select * from information_schema.columns where table_schema = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
select * from `information_schema`.`COLUMNS` where `TABLE_NAME` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_SCHEMA` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
select * from `information_schema`.`KEY_COLUMN_USAGE` where `TABLE_NAME` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
select * from `information_schema`.`PARTITIONS` where `TABLE_SCHEMA` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
select * from `information_schema`.`PARTITIONS` where `TABLE_NAME` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `CONSTRAINT_SCHEMA` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
select * from `information_schema`.`REFERENTIAL_CONSTRAINTS` where `TABLE_NAME` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
select * from information_schema.schemata where schema_name = NULL;
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME DEFAULT_COLLATION_NAME SQL_PATH
select * from `information_schema`.`STATISTICS` where `TABLE_SCHEMA` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
select * from `information_schema`.`STATISTICS` where `TABLE_NAME` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
select * from information_schema.tables where table_schema = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
select * from information_schema.tables where table_catalog = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
select * from information_schema.tables where table_name = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE VERSION ROW_FORMAT TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE AUTO_INCREMENT CREATE_TIME UPDATE_TIME CHECK_TIME TABLE_COLLATION CHECKSUM CREATE_OPTIONS TABLE_COMMENT
select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_SCHEMA` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
select * from `information_schema`.`TABLE_CONSTRAINTS` where `TABLE_NAME` = NULL;
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE
select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_SCHEMA` = NULL;
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
select * from `information_schema`.`TRIGGERS` where `EVENT_OBJECT_TABLE` = NULL;
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
select * from `information_schema`.`VIEWS` where `TABLE_SCHEMA` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
select * from `information_schema`.`VIEWS` where `TABLE_NAME` = NULL;
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
End of 5.1 tests.
mysql-test/t/information_schema.test
View file @
ffea2073
...
...
@@ -1208,4 +1208,28 @@ WHERE SCHEMA_NAME ='information_schema';
SELECT
TABLE_COLLATION
FROM
INFORMATION_SCHEMA
.
TABLES
WHERE
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'db'
;
#
# Bug#31633 Information schema = NULL queries crash the server
#
select
*
from
information_schema
.
columns
where
table_schema
=
NULL
;
select
*
from
`information_schema`
.
`COLUMNS`
where
`TABLE_NAME`
=
NULL
;
select
*
from
`information_schema`
.
`KEY_COLUMN_USAGE`
where
`TABLE_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`KEY_COLUMN_USAGE`
where
`TABLE_NAME`
=
NULL
;
select
*
from
`information_schema`
.
`PARTITIONS`
where
`TABLE_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`PARTITIONS`
where
`TABLE_NAME`
=
NULL
;
select
*
from
`information_schema`
.
`REFERENTIAL_CONSTRAINTS`
where
`CONSTRAINT_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`REFERENTIAL_CONSTRAINTS`
where
`TABLE_NAME`
=
NULL
;
select
*
from
information_schema
.
schemata
where
schema_name
=
NULL
;
select
*
from
`information_schema`
.
`STATISTICS`
where
`TABLE_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`STATISTICS`
where
`TABLE_NAME`
=
NULL
;
select
*
from
information_schema
.
tables
where
table_schema
=
NULL
;
select
*
from
information_schema
.
tables
where
table_catalog
=
NULL
;
select
*
from
information_schema
.
tables
where
table_name
=
NULL
;
select
*
from
`information_schema`
.
`TABLE_CONSTRAINTS`
where
`TABLE_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`TABLE_CONSTRAINTS`
where
`TABLE_NAME`
=
NULL
;
select
*
from
`information_schema`
.
`TRIGGERS`
where
`EVENT_OBJECT_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`TRIGGERS`
where
`EVENT_OBJECT_TABLE`
=
NULL
;
select
*
from
`information_schema`
.
`VIEWS`
where
`TABLE_SCHEMA`
=
NULL
;
select
*
from
`information_schema`
.
`VIEWS`
where
`TABLE_NAME`
=
NULL
;
--
echo
End
of
5.1
tests
.
sql/sql_show.cc
View file @
ffea2073
...
...
@@ -2269,10 +2269,12 @@ int make_table_list(THD *thd, SELECT_LEX *sel,
@param[in] table I_S table
@param[in, out] lookup_field_vals Struct which holds lookup values
@return void
@return
0 success
1 error, there can be no matching records for the condition
*/
void
get_lookup_value
(
THD
*
thd
,
Item_func
*
item_func
,
bool
get_lookup_value
(
THD
*
thd
,
Item_func
*
item_func
,
TABLE_LIST
*
table
,
LOOKUP_FIELD_VALUES
*
lookup_field_vals
)
{
...
...
@@ -2305,13 +2307,17 @@ void get_lookup_value(THD *thd, Item_func *item_func,
idx_val
=
0
;
}
else
return
;
return
0
;
item_field
=
(
Item_field
*
)
item_func
->
arguments
()[
idx_field
];
if
(
table
->
table
!=
item_field
->
field
->
table
)
return
;
return
0
;
tmp_str
=
item_func
->
arguments
()[
idx_val
]
->
val_str
(
&
str_buff
);
/* impossible value */
if
(
!
tmp_str
)
return
1
;
/* Lookup value is database name */
if
(
!
cs
->
coll
->
strnncollsp
(
cs
,
(
uchar
*
)
field_name1
,
strlen
(
field_name1
),
(
uchar
*
)
item_field
->
field_name
,
...
...
@@ -2330,7 +2336,7 @@ void get_lookup_value(THD *thd, Item_func *item_func,
tmp_str
->
length
(),
FALSE
);
}
}
return
;
return
0
;
}
...
...
@@ -2346,14 +2352,16 @@ void get_lookup_value(THD *thd, Item_func *item_func,
@param[in] table I_S table
@param[in, out] lookup_field_vals Struct which holds lookup values
@return void
@return
0 success
1 error, there can be no matching records for the condition
*/
void
calc_lookup_values_from_cond
(
THD
*
thd
,
COND
*
cond
,
TABLE_LIST
*
table
,
bool
calc_lookup_values_from_cond
(
THD
*
thd
,
COND
*
cond
,
TABLE_LIST
*
table
,
LOOKUP_FIELD_VALUES
*
lookup_field_vals
)
{
if
(
!
cond
)
return
;
return
0
;
if
(
cond
->
type
()
==
Item
::
COND_ITEM
)
{
...
...
@@ -2364,16 +2372,23 @@ void calc_lookup_values_from_cond(THD *thd, COND *cond, TABLE_LIST *table,
while
((
item
=
li
++
))
{
if
(
item
->
type
()
==
Item
::
FUNC_ITEM
)
get_lookup_value
(
thd
,
(
Item_func
*
)
item
,
table
,
lookup_field_vals
);
{
if
(
get_lookup_value
(
thd
,
(
Item_func
*
)
item
,
table
,
lookup_field_vals
))
return
1
;
}
else
calc_lookup_values_from_cond
(
thd
,
item
,
table
,
lookup_field_vals
);
{
if
(
calc_lookup_values_from_cond
(
thd
,
item
,
table
,
lookup_field_vals
))
return
1
;
}
}
}
return
;
return
0
;
}
else
if
(
cond
->
type
()
==
Item
::
FUNC_ITEM
)
get_lookup_value
(
thd
,
(
Item_func
*
)
cond
,
table
,
lookup_field_vals
);
return
;
else
if
(
cond
->
type
()
==
Item
::
FUNC_ITEM
&&
get_lookup_value
(
thd
,
(
Item_func
*
)
cond
,
table
,
lookup_field_vals
))
return
1
;
return
0
;
}
...
...
@@ -2486,10 +2501,12 @@ static COND * make_cond_for_info_schema(COND *cond, TABLE_LIST *table)
@param[in] tables I_S table
@param[in, out] lookup_field_values Struct which holds lookup values
@return void
@return
0 success
1 error, there can be no matching records for the condition
*/
void
get_lookup_field_values
(
THD
*
thd
,
COND
*
cond
,
TABLE_LIST
*
tables
,
bool
get_lookup_field_values
(
THD
*
thd
,
COND
*
cond
,
TABLE_LIST
*
tables
,
LOOKUP_FIELD_VALUES
*
lookup_field_values
)
{
LEX
*
lex
=
thd
->
lex
;
...
...
@@ -2503,7 +2520,7 @@ void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
lookup_field_values
->
db_value
.
length
=
strlen
(
wild
);
lookup_field_values
->
wild_db_value
=
1
;
}
break
;
return
0
;
case
SQLCOM_SHOW_TABLES
:
case
SQLCOM_SHOW_TABLE_STATUS
:
case
SQLCOM_SHOW_TRIGGERS
:
...
...
@@ -2516,14 +2533,13 @@ void get_lookup_field_values(THD *thd, COND *cond, TABLE_LIST *tables,
lookup_field_values
->
table_value
.
length
=
strlen
(
wild
);
lookup_field_values
->
wild_table_value
=
1
;
}
break
;
return
0
;
default:
/*
The "default" is for queries over I_S.
All previous cases handle SHOW commands.
*/
calc_lookup_values_from_cond
(
thd
,
cond
,
tables
,
lookup_field_values
);
break
;
return
calc_lookup_values_from_cond
(
thd
,
cond
,
tables
,
lookup_field_values
);
}
}
...
...
@@ -3113,7 +3129,11 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
}
schema_table_idx
=
get_schema_table_idx
(
schema_table
);
get_lookup_field_values
(
thd
,
cond
,
tables
,
&
lookup_field_vals
);
if
(
get_lookup_field_values
(
thd
,
cond
,
tables
,
&
lookup_field_vals
))
{
error
=
0
;
goto
err
;
}
DBUG_PRINT
(
"INDEX VALUES"
,(
"db_name='%s', table_name='%s'"
,
lookup_field_vals
.
db_value
.
str
,
lookup_field_vals
.
table_value
.
str
));
...
...
@@ -3328,7 +3348,8 @@ int fill_schema_schemata(THD *thd, TABLE_LIST *tables, COND *cond)
#endif
DBUG_ENTER
(
"fill_schema_shemata"
);
get_lookup_field_values
(
thd
,
cond
,
tables
,
&
lookup_field_vals
);
if
(
get_lookup_field_values
(
thd
,
cond
,
tables
,
&
lookup_field_vals
))
DBUG_RETURN
(
0
);
DBUG_PRINT
(
"INDEX VALUES"
,(
"db_name='%s', table_name='%s'"
,
lookup_field_vals
.
db_value
.
str
,
lookup_field_vals
.
table_value
.
str
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment