private ISqlNode ParseUnterminatedWithChildStatement(ITokenizer t) { t.Skip(SqlTokenType.Whitespace); var keyword = t.ExpectPeek(SqlTokenType.Keyword); if (keyword.Value == "SELECT") { return(ParseQueryExpression(t)); } if (keyword.Value == "INSERT") { return(ParseInsertStatement(t)); } if (keyword.Value == "UPDATE") { return(ParseUpdateStatement(t)); } if (keyword.Value == "DELETE") { return(ParseDeleteStatement(t)); } if (keyword.Value == "MERGE") { return(ParseMergeStatement(t)); } return(null); }
private ISqlNode ParseUnterminatedStatement(ITokenizer t) { t.Skip(SqlTokenType.Whitespace); var keyword = t.ExpectPeek(SqlTokenType.Keyword); if (keyword.Value == "SELECT") { return(ParseQueryExpression(t)); } if (keyword.Value == "WITH") { return(ParseWithStatement(t)); } if (keyword.Value == "INSERT") { return(ParseInsertStatement(t)); } if (keyword.Value == "UPDATE") { return(ParseUpdateStatement(t)); } if (keyword.Value == "DELETE") { return(ParseDeleteStatement(t)); } if (keyword.Value == "DECLARE") { return(ParseDeclare(t)); } if (keyword.Value == "SET") { return(ParseSet(t)); } if (keyword.Value == "EXEC" || keyword.Value == "EXECUTE") { return(ParseExecute(t)); } if (keyword.Value == "BEGIN") { return(ParseBeginEndStatementList(t)); } if (keyword.Value == "IF") { return(ParseIf(t)); } if (keyword.Value == "MERGE") { return(ParseMergeStatement(t)); } // TODO: If we don't know what it is, Parse it into an Unknown node and continue // TODO: RETURN? // TODO: THROW/TRY/CATCH // TODO: WHILE/CONTINUE/BREAK // TODO: CREATE/DROP/ALTER? Do we want to handle DDL statments here? return(null); }