public static SqlStatement Declare(PlSqlParser.CursorDeclarationContext context) { var cursorName = Name.Simple(context.cursor_name()); var query = Subquery.Form(context.subquery()); CursorParameter[] parameters = null; if (context.parameterSpec() != null) { parameters = context.parameterSpec().Select(Parameter.Form).ToArray(); } return new DeclareCursorStatement(cursorName, parameters, query); }
public static SqlStatement Build(PlSqlParser.SelectStatementContext context) { IntoClause into; var query = Subquery.Form(context.subquery(), out into); if (into != null) { SqlExpression reference; if (into.TableName != null) { reference = SqlExpression.Reference(into.TableName); } else { var vars = into.Variables; reference = SqlExpression.Tuple(vars.Select(SqlExpression.VariableReference).Cast<SqlExpression>().ToArray()); } return new SelectIntoStatement(query, reference); } var statement = new SelectStatement(query); var orderBy = context.orderByClause(); var forUpdate = context.forUpdateClause(); if (orderBy != null) { var sortColumns = orderBy.orderByElements().orderByElement().Select(x => { bool asc = x.DESC() == null; var exp = Expression.Build(x.expression()); return new SortColumn(exp, asc); }); statement.OrderBy = sortColumns; } statement.ForUpdate = forUpdate != null; var limit = context.queryLimitClause(); if (limit != null) { var n1 = Number.PositiveInteger(limit.n1); var n2 = Number.PositiveInteger(limit.n2); if (n1 == null) throw new ParseCanceledException("Invalid LIMIT clause"); if (n2 != null) { statement.Limit = new QueryLimit(n1.Value, n2.Value); } else { statement.Limit = new QueryLimit(n1.Value); } } return statement; }
public static CreateViewStatement Create(PlSqlParser.CreateViewStatementContext context) { var orReplace = context.OR() != null && context.REPLACE() != null; var viewName = Name.Object(context.objectName()); var query = (SqlQueryExpression) Expression.Build(context.subquery()); string[] columnNames = null; if (context.columnList() != null) { columnNames = context.columnList().columnName().Select(Name.Simple).ToArray(); } return new CreateViewStatement(viewName, columnNames, query) { ReplaceIfExists = orReplace }; }
private static SqlQueryExpression Form(PlSqlParser.SubqueryBasicElementsContext context, out IntoClause into) { var sub = context.subquery(); if (sub != null && !sub.IsEmpty) return Form(sub, out into); return Form(context.queryBlock(), out into); }
private static FromSource FormSource(PlSqlParser.Dml_table_expression_clauseContext context) { var tableName = Name.Object(context.objectName()); var query = context.subquery(); var source = new FromSource(); if (tableName != null) { source.TableName = tableName.ToString(); } else if (!query.IsEmpty) { source.SubQuery = Form(query); } if (context.alias != null && !context.alias.IsEmpty) { source.Alias = context.alias.GetText(); } return source; }