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

parser: support sql_mode "PIPES_AS_CONCAT" #5012

Merged
merged 53 commits into from Nov 9, 2017
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
fe4e72c
Merge pull request #3 from pingcap/master
spongedu Mar 21, 2017
40cd49e
Merge pull request #4 from pingcap/master
spongedu Mar 29, 2017
99847cd
Merge remote-tracking branch 'upstream/master'
spongedu Mar 31, 2017
1c670e4
Merge remote-tracking branch 'upstream/master'
spongedu Apr 7, 2017
029cf85
Merge remote-tracking branch 'upstream/master'
spongedu Jul 20, 2017
0adb1c6
Merge remote-tracking branch 'upstream/master'
spongedu Aug 1, 2017
fec7c8e
Merge remote-tracking branch 'upstream/master'
spongedu Aug 2, 2017
150787e
Merge remote-tracking branch 'upstream/master'
spongedu Aug 3, 2017
8cd6042
Merge remote-tracking branch 'upstream/master'
spongedu Aug 3, 2017
b6620af
Merge remote-tracking branch 'upstream/master'
spongedu Aug 3, 2017
86217bf
Merge remote-tracking branch 'upstream/master'
spongedu Aug 3, 2017
c872194
Merge remote-tracking branch 'upstream/master'
spongedu Aug 4, 2017
bb3ce69
Merge remote-tracking branch 'upstream/master'
spongedu Aug 9, 2017
2f11e70
Merge remote-tracking branch 'upstream/master'
spongedu Aug 10, 2017
0bcd8c9
Merge remote-tracking branch 'upstream/master'
spongedu Aug 11, 2017
58ac0a5
Merge remote-tracking branch 'upstream/master'
spongedu Aug 12, 2017
a57b198
Merge remote-tracking branch 'upstream/master'
spongedu Aug 14, 2017
d0e4250
Merge remote-tracking branch 'upstream/master'
spongedu Aug 14, 2017
622ebe8
Merge remote-tracking branch 'upstream/master'
spongedu Aug 15, 2017
620828e
Merge remote-tracking branch 'upstream/master'
spongedu Aug 15, 2017
d86616d
Merge remote-tracking branch 'upstream/master'
spongedu Aug 16, 2017
8b8fdca
Merge remote-tracking branch 'upstream/master'
spongedu Aug 17, 2017
a46d7af
Merge remote-tracking branch 'upstream/master'
spongedu Aug 20, 2017
ec7572e
Merge remote-tracking branch 'upstream/master'
spongedu Aug 21, 2017
965fdbf
Merge remote-tracking branch 'upstream/master'
spongedu Aug 21, 2017
3dc45e8
Merge remote-tracking branch 'upstream/master'
spongedu Aug 21, 2017
23836ec
Merge remote-tracking branch 'upstream/master'
spongedu Aug 22, 2017
8e516c4
Merge remote-tracking branch 'upstream/master'
spongedu Aug 22, 2017
3ec4459
Merge remote-tracking branch 'upstream/master'
spongedu Aug 23, 2017
81594d6
Merge remote-tracking branch 'upstream/master'
spongedu Aug 23, 2017
91715ed
Merge remote-tracking branch 'upstream/master'
spongedu Aug 25, 2017
79a887f
fix timestamp decimal len error
spongedu Aug 25, 2017
76e94e5
Merge remote-tracking branch 'upstream/master'
spongedu Aug 29, 2017
c246f28
Merge remote-tracking branch 'upstream/master'
spongedu Aug 31, 2017
75d0e0a
Merge remote-tracking branch 'upstream/master'
spongedu Sep 9, 2017
8622197
Merge remote-tracking branch 'upstream/master'
spongedu Sep 14, 2017
1c177d3
Merge remote-tracking branch 'upstream/master'
spongedu Sep 15, 2017
be8c873
Merge remote-tracking branch 'upstream/master'
spongedu Oct 17, 2017
a9df306
Merge remote-tracking branch 'upstream/master'
spongedu Oct 29, 2017
63153bd
Merge remote-tracking branch 'upstream/master'
spongedu Nov 4, 2017
c22c5a6
parser: suppoert sql_mode "PIPES_AS_CONCAT"
spongedu Nov 6, 2017
2d45b0c
Merge remote-tracking branch 'upstream/master' into mode_pipes_as_concat
spongedu Nov 7, 2017
999bf16
Merge remote-tracking branch 'upstream/master' into mode_pipes_as_concat
spongedu Nov 8, 2017
45f347b
Revert changes that made by mistake
spongedu Nov 8, 2017
64d31d3
Merge branch 'master' into mode_pipes_as_concat
spongedu Nov 8, 2017
3d91dde
Merge remote-tracking branch 'upstream/master' into mode_pipes_as_concat
spongedu Nov 8, 2017
bf8cc68
Refine token name in parser
spongedu Nov 8, 2017
8245e46
Merge branch 'mode_pipes_as_concat' of github.com:spongedu/tidb into …
spongedu Nov 8, 2017
3d545cc
code format refine
spongedu Nov 8, 2017
1bd97ed
Code Refine in parser.y
spongedu Nov 9, 2017
f891d78
Merge remote-tracking branch 'upstream/master' into mode_pipes_as_concat
spongedu Nov 9, 2017
5b71e08
Merge remote-tracking branch 'upstream/master' into mode_pipes_as_concat
spongedu Nov 9, 2017
4bae2bb
Merge branch 'master' into mode_pipes_as_concat
coocood Nov 9, 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
5 changes: 5 additions & 0 deletions mysql/const.go
Expand Up @@ -427,6 +427,11 @@ func (m SQLMode) HasStrictMode() bool {
return m&ModeStrictTransTables == ModeStrictTransTables || m&ModeStrictAllTables == ModeStrictAllTables
}

// HasPipesAsConcatMode detects if 'PIPES_AS_CONCAT' mode is set in SQLMode
func (m SQLMode) HasPipesAsConcatMode() bool {
return m&ModePipesAsConcat == ModePipesAsConcat
}

// HasRealAsFloatMode detects if 'REAL_AS_FLOAT' mode is set in SQLMode
func (m SQLMode) HasRealAsFloatMode() bool {
return m&ModeRealAsFloat == ModeRealAsFloat
Expand Down
7 changes: 7 additions & 0 deletions mysql/const_test.go
Expand Up @@ -148,3 +148,10 @@ func (s *testMySQLConstSuite) TestRealAsFloatMode(c *C) {
row = result.Rows()[0]
c.Assert(row[1], Equals, "float")
}

func (s *testMySQLConstSuite) TestPipesAsConcatMode(c *C) {
tk := testkit.NewTestKit(c, s.store)
tk.MustExec("SET sql_mode='PIPES_AS_CONCAT';")
r := tk.MustQuery(`SELECT 'hello' || 'world';`)
r.Check(testkit.Rows("helloworld"))
}
4 changes: 4 additions & 0 deletions parser/lexer.go
Expand Up @@ -146,6 +146,10 @@ func (s *Scanner) Lex(v *yySymType) int {
tok = identifier
}

if tok == oror && !(s.sqlMode.HasPipesAsConcatMode()) {
return or2
}

switch tok {
case intLit:
return toInt(s, v, lit)
Expand Down
16 changes: 13 additions & 3 deletions parser/parser.y
Expand Up @@ -434,6 +434,8 @@ import (
paramMarker "?"
rsh ">>"

%token<ident> or2
Copy link
Member

Choose a reason for hiding this comment

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

what does or2 means ?

Copy link
Contributor Author

@spongedu spongedu Nov 6, 2017

Choose a reason for hiding this comment

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

@zz-jason represent || when PIPES_AS_CONCQT is not set. I think it's better to distinguish || under different sql_modes, and that's how MySQL do

Copy link
Member

Choose a reason for hiding this comment

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

@winkyao PTAL


%type <expr>
Expression "expression"
BoolPri "boolean primary expression"
Expand Down Expand Up @@ -781,7 +783,7 @@ import (
%precedence lowerThanOn
%precedence on using
%right assignmentEq
%left oror or
%left oror or or2
%left xor
%left andand and
%left between
Expand Down Expand Up @@ -1896,7 +1898,8 @@ Expression:


logOr:
"||" | "OR"
or2
| "OR"

logAnd:
"&&" | "AND"
Expand Down Expand Up @@ -1986,7 +1989,7 @@ CompareOp:
| "<>"
{
$$ = opcode.NE
}
}
| "="
{
$$ = opcode.EQ
Expand Down Expand Up @@ -2767,6 +2770,10 @@ SimpleExpr:
{
$$ = &ast.UnaryOperationExpr{Op: opcode.Plus, V: $2}
}
| SimpleExpr oror SimpleExpr
{
$$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.Concat), Args: []ast.ExprNode{$1, $3}}
}
| SubSelect
| '(' Expression ')' {
startOffset := parser.startOffset(&yyS[yypt-1])
Expand Down Expand Up @@ -5456,6 +5463,9 @@ DateAndTimeType:
x := types.NewFieldType(mysql.TypeTimestamp)
x.Flen = mysql.MaxDatetimeWidthNoFsp
x.Decimal = $2.(int)
if x.Decimal == types.UnspecifiedLength{
Copy link
Member

Choose a reason for hiding this comment

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

Why change this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@coocood it's change by mistake. I'll revert it.

x.Decimal = 0
}
if x.Decimal > 0 {
x.Flen = x.Flen + 1 + x.Decimal
}
Expand Down