Skip to content

Commit

Permalink
planner: fix tiflash cannot find generated column (#41261)
Browse files Browse the repository at this point in the history
close #40663
  • Loading branch information
guo-shaoge authored Feb 13, 2023
1 parent 91265a4 commit ee8ad52
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 11 deletions.
9 changes: 7 additions & 2 deletions expression/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3771,18 +3771,23 @@ func TestShardIndexOnTiFlash(t *testing.T) {
}
}
}
tk.MustExec("set @@session.tidb_isolation_read_engines = 'tiflash'")
tk.MustExec("set @@session.tidb_enforce_mpp = 1")
rows := tk.MustQuery("explain select max(b) from t").Rows()
for _, row := range rows {
line := fmt.Sprintf("%v", row)
require.NotContains(t, line, "tiflash")
if strings.Contains(line, "TableFullScan") {
require.Contains(t, line, "tiflash")
}
}
tk.MustExec("set @@session.tidb_enforce_mpp = 0")
tk.MustExec("set @@session.tidb_allow_mpp = 0")
rows = tk.MustQuery("explain select max(b) from t").Rows()
for _, row := range rows {
line := fmt.Sprintf("%v", row)
require.NotContains(t, line, "tiflash")
if strings.Contains(line, "TableFullScan") {
require.NotContains(t, line, "mpp[tiflash]")
}
}
}

Expand Down
1 change: 1 addition & 0 deletions parser/mysql/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ const (
PreventNullInsertFlag uint = 1 << 20 /* Prevent this Field from inserting NULL values */
EnumSetAsIntFlag uint = 1 << 21 /* Internal: Used for inferring enum eval type. */
DropColumnIndexFlag uint = 1 << 22 /* Internal: Used for indicate the column is being dropped with index */
GeneratedColumnFlag uint = 1 << 23 /* Internal: TiFlash will check this flag and add a placeholder for this column */
)

// TypeInt24 bounds.
Expand Down
12 changes: 3 additions & 9 deletions planner/core/find_best_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -2001,15 +2001,9 @@ func (ds *DataSource) convertToTableScan(prop *property.PhysicalProperty, candid
return invalidTask, nil
}
if ts.StoreType == kv.TiFlash {
for _, col := range ts.schema.Columns {
// In theory, TiFlash does not support virtual expr, but in non-mpp mode, if the cop request only contain table scan, then
// TiDB will fill the virtual column after decoding the cop response(executor.FillVirtualColumnValue), that is to say, the virtual
// columns in Cop request is just a placeholder, so TiFlash can support virtual column in cop request mode. However, virtual column
// with TiDBShard is special, it can be added using create index statement, TiFlash's ddl does not handle create index statement, so
// there is a chance that the TiDBShard's virtual column is not seen by TiFlash, in this case, TiFlash will throw column not found error
if ds.containExprPrefixUk && expression.GcColumnExprIsTidbShard(col.VirtualExpr) {
ds.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because column `" + col.OrigName + "` is a virtual column which is not supported now.")
return invalidTask, nil
for _, col := range ts.Columns {
if col.IsGenerated() && !col.GeneratedStored {
col.AddFlag(mysql.GeneratedColumnFlag)
}
}
}
Expand Down

0 comments on commit ee8ad52

Please sign in to comment.