Skip to content

Commit

Permalink
Merge pull request #148 from pingcap/siddontang/compare-op-parser
Browse files Browse the repository at this point in the history
parser: simplify compare operation
  • Loading branch information
siddontang committed Sep 15, 2015
2 parents 7270f6e + e2a0655 commit a6b23ab
Showing 1 changed file with 22 additions and 39 deletions.
61 changes: 22 additions & 39 deletions parser/parser.y
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@ import (
ColumnSetValueList "insert statement set value by column name list"
CommaOpt "optional comma"
CommitStmt "COMMIT statement"
CompareOp "Compare opcode"
Constraint "column value constraint"
ConstraintElem "table define constraint element"
ConstraintKeywordOpt "Constraint Keyword or empty"
Expand Down Expand Up @@ -1358,63 +1359,45 @@ Factor:
{
$$ = &expressions.IsNull{Expr: $1.(expression.Expression), Not: $3.(bool)}
}
| Factor ">=" Factor1 %prec eq
| Factor CompareOp Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.GE, $1.(expression.Expression), $3.(expression.Expression))
$$ = expressions.NewBinaryOperation($2.(opcode.Op), $1.(expression.Expression), $3.(expression.Expression))
}
| Factor '>' Factor1 %prec eq
| Factor CompareOp AnyOrAll SubSelect %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.GT, $1.(expression.Expression), $3.(expression.Expression))
$$ = expressions.NewCompareSubQuery($2.(opcode.Op), $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
}
| Factor "<=" Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.LE, $1.(expression.Expression), $3.(expression.Expression))
}
| Factor '<' Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.LT, $1.(expression.Expression), $3.(expression.Expression))
}
| Factor "!=" Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.NE, $1.(expression.Expression), $3.(expression.Expression))
}
| Factor "<>" Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.NE, $1.(expression.Expression), $3.(expression.Expression))
}
| Factor "=" Factor1 %prec eq
{
$$ = expressions.NewBinaryOperation(opcode.EQ, $1.(expression.Expression), $3.(expression.Expression))
}
| Factor ">=" AnyOrAll SubSelect %prec eq
| Factor1

CompareOp:
">="
{
$$ = expressions.NewCompareSubQuery(opcode.GE, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.GE
}
| Factor '>' AnyOrAll SubSelect %prec eq
| '>'
{
$$ = expressions.NewCompareSubQuery(opcode.GT, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.GT
}
| Factor "<=" AnyOrAll SubSelect %prec eq
| "<="
{
$$ = expressions.NewCompareSubQuery(opcode.LE, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.LE
}
| Factor '<' AnyOrAll SubSelect %prec eq
| '<'
{
$$ = expressions.NewCompareSubQuery(opcode.LT, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.LT
}
| Factor "!=" AnyOrAll SubSelect %prec eq
| "!="
{
$$ = expressions.NewCompareSubQuery(opcode.NE, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.NE
}
| Factor "<>" AnyOrAll SubSelect %prec eq
| "<>"
{
$$ = expressions.NewCompareSubQuery(opcode.NE, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.NE
}
| Factor "=" AnyOrAll SubSelect %prec eq
| "="
{
$$ = expressions.NewCompareSubQuery(opcode.EQ, $1.(expression.Expression), $4.(*expressions.SubQuery), $3.(bool))
$$ = opcode.EQ
}
| Factor1

AnyOrAll:
"ANY"
Expand Down

0 comments on commit a6b23ab

Please sign in to comment.