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

Support SQLMode ONLY_FULL_GROUP_BY and fix a join panic bug #4613

Merged
merged 90 commits into from Nov 6, 2017
Merged
Show file tree
Hide file tree
Changes from 82 commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
229f129
executor: "INSERT IGNORE" generate warnings for duplicate-key error
CodeRushing Aug 30, 2017
57547c6
Merge branch 'master' into master
winkyao Aug 31, 2017
71bb746
Merge remote-tracking branch 'origin/master'
CodeRushing Aug 31, 2017
f5dadd5
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Aug 31, 2017
da4405a
executor,parser,plan: support "UPDATE IGNORE", update conflicts gener…
CodeRushing Aug 31, 2017
dd18f96
parser: fix the indent in parser.y
CodeRushing Sep 1, 2017
b2570bb
parser,ast,executor,plan: change the variable name of Ignore to Ignor…
CodeRushing Sep 1, 2017
acd4546
Merge branch 'master' into master
zz-jason Sep 1, 2017
a12fbca
executor: fix when update ignore of primary key conflicts, the old re…
CodeRushing Sep 1, 2017
f517321
Merge branch 'master' into master
zimulala Sep 4, 2017
d6bd63e
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 5, 2017
9756236
executor: Support update ignore for truncate as warning
CodeRushing Sep 5, 2017
03da4c0
Merge branch 'master' into master
zz-jason Sep 13, 2017
84fb417
executor,sessionctx:fix data race for set IgnoreTruncate in Statement…
CodeRushing Sep 13, 2017
803b9a2
Merge branch 'master' into master
CodeRushing Sep 14, 2017
961ba93
Merge branch 'master' into master
zz-jason Sep 14, 2017
06b4674
executor:use UpdateStmt.IgnoreErr to set the TruncateAsWarning in Res…
CodeRushing Sep 18, 2017
506be2f
Merge branch 'master' into master
CodeRushing Sep 18, 2017
b9dd383
sessionctx: remove unused code
CodeRushing Sep 18, 2017
802e146
executor: replace s.(*ast.UpdateStmt) with stmt
CodeRushing Sep 18, 2017
f7491e9
executor:remote empty line
CodeRushing Sep 18, 2017
070b867
Merge branch 'master' into master
XuHuaiyu Sep 18, 2017
dc49b82
Merge branch 'master' into master
coocood Sep 18, 2017
6eb2564
Merge branch 'master' into master
hanfei1991 Sep 19, 2017
84694ea
Merge branch 'master' into master
coocood Sep 19, 2017
947a06f
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 19, 2017
f152f90
ast,executor,parser:Support delete ignore with strict sql mode produc…
CodeRushing Sep 19, 2017
940a40a
Merge branch 'master' into master
zz-jason Sep 19, 2017
39c9b91
Merge branch 'master' into master
coocood Sep 19, 2017
6712018
Merge branch 'master' into master
coocood Sep 19, 2017
e7ef3c6
Merge branch 'master' into master
zz-jason Sep 19, 2017
a3ee2bc
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 22, 2017
0ed42fc
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 23, 2017
f602bd1
sessionctx,plan,ast,executor,mysql,session,bootstrap: Support SQLMode…
CodeRushing Sep 24, 2017
7c1b979
mysql:add note for HasOnlyFullGroupBy
CodeRushing Sep 24, 2017
648199f
expression:add set sql_mode to make the tests ok
CodeRushing Sep 24, 2017
79e14d2
executor,mysql,plan,sessionctx:remove the error ErrFieldNotInGroupBy …
CodeRushing Sep 24, 2017
fa87ec4
mysql: fix non-standard note
CodeRushing Sep 24, 2017
f0ef632
ast,executor,plan: support group-by-functional-dependencew
CodeRushing Sep 30, 2017
d57b460
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 30, 2017
9f4ce42
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 30, 2017
6cebdb1
Merge remote-tracking branch 'origin/master'
CodeRushing Sep 30, 2017
b537d82
plan: check b.err after leftPlan := b.buildResultSetNode(join.Left) a…
CodeRushing Sep 30, 2017
4194122
Merge branch 'master' into master
CodeRushing Oct 6, 2017
32ff413
Merge remote-tracking branch 'origin/master'
CodeRushing Oct 9, 2017
7dd1bab
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Oct 9, 2017
be9456e
Merge branch 'master' into master
CodeRushing Oct 9, 2017
62cc92f
Merge branch 'master' into master
zz-jason Oct 9, 2017
d15d8e6
plan:fix assignments of errors to the blank identifier
CodeRushing Oct 10, 2017
e19c46b
Merge remote-tracking branch 'origin/master'
CodeRushing Oct 10, 2017
17e33c2
Merge branch 'master' into master
zz-jason Oct 11, 2017
0e624d5
plan,executor:extract column from other ExprNode
CodeRushing Oct 11, 2017
10cd46c
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Oct 11, 2017
500385c
executor,plan:add ast.UnaryOperationExpr for extracting column
CodeRushing Oct 11, 2017
895c291
Merge branch 'master' into master
CodeRushing Oct 11, 2017
27a4b12
Merge branch 'master' into master
CodeRushing Oct 12, 2017
8670ee1
Merge branch 'master' into master
CodeRushing Oct 12, 2017
b587ebd
Merge branch 'master' into master
CodeRushing Oct 12, 2017
8cd1243
plan:use colResolver to replace the function allColFromExprNode for e…
CodeRushing Oct 14, 2017
34037b7
Merge remote-tracking branch 'origin/master'
CodeRushing Oct 14, 2017
e205e56
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Oct 14, 2017
c326d14
Merge branch 'master' into master
CodeRushing Oct 16, 2017
11843f4
Merge branch 'master' into master
CodeRushing Oct 18, 2017
ac617e1
plan,executor:add error log and some tests
CodeRushing Oct 20, 2017
16a907d
Merge branch 'master' into master
CodeRushing Oct 20, 2017
295512a
plan:add some log error and change the set define
CodeRushing Oct 26, 2017
3b27ce0
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Oct 26, 2017
554b50c
Merge remote-tracking branch 'origin/master'
CodeRushing Oct 27, 2017
4b4b852
Merge branch 'master' into master
CodeRushing Oct 27, 2017
cbd64e4
Merge branch 'master' into master
CodeRushing Oct 27, 2017
a4b0613
executor:fix wrong connID in show test
CodeRushing Oct 30, 2017
f3aaf30
Merge remote-tracking branch 'origin/master'
CodeRushing Oct 30, 2017
64c99f7
mysql,bootstrap:cancel changing the global sql_mode
CodeRushing Oct 31, 2017
2993861
executor,expression,plan:remove ONLY_FULL_GROUP_BY from global and re…
CodeRushing Oct 31, 2017
924532d
Merge branch 'master' into master
CodeRushing Oct 31, 2017
e3ce8a6
executor:format the comment and judge error is ErrFieldNotInGroupBy
CodeRushing Nov 1, 2017
5986b0b
plan:remove empty line
CodeRushing Nov 1, 2017
f0d2e8c
session.go:change currentBootstrapVersion back to 15
CodeRushing Nov 1, 2017
7f730cd
Merge branch 'master' of github.com:CodeRushing/tidb
CodeRushing Nov 1, 2017
f75aaf7
plan:colResolver visit all ast.Node except ColumnNameExpr and Subquer…
CodeRushing Nov 1, 2017
8237ab6
executor,plan:support order by for sql_mode=ONLY_FULL_GROUP_BY
CodeRushing Nov 1, 2017
89b2b3d
executor,plan:remove error log and add ambiguous field test case
CodeRushing Nov 1, 2017
df1f692
executor:use an easier way to check error for ErrFieldNotInGroupBy
CodeRushing Nov 1, 2017
045f37c
mysql,plan:colResolver skip AggregateFuncExpr and be compatible with …
CodeRushing Nov 2, 2017
94e1771
plan: remove debug code
CodeRushing Nov 2, 2017
f22d952
Merge branch 'master' into master
CodeRushing Nov 2, 2017
d99bb67
session_test.go:remove tests
CodeRushing Nov 2, 2017
bf54bf0
Merge branch 'master' into master
CodeRushing Nov 3, 2017
430bfff
Merge branch 'master' into master
coocood Nov 4, 2017
e1f711a
Merge branch 'master' into master
CodeRushing Nov 6, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
142 changes: 142 additions & 0 deletions executor/aggregate_test.go
Expand Up @@ -14,11 +14,14 @@
package executor_test

