Skip to content

Commit b3d4ed7

Browse files
eurekakacoocood
authored andcommitted
server, mysql: return correct column name and column label name (#7600)
1 parent 6fb1a63 commit b3d4ed7

File tree

4 files changed

+22
-9
lines changed

4 files changed

+22
-9
lines changed

executor/adapter.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,18 @@ func schema2ResultFields(schema *expression.Schema, defaultDB string) (rfs []*as
6565
if dbName == "" && col.TblName.L != "" {
6666
dbName = defaultDB
6767
}
68+
origColName := col.OrigColName
69+
if origColName.L == "" {
70+
origColName = col.ColName
71+
}
6872
rf := &ast.ResultField{
6973
ColumnAsName: col.ColName,
7074
TableAsName: col.TblName,
7175
DBName: model.NewCIStr(dbName),
7276
Table: &model.TableInfo{Name: col.OrigTblName},
7377
Column: &model.ColumnInfo{
7478
FieldType: *col.RetType,
75-
Name: col.ColName,
79+
Name: origColName,
7680
},
7781
}
7882
rfs = append(rfs, rf)

executor/executor_test.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -1768,26 +1768,31 @@ func (s *testSuite) TestColumnName(c *C) {
17681768
fields := rs.Fields()
17691769
c.Check(len(fields), Equals, 2)
17701770
c.Check(fields[0].Column.Name.L, Equals, "1 + c")
1771+
c.Check(fields[0].ColumnAsName.L, Equals, "1 + c")
17711772
c.Check(fields[1].Column.Name.L, Equals, "count(*)")
1773+
c.Check(fields[1].ColumnAsName.L, Equals, "count(*)")
17721774
rs, err = tk.Exec("select (c) > all (select c from t) from t")
17731775
c.Check(err, IsNil)
17741776
fields = rs.Fields()
17751777
c.Check(len(fields), Equals, 1)
17761778
c.Check(fields[0].Column.Name.L, Equals, "(c) > all (select c from t)")
1779+
c.Check(fields[0].ColumnAsName.L, Equals, "(c) > all (select c from t)")
17771780
tk.MustExec("begin")
17781781
tk.MustExec("insert t values(1,1)")
17791782
rs, err = tk.Exec("select c d, d c from t")
17801783
c.Check(err, IsNil)
17811784
fields = rs.Fields()
17821785
c.Check(len(fields), Equals, 2)
1783-
c.Check(fields[0].Column.Name.L, Equals, "d")
1784-
c.Check(fields[1].Column.Name.L, Equals, "c")
1786+
c.Check(fields[0].Column.Name.L, Equals, "c")
1787+
c.Check(fields[0].ColumnAsName.L, Equals, "d")
1788+
c.Check(fields[1].Column.Name.L, Equals, "d")
1789+
c.Check(fields[1].ColumnAsName.L, Equals, "c")
17851790
// Test case for query a column of a table.
17861791
// In this case, all attributes have values.
17871792
rs, err = tk.Exec("select c as a from t as t2")
17881793
c.Check(err, IsNil)
17891794
fields = rs.Fields()
1790-
c.Check(fields[0].Column.Name.L, Equals, "a")
1795+
c.Check(fields[0].Column.Name.L, Equals, "c")
17911796
c.Check(fields[0].ColumnAsName.L, Equals, "a")
17921797
c.Check(fields[0].Table.Name.L, Equals, "t")
17931798
c.Check(fields[0].TableAsName.L, Equals, "t2")

expression/column.go

+1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ func (col *CorrelatedColumn) resolveIndices(_ *Schema) {
142142

143143
// Column represents a column.
144144
type Column struct {
145+
OrigColName model.CIStr
145146
ColName model.CIStr
146147
DBName model.CIStr
147148
OrigTblName model.CIStr

plan/logical_plan_builder.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -472,20 +472,22 @@ func (b *planBuilder) buildSelection(p LogicalPlan, where ast.ExprNode, AggMappe
472472
}
473473

474474
// buildProjectionFieldNameFromColumns builds the field name, table name and database name when field expression is a column reference.
475-
func (b *planBuilder) buildProjectionFieldNameFromColumns(field *ast.SelectField, c *expression.Column) (colName, tblName, origTblName, dbName model.CIStr) {
475+
func (b *planBuilder) buildProjectionFieldNameFromColumns(field *ast.SelectField, c *expression.Column) (colName, origColName, tblName, origTblName, dbName model.CIStr) {
476476
if astCol, ok := getInnerFromParentheses(field.Expr).(*ast.ColumnNameExpr); ok {
477-
colName, tblName, dbName = astCol.Name.Name, astCol.Name.Table, astCol.Name.Schema
477+
origColName, tblName, dbName = astCol.Name.Name, astCol.Name.Table, astCol.Name.Schema
478478
}
479479
if field.AsName.L != "" {
480480
colName = field.AsName
481+
} else {
482+
colName = origColName
481483
}
482484
if tblName.L == "" {
483485
tblName = c.TblName
484486
}
485487
if dbName.L == "" {
486488
dbName = c.DBName
487489
}
488-
return colName, tblName, c.OrigTblName, c.DBName
490+
return colName, origColName, tblName, c.OrigTblName, c.DBName
489491
}
490492

491493
// buildProjectionFieldNameFromExpressions builds the field name when field expression is a normal expression.
@@ -531,10 +533,10 @@ func (b *planBuilder) buildProjectionFieldNameFromExpressions(field *ast.SelectF
531533

532534
// buildProjectionField builds the field object according to SelectField in projection.
533535
func (b *planBuilder) buildProjectionField(id, position int, field *ast.SelectField, expr expression.Expression) *expression.Column {
534-
var origTblName, tblName, colName, dbName model.CIStr
536+
var origTblName, tblName, origColName, colName, dbName model.CIStr
535537
if c, ok := expr.(*expression.Column); ok && !c.IsAggOrSubq {
536538
// Field is a column reference.
537-
colName, tblName, origTblName, dbName = b.buildProjectionFieldNameFromColumns(field, c)
539+
colName, origColName, tblName, origTblName, dbName = b.buildProjectionFieldNameFromColumns(field, c)
538540
} else if field.AsName.L != "" {
539541
// Field has alias.
540542
colName = field.AsName
@@ -547,6 +549,7 @@ func (b *planBuilder) buildProjectionField(id, position int, field *ast.SelectFi
547549
TblName: tblName,
548550
OrigTblName: origTblName,
549551
ColName: colName,
552+
OrigColName: origColName,
550553
DBName: dbName,
551554
RetType: expr.GetType(),
552555
}

0 commit comments

Comments
 (0)