public override void Visit(WBooleanParenthesisExpression node) { node.Expression.Accept(this); string expr = this.dfsStack.Pop(); string nodeStr = $"({expr})"; this.dfsStack.Push(nodeStr); }
private WBooleanExpression ParseBooleanExpression(BooleanExpression bexpr) { if (bexpr == null) { return null; } switch (bexpr.GetType().Name) { case "BooleanBinaryExpression": { var oexpr = bexpr as BooleanBinaryExpression; var pexpr = new WBooleanBinaryExpression { FirstExpr = ParseBooleanExpression(oexpr.FirstExpression), SecondExpr = ParseBooleanExpression(oexpr.SecondExpression), BooleanExpressionType = oexpr.BinaryExpressionType, FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "BooleanComparisonExpression": { var oexpr = bexpr as BooleanComparisonExpression; var pexpr = new WBooleanComparisonExpression { ComparisonType = oexpr.ComparisonType, FirstExpr = ParseScalarExpression(oexpr.FirstExpression), SecondExpr = ParseScalarExpression(oexpr.SecondExpression), FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "BooleanIsNullExpression": { var oexpr = bexpr as BooleanIsNullExpression; var pexpr = new WBooleanIsNullExpression { IsNot = oexpr.IsNot, Expression = ParseScalarExpression(oexpr.Expression), FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "BooleanNotExpression": { var oexpr = bexpr as BooleanNotExpression; var pexpr = new WBooleanNotExpression { Expression = ParseBooleanExpression(oexpr.Expression), FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "BooleanParenthesisExpression": { var oexpr = bexpr as BooleanParenthesisExpression; var pexpr = new WBooleanParenthesisExpression { Expression = ParseBooleanExpression(oexpr.Expression), FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "BooleanTernaryExpression": { var oexpr = bexpr as BooleanTernaryExpression; var pexpr = new WBetweenExpression { FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; switch (oexpr.TernaryExpressionType) { case BooleanTernaryExpressionType.Between: pexpr.NotDefined = false; break; case BooleanTernaryExpressionType.NotBetween: pexpr.NotDefined = true; break; default: throw new GraphViewException("Undefined tenary expression type"); } pexpr.FirstExpr = ParseScalarExpression(oexpr.FirstExpression); pexpr.SecondExpr = ParseScalarExpression(oexpr.SecondExpression); pexpr.ThirdExpr = ParseScalarExpression(oexpr.ThirdExpression); return pexpr; } case "ExistsPredicate": { var oexpr = bexpr as ExistsPredicate; var pexpr = new WExistsPredicate { FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, Subquery = new WScalarSubquery { SubQueryExpr = ParseSelectQueryStatement(oexpr.Subquery.QueryExpression), FirstTokenIndex = oexpr.Subquery.FirstTokenIndex, LastTokenIndex = oexpr.Subquery.LastTokenIndex, } }; return pexpr; } case "InPredicate": { var oexpr = bexpr as InPredicate; var pexpr = new WInPredicate { Expression = ParseScalarExpression(oexpr.Expression), NotDefined = oexpr.NotDefined, FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; if (oexpr.Subquery != null) { pexpr.Subquery = new WScalarSubquery { SubQueryExpr = ParseSelectQueryStatement(oexpr.Subquery.QueryExpression), FirstTokenIndex = oexpr.Subquery.FirstTokenIndex, LastTokenIndex = oexpr.Subquery.LastTokenIndex, }; } else { pexpr.Values = new List<WScalarExpression>(oexpr.Values.Count); foreach (var wexp in oexpr.Values.Select(ParseScalarExpression).Where(wexp => wexp != null)) { pexpr.Values.Add(wexp); } } return pexpr; } case "LikePredicate": { var oexpr = bexpr as LikePredicate; var pexpr = new WLikePredicate { EscapeExpr = ParseScalarExpression(oexpr.EscapeExpression), FirstExpr = ParseScalarExpression(oexpr.FirstExpression), SecondExpr = ParseScalarExpression(oexpr.SecondExpression), NotDefined = oexpr.NotDefined, FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, }; return pexpr; } case "SubqueryComparisonPredicate": { var oexpr = bexpr as SubqueryComparisonPredicate; var pexpr = new WSubqueryComparisonPredicate { FirstTokenIndex = oexpr.FirstTokenIndex, LastTokenIndex = oexpr.LastTokenIndex, Subquery = new WScalarSubquery() { SubQueryExpr = ParseSelectQueryStatement(oexpr.Subquery.QueryExpression), FirstTokenIndex = oexpr.Subquery.FirstTokenIndex, LastTokenIndex = oexpr.Subquery.LastTokenIndex }, ComparisonType = oexpr.ComparisonType, Expression = ParseScalarExpression(oexpr.Expression), SubqueryComparisonType = oexpr.SubqueryComparisonPredicateType, }; return pexpr; } default: { return null; } } }
public virtual void Visit(WBooleanParenthesisExpression node) { node.AcceptChildren(this); }