Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

executor: bind the func to memtableRetriever #15181

Merged
merged 7 commits into from
Mar 9, 2020
Merged
88 changes: 47 additions & 41 deletions executor/infoschema_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,25 +55,25 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex
var err error
switch e.table.Name.O {
case infoschema.TableSchemata:
e.rows = dataForSchemata(sctx, dbs)
e.setDataFromSchemata(sctx, dbs)
case infoschema.TableTables:
e.rows, err = dataForTables(sctx, dbs)
err = e.dataForTables(sctx, dbs)
case infoschema.TablePartitions:
e.rows, err = dataForPartitions(sctx, dbs)
err = e.dataForPartitions(sctx, dbs)
case infoschema.TableTiDBIndexes:
e.rows, err = dataForIndexes(sctx, dbs)
e.setDataFromIndexes(sctx, dbs)
case infoschema.TableViews:
e.rows, err = dataForViews(sctx, dbs)
e.setDataFromViews(sctx, dbs)
case infoschema.TableEngines:
e.rows = dataForEngines()
e.setDataFromEngines()
case infoschema.TableCharacterSets:
e.rows = dataForCharacterSets()
e.setDataFromCharacterSets()
case infoschema.TableCollations:
e.rows = dataForCollations()
e.setDataFromCollations()
case infoschema.TableKeyColumn:
e.rows = dataForKeyColumnUsage(sctx, dbs)
e.setDataFromKeyColumnUsage(sctx, dbs)
case infoschema.TableCollationCharacterSetApplicability:
e.rows = dataForCollationCharacterSetApplicability()
e.dataForCollationCharacterSetApplicability()
case infoschema.TableUserPrivileges:
e.setDataFromUserPrivileges(sctx)
}
Expand Down Expand Up @@ -237,7 +237,7 @@ func getAutoIncrementID(ctx sessionctx.Context, schema *model.DBInfo, tblInfo *m
return tbl.Allocator(ctx, autoid.RowIDAllocType).Base() + 1, nil
}

func dataForSchemata(ctx sessionctx.Context, schemas []*model.DBInfo) [][]types.Datum {
func (e *memtableRetriever) setDataFromSchemata(ctx sessionctx.Context, schemas []*model.DBInfo) {
checker := privilege.GetPrivilegeManager(ctx)
rows := make([][]types.Datum, 0, len(schemas))

Expand Down Expand Up @@ -266,13 +266,13 @@ func dataForSchemata(ctx sessionctx.Context, schemas []*model.DBInfo) [][]types.
)
rows = append(rows, record)
}
return rows
e.rows = rows
}

func dataForTables(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.Datum, error) {
func (e *memtableRetriever) dataForTables(ctx sessionctx.Context, schemas []*model.DBInfo) error {
tableRowsMap, colLengthMap, err := tableStatsCache.get(ctx)
if err != nil {
return nil, err
return err
}

checker := privilege.GetPrivilegeManager(ctx)
Expand Down Expand Up @@ -302,7 +302,7 @@ func dataForTables(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.D
if hasAutoIncID {
autoIncID, err = getAutoIncrementID(ctx, schema, table)
if err != nil {
return nil, err
return err
}
}

Expand Down Expand Up @@ -380,13 +380,14 @@ func dataForTables(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.D
}
}
}
return rows, nil
e.rows = rows
return nil
}

func dataForPartitions(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.Datum, error) {
func (e *memtableRetriever) dataForPartitions(ctx sessionctx.Context, schemas []*model.DBInfo) error {
tableRowsMap, colLengthMap, err := tableStatsCache.get(ctx)
if err != nil {
return nil, err
return err
}
checker := privilege.GetPrivilegeManager(ctx)
var rows [][]types.Datum
Expand Down Expand Up @@ -481,10 +482,11 @@ func dataForPartitions(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]typ
}
}
}
return rows, nil
e.rows = rows
return nil
}

func dataForIndexes(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.Datum, error) {
func (e *memtableRetriever) setDataFromIndexes(ctx sessionctx.Context, schemas []*model.DBInfo) {
checker := privilege.GetPrivilegeManager(ctx)
var rows [][]types.Datum
for _, schema := range schemas {
Expand Down Expand Up @@ -552,10 +554,10 @@ func dataForIndexes(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.
}
}
}
return rows, nil
e.rows = rows
}

func dataForViews(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.Datum, error) {
func (e *memtableRetriever) setDataFromViews(ctx sessionctx.Context, schemas []*model.DBInfo) {
checker := privilege.GetPrivilegeManager(ctx)
var rows [][]types.Datum
for _, schema := range schemas {
Expand Down Expand Up @@ -589,10 +591,11 @@ func dataForViews(ctx sessionctx.Context, schemas []*model.DBInfo) ([][]types.Da
rows = append(rows, record)
}
}
return rows, nil
e.rows = rows
}

func dataForEngines() (rows [][]types.Datum) {
func (e *memtableRetriever) setDataFromEngines() {
var rows [][]types.Datum
rows = append(rows,
types.MakeDatums(
"InnoDB", // Engine
Expand All @@ -603,44 +606,47 @@ func dataForEngines() (rows [][]types.Datum) {
"YES", // Savepoints
),
)
return rows
e.rows = rows
}

func dataForCharacterSets() (records [][]types.Datum) {
func (e *memtableRetriever) setDataFromCharacterSets() {
var rows [][]types.Datum
charsets := charset.GetSupportedCharsets()
for _, charset := range charsets {
records = append(records,
rows = append(rows,
types.MakeDatums(charset.Name, charset.DefaultCollation, charset.Desc, charset.Maxlen),
)
}
return records
e.rows = rows
}

func dataForCollations() (records [][]types.Datum) {
func (e *memtableRetriever) setDataFromCollations() {
var rows [][]types.Datum
collations := charset.GetSupportedCollations()
for _, collation := range collations {
isDefault := ""
if collation.IsDefault {
isDefault = "Yes"
}
records = append(records,
rows = append(rows,
types.MakeDatums(collation.Name, collation.CharsetName, collation.ID, isDefault, "Yes", 1),
)
}
return records
e.rows = rows
}

func dataForCollationCharacterSetApplicability() (records [][]types.Datum) {
func (e *memtableRetriever) dataForCollationCharacterSetApplicability() {
var rows [][]types.Datum
collations := charset.GetSupportedCollations()
for _, collation := range collations {
records = append(records,
rows = append(rows,
types.MakeDatums(collation.Name, collation.CharsetName),
)
}
return records
e.rows = rows
}

func dataForKeyColumnUsage(ctx sessionctx.Context, schemas []*model.DBInfo) [][]types.Datum {
func (e *memtableRetriever) setDataFromKeyColumnUsage(ctx sessionctx.Context, schemas []*model.DBInfo) {
checker := privilege.GetPrivilegeManager(ctx)
rows := make([][]types.Datum, 0, len(schemas)) // The capacity is not accurate, but it is not a big problem.
for _, schema := range schemas {
Expand All @@ -652,7 +658,12 @@ func dataForKeyColumnUsage(ctx sessionctx.Context, schemas []*model.DBInfo) [][]
rows = append(rows, rs...)
}
}
return rows
e.rows = rows
}

func (e *memtableRetriever) setDataFromUserPrivileges(ctx sessionctx.Context) {
pm := privilege.GetPrivilegeManager(ctx)
e.rows = pm.UserPrivilegesTable()
}

func keyColumnUsageInTable(schema *model.DBInfo, table *model.TableInfo) [][]types.Datum {
Expand Down Expand Up @@ -738,8 +749,3 @@ func keyColumnUsageInTable(schema *model.DBInfo, table *model.TableInfo) [][]typ
}
return rows
}

func (e *memtableRetriever) setDataFromUserPrivileges(ctx sessionctx.Context) {
pm := privilege.GetPrivilegeManager(ctx)
e.rows = pm.UserPrivilegesTable()
}