private PredicateSegment CreateInSegment(MySqlCommandParser.PredicateContext ctx) { ColumnSegment column = (ColumnSegment)Visit(ctx.bitExpr(0)); PredicateBracketValue predicateBracketValue = CreateBracketValue(ctx); return(new PredicateSegment(ctx.Start.StartIndex, ctx.Stop.StopIndex, column, new PredicateInRightValue(predicateBracketValue, GetExpressionSegments(ctx)))); }
private PredicateSegment CreateBetweenSegment(MySqlCommandParser.PredicateContext ctx) { ColumnSegment column = (ColumnSegment)Visit(ctx.bitExpr(0)); IExpressionSegment between = (IExpressionSegment)Visit(ctx.bitExpr(1)); IExpressionSegment and = (IExpressionSegment)Visit(ctx.predicate()); return(new PredicateSegment(ctx.Start.StartIndex, ctx.Stop.StopIndex, column, new PredicateBetweenRightValue(between, and))); }
private PredicateBracketValue CreateBracketValue(MySqlCommandParser.PredicateContext ctx) { PredicateLeftBracketValue predicateLeftBracketValue = null != ctx.subquery() ? new PredicateLeftBracketValue(ctx.subquery().LP_().Symbol.StartIndex, ctx.subquery().LP_().Symbol.StopIndex) : new PredicateLeftBracketValue(ctx.LP_().Symbol.StartIndex, ctx.LP_().Symbol.StopIndex); PredicateRightBracketValue predicateRightBracketValue = null != ctx.subquery() ? new PredicateRightBracketValue(ctx.subquery().RP_().Symbol.StartIndex, ctx.subquery().RP_().Symbol.StopIndex) : new PredicateRightBracketValue(ctx.RP_().Symbol.StartIndex, ctx.RP_().Symbol.StopIndex); return(new PredicateBracketValue(predicateLeftBracketValue, predicateRightBracketValue)); }
private ICollection <IExpressionSegment> GetExpressionSegments(MySqlCommandParser.PredicateContext ctx) { ICollection <IExpressionSegment> result = new LinkedList <IExpressionSegment>(); if (null != ctx.subquery()) { MySqlCommandParser.SubqueryContext subquery = ctx.subquery(); result.Add(new SubQueryExpressionSegment(new SubQuerySegment(subquery.Start.StartIndex, subquery.Stop.StopIndex, (SelectCommand)Visit(ctx.subquery())))); return(result); } foreach (var each in ctx.expr()) { result.Add((IExpressionSegment)Visit(each)); } return(result); }
public override IASTNode VisitPredicate(MySqlCommandParser.PredicateContext ctx) { if (null != ctx.IN() && null == ctx.NOT()) { return(CreateInSegment(ctx)); } if (null != ctx.BETWEEN() && null == ctx.NOT()) { return(CreateBetweenSegment(ctx)); } if (1 == ctx.children.Count) { return(Visit(ctx.bitExpr(0))); } return(VisitRemainPredicate(ctx)); }
private IASTNode VisitRemainPredicate(MySqlCommandParser.PredicateContext ctx) { foreach (var each in ctx.bitExpr()) { Visit(each); } foreach (var each in ctx.expr()) { Visit(each); } foreach (var each in ctx.simpleExpr()) { Visit(each); } if (null != ctx.predicate()) { Visit(ctx.predicate()); } return(new CommonExpressionSegment(ctx.Start.StartIndex, ctx.Stop.StopIndex, ctx.GetText())); }