fix information_schema is not compatible with MySQL/MariaDB issue1365

This commit is contained in:
liuzizhuo
2023-06-05 15:04:20 +08:00
parent 88bcf89dbd
commit 53134df9c7
3 changed files with 105 additions and 9 deletions

View File

@ -672,18 +672,30 @@ int ObInfoSchemaColumnsTable::fill_row_cells(const ObString &database_name,
break;
}
case CHARACTER_SET_NAME: {
cells[cell_idx].set_varchar(common::ObCharset::charset_name(
column_schema->get_charset_type()));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
if(ob_is_varchar_char_type(column_schema->get_data_type(),column_schema->get_collation_type())
|| ob_is_enum_or_set_type(column_schema->get_data_type())
|| ob_is_text(column_schema->get_data_type(),column_schema->get_collation_type())){
cells[cell_idx].set_varchar(common::ObCharset::charset_name(
column_schema->get_charset_type()));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset()));
break;
} else {
cells[cell_idx].reset();
}
break;
}
case COLLATION_NAME: {
cells[cell_idx].set_varchar(common::ObCharset::collation_name(
column_schema->get_collation_type()));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset()));
break;
if(ob_is_varchar_char_type(column_schema->get_data_type(),column_schema->get_collation_type())
|| ob_is_enum_or_set_type(column_schema->get_data_type())
|| ob_is_text(column_schema->get_data_type(),column_schema->get_collation_type())){
cells[cell_idx].set_varchar(common::ObCharset::collation_name(
column_schema->get_collation_type()));
cells[cell_idx].set_collation_type(ObCharset::get_default_collation(
ObCharset::get_default_charset()));
} else {
cells[cell_idx].reset();
}
break;
}
case COLUMN_TYPE: {
int64_t pos = 0;

View File

@ -0,0 +1,54 @@
use test;
DROP TABLE numeric_table;
create table numeric_table ( col1 INTEGER comment 'INTEGER', col2 INT comment 'INT', col3 SMALLINT, col4 TINYINT, col5 MEDIUMINT, col6 BIGINT, col7 DECIMAL comment 'DECIMAL', col8 NUMERIC comment 'NUMERIC', col9 FLOAT, col10 DOUBLE, col11 BIT ) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`,`IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`,`COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM`INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME`= 'numeric_table' ORDER BY `ORDINAL_POSITION`;
TABLE_NAME COLUMN_NAME COLUMN_TYPE COLUMN_COMMENT IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA CHARACTER_SET_NAME COLLATION_NAME GENERATION_EXPRESSION
numeric_table col1 int(11) INTEGER YES NULL NULL NULL NULL
numeric_table col2 int(11) INT YES NULL NULL NULL NULL
numeric_table col3 smallint(6) YES NULL NULL NULL NULL
numeric_table col4 tinyint(4) YES NULL NULL NULL NULL
numeric_table col5 mediumint(9) YES NULL NULL NULL NULL
numeric_table col6 bigint(20) YES NULL NULL NULL NULL
numeric_table col7 decimal(10,0) DECIMAL YES NULL NULL NULL NULL
numeric_table col8 decimal(10,0) NUMERIC YES NULL NULL NULL NULL
numeric_table col9 float YES NULL NULL NULL NULL
numeric_table col10 double YES NULL NULL NULL NULL
numeric_table col11 bit(1) YES NULL NULL NULL NULL
DROP TABLE date_type_table;
create table date_type_table ( col1 DATE COMMENT 'DATE', col2 TIME COMMENT 'TIME', col3 DATETIME COMMENT 'DATETIME', col4 TIMESTAMP COMMENT 'TIMESTAMP', col5 YEAR COMMENT 'YEAR' )DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'date_type_table' ORDER BY `ORDINAL_POSITION`;
TABLE_NAME COLUMN_NAME COLUMN_TYPE COLUMN_COMMENT IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA CHARACTER_SET_NAME COLLATION_NAME GENERATION_EXPRESSION
date_type_table col1 date DATE YES NULL NULL NULL NULL
date_type_table col2 time TIME YES NULL NULL NULL NULL
date_type_table col3 datetime DATETIME YES NULL NULL NULL NULL
date_type_table col4 timestamp TIMESTAMP YES NULL NULL NULL NULL
date_type_table col5 year(4) YEAR YES NULL NULL NULL NULL
DROP TABLE string_table;
create table string_table( col1 CHAR(1) COMMENT 'CHAR', col2 VARCHAR(2) COMMENT 'VARCHAR', col3 BINARY(2) COMMENT 'BINARY', col4 VARBINARY(2) COMMENT 'VARBINARY', col5 BLOB COMMENT 'BLOB', col6 TEXT COMMENT 'TEXT', col7 ENUM('a', 'b', 'c', 'd') COMMENT 'ENUM', col8 SET('a', 'b', 'c', 'd') COMMENT 'SET' )DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'string_table' ORDER BY `ORDINAL_POSITION`;
TABLE_NAME COLUMN_NAME COLUMN_TYPE COLUMN_COMMENT IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA CHARACTER_SET_NAME COLLATION_NAME GENERATION_EXPRESSION
string_table col1 char(1) CHAR YES NULL utf8mb4 utf8mb4_bin NULL
string_table col2 varchar(2) VARCHAR YES NULL utf8mb4 utf8mb4_bin NULL
string_table col3 binary(2) BINARY YES NULL NULL NULL NULL
string_table col4 varbinary(2) VARBINARY YES NULL NULL NULL NULL
string_table col5 blob BLOB YES NULL NULL NULL NULL
string_table col6 text TEXT YES NULL utf8mb4 utf8mb4_bin NULL
string_table col7 enum('a','b','c','d') ENUM YES NULL utf8mb4 utf8mb4_bin NULL
string_table col8 set('a','b','c','d') SET YES NULL utf8mb4 utf8mb4_bin NULL
DROP TABLE spatial_type_table;
create table spatial_type_table( col1 GEOMETRY COMMENT 'GEOMETRY', col2 POINT COMMENT'POINT', col3 LINESTRING COMMENT 'LINESTRING', col4 POLYGON COMMENT 'POLYGON', col5 MULTIPOINT COMMENT 'MULTIPOINT', col6 MULTILINESTRING COMMENT 'COMMENT', col7 MULTIPOLYGON COMMENT 'MULTIPOLYGON', col8 GEOMETRYCOLLECTION COMMENT 'GEOMETRYCOLLECTION' ) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'spatial_type_table' ORDER BY `ORDINAL_POSITION`;
TABLE_NAME COLUMN_NAME COLUMN_TYPE COLUMN_COMMENT IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA CHARACTER_SET_NAME COLLATION_NAME GENERATION_EXPRESSION
spatial_type_table col1 geometry GEOMETRY YES NULL NULL NULL NULL
spatial_type_table col2 point POINT YES NULL NULL NULL NULL
spatial_type_table col3 linestring LINESTRING YES NULL NULL NULL NULL
spatial_type_table col4 polygon POLYGON YES NULL NULL NULL NULL
spatial_type_table col5 multipoint MULTIPOINT YES NULL NULL NULL NULL
spatial_type_table col6 multilinestring COMMENT YES NULL NULL NULL NULL
spatial_type_table col7 multipolygon MULTIPOLYGON YES NULL NULL NULL NULL
spatial_type_table col8 geomcollection GEOMETRYCOLLECTION YES NULL NULL NULL NULL
DROP TABLE json_type_table;
CREATE TABLE json_type_table (jdoc JSON) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'json_type_table' ORDER BY `ORDINAL_POSITION`;
TABLE_NAME COLUMN_NAME COLUMN_TYPE COLUMN_COMMENT IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA CHARACTER_SET_NAME COLLATION_NAME GENERATION_EXPRESSION
json_type_table jdoc json YES NULL NULL NULL NULL

View File

@ -0,0 +1,30 @@
use test;
--disable_warnings
DROP TABLE numeric_table;
--enable_warnings
create table numeric_table ( col1 INTEGER comment 'INTEGER', col2 INT comment 'INT', col3 SMALLINT, col4 TINYINT, col5 MEDIUMINT, col6 BIGINT, col7 DECIMAL comment 'DECIMAL', col8 NUMERIC comment 'NUMERIC', col9 FLOAT, col10 DOUBLE, col11 BIT ) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`,`IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`,`COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM`INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME`= 'numeric_table' ORDER BY `ORDINAL_POSITION`;
--disable_warnings
DROP TABLE date_type_table;
--enable_warnings
create table date_type_table ( col1 DATE COMMENT 'DATE', col2 TIME COMMENT 'TIME', col3 DATETIME COMMENT 'DATETIME', col4 TIMESTAMP COMMENT 'TIMESTAMP', col5 YEAR COMMENT 'YEAR' )DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'date_type_table' ORDER BY `ORDINAL_POSITION`;
--disable_warnings
DROP TABLE string_table;
--enable_warnings
create table string_table( col1 CHAR(1) COMMENT 'CHAR', col2 VARCHAR(2) COMMENT 'VARCHAR', col3 BINARY(2) COMMENT 'BINARY', col4 VARBINARY(2) COMMENT 'VARBINARY', col5 BLOB COMMENT 'BLOB', col6 TEXT COMMENT 'TEXT', col7 ENUM('a', 'b', 'c', 'd') COMMENT 'ENUM', col8 SET('a', 'b', 'c', 'd') COMMENT 'SET' )DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'string_table' ORDER BY `ORDINAL_POSITION`;
--disable_warnings
DROP TABLE spatial_type_table;
--enable_warnings
create table spatial_type_table( col1 GEOMETRY COMMENT 'GEOMETRY', col2 POINT COMMENT'POINT', col3 LINESTRING COMMENT 'LINESTRING', col4 POLYGON COMMENT 'POLYGON', col5 MULTIPOINT COMMENT 'MULTIPOINT', col6 MULTILINESTRING COMMENT 'COMMENT', col7 MULTIPOLYGON COMMENT 'MULTIPOLYGON', col8 GEOMETRYCOLLECTION COMMENT 'GEOMETRYCOLLECTION' ) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'spatial_type_table' ORDER BY `ORDINAL_POSITION`;
--disable_warnings
DROP TABLE json_type_table;
--enable_warnings
CREATE TABLE json_type_table (jdoc JSON) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
SELECT `TABLE_NAME`, `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_COMMENT`, `IS_NULLABLE`, `COLUMN_KEY`, `COLUMN_DEFAULT`, `EXTRA`, `CHARACTER_SET_NAME`, `COLLATION_NAME`, NULL AS `GENERATION_EXPRESSION` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'test' AND `TABLE_NAME` = 'json_type_table' ORDER BY `ORDINAL_POSITION`;