Skip to content

Commit

Permalink
Merge branch 'alpha'
Browse files Browse the repository at this point in the history
  • Loading branch information
evan-choi committed Jul 1, 2021
2 parents 369786d + 025b24d commit 600c7f7
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 37 deletions.
14 changes: 7 additions & 7 deletions Qsi.Hana/Antlr/HanaParserInternal.g4
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,11 @@ seriesTable
;

tableExpression
: tableRef (K_CROSS K_JOIN crossJoin=tableRef)?
: '(' inner=tableExpression ')'
| tableRef (K_CROSS K_JOIN crossJoin=tableRef)?
// | systemVersionedTableRef
| subqueryTableExpression
| left=tableExpression joinType? joinCardinality? K_JOIN right=tableExpression K_ON predicate
| left=tableExpression joinType? joinCardinality? K_JOIN right=tableExpression K_ON condition
| caseJoin
| lateralTableExpression
| collectionDerivedTable
Expand Down Expand Up @@ -505,7 +506,7 @@ expression
| dataTypeConversionExpression #conversionExpr
| dateTimeExpression #dateTimeExpr
| functionExpression[false] #functionExpr
| '(' expression ')' #parenthesisExpr
| '(' expression (',' expression)* ')' #setExpr
| '(' subquery[true] ')' #subqueryExpr
| '-' expression #unaryExpr
| l=expression op=operator r=expression #operationExpr
Expand Down Expand Up @@ -1020,7 +1021,8 @@ bindParameterExpression returns [int index]
// ------ SQL Reference > Predicates ------

predicate
: comparisonPredicate
: '(' inner=predicate ')'
| comparisonPredicate
| betweenPredicate
| containsPredicate
| inPredicate
Expand All @@ -1029,12 +1031,10 @@ predicate
| likeRegexPredicate
| memberOfPredicate
| nullPredicate
| '(' inner=predicate ')'
;

comparisonPredicate
: left=expression op=comparisonOperator (K_ANY | K_SOME | K_ALL)? '(' (right1=expressionList | right2=subquery[true]) ')'
| left=expression op=comparisonOperator right=expression
: left=expression op=comparisonOperator (K_ANY | K_SOME | K_ALL)? right=expression
;

betweenPredicate
Expand Down
54 changes: 24 additions & 30 deletions Qsi.Hana/Tree/Visitors/ExpressionVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,8 @@ public static QsiExpressionNode VisitExpression(ExpressionContext context)
case FunctionExprContext functionExpr:
return VisitFunctionExpression(functionExpr.functionExpression());

case ParenthesisExprContext parenthesisExpr:
{
var node = VisitExpression(parenthesisExpr.expression());
HanaTree.PutContextSpan(node, parenthesisExpr);
return node;
}
case SetExprContext setExpr:
return VisitSetExpr(setExpr);

case SubqueryExprContext subqueryExpr:
return VisitSubquery(subqueryExpr.subquery());
Expand Down Expand Up @@ -192,6 +188,16 @@ public static QsiExpressionNode VisitExpression(ExpressionContext context)
}
}

private static QsiExpressionNode VisitSetExpr(SetExprContext context)
{
var node = new QsiMultipleExpressionNode();

node.Elements.AddRange(context.expression().Select(VisitExpression));
HanaTree.PutContextSpan(node, context);

return node;
}

public static QsiExpressionNode VisitCaseExpression(CaseExpressionContext context)
{
QsiExpressionNode valueNode = null;
Expand Down Expand Up @@ -1210,45 +1216,33 @@ public static QsiExpressionNode VisitPredicate(PredicateContext context)
public static QsiExpressionNode VisitComparisonPredicate(ComparisonPredicateContext context)
{
var left = VisitExpression(context.left);
var right = VisitExpression(context.right);
var op = context.op.GetText();

if (context.right != null)
QsiExpressionNode node;

if (left is IQsiMultipleExpressionNode || right is IQsiMultipleExpressionNode)
{
var node = new QsiBinaryExpressionNode
node = new HanaArrayComparisonNode
{
Operator = op,
Left = { Value = left },
Right = { Value = VisitExpression(context.right) }
Right = { Value = right }
};

HanaTree.PutContextSpan(node, context);

return node;
}
else
{
var node = new HanaArrayComparisonNode
node = new QsiBinaryExpressionNode
{
Operator = op,
Left = { Value = left }
Left = { Value = left },
Right = { Value = right }
};
}

if (context.right1 != null)
{
var array = new QsiMultipleExpressionNode();
array.Elements.AddRange(context.right1._list.Select(VisitExpression));

node.Right.SetValue(array);
}
else
{
node.Right.SetValue(VisitSubquery(context.right2));
}

HanaTree.PutContextSpan(node, context);
HanaTree.PutContextSpan(node, context);

return node;
}
return node;
}

public static QsiExpressionNode VisitBetweenPredicate(BetweenPredicateContext context)
Expand Down
3 changes: 3 additions & 0 deletions Qsi.Hana/Tree/Visitors/TableVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,9 @@ public static QsiTableNode VisitFromClause(FromClauseContext context)
#region TableExpression
public static QsiTableNode VisitTableExpression(TableExpressionContext context)
{
while (context.inner != null)
context = context.inner;

var child = context.children[0];

switch (child)
Expand Down

0 comments on commit 600c7f7

Please sign in to comment.