From 2f8b1d24f481c6d671a125f40a62b7aa7192884d Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Fri, 2 Feb 2018 05:09:17 -0600 Subject: [PATCH] execute: set TableAsName and ColumnAsName for prepared statement (#5776) --- executor/prepared.go | 8 ++++++++ executor/prepared_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/executor/prepared.go b/executor/prepared.go index bafbdb9a40cfa..17c538b46676f 100644 --- a/executor/prepared.go +++ b/executor/prepared.go @@ -152,6 +152,14 @@ func (e *PrepareExec) DoPrepare() { } if result, ok := stmt.(ast.ResultSetNode); ok { e.Fields = result.GetResultFields() + for _, fields := range e.Fields { + if fields.TableAsName.O == "" { + fields.TableAsName = fields.Table.Name + } + if fields.ColumnAsName.O == "" { + fields.ColumnAsName = fields.Column.Name + } + } } // The parameter markers are appended in visiting order, which may not diff --git a/executor/prepared_test.go b/executor/prepared_test.go index 78d69f06d7d76..807da4ccfb415 100644 --- a/executor/prepared_test.go +++ b/executor/prepared_test.go @@ -97,6 +97,37 @@ func (s *testSuite) TestPrepared(c *C) { _, err = tk.Exec("execute stmt") c.Assert(err, NotNil) + _, _, fields, err := tk.Se.PrepareStmt("select a from prepare3") + c.Assert(err, IsNil) + c.Assert(fields[0].DBName.L, Equals, "test") + c.Assert(fields[0].TableAsName.L, Equals, "prepare3") + c.Assert(fields[0].ColumnAsName.L, Equals, "a") + + _, _, fields, err = tk.Se.PrepareStmt("select a from prepare3 where ?") + c.Assert(err, IsNil) + c.Assert(fields[0].DBName.L, Equals, "test") + c.Assert(fields[0].TableAsName.L, Equals, "prepare3") + c.Assert(fields[0].ColumnAsName.L, Equals, "a") + + _, _, fields, err = tk.Se.PrepareStmt("select (1,1) in (select 1,1)") + c.Assert(err, IsNil) + c.Assert(fields[0].DBName.L, Equals, "") + c.Assert(fields[0].TableAsName.L, Equals, "") + c.Assert(fields[0].ColumnAsName.L, Equals, "(1,1) in (select 1,1)") + + _, _, fields, err = tk.Se.PrepareStmt("select * from prepare3 as t1 join prepare3 as t2") + c.Assert(err, IsNil) + c.Assert(fields[0].DBName.L, Equals, "test") + c.Assert(fields[0].TableAsName.L, Equals, "t1") + c.Assert(fields[0].ColumnAsName.L, Equals, "a") + c.Assert(fields[1].DBName.L, Equals, "test") + c.Assert(fields[1].TableAsName.L, Equals, "t2") + c.Assert(fields[1].ColumnAsName.L, Equals, "a") + + _, _, fields, err = tk.Se.PrepareStmt("update prepare3 set a = ?") + c.Assert(err, IsNil) + c.Assert(len(fields), Equals, 0) + // Coverage. exec := &executor.ExecuteExec{} exec.Next()