public void AppendToClause(ParserToken t) { if (clauseStack.Count > 0) { SQLParserClause clause = clauseStack.Peek() as SQLParserClause; clause.Tokens.Enqueue(t); } }
public void PopClause() { if (clauseStack.Count > 0) { SQLParserClause clause = clauseStack.Pop() as SQLParserClause; string clauseStr = ""; while (clause.Tokens.Count > 0) { ParserToken t = clause.Tokens.Dequeue() as ParserToken; string prestr = " "; if (clauseStr.Length > 0) { char l = clauseStr[clauseStr.Length - 1]; char f = t.Word[0]; if (NoSeperators.IndexOf(l) >= 0 || NoSeperators.IndexOf(f) >= 0) { prestr = ""; } } else { prestr = ""; } clauseStr += prestr + t.Word; } if (clauseStr.Trim().Length > 0) { string prestr = " "; if (tempClause.Length > 0) { char l = tempClause[tempClause.Length - 1]; char f = clauseStr[0]; if (NoSeperators.IndexOf(l) >= 0 || NoSeperators.IndexOf(f) >= 0) { prestr = ""; } } else { prestr = ""; } tempClause += prestr + clauseStr; prestr = " "; if (parenthesesClause.Length > 0) { char l = parenthesesClause[parenthesesClause.Length - 1]; char f = clauseStr[0]; if (NoSeperators.IndexOf(l) >= 0 || NoSeperators.IndexOf(f) >= 0) { prestr = ""; } } else { prestr = ""; } parenthesesClause += prestr + clauseStr; prestr = " "; if (expClause.Length > 0) { char l = expClause[expClause.Length - 1]; char f = clauseStr[0]; if (NoSeperators.IndexOf(l) >= 0 || NoSeperators.IndexOf(f) >= 0) { prestr = ""; } } else { prestr = ""; } expClause += prestr + clauseStr; } if (clause.Type == SQLParserClauseType.PARENTHESES) { parenthesesLevel--; if (parenthesesLevel == 0 && tempLevel == 2 && parenthesesClause.Trim().Length > 0) { Parentheses.Add(parenthesesClause.Trim()); } } if (clause.Type == SQLParserClauseType.EXPRESSION) { expressionLevel--; if (expressionLevel == 0 && expClause.Trim().Length > 0) { if (tempLevel == 1) { Expressions.Add(expClause.Trim()); } else if (tempLevel == 3) { if (groupByListLevel == 1) { GroupByExps.Add(expClause.Trim()); } else if (orderByListLevel == 1) { OrderByExps.Add(expClause.Trim()); } } } } if (clause.Type == SQLParserClauseType.COUNT) { tempLevel--; } if (clauseStack.Count <= 3) { switch (clause.Type) { case SQLParserClauseType.SELECT: SelectClause = tempClause.Trim(); break; case SQLParserClauseType.FROM: FromClause = tempClause.Trim(); break; } } if (clauseStack.Count <= 7) { switch (clause.Type) { case SQLParserClauseType.WHERE: WhereClause = tempClause.Trim(); break; case SQLParserClauseType.GROUPBYLIST: groupByListLevel--; GroupByList = tempClause.Trim(); break; case SQLParserClauseType.HAVING: HavingClause = tempClause.Trim(); break; case SQLParserClauseType.ORDERBYLIST: orderByListLevel--; OrderByList = tempClause.Trim(); break; } } } }
public void PushClause(object arg) { SQLParserClauseType clauseType = SQLParserClauseType.OTHER; if (arg != null) { clauseType = (SQLParserClauseType)arg; } if (clauseType == SQLParserClauseType.PARENTHESES) { if (parenthesesLevel == 0) { parenthesesClause = ""; } parenthesesLevel++; } if (clauseType == SQLParserClauseType.EXPRESSION) { if (expressionLevel == 0) { expClause = ""; } expressionLevel++; } if (clauseType == SQLParserClauseType.COUNT) { tempLevel++; } if (clauseStack.Count <= 3) { switch (clauseType) { case SQLParserClauseType.SELECT: tempClause = "select"; break; case SQLParserClauseType.FROM: tempClause = ""; break; } } if (clauseStack.Count <= 7) { switch (clauseType) { case SQLParserClauseType.WHERE: tempClause = ""; break; case SQLParserClauseType.GROUPBYLIST: groupByListLevel++; tempClause = ""; break; case SQLParserClauseType.HAVING: tempClause = ""; break; case SQLParserClauseType.ORDERBYLIST: orderByListLevel++; tempClause = ""; break; } } SQLParserClause clause = new SQLParserClause(clauseType); clauseStack.Push(clause); }