Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pkg/executor/infoschema_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -1219,6 +1219,7 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(
strings.ToLower(privileges.PrivToString(priv, mysql.AllColumnPrivs, mysql.Priv2Str)), // PRIVILEGES
columnDesc.Comment, // COLUMN_COMMENT
col.GeneratedExprString, // GENERATION_EXPRESSION
nil, // SRS_ID
)
e.rows = append(e.rows, record)
}
Expand Down
46 changes: 28 additions & 18 deletions pkg/infoschema/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,15 +371,24 @@ type columnInfo struct {
func buildColumnInfo(col columnInfo) *model.ColumnInfo {
mCharset := charset.CharsetBin
mCollation := charset.CharsetBin
if col.tp == mysql.TypeVarchar || col.tp == mysql.TypeBlob || col.tp == mysql.TypeLongBlob || col.tp == mysql.TypeEnum {
if col.tp == mysql.TypeVarchar || col.tp == mysql.TypeMediumBlob || col.tp == mysql.TypeBlob || col.tp == mysql.TypeLongBlob || col.tp == mysql.TypeEnum {
mCharset = charset.CharsetUTF8MB4
mCollation = charset.CollationUTF8MB4
}
fieldType := types.FieldType{}
fieldType.SetType(col.tp)
fieldType.SetCharset(mCharset)
fieldType.SetCollate(mCollation)
fieldType.SetFlen(col.size)
switch col.tp {
case mysql.TypeBlob:
fieldType.SetFlen(1 << 16)
case mysql.TypeMediumBlob:
fieldType.SetFlen(1 << 24)
case mysql.TypeLongBlob:
fieldType.SetFlen(1 << 32)
default:
fieldType.SetFlen(col.size)
}
fieldType.SetDecimal(col.decimal)
fieldType.SetFlag(col.flag)
fieldType.SetElems(col.enumElems)
Expand Down Expand Up @@ -470,27 +479,28 @@ var tablesCols = []columnInfo{

// See: http://dev.mysql.com/doc/refman/5.7/en/information-schema-columns-table.html
var columnsCols = []columnInfo{
{name: "TABLE_CATALOG", tp: mysql.TypeVarchar, size: 512},
{name: "TABLE_CATALOG", tp: mysql.TypeVarchar, size: 64},
{name: "TABLE_SCHEMA", tp: mysql.TypeVarchar, size: 64},
{name: "TABLE_NAME", tp: mysql.TypeVarchar, size: 64},
{name: "COLUMN_NAME", tp: mysql.TypeVarchar, size: 64},
{name: "ORDINAL_POSITION", tp: mysql.TypeLonglong, size: 21},
{name: "COLUMN_DEFAULT", tp: mysql.TypeBlob, size: 196606},
{name: "ORDINAL_POSITION", tp: mysql.TypeLong, flag: mysql.UnsignedFlag},
{name: "COLUMN_DEFAULT", tp: mysql.TypeBlob},
{name: "IS_NULLABLE", tp: mysql.TypeVarchar, size: 3},
{name: "DATA_TYPE", tp: mysql.TypeVarchar, size: 64},
{name: "CHARACTER_MAXIMUM_LENGTH", tp: mysql.TypeLonglong, size: 21},
{name: "CHARACTER_OCTET_LENGTH", tp: mysql.TypeLonglong, size: 21},
{name: "NUMERIC_PRECISION", tp: mysql.TypeLonglong, size: 21},
{name: "NUMERIC_SCALE", tp: mysql.TypeLonglong, size: 21},
{name: "DATETIME_PRECISION", tp: mysql.TypeLonglong, size: 21},
{name: "CHARACTER_SET_NAME", tp: mysql.TypeVarchar, size: 32},
{name: "COLLATION_NAME", tp: mysql.TypeVarchar, size: 32},
{name: "COLUMN_TYPE", tp: mysql.TypeBlob, size: 196606},
{name: "DATA_TYPE", tp: mysql.TypeLongBlob},
{name: "CHARACTER_MAXIMUM_LENGTH", tp: mysql.TypeLonglong},
{name: "CHARACTER_OCTET_LENGTH", tp: mysql.TypeLonglong},
{name: "NUMERIC_PRECISION", tp: mysql.TypeLonglong, flag: mysql.UnsignedFlag},
{name: "NUMERIC_SCALE", tp: mysql.TypeLonglong, flag: mysql.UnsignedFlag},
{name: "DATETIME_PRECISION", tp: mysql.TypeLong, flag: mysql.UnsignedFlag},
{name: "CHARACTER_SET_NAME", tp: mysql.TypeVarchar, size: 64},
{name: "COLLATION_NAME", tp: mysql.TypeVarchar, size: 64},
{name: "COLUMN_TYPE", tp: mysql.TypeMediumBlob},
{name: "COLUMN_KEY", tp: mysql.TypeVarchar, size: 3},
{name: "EXTRA", tp: mysql.TypeVarchar, size: 45},
{name: "PRIVILEGES", tp: mysql.TypeVarchar, size: 80},
{name: "COLUMN_COMMENT", tp: mysql.TypeVarchar, size: 1024},
{name: "GENERATION_EXPRESSION", tp: mysql.TypeBlob, size: 589779, flag: mysql.NotNullFlag},
{name: "EXTRA", tp: mysql.TypeVarchar, size: 256},
{name: "PRIVILEGES", tp: mysql.TypeVarchar, size: 154},
{name: "COLUMN_COMMENT", tp: mysql.TypeBlob},
{name: "GENERATION_EXPRESSION", tp: mysql.TypeLongBlob, flag: mysql.NotNullFlag},
{name: "SRS_ID", tp: mysql.TypeLong, flag: mysql.UnsignedFlag},
}

var columnStatisticsCols = []columnInfo{
Expand Down
8 changes: 4 additions & 4 deletions tests/integrationtest/r/executor/infoschema_reader.result
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ def executor__infoschema_reader v1 VIEW NULL NULL NULL NULL NULL NULL NULL NULL
drop table if exists t;
create table t (bit bit(10) DEFAULT b'100');
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'executor__infoschema_reader' AND TABLE_NAME = 't';
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 DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT GENERATION_EXPRESSION
def executor__infoschema_reader t bit 1 b'100' YES bit NULL NULL 10 0 NULL NULL NULL bit(10) select,insert,update,references
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 DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT GENERATION_EXPRESSION SRS_ID
def executor__infoschema_reader t bit 1 b'100' YES bit NULL NULL 10 0 NULL NULL NULL bit(10) select,insert,update,references NULL
drop table if exists t;
set time_zone='+08:00';
drop table if exists t;
Expand Down Expand Up @@ -272,8 +272,8 @@ drop table if exists t;
CREATE TABLE t ( id int DEFAULT NULL);
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`1.1.1.1` SQL SECURITY DEFINER VIEW `v_test` (`type`) AS SELECT NULL AS `type` FROM `t` AS `f`;
select * from information_schema.columns where TABLE_SCHEMA = 'executor__infoschema_reader' and TABLE_NAME = 'v_test';
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 DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT GENERATION_EXPRESSION
def executor__infoschema_reader v_test type 1 NULL YES binary 0 0 NULL NULL NULL NULL NULL binary(0) select,insert,update,references
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 DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT GENERATION_EXPRESSION SRS_ID
def executor__infoschema_reader v_test type 1 NULL YES binary 0 0 NULL NULL NULL NULL NULL binary(0) select,insert,update,references NULL
drop user if exists usageuser;
create user usageuser;
SELECT * FROM information_schema.user_privileges WHERE grantee="'usageuser'@'%'";
Expand Down