private static WhereCondition GenerateStatementNode(SelectSQLParser.WhereStmtContext whereStmt)
        {
            var andOr          = whereStmt.AND_OR();
            var subWhereStmts  = whereStmt.whereStmt();
            var whereCondition = whereStmt.whereCondition();

            if (whereCondition != null && !whereCondition.IsEmpty)   //普通单项where条件
            {
                return(GenerateConditionNode(whereCondition));
            }

            if (subWhereStmts == null || subWhereStmts.Length < 2)
            {
                throw new MissingWhereConditionException();
            }

            //父节点,非单项where条件
            var stmtNode = new WhereCondition(WhereConditionNodeType.Statement);

            var leftWhereStmt  = subWhereStmts.First();
            var rightWhereStmt = subWhereStmts.Last();

            stmtNode.Statement_LeftNode  = GenerateStatementNode(leftWhereStmt);
            stmtNode.Statement_Operator  = andOr.GetText();
            stmtNode.Statement_RightNode = GenerateStatementNode(rightWhereStmt);

            return(stmtNode);
        }
 /// <summary>
 /// Visit a parse tree produced by <see cref="SelectSQLParser.whereStmt"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitWhereStmt([NotNull] SelectSQLParser.WhereStmtContext context)
 {
     return(VisitChildren(context));
 }
Esempio n. 3
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="SelectSQLParser.whereStmt"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitWhereStmt([NotNull] SelectSQLParser.WhereStmtContext context)
 {
 }