import (
"github.com/juju/errors"
. "github.com/pingcap/check"
"github.com/pingcap/tidb/ast"
"github.com/pingcap/tidb/executor"
"github.com/pingcap/tidb/expression"
"github.com/pingcap/tidb/mysql"
"github.com/pingcap/tidb/plan"
"github.com/pingcap/tidb/terror"
"github.com/pingcap/tidb/util/testkit"
)

Expand Down Expand Up @@ -349,9 +352,148 @@ func (s *testSuite) TestAggPushDown(c *C) {
tk.MustQuery("select a, count(b) from (select * from t union all select * from tt) k group by a").Check(testkit.Rows("1 2", "2 1"))
}

func (s *testSuite) TestOnlyFullGroupBy(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")
tk.MustExec("set sql_mode = 'ONLY_FULL_GROUP_BY'")
tk.MustExec("drop table if exists t")
tk.MustExec("create table t(a int not null primary key, b int not null, c int default null, d int not null, unique key I_b_c (b,c), unique key I_b_d (b,d))")
tk.MustExec("create table x(a int not null primary key, b int not null, c int default null, d int not null, unique key I_b_c (b,c), unique key I_b_d (b,d))")

// test AggregateFunc
tk.MustExec("select max(a) from t group by d")
// test incompatible with sql_mode = ONLY_FULL_GROUP_BY
var err error
var terr *terror.Error
_, err = tk.Exec("select * from t group by d")
c.Assert(err, NotNil)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We better check error equals ErrFieldNotInGroupBy

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is an easier way to check error code.

_, err = tk.Exec("select * from t group by d")
c.Assert(terror.ErrorEqual(err, mysql.ErrFieldNotInGroupBy), IsTrue)

_, err = tk.Exec("select b-c from t group by b+c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select (b-c)*(b+c), min(a) from t group by b+c, b-c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select b between c and d from t group by b,c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select case b when 1 then c when 2 then d else d end from t group by b,c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select c > (select b from t) from t group by b")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select c is null from t group by b")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select c is true from t group by b")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select (c+b)*d from t group by c,d")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select b in (c,d) from t group by b,c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select b like '%a' from t group by c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select c REGEXP '1.*' from t group by b")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select -b from t group by c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test compatible with sql_mode = ONLY_FULL_GROUP_BY
tk.MustExec("select a from t group by a,b,c")
tk.MustExec("select b from t group by b")
tk.MustExec("select b as e from t group by b")
tk.MustExec("select b+c from t group by b+c")
tk.MustExec("select b+c, min(a) from t group by b+c, b-c")
tk.MustExec("select b+c, min(a) from t group by b, c")
tk.MustExec("select b+c from t group by b,c")
tk.MustExec("select b between c and d from t group by b,c,d")
tk.MustExec("select case b when 1 then c when 2 then d else d end from t group by b,c,d")
tk.MustExec("select c > (select b from t) from t group by c")
tk.MustExec("select exists (select * from t) from t group by d;")
tk.MustExec("select c is null from t group by c")
tk.MustExec("select c is true from t group by c")
tk.MustExec("select (c+b)*d from t group by c,b,d")
tk.MustExec("select b in (c,d) from t group by b,c,d")
tk.MustExec("select b like '%a' from t group by b")
tk.MustExec("select c REGEXP '1.*' from t group by c")
tk.MustExec("select -b from t group by b")
// test functinal depend on primary key
tk.MustExec("select * from t group by a")
// test functional depend on unique not null columns
tk.MustExec("select * from t group by b,d")
// test functional depend on a unique null column
_, err = tk.Exec("select * from t group by b,c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test functional dependency derived from keys in where condition
tk.MustExec("select * from t where c = d group by b, c")
tk.MustExec("select t.*, x.* from t, x where t.a = x.a group by t.a")
tk.MustExec("select t.*, x.* from t, x where t.b = x.b and t.d = x.d group by t.b, t.d")
tk.MustExec("select t.*, x.* from t, x where t.b = x.a group by t.b, t.d")
tk.MustExec("select t.b, x.* from t, x where t.b = x.a group by t.b")
_, err = tk.Exec("select t.*, x.* from t, x where t.c = x.a group by t.b, t.c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test functional dependency derived from keys in join
tk.MustExec("select t.*, x.* from t inner join x on t.a = x.a group by t.a")
tk.MustExec("select t.*, x.* from t inner join x on (t.b = x.b and t.d = x.d) group by t.b, x.d")
tk.MustExec("select t.b, x.* from t inner join x on t.b = x.b group by t.b, x.d")
tk.MustExec("select t.b, x.* from t left join x on t.b = x.b group by t.b, x.d")
tk.MustExec("select t.b, x.* from t left join x on x.b = t.b group by t.b, x.d")
tk.MustExec("select x.b, t.* from t right join x on x.b = t.b group by x.b, t.d")
tk.MustExec("select x.b, t.* from t right join x on t.b = x.b group by x.b, t.d")
_, err = tk.Exec("select t.b, x.* from t right join x on t.b = x.b group by t.b, x.d")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
_, err = tk.Exec("select t.b, x.* from t right join x on t.b = x.b group by t.b, x.d")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test functional dependency of derived table
tk.MustExec("select * from (select * from t) as e group by a")
tk.MustExec("select * from (select * from t) as e group by b,d")
_, err = tk.Exec("select * from (select * from t) as e group by b,c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test order by
tk.MustExec("select c from t group by c,d order by d")
_, err = tk.Exec("select c from t group by c order by d")
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrFieldNotInGroupBy))
// test ambiguous column
_, err = tk.Exec("select c from t,x group by t.c")
c.Assert(err, NotNil)
terr = errors.Trace(err).(*errors.Err).Cause().(*terror.Error)
c.Assert(terr.Code(), Equals, terror.ErrCode(mysql.ErrNonUniq))
}

func (s *testSuite) TestHaving(c *C) {
tk := testkit.NewTestKitWithInit(c, s.store)

tk.MustExec("set sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'")
tk.MustExec("drop table if exists t")
tk.MustExec("create table t (c1 int, c2 int, c3 int)")
tk.MustExec("insert into t values (1,2,3), (2, 3, 1), (3, 1, 2)")
Expand Down
3 changes: 3 additions & 0 deletions executor/join_test.go
Expand Up @@ -89,9 +89,12 @@ func (s *testSuite) TestNestedLoopJoin(c *C) {
func (s *testSuite) TestJoinPanic(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("use test")
tk.MustExec("set sql_mode = 'ONLY_FULL_GROUP_BY'")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it still panic if ONLY_FULL_GROUP_BY is not set?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would not panic.

tk.MustExec("drop table if exists events")
tk.MustExec("create table events (clock int, source int)")
tk.MustQuery("SELECT * FROM events e JOIN (SELECT MAX(clock) AS clock FROM events e2 GROUP BY e2.source) e3 ON e3.clock=e.clock")
_, err := tk.Exec("SELECT * FROM events e JOIN (SELECT clock FROM events e2 GROUP BY e2.source) e3 ON e3.clock=e.clock")
c.Check(err, NotNil)
}

func (s *testSuite) TestJoin(c *C) {
Expand Down
4 changes: 2 additions & 2 deletions executor/show_test.go
Expand Up @@ -334,8 +334,8 @@ func (s *testSuite) TestShowFullProcessList(c *C) {
fullSQL := "show full processlist"
simpSQL := "show processlist"

tk.MustQuery(fullSQL).Check(testutil.RowsWithSep("|", "218| Query|0|2|"+fullSQL))
tk.MustQuery(simpSQL).Check(testutil.RowsWithSep("|", "218| Query|0|2|"+simpSQL[:100]))
tk.MustQuery(fullSQL).Check(testutil.RowsWithSep("|", "220| Query|0|2|"+fullSQL))
tk.MustQuery(simpSQL).Check(testutil.RowsWithSep("|", "220| Query|0|2|"+simpSQL[:100]))

se.SetSessionManager(nil) // reset sm so other tests won't use this
}
Expand Down
8 changes: 8 additions & 0 deletions mysql/const.go
Expand Up @@ -359,6 +359,9 @@ var AllColumnPrivs = []PrivilegeType{SelectPriv, InsertPriv, UpdatePriv}
// AllPrivilegeLiteral is the string literal for All Privilege.
const AllPrivilegeLiteral = "ALL PRIVILEGES"

// DefaultSQLMode for GLOBAL_VARIABLES
const DefaultSQLMode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

// DefaultLengthOfMysqlTypes is the map for default physical length of MySQL data types.
// See http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
var DefaultLengthOfMysqlTypes = map[byte]int{
Expand Down Expand Up @@ -414,6 +417,11 @@ func (m SQLMode) HasErrorForDivisionByZeroMode() bool {
return m&ModeErrorForDivisionByZero == ModeErrorForDivisionByZero
}

// HasOnlyFullGroupBy detects if 'ONLY_FULL_GROUP_BY' mode is set in SQLMode
func (m SQLMode) HasOnlyFullGroupBy() bool {
return m&ModeOnlyFullGroupBy == ModeOnlyFullGroupBy
}

// HasStrictMode detects if 'STRICT_TRANS_TABLES' or 'STRICT_ALL_TABLES' mode is set in SQLMode
func (m SQLMode) HasStrictMode() bool {
return m&ModeStrictTransTables == ModeStrictTransTables || m&ModeStrictAllTables == ModeStrictAllTables
Expand Down
2 changes: 1 addition & 1 deletion mysql/errcode.go
Expand Up @@ -72,7 +72,7 @@ const (
ErrNonUniq = 1052
ErrServerShutdown = 1053
ErrBadField = 1054
ErrWrongFieldWithGroup = 1055
ErrFieldNotInGroupBy = 1055
ErrWrongGroupField = 1056
ErrWrongSumSelect = 1057
ErrWrongValueCount = 1058
Expand Down
2 changes: 1 addition & 1 deletion mysql/errname.go
Expand Up @@ -70,7 +70,7 @@ var MySQLErrName = map[uint16]string{
ErrNonUniq: "Column '%-.192s' in %-.192s is ambiguous",
ErrServerShutdown: "Server shutdown in progress",
ErrBadField: "Unknown column '%-.192s' in '%-.192s'",
ErrWrongFieldWithGroup: "'%-.192s' isn't in GROUP BY",
ErrFieldNotInGroupBy: "Expression #%d of SELECT list is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by",
ErrWrongGroupField: "Can't group on '%-.192s'",
ErrWrongSumSelect: "Statement has sum functions and columns in same statement",
ErrWrongValueCount: "Column count doesn't match value count",
Expand Down
2 changes: 1 addition & 1 deletion mysql/state.go
Expand Up @@ -38,7 +38,7 @@ var MySQLState = map[uint16]string{
ErrNonUniq: "23000",
ErrServerShutdown: "08S01",
ErrBadField: "42S22",
ErrWrongFieldWithGroup: "42000",
ErrFieldNotInGroupBy: "42000",
ErrWrongSumSelect: "42000",
ErrWrongGroupField: "42000",
ErrWrongValueCount: "21S01",
Expand Down