From 1ae4f1620e3cdcfe2e20d0cbf5c76aa3e2d9da0e Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Tue, 2 Mar 2021 11:29:17 +0530 Subject: [PATCH 1/3] added a test and fixed the redundant unary operators Signed-off-by: GuptaManan100 --- go/vt/sqlparser/parse_test.go | 6 +- go/vt/sqlparser/sql.go | 467 +++++++++++++++++----------------- go/vt/sqlparser/sql.y | 9 + 3 files changed, 252 insertions(+), 230 deletions(-) diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 1266bad3a92..5d337ee2d9e 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -607,7 +607,8 @@ var ( input: "select /* binary unary */ a- -b from t", output: "select /* binary unary */ a - -b from t", }, { - input: "select /* - - */ - -b from t", + input: "select /* - - */ - -b from t", + output: "select /* - - */ +b from t", }, { input: "select /* binary binary */ binary binary b from t", }, { @@ -901,6 +902,9 @@ var ( input: "set @variable = 42", }, { input: "set @period.variable = 42", + }, { + input: "set S= +++-++-+(4+1)", + output: "set S = +(4 + 1)", }, { input: "alter table a add foo int first v", output: "alter table a add column foo int first v", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 84e70012044..5a84a3836e5 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -9520,13 +9520,15 @@ yydefault: { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { yyVAL.expr = num + } else if unaryExpr, ok := yyDollar[2].expr.(*UnaryExpr); ok && (unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp) { + yyVAL.expr = unaryExpr } else { yyVAL.expr = &UnaryExpr{Operator: UPlusOp, Expr: yyDollar[2].expr} } } case 712: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3617 +//line sql.y:3619 { if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { // Handle double negative @@ -9536,25 +9538,32 @@ yydefault: } else { yyVAL.expr = NewIntLiteral(append([]byte("-"), num.Val...)) } + } else if unaryExpr, ok := yyDollar[2].expr.(*UnaryExpr); ok && (unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp) { + if unaryExpr.Operator == UPlusOp { + unaryExpr.Operator = UMinusOp + } else { + unaryExpr.Operator = UPlusOp + } + yyVAL.expr = unaryExpr } else { yyVAL.expr = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].expr} } } case 713: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3631 +//line sql.y:3640 { yyVAL.expr = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].expr} } case 714: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3635 +//line sql.y:3644 { yyVAL.expr = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].expr} } case 715: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3639 +//line sql.y:3648 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -9564,331 +9573,331 @@ yydefault: } case 720: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3657 +//line sql.y:3666 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } case 721: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3661 +//line sql.y:3670 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 722: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3665 +//line sql.y:3674 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 723: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3669 +//line sql.y:3678 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } case 724: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3679 +//line sql.y:3688 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } case 725: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3683 +//line sql.y:3692 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } case 726: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3687 +//line sql.y:3696 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 727: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3691 +//line sql.y:3700 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 728: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3695 +//line sql.y:3704 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } case 729: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3699 +//line sql.y:3708 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 730: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3703 +//line sql.y:3712 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 731: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3707 +//line sql.y:3716 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 732: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3711 +//line sql.y:3720 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 733: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:3715 +//line sql.y:3724 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].matchExprOption} } case 734: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3719 +//line sql.y:3728 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].boolean, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } case 735: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3723 +//line sql.y:3732 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } case 736: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3727 +//line sql.y:3736 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } case 737: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3737 +//line sql.y:3746 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } case 738: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3741 +//line sql.y:3750 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } case 739: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3745 +//line sql.y:3754 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } case 740: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3750 +//line sql.y:3759 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } case 741: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3755 +//line sql.y:3764 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } case 742: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3760 +//line sql.y:3769 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } case 743: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3766 +//line sql.y:3775 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } case 744: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3771 +//line sql.y:3780 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } case 745: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3776 +//line sql.y:3785 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } case 746: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3780 +//line sql.y:3789 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } case 747: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3784 +//line sql.y:3793 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } case 748: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3789 +//line sql.y:3798 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } case 749: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3794 +//line sql.y:3803 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } case 750: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3799 +//line sql.y:3808 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } case 751: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3803 +//line sql.y:3812 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 752: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3807 +//line sql.y:3816 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 755: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3817 +//line sql.y:3826 { yyVAL.expr = yyDollar[2].expr } case 756: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3827 +//line sql.y:3836 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } case 757: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3831 +//line sql.y:3840 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } case 758: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3835 +//line sql.y:3844 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } case 759: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3839 +//line sql.y:3848 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } case 760: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3843 +//line sql.y:3852 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } case 761: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3847 +//line sql.y:3856 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 762: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3851 +//line sql.y:3860 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 763: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3857 +//line sql.y:3866 { yyVAL.matchExprOption = NoOption } case 764: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3861 +//line sql.y:3870 { yyVAL.matchExprOption = BooleanModeOpt } case 765: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3865 +//line sql.y:3874 { yyVAL.matchExprOption = NaturalLanguageModeOpt } case 766: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:3869 +//line sql.y:3878 { yyVAL.matchExprOption = NaturalLanguageModeWithQueryExpansionOpt } case 767: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3873 +//line sql.y:3882 { yyVAL.matchExprOption = QueryExpansionOpt } case 768: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3879 +//line sql.y:3888 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 769: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3883 +//line sql.y:3892 { yyVAL.str = string(yyDollar[1].bytes) } case 770: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3887 +//line sql.y:3896 { yyVAL.str = string(yyDollar[1].bytes) } case 771: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3893 +//line sql.y:3902 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 772: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3897 +//line sql.y:3906 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Operator: CharacterSetOp} } case 773: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3901 +//line sql.y:3910 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: string(yyDollar[3].colIdent.String())} } case 774: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3905 +//line sql.y:3914 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 775: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3909 +//line sql.y:3918 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 776: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3913 +//line sql.y:3922 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length @@ -9896,169 +9905,169 @@ yydefault: } case 777: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3919 +//line sql.y:3928 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 778: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3923 +//line sql.y:3932 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 779: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3927 +//line sql.y:3936 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 780: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3931 +//line sql.y:3940 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 781: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3935 +//line sql.y:3944 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 782: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3939 +//line sql.y:3948 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 783: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3943 +//line sql.y:3952 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 784: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3948 +//line sql.y:3957 { yyVAL.expr = nil } case 785: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3952 +//line sql.y:3961 { yyVAL.expr = yyDollar[1].expr } case 786: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3957 +//line sql.y:3966 { yyVAL.str = string("") } case 787: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3961 +//line sql.y:3970 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } case 788: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3967 +//line sql.y:3976 { yyVAL.whens = []*When{yyDollar[1].when} } case 789: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3971 +//line sql.y:3980 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } case 790: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3977 +//line sql.y:3986 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } case 791: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3982 +//line sql.y:3991 { yyVAL.expr = nil } case 792: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3986 +//line sql.y:3995 { yyVAL.expr = yyDollar[2].expr } case 793: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3992 +//line sql.y:4001 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } case 794: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3996 +//line sql.y:4005 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } case 795: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4000 +//line sql.y:4009 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } case 796: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4006 +//line sql.y:4015 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 797: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4010 +//line sql.y:4019 { yyVAL.expr = NewHexLiteral(yyDollar[1].bytes) } case 798: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4014 +//line sql.y:4023 { yyVAL.expr = NewBitLiteral(yyDollar[1].bytes) } case 799: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4018 +//line sql.y:4027 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 800: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4022 +//line sql.y:4031 { yyVAL.expr = NewFloatLiteral(yyDollar[1].bytes) } case 801: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4026 +//line sql.y:4035 { yyVAL.expr = NewHexNumLiteral(yyDollar[1].bytes) } case 802: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4030 +//line sql.y:4039 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 803: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4034 +//line sql.y:4043 { yyVAL.expr = &NullVal{} } case 804: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4040 +//line sql.y:4049 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -10069,595 +10078,595 @@ yydefault: } case 805: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4049 +//line sql.y:4058 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 806: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4053 +//line sql.y:4062 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 807: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4058 +//line sql.y:4067 { yyVAL.exprs = nil } case 808: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4062 +//line sql.y:4071 { yyVAL.exprs = yyDollar[3].exprs } case 809: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4067 +//line sql.y:4076 { yyVAL.expr = nil } case 810: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4071 +//line sql.y:4080 { yyVAL.expr = yyDollar[2].expr } case 811: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4076 +//line sql.y:4085 { yyVAL.orderBy = nil } case 812: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4080 +//line sql.y:4089 { yyVAL.orderBy = yyDollar[3].orderBy } case 813: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4086 +//line sql.y:4095 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } case 814: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4090 +//line sql.y:4099 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } case 815: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4096 +//line sql.y:4105 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].orderDirection} } case 816: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4101 +//line sql.y:4110 { yyVAL.orderDirection = AscOrder } case 817: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4105 +//line sql.y:4114 { yyVAL.orderDirection = AscOrder } case 818: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4109 +//line sql.y:4118 { yyVAL.orderDirection = DescOrder } case 819: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4114 +//line sql.y:4123 { yyVAL.limit = nil } case 820: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4118 +//line sql.y:4127 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } case 821: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4122 +//line sql.y:4131 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } case 822: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4126 +//line sql.y:4135 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } case 823: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4131 +//line sql.y:4140 { yyVAL.alterOptions = nil } case 824: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4135 +//line sql.y:4144 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption, yyDollar[2].alterOption} } case 825: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4139 +//line sql.y:4148 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption, yyDollar[2].alterOption} } case 826: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4143 +//line sql.y:4152 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption} } case 827: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4147 +//line sql.y:4156 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption} } case 828: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4154 +//line sql.y:4163 { yyVAL.alterOption = &LockOption{Type: DefaultType} } case 829: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4158 +//line sql.y:4167 { yyVAL.alterOption = &LockOption{Type: NoneType} } case 830: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4162 +//line sql.y:4171 { yyVAL.alterOption = &LockOption{Type: SharedType} } case 831: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4166 +//line sql.y:4175 { yyVAL.alterOption = &LockOption{Type: ExclusiveType} } case 832: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4172 +//line sql.y:4181 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 833: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4176 +//line sql.y:4185 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 834: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4180 +//line sql.y:4189 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 835: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4185 +//line sql.y:4194 { yyVAL.str = "" } case 836: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4189 +//line sql.y:4198 { yyVAL.str = string(yyDollar[3].bytes) } case 837: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4193 +//line sql.y:4202 { yyVAL.str = string(yyDollar[3].bytes) } case 838: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4197 +//line sql.y:4206 { yyVAL.str = string(yyDollar[3].bytes) } case 839: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4202 +//line sql.y:4211 { yyVAL.str = "" } case 840: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4206 +//line sql.y:4215 { yyVAL.str = yyDollar[3].str } case 841: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4212 +//line sql.y:4221 { yyVAL.str = string(yyDollar[1].bytes) } case 842: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4216 +//line sql.y:4225 { yyVAL.str = string(yyDollar[1].bytes) } case 843: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4221 +//line sql.y:4230 { yyVAL.str = "" } case 844: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4225 +//line sql.y:4234 { yyVAL.str = yyDollar[2].str } case 845: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4230 +//line sql.y:4239 { yyVAL.str = "cascaded" } case 846: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4234 +//line sql.y:4243 { yyVAL.str = string(yyDollar[1].bytes) } case 847: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4238 +//line sql.y:4247 { yyVAL.str = string(yyDollar[1].bytes) } case 848: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4243 +//line sql.y:4252 { yyVAL.str = "" } case 849: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4247 +//line sql.y:4256 { yyVAL.str = yyDollar[3].str } case 850: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4253 +//line sql.y:4262 { yyVAL.str = string(yyDollar[1].bytes) } case 851: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4257 +//line sql.y:4266 { yyVAL.str = string(yyDollar[1].bytes) } case 852: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4261 +//line sql.y:4270 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'@" + string(yyDollar[2].bytes) } case 853: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4265 +//line sql.y:4274 { yyVAL.str = string(yyDollar[1].bytes) } case 854: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4270 +//line sql.y:4279 { yyVAL.lock = NoLock } case 855: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4274 +//line sql.y:4283 { yyVAL.lock = ForUpdateLock } case 856: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4278 +//line sql.y:4287 { yyVAL.lock = ShareModeLock } case 857: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4283 +//line sql.y:4292 { yyVAL.selectInto = nil } case 858: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:4287 +//line sql.y:4296 { yyVAL.selectInto = &SelectInto{Type: IntoOutfileS3, FileName: string(yyDollar[4].bytes), Charset: yyDollar[5].str, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } case 859: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4291 +//line sql.y:4300 { yyVAL.selectInto = &SelectInto{Type: IntoDumpfile, FileName: string(yyDollar[3].bytes), Charset: "", FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } case 860: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4295 +//line sql.y:4304 { yyVAL.selectInto = &SelectInto{Type: IntoOutfile, FileName: string(yyDollar[3].bytes), Charset: yyDollar[4].str, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } case 861: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4300 +//line sql.y:4309 { yyVAL.str = "" } case 862: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4304 +//line sql.y:4313 { yyVAL.str = " format csv" + yyDollar[3].str } case 863: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4308 +//line sql.y:4317 { yyVAL.str = " format text" + yyDollar[3].str } case 864: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4313 +//line sql.y:4322 { yyVAL.str = "" } case 865: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4317 +//line sql.y:4326 { yyVAL.str = " header" } case 866: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4322 +//line sql.y:4331 { yyVAL.str = "" } case 867: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4326 +//line sql.y:4335 { yyVAL.str = " manifest on" } case 868: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4330 +//line sql.y:4339 { yyVAL.str = " manifest off" } case 869: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4335 +//line sql.y:4344 { yyVAL.str = "" } case 870: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4339 +//line sql.y:4348 { yyVAL.str = " overwrite on" } case 871: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4343 +//line sql.y:4352 { yyVAL.str = " overwrite off" } case 872: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4349 +//line sql.y:4358 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } case 873: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4354 +//line sql.y:4363 { yyVAL.str = "" } case 874: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4358 +//line sql.y:4367 { yyVAL.str = " lines" + yyDollar[2].str + yyDollar[3].str } case 875: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4363 +//line sql.y:4372 { yyVAL.str = "" } case 876: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4367 +//line sql.y:4376 { yyVAL.str = " starting by '" + string(yyDollar[3].bytes) + "'" } case 877: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4372 +//line sql.y:4381 { yyVAL.str = "" } case 878: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4376 +//line sql.y:4385 { yyVAL.str = " terminated by '" + string(yyDollar[3].bytes) + "'" } case 879: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4381 +//line sql.y:4390 { yyVAL.str = "" } case 880: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4385 +//line sql.y:4394 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str + yyDollar[3].str + yyDollar[4].str } case 881: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4390 +//line sql.y:4399 { yyVAL.str = "" } case 882: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4394 +//line sql.y:4403 { yyVAL.str = " escaped by '" + string(yyDollar[3].bytes) + "'" } case 883: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4399 +//line sql.y:4408 { yyVAL.str = "" } case 884: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4403 +//line sql.y:4412 { yyVAL.str = yyDollar[1].str + " enclosed by '" + string(yyDollar[4].bytes) + "'" } case 885: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4408 +//line sql.y:4417 { yyVAL.str = "" } case 886: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4412 +//line sql.y:4421 { yyVAL.str = " optionally" } case 887: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4425 +//line sql.y:4434 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } case 888: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4429 +//line sql.y:4438 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } case 889: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4433 +//line sql.y:4442 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } case 890: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4437 +//line sql.y:4446 { yyVAL.ins = &Insert{Rows: yyDollar[4].values} } case 891: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4441 +//line sql.y:4450 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } case 892: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4447 +//line sql.y:4456 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 893: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4451 +//line sql.y:4460 { yyVAL.columns = Columns{yyDollar[3].colIdent} } case 894: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4455 +//line sql.y:4464 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 895: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4459 +//line sql.y:4468 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } case 896: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4464 +//line sql.y:4473 { yyVAL.updateExprs = nil } case 897: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4468 +//line sql.y:4477 { yyVAL.updateExprs = yyDollar[5].updateExprs } case 898: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4474 +//line sql.y:4483 { yyVAL.values = Values{yyDollar[1].valTuple} } case 899: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4478 +//line sql.y:4487 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } case 900: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4484 +//line sql.y:4493 { yyVAL.valTuple = yyDollar[1].valTuple } case 901: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4488 +//line sql.y:4497 { yyVAL.valTuple = ValTuple{} } case 902: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4494 +//line sql.y:4503 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } case 903: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4500 +//line sql.y:4509 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -10667,230 +10676,230 @@ yydefault: } case 904: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4510 +//line sql.y:4519 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } case 905: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4514 +//line sql.y:4523 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } case 906: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4520 +//line sql.y:4529 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } case 907: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4526 +//line sql.y:4535 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } case 908: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4530 +//line sql.y:4539 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } case 909: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4536 +//line sql.y:4545 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("on"))} } case 910: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4540 +//line sql.y:4549 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("off"))} } case 911: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4544 +//line sql.y:4553 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: yyDollar[3].expr} } case 912: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4548 +//line sql.y:4557 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Scope: ImplicitScope, Expr: yyDollar[2].expr} } case 913: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4552 +//line sql.y:4561 { yyDollar[2].setExpr.Scope = yyDollar[1].scope yyVAL.setExpr = yyDollar[2].setExpr } case 915: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4560 +//line sql.y:4569 { yyVAL.bytes = []byte("charset") } case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4570 +//line sql.y:4579 { yyVAL.expr = NewStrLiteral([]byte(yyDollar[1].colIdent.String())) } case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4574 +//line sql.y:4583 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 920: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4578 +//line sql.y:4587 { yyVAL.expr = &Default{} } case 923: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4587 +//line sql.y:4596 { yyVAL.boolean = false } case 924: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4589 +//line sql.y:4598 { yyVAL.boolean = true } case 925: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4592 +//line sql.y:4601 { yyVAL.boolean = false } case 926: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4594 +//line sql.y:4603 { yyVAL.boolean = true } case 927: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4597 +//line sql.y:4606 { yyVAL.boolean = false } case 928: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4599 +//line sql.y:4608 { yyVAL.boolean = true } case 929: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4602 +//line sql.y:4611 { yyVAL.ignore = false } case 930: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4604 +//line sql.y:4613 { yyVAL.ignore = true } case 931: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4607 +//line sql.y:4616 { yyVAL.empty = struct{}{} } case 932: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4609 +//line sql.y:4618 { yyVAL.empty = struct{}{} } case 933: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4611 +//line sql.y:4620 { yyVAL.empty = struct{}{} } case 934: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4615 +//line sql.y:4624 { yyVAL.statement = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprs} } case 935: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4620 +//line sql.y:4629 { yyVAL.exprs = nil } case 936: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4624 +//line sql.y:4633 { yyVAL.exprs = yyDollar[1].exprs } case 937: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4629 +//line sql.y:4638 { yyVAL.indexOptions = nil } case 938: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4631 +//line sql.y:4640 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } case 939: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4635 +//line sql.y:4644 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), String: string(yyDollar[2].colIdent.String())} } case 940: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4641 +//line sql.y:4650 { yyVAL.colIdent = yyDollar[1].colIdent } case 941: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4645 +//line sql.y:4654 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 943: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4652 +//line sql.y:4661 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 944: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4658 +//line sql.y:4667 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } case 945: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4662 +//line sql.y:4671 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 947: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4669 +//line sql.y:4678 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 1346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5092 +//line sql.y:5101 { if incNesting(yylex) { yylex.Error("max nesting level reached") @@ -10899,31 +10908,31 @@ yydefault: } case 1347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5101 +//line sql.y:5110 { decNesting(yylex) } case 1348: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5106 +//line sql.y:5115 { skipToEnd(yylex) } case 1349: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5111 +//line sql.y:5120 { skipToEnd(yylex) } case 1350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5115 +//line sql.y:5124 { skipToEnd(yylex) } case 1351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5119 +//line sql.y:5128 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index c06168310fb..9e87696fff6 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -3609,6 +3609,8 @@ value_expression: { if num, ok := $2.(*Literal); ok && num.Type == IntVal { $$ = num + } else if unaryExpr, ok := $2.(*UnaryExpr); ok && ( unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp ) { + $$ = unaryExpr } else { $$ = &UnaryExpr{Operator: UPlusOp, Expr: $2} } @@ -3623,6 +3625,13 @@ value_expression: } else { $$ = NewIntLiteral(append([]byte("-"), num.Val...)) } + } else if unaryExpr, ok := $2.(*UnaryExpr); ok && ( unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp ) { + if unaryExpr.Operator == UPlusOp { + unaryExpr.Operator = UMinusOp + } else { + unaryExpr.Operator = UPlusOp + } + $$ = unaryExpr } else { $$ = &UnaryExpr{Operator: UMinusOp, Expr: $2} } From 14341afe3e024cb58a3bd673bd731c6dd2d56e8c Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Tue, 2 Mar 2021 11:36:51 +0530 Subject: [PATCH 2/3] added another test case Signed-off-by: GuptaManan100 --- go/vt/sqlparser/parse_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 5d337ee2d9e..ccc4adaf9bc 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -905,6 +905,9 @@ var ( }, { input: "set S= +++-++-+(4+1)", output: "set S = +(4 + 1)", + }, { + input: "set S= +- - - - -(4+1)", + output: "set S = -(4 + 1)", }, { input: "alter table a add foo int first v", output: "alter table a add column foo int first v", From e1af1037f30d98288af1ed3b1e1e79f55c0c0239 Mon Sep 17 00:00:00 2001 From: GuptaManan100 Date: Tue, 2 Mar 2021 13:36:31 +0530 Subject: [PATCH 3/3] removed unary pluses where they are not required Signed-off-by: GuptaManan100 --- go/vt/sqlparser/ast_funcs.go | 16 ++ go/vt/sqlparser/parse_test.go | 7 +- go/vt/sqlparser/sql.go | 485 ++++++++++++++++------------------ go/vt/sqlparser/sql.y | 27 +- 4 files changed, 253 insertions(+), 282 deletions(-) diff --git a/go/vt/sqlparser/ast_funcs.go b/go/vt/sqlparser/ast_funcs.go index 07fea6767d5..8c0ca7158ca 100644 --- a/go/vt/sqlparser/ast_funcs.go +++ b/go/vt/sqlparser/ast_funcs.go @@ -1642,3 +1642,19 @@ func (node *Default) Clone() Expr { } return &Default{ColName: node.ColName} } + +// handleUnaryMinus handles the case when a unary minus operator is seen in the parser. It takes 1 argument which is the expr to which the unary minus has been added to. +func handleUnaryMinus(expr Expr) Expr { + if num, ok := expr.(*Literal); ok && num.Type == IntVal { + // Handle double negative + if num.Val[0] == '-' { + num.Val = num.Val[1:] + return num + } + return NewIntLiteral(append([]byte("-"), num.Val...)) + } + if unaryExpr, ok := expr.(*UnaryExpr); ok && unaryExpr.Operator == UMinusOp { + return unaryExpr.Expr + } + return &UnaryExpr{Operator: UMinusOp, Expr: expr} +} diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index ccc4adaf9bc..4e2333c7628 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -447,7 +447,8 @@ var ( input: "select /* % no space */ 1 from t where a = b%c", output: "select /* % no space */ 1 from t where a = b % c", }, { - input: "select /* u+ */ 1 from t where a = +b", + input: "select /* u+ */ 1 from t where a = +b", + output: "select /* u+ */ 1 from t where a = b", }, { input: "select /* u- */ 1 from t where a = -b", }, { @@ -608,7 +609,7 @@ var ( output: "select /* binary unary */ a - -b from t", }, { input: "select /* - - */ - -b from t", - output: "select /* - - */ +b from t", + output: "select /* - - */ b from t", }, { input: "select /* binary binary */ binary binary b from t", }, { @@ -904,7 +905,7 @@ var ( input: "set @period.variable = 42", }, { input: "set S= +++-++-+(4+1)", - output: "set S = +(4 + 1)", + output: "set S = 4 + 1", }, { input: "set S= +- - - - -(4+1)", output: "set S = -(4 + 1)", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 5a84a3836e5..c8b36c8745d 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -9518,52 +9518,29 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:3609 { - if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { - yyVAL.expr = num - } else if unaryExpr, ok := yyDollar[2].expr.(*UnaryExpr); ok && (unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp) { - yyVAL.expr = unaryExpr - } else { - yyVAL.expr = &UnaryExpr{Operator: UPlusOp, Expr: yyDollar[2].expr} - } + yyVAL.expr = yyDollar[2].expr } case 712: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3619 +//line sql.y:3613 { - if num, ok := yyDollar[2].expr.(*Literal); ok && num.Type == IntVal { - // Handle double negative - if num.Val[0] == '-' { - num.Val = num.Val[1:] - yyVAL.expr = num - } else { - yyVAL.expr = NewIntLiteral(append([]byte("-"), num.Val...)) - } - } else if unaryExpr, ok := yyDollar[2].expr.(*UnaryExpr); ok && (unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp) { - if unaryExpr.Operator == UPlusOp { - unaryExpr.Operator = UMinusOp - } else { - unaryExpr.Operator = UPlusOp - } - yyVAL.expr = unaryExpr - } else { - yyVAL.expr = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].expr} - } + yyVAL.expr = handleUnaryMinus(yyDollar[2].expr) } case 713: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3640 +//line sql.y:3617 { yyVAL.expr = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].expr} } case 714: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3644 +//line sql.y:3621 { yyVAL.expr = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].expr} } case 715: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3648 +//line sql.y:3625 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -9573,331 +9550,331 @@ yydefault: } case 720: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3666 +//line sql.y:3643 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } case 721: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3670 +//line sql.y:3647 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 722: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3674 +//line sql.y:3651 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } case 723: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3678 +//line sql.y:3655 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } case 724: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3688 +//line sql.y:3665 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } case 725: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3692 +//line sql.y:3669 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } case 726: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3696 +//line sql.y:3673 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 727: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3700 +//line sql.y:3677 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 728: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3704 +//line sql.y:3681 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } case 729: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3708 +//line sql.y:3685 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 730: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3712 +//line sql.y:3689 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 731: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3716 +//line sql.y:3693 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 732: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3720 +//line sql.y:3697 { yyVAL.expr = &SubstrExpr{StrVal: NewStrLiteral(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 733: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:3724 +//line sql.y:3701 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].matchExprOption} } case 734: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3728 +//line sql.y:3705 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].boolean, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } case 735: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3732 +//line sql.y:3709 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } case 736: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3736 +//line sql.y:3713 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } case 737: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3746 +//line sql.y:3723 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } case 738: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3750 +//line sql.y:3727 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } case 739: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3754 +//line sql.y:3731 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } case 740: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3759 +//line sql.y:3736 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } case 741: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3764 +//line sql.y:3741 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } case 742: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3769 +//line sql.y:3746 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } case 743: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3775 +//line sql.y:3752 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } case 744: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3780 +//line sql.y:3757 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } case 745: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3785 +//line sql.y:3762 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } case 746: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3789 +//line sql.y:3766 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } case 747: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3793 +//line sql.y:3770 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } case 748: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3798 +//line sql.y:3775 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } case 749: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3803 +//line sql.y:3780 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } case 750: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3808 +//line sql.y:3785 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } case 751: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3812 +//line sql.y:3789 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 752: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:3816 +//line sql.y:3793 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } case 755: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3826 +//line sql.y:3803 { yyVAL.expr = yyDollar[2].expr } case 756: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3836 +//line sql.y:3813 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } case 757: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3840 +//line sql.y:3817 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } case 758: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3844 +//line sql.y:3821 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } case 759: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3848 +//line sql.y:3825 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } case 760: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3852 +//line sql.y:3829 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } case 761: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3856 +//line sql.y:3833 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 762: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3860 +//line sql.y:3837 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } case 763: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3866 +//line sql.y:3843 { yyVAL.matchExprOption = NoOption } case 764: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3870 +//line sql.y:3847 { yyVAL.matchExprOption = BooleanModeOpt } case 765: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3874 +//line sql.y:3851 { yyVAL.matchExprOption = NaturalLanguageModeOpt } case 766: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:3878 +//line sql.y:3855 { yyVAL.matchExprOption = NaturalLanguageModeWithQueryExpansionOpt } case 767: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3882 +//line sql.y:3859 { yyVAL.matchExprOption = QueryExpansionOpt } case 768: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3888 +//line sql.y:3865 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 769: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3892 +//line sql.y:3869 { yyVAL.str = string(yyDollar[1].bytes) } case 770: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3896 +//line sql.y:3873 { yyVAL.str = string(yyDollar[1].bytes) } case 771: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3902 +//line sql.y:3879 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 772: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3906 +//line sql.y:3883 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: yyDollar[3].str, Operator: CharacterSetOp} } case 773: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3910 +//line sql.y:3887 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal, Charset: string(yyDollar[3].colIdent.String())} } case 774: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3914 +//line sql.y:3891 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 775: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3918 +//line sql.y:3895 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 776: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3922 +//line sql.y:3899 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length @@ -9905,169 +9882,169 @@ yydefault: } case 777: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3928 +//line sql.y:3905 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 778: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3932 +//line sql.y:3909 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 779: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3936 +//line sql.y:3913 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 780: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3940 +//line sql.y:3917 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 781: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3944 +//line sql.y:3921 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].literal} } case 782: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3948 +//line sql.y:3925 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 783: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3952 +//line sql.y:3929 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } case 784: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3957 +//line sql.y:3934 { yyVAL.expr = nil } case 785: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3961 +//line sql.y:3938 { yyVAL.expr = yyDollar[1].expr } case 786: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3966 +//line sql.y:3943 { yyVAL.str = string("") } case 787: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3970 +//line sql.y:3947 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } case 788: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3976 +//line sql.y:3953 { yyVAL.whens = []*When{yyDollar[1].when} } case 789: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3980 +//line sql.y:3957 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } case 790: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3986 +//line sql.y:3963 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } case 791: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3991 +//line sql.y:3968 { yyVAL.expr = nil } case 792: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3995 +//line sql.y:3972 { yyVAL.expr = yyDollar[2].expr } case 793: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4001 +//line sql.y:3978 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } case 794: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4005 +//line sql.y:3982 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } case 795: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4009 +//line sql.y:3986 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } case 796: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4015 +//line sql.y:3992 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 797: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4019 +//line sql.y:3996 { yyVAL.expr = NewHexLiteral(yyDollar[1].bytes) } case 798: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4023 +//line sql.y:4000 { yyVAL.expr = NewBitLiteral(yyDollar[1].bytes) } case 799: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4027 +//line sql.y:4004 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 800: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4031 +//line sql.y:4008 { yyVAL.expr = NewFloatLiteral(yyDollar[1].bytes) } case 801: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4035 +//line sql.y:4012 { yyVAL.expr = NewHexNumLiteral(yyDollar[1].bytes) } case 802: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4039 +//line sql.y:4016 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 803: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4043 +//line sql.y:4020 { yyVAL.expr = &NullVal{} } case 804: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4049 +//line sql.y:4026 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -10078,595 +10055,595 @@ yydefault: } case 805: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4058 +//line sql.y:4035 { yyVAL.expr = NewIntLiteral(yyDollar[1].bytes) } case 806: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4062 +//line sql.y:4039 { yyVAL.expr = NewArgument(yyDollar[1].bytes) } case 807: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4067 +//line sql.y:4044 { yyVAL.exprs = nil } case 808: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4071 +//line sql.y:4048 { yyVAL.exprs = yyDollar[3].exprs } case 809: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4076 +//line sql.y:4053 { yyVAL.expr = nil } case 810: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4080 +//line sql.y:4057 { yyVAL.expr = yyDollar[2].expr } case 811: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4085 +//line sql.y:4062 { yyVAL.orderBy = nil } case 812: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4089 +//line sql.y:4066 { yyVAL.orderBy = yyDollar[3].orderBy } case 813: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4095 +//line sql.y:4072 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } case 814: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4099 +//line sql.y:4076 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } case 815: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4105 +//line sql.y:4082 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].orderDirection} } case 816: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4110 +//line sql.y:4087 { yyVAL.orderDirection = AscOrder } case 817: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4114 +//line sql.y:4091 { yyVAL.orderDirection = AscOrder } case 818: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4118 +//line sql.y:4095 { yyVAL.orderDirection = DescOrder } case 819: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4123 +//line sql.y:4100 { yyVAL.limit = nil } case 820: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4127 +//line sql.y:4104 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } case 821: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4131 +//line sql.y:4108 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } case 822: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4135 +//line sql.y:4112 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } case 823: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4140 +//line sql.y:4117 { yyVAL.alterOptions = nil } case 824: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4144 +//line sql.y:4121 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption, yyDollar[2].alterOption} } case 825: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4148 +//line sql.y:4125 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption, yyDollar[2].alterOption} } case 826: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4152 +//line sql.y:4129 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption} } case 827: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4156 +//line sql.y:4133 { yyVAL.alterOptions = []AlterOption{yyDollar[1].alterOption} } case 828: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4163 +//line sql.y:4140 { yyVAL.alterOption = &LockOption{Type: DefaultType} } case 829: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4167 +//line sql.y:4144 { yyVAL.alterOption = &LockOption{Type: NoneType} } case 830: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4171 +//line sql.y:4148 { yyVAL.alterOption = &LockOption{Type: SharedType} } case 831: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4175 +//line sql.y:4152 { yyVAL.alterOption = &LockOption{Type: ExclusiveType} } case 832: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4181 +//line sql.y:4158 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 833: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4185 +//line sql.y:4162 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 834: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4189 +//line sql.y:4166 { yyVAL.alterOption = AlgorithmValue(yyDollar[3].bytes) } case 835: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4194 +//line sql.y:4171 { yyVAL.str = "" } case 836: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4198 +//line sql.y:4175 { yyVAL.str = string(yyDollar[3].bytes) } case 837: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4202 +//line sql.y:4179 { yyVAL.str = string(yyDollar[3].bytes) } case 838: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4206 +//line sql.y:4183 { yyVAL.str = string(yyDollar[3].bytes) } case 839: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4211 +//line sql.y:4188 { yyVAL.str = "" } case 840: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4215 +//line sql.y:4192 { yyVAL.str = yyDollar[3].str } case 841: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4221 +//line sql.y:4198 { yyVAL.str = string(yyDollar[1].bytes) } case 842: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4225 +//line sql.y:4202 { yyVAL.str = string(yyDollar[1].bytes) } case 843: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4230 +//line sql.y:4207 { yyVAL.str = "" } case 844: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4234 +//line sql.y:4211 { yyVAL.str = yyDollar[2].str } case 845: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4239 +//line sql.y:4216 { yyVAL.str = "cascaded" } case 846: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4243 +//line sql.y:4220 { yyVAL.str = string(yyDollar[1].bytes) } case 847: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4247 +//line sql.y:4224 { yyVAL.str = string(yyDollar[1].bytes) } case 848: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4252 +//line sql.y:4229 { yyVAL.str = "" } case 849: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4256 +//line sql.y:4233 { yyVAL.str = yyDollar[3].str } case 850: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4262 +//line sql.y:4239 { yyVAL.str = string(yyDollar[1].bytes) } case 851: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4266 +//line sql.y:4243 { yyVAL.str = string(yyDollar[1].bytes) } case 852: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4270 +//line sql.y:4247 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'@" + string(yyDollar[2].bytes) } case 853: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4274 +//line sql.y:4251 { yyVAL.str = string(yyDollar[1].bytes) } case 854: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4279 +//line sql.y:4256 { yyVAL.lock = NoLock } case 855: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4283 +//line sql.y:4260 { yyVAL.lock = ForUpdateLock } case 856: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4287 +//line sql.y:4264 { yyVAL.lock = ShareModeLock } case 857: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4292 +//line sql.y:4269 { yyVAL.selectInto = nil } case 858: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:4296 +//line sql.y:4273 { yyVAL.selectInto = &SelectInto{Type: IntoOutfileS3, FileName: string(yyDollar[4].bytes), Charset: yyDollar[5].str, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } case 859: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4300 +//line sql.y:4277 { yyVAL.selectInto = &SelectInto{Type: IntoDumpfile, FileName: string(yyDollar[3].bytes), Charset: "", FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } case 860: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4304 +//line sql.y:4281 { yyVAL.selectInto = &SelectInto{Type: IntoOutfile, FileName: string(yyDollar[3].bytes), Charset: yyDollar[4].str, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } case 861: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4309 +//line sql.y:4286 { yyVAL.str = "" } case 862: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4313 +//line sql.y:4290 { yyVAL.str = " format csv" + yyDollar[3].str } case 863: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4317 +//line sql.y:4294 { yyVAL.str = " format text" + yyDollar[3].str } case 864: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4322 +//line sql.y:4299 { yyVAL.str = "" } case 865: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4326 +//line sql.y:4303 { yyVAL.str = " header" } case 866: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4331 +//line sql.y:4308 { yyVAL.str = "" } case 867: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4335 +//line sql.y:4312 { yyVAL.str = " manifest on" } case 868: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4339 +//line sql.y:4316 { yyVAL.str = " manifest off" } case 869: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4344 +//line sql.y:4321 { yyVAL.str = "" } case 870: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4348 +//line sql.y:4325 { yyVAL.str = " overwrite on" } case 871: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4352 +//line sql.y:4329 { yyVAL.str = " overwrite off" } case 872: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4358 +//line sql.y:4335 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } case 873: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4363 +//line sql.y:4340 { yyVAL.str = "" } case 874: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4367 +//line sql.y:4344 { yyVAL.str = " lines" + yyDollar[2].str + yyDollar[3].str } case 875: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4372 +//line sql.y:4349 { yyVAL.str = "" } case 876: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4376 +//line sql.y:4353 { yyVAL.str = " starting by '" + string(yyDollar[3].bytes) + "'" } case 877: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4381 +//line sql.y:4358 { yyVAL.str = "" } case 878: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4385 +//line sql.y:4362 { yyVAL.str = " terminated by '" + string(yyDollar[3].bytes) + "'" } case 879: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4390 +//line sql.y:4367 { yyVAL.str = "" } case 880: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4394 +//line sql.y:4371 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str + yyDollar[3].str + yyDollar[4].str } case 881: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4399 +//line sql.y:4376 { yyVAL.str = "" } case 882: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4403 +//line sql.y:4380 { yyVAL.str = " escaped by '" + string(yyDollar[3].bytes) + "'" } case 883: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4408 +//line sql.y:4385 { yyVAL.str = "" } case 884: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4412 +//line sql.y:4389 { yyVAL.str = yyDollar[1].str + " enclosed by '" + string(yyDollar[4].bytes) + "'" } case 885: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4417 +//line sql.y:4394 { yyVAL.str = "" } case 886: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4421 +//line sql.y:4398 { yyVAL.str = " optionally" } case 887: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4434 +//line sql.y:4411 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } case 888: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4438 +//line sql.y:4415 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } case 889: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4442 +//line sql.y:4419 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } case 890: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4446 +//line sql.y:4423 { yyVAL.ins = &Insert{Rows: yyDollar[4].values} } case 891: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:4450 +//line sql.y:4427 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } case 892: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4456 +//line sql.y:4433 { yyVAL.columns = Columns{yyDollar[1].colIdent} } case 893: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4460 +//line sql.y:4437 { yyVAL.columns = Columns{yyDollar[3].colIdent} } case 894: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4464 +//line sql.y:4441 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } case 895: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4468 +//line sql.y:4445 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } case 896: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4473 +//line sql.y:4450 { yyVAL.updateExprs = nil } case 897: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4477 +//line sql.y:4454 { yyVAL.updateExprs = yyDollar[5].updateExprs } case 898: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4483 +//line sql.y:4460 { yyVAL.values = Values{yyDollar[1].valTuple} } case 899: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4487 +//line sql.y:4464 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } case 900: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4493 +//line sql.y:4470 { yyVAL.valTuple = yyDollar[1].valTuple } case 901: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4497 +//line sql.y:4474 { yyVAL.valTuple = ValTuple{} } case 902: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4503 +//line sql.y:4480 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } case 903: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4509 +//line sql.y:4486 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -10676,230 +10653,230 @@ yydefault: } case 904: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4519 +//line sql.y:4496 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } case 905: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4523 +//line sql.y:4500 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } case 906: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4529 +//line sql.y:4506 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } case 907: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4535 +//line sql.y:4512 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } case 908: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4539 +//line sql.y:4516 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } case 909: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4545 +//line sql.y:4522 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("on"))} } case 910: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4549 +//line sql.y:4526 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: NewStrLiteral([]byte("off"))} } case 911: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4553 +//line sql.y:4530 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Scope: ImplicitScope, Expr: yyDollar[3].expr} } case 912: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4557 +//line sql.y:4534 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Scope: ImplicitScope, Expr: yyDollar[2].expr} } case 913: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4561 +//line sql.y:4538 { yyDollar[2].setExpr.Scope = yyDollar[1].scope yyVAL.setExpr = yyDollar[2].setExpr } case 915: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4569 +//line sql.y:4546 { yyVAL.bytes = []byte("charset") } case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4579 +//line sql.y:4556 { yyVAL.expr = NewStrLiteral([]byte(yyDollar[1].colIdent.String())) } case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4583 +//line sql.y:4560 { yyVAL.expr = NewStrLiteral(yyDollar[1].bytes) } case 920: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4587 +//line sql.y:4564 { yyVAL.expr = &Default{} } case 923: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4596 +//line sql.y:4573 { yyVAL.boolean = false } case 924: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4598 +//line sql.y:4575 { yyVAL.boolean = true } case 925: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4601 +//line sql.y:4578 { yyVAL.boolean = false } case 926: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4603 +//line sql.y:4580 { yyVAL.boolean = true } case 927: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4606 +//line sql.y:4583 { yyVAL.boolean = false } case 928: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4608 +//line sql.y:4585 { yyVAL.boolean = true } case 929: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4611 +//line sql.y:4588 { yyVAL.ignore = false } case 930: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4613 +//line sql.y:4590 { yyVAL.ignore = true } case 931: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4616 +//line sql.y:4593 { yyVAL.empty = struct{}{} } case 932: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4618 +//line sql.y:4595 { yyVAL.empty = struct{}{} } case 933: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4620 +//line sql.y:4597 { yyVAL.empty = struct{}{} } case 934: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4624 +//line sql.y:4601 { yyVAL.statement = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprs} } case 935: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4629 +//line sql.y:4606 { yyVAL.exprs = nil } case 936: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4633 +//line sql.y:4610 { yyVAL.exprs = yyDollar[1].exprs } case 937: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4638 +//line sql.y:4615 { yyVAL.indexOptions = nil } case 938: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4640 +//line sql.y:4617 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } case 939: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4644 +//line sql.y:4621 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), String: string(yyDollar[2].colIdent.String())} } case 940: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4650 +//line sql.y:4627 { yyVAL.colIdent = yyDollar[1].colIdent } case 941: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4654 +//line sql.y:4631 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 943: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4661 +//line sql.y:4638 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } case 944: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4667 +//line sql.y:4644 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } case 945: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4671 +//line sql.y:4648 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 947: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4678 +//line sql.y:4655 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } case 1346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5101 +//line sql.y:5078 { if incNesting(yylex) { yylex.Error("max nesting level reached") @@ -10908,31 +10885,31 @@ yydefault: } case 1347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5110 +//line sql.y:5087 { decNesting(yylex) } case 1348: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5115 +//line sql.y:5092 { skipToEnd(yylex) } case 1349: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5120 +//line sql.y:5097 { skipToEnd(yylex) } case 1350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5124 +//line sql.y:5101 { skipToEnd(yylex) } case 1351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5128 +//line sql.y:5105 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 9e87696fff6..29914b2ce7c 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -3607,34 +3607,11 @@ value_expression: } | '+' value_expression %prec UNARY { - if num, ok := $2.(*Literal); ok && num.Type == IntVal { - $$ = num - } else if unaryExpr, ok := $2.(*UnaryExpr); ok && ( unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp ) { - $$ = unaryExpr - } else { - $$ = &UnaryExpr{Operator: UPlusOp, Expr: $2} - } + $$ = $2 } | '-' value_expression %prec UNARY { - if num, ok := $2.(*Literal); ok && num.Type == IntVal { - // Handle double negative - if num.Val[0] == '-' { - num.Val = num.Val[1:] - $$ = num - } else { - $$ = NewIntLiteral(append([]byte("-"), num.Val...)) - } - } else if unaryExpr, ok := $2.(*UnaryExpr); ok && ( unaryExpr.Operator == UPlusOp || unaryExpr.Operator == UMinusOp ) { - if unaryExpr.Operator == UPlusOp { - unaryExpr.Operator = UMinusOp - } else { - unaryExpr.Operator = UPlusOp - } - $$ = unaryExpr - } else { - $$ = &UnaryExpr{Operator: UMinusOp, Expr: $2} - } + $$ = handleUnaryMinus($2) } | '~' value_expression {