Skip to content

Commit

Permalink
*: simplify RecordSet.Fields. (pingcap#5068)
Browse files Browse the repository at this point in the history
  • Loading branch information
coocood authored and zz-jason committed Nov 12, 2017
1 parent 7cdcc1d commit ec9d1f0
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 102 deletions.
2 changes: 1 addition & 1 deletion ast/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ type Row struct {
type RecordSet interface {

// Fields gets result fields.
Fields() (fields []*ResultField, err error)
Fields() []*ResultField

// Next returns the next row, nil row means there is no more to return.
Next() (row *Row, err error)
Expand Down
4 changes: 2 additions & 2 deletions executor/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ type recordSet struct {
lastErr error
}

func (a *recordSet) Fields() ([]*ast.ResultField, error) {
func (a *recordSet) Fields() []*ast.ResultField {
if len(a.fields) == 0 {
for _, col := range a.executor.Schema().Columns {
dbName := col.DBName.O
Expand All @@ -66,7 +66,7 @@ func (a *recordSet) Fields() ([]*ast.ResultField, error) {
a.fields = append(a.fields, rf)
}
}
return a.fields, nil
return a.fields
}

func (a *recordSet) Next() (*ast.Row, error) {
Expand Down
101 changes: 35 additions & 66 deletions executor/executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err := tk.Exec(sql)
c.Check(err, IsNil)
fields, err := rs.Fields()
c.Check(err, IsNil)
fields := rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "NULL")

Expand All @@ -260,8 +259,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("N"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `N`)

Expand All @@ -274,8 +272,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("1"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `\N`)

Expand All @@ -284,7 +281,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
fields = rs.Fields()
c.Check(err, IsNil)
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `NULL`)
Expand All @@ -294,8 +291,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `NULL`)

Expand All @@ -304,8 +300,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("1"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `\N`)

Expand All @@ -314,8 +309,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("1"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `\N`)

Expand All @@ -324,8 +318,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("N"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `N`)

Expand All @@ -334,8 +327,7 @@ func (s *testSuite) TestSelectBackslashN(c *C) {
r.Check(testkit.Rows("N"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `N`)
}
Expand All @@ -349,8 +341,7 @@ func (s *testSuite) TestSelectNull(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err := tk.Exec(sql)
c.Check(err, IsNil)
fields, err := rs.Fields()
c.Check(err, IsNil)
fields := rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `NULL`)

Expand All @@ -359,8 +350,7 @@ func (s *testSuite) TestSelectNull(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `NULL`)

Expand All @@ -369,7 +359,7 @@ func (s *testSuite) TestSelectNull(c *C) {
r.Check(testkit.Rows("<nil>"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
fields = rs.Fields()
c.Check(err, IsNil)
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `null+NULL`)
Expand All @@ -384,8 +374,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("abc"))
rs, err := tk.Exec(sql)
c.Check(err, IsNil)
fields, err := rs.Fields()
c.Check(err, IsNil)
fields := rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `abc`)

Expand All @@ -394,8 +383,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("abc"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `abc`)

Expand All @@ -404,8 +392,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("0"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, `'abc'+'def'`)

Expand All @@ -415,65 +402,57 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("\n"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "")

sql = "select '\t col';" // Lowercased letter is a valid char.
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "col")

sql = "select '\t Col';" // Uppercased letter is a valid char.
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "Col")

sql = "select '\n\t 中文 col';" // Chinese char is a valid char.
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "中文 col")

sql = "select ' \r\n .col';" // Punctuation is a valid char.
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, ".col")

sql = "select ' 😆col';" // Emoji is a valid char.
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "😆col")

// Below checks whether trailing invalid chars are preserved.
sql = `select 'abc ';`
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "abc ")

sql = `select ' abc 123 ';`
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "abc 123 ")

Expand All @@ -483,8 +462,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("a string"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "a")

Expand All @@ -493,8 +471,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("a string"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "a")

Expand All @@ -503,8 +480,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("stringstring"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "string")

Expand All @@ -513,8 +489,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("ssa"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "ss")

Expand All @@ -523,8 +498,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("ssab"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "ss")

Expand All @@ -533,8 +507,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("ssa b"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "ss")

Expand All @@ -543,8 +516,7 @@ func (s *testSuite) TestSelectStringLiteral(c *C) {
r.Check(testkit.Rows("ssa b d"))
rs, err = tk.Exec(sql)
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.O, Equals, "ss")
}
Expand Down Expand Up @@ -1631,31 +1603,28 @@ func (s *testSuite) TestColumnName(c *C) {
tk.MustExec("create table t (c int, d int)")
rs, err := tk.Exec("select 1 + c, count(*) from t")
c.Check(err, IsNil)
fields, err := rs.Fields()
c.Check(err, IsNil)
fields := rs.Fields()
c.Check(len(fields), Equals, 2)
c.Check(fields[0].Column.Name.L, Equals, "1 + c")
c.Check(fields[1].Column.Name.L, Equals, "count(*)")
rs, err = tk.Exec("select (c) > all (select c from t) from t")
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 1)
c.Check(fields[0].Column.Name.L, Equals, "(c) > all (select c from t)")
tk.MustExec("begin")
tk.MustExec("insert t values(1,1)")
rs, err = tk.Exec("select c d, d c from t")
c.Check(err, IsNil)
fields, err = rs.Fields()
c.Check(err, IsNil)
fields = rs.Fields()
c.Check(len(fields), Equals, 2)
c.Check(fields[0].Column.Name.L, Equals, "d")
c.Check(fields[1].Column.Name.L, Equals, "c")
// Test case for query a column of a table.
// In this case, all attributes have values.
rs, err = tk.Exec("select c as a from t as t2")
c.Check(err, IsNil)
fields, err = rs.Fields()
fields = rs.Fields()
c.Check(fields[0].Column.Name.L, Equals, "a")
c.Check(fields[0].ColumnAsName.L, Equals, "a")
c.Check(fields[0].Table.Name.L, Equals, "t")
Expand All @@ -1665,7 +1634,7 @@ func (s *testSuite) TestColumnName(c *C) {
// In this case, the table, org_table and database attributes will all be empty.
rs, err = tk.Exec("select hour(1) as a from t as t2")
c.Check(err, IsNil)
fields, err = rs.Fields()
fields = rs.Fields()
c.Check(fields[0].Column.Name.L, Equals, "a")
c.Check(fields[0].ColumnAsName.L, Equals, "a")
c.Check(fields[0].Table.Name.L, Equals, "")
Expand Down
3 changes: 1 addition & 2 deletions executor/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -493,8 +493,7 @@ func (s *testSuite) TestCollation(c *C) {

rs, err := tk.Exec("show collation;")
c.Assert(err, IsNil)
fields, err := rs.Fields()
c.Assert(err, IsNil)
fields := rs.Fields()
c.Assert(fields[0].Column.Tp, Equals, mysql.TypeVarchar)
c.Assert(fields[1].Column.Tp, Equals, mysql.TypeVarchar)
c.Assert(fields[2].Column.Tp, Equals, mysql.TypeLonglong)
Expand Down
Loading

0 comments on commit ec9d1f0

Please sign in to comment.