private ProcedureExpressionStatement CreateConcatStatement(ProcedureStatement parent, string prefix, Parameter parameter, string suffix) { return(new ProcedureExpressionStatement( parent, ProcedureOperationType.Add, CreateConcatStatement(parent, "%", parameter), new ProcedureExpressionStatement(parent, suffix))); }
public override void VisitProcedureStatement(ProcedureStatement node) { var funcSymbol = Symbols.Lookup(node.Name) as DefinedFunctionSymbol; Debug.Assert(funcSymbol != null); VisitFunc(funcSymbol, node.Parameters, node.Block); }
private ProcedureSetStatement CreateSetStatement(ProcedureStatement statement, Column column) { ProcedureExpressionStatement rightExpression = new ProcedureExpressionStatement(statement, column.DefaultValue); rightExpression.Function = ProcedureFunctionType.Snippet; // Value will be written as is var setStatement = new ProcedureSetStatement(statement, new TableRefColumn(column)); setStatement.RightExpression = rightExpression; return(setStatement); }
private IEnumerable <TableRef> GatherTableRefs(ProcedureStatement procedureStatement) { HashSet <TableRef> dict = new HashSet <TableRef>(); procedureStatement.Visit(delegate(ProcedureStatement current) { ProcedureJoinStatement js = current as ProcedureJoinStatement; if (js != null) { dict.Add(js.TableRef); } }); return(dict); }
private TableRefColumn FindMatchingColumn(ProcedureStatement procedureStatement, Parameter parameter) { if (procedureStatement == null) { throw new ArgumentNullException("procedureStatement"); } if (parameter == null) { throw new ArgumentNullException("parameter"); } Column column = null; IEnumerable <Table> tables = GatherTables(procedureStatement); if (parameter.Column != null) { foreach (Table table in tables) { View view = table as View; if (view != null) { column = view.GetMatchingColumn(parameter.Column); } else if (parameter.Column.Table.IsEquivalent(table)) { column = parameter.Column; } if (column != null) { break; } } } if (column == null) { IEnumerable <TableRef> tableRefs = GatherTableRefs(procedureStatement); foreach (TableRef tableRef in tableRefs) { if (tableRef.Table.IsEquivalent(parameter.Column.Table)) { return(new TableRefColumn(parameter.Column, tableRef)); } } } return(new TableRefColumn(column ?? parameter.Column)); }
private IEnumerable <Table> GatherTables(ProcedureStatement procedureStatement) { HashSet <Table> dict = new HashSet <Table>(); procedureStatement.Visit(delegate(ProcedureStatement current) { ProcedureWithJoinsStatement joins = current as ProcedureWithJoinsStatement; if (joins != null) { foreach (Table table in joins.Tables) { dict.Add(table); } } }); return(dict); }
private ProcedureExpressionStatement CreateEnumerationEqualsStatement(ProcedureStatement parent, Parameter enumParameter, EnumerationValue enumValue) { if (FilterFunctionsEnumeration.IsFlags) { // Sample: (@FilterFunctions & FilterFunctions.Equals) = FilterFunctions.Equals return(new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, ProcedureOperationType.BitwiseAnd, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)), new ProcedureExpressionStatement(parent, enumValue.TypedValue))); } else { // Sample: @FilterFunctions = FilterFunctions.Equals return(new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue))); } }
private bool IsInsertOrUpdateStatement(ProcedureStatement statement) { if (statement == null) { return(false); } var blockStatement = statement as ProcedureBlockStatement; if (blockStatement != null) { if (blockStatement.Statements.Count == 0) { return(false); } return(blockStatement.Statements[0] is ProcedureInsertStatement || blockStatement.Statements[0] is ProcedureUpdateStatement); } return(statement is ProcedureInsertStatement || statement is ProcedureUpdateStatement); }
private ProcedureExpressionStatement CreateEnumerationEqualsStatement(ProcedureStatement parent, Parameter enumParameter, EnumerationValue enumValue) { bool isZero = ConvertUtilities.ChangeType <int>(enumValue.TypedValue) == 0; if (!isZero && FilterFunctionsEnumeration.IsFlags) { // Sample: (@FilterFunctions & FilterFunctions.Equals) = FilterFunctions.Equals return(new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, ProcedureOperationType.BitwiseAnd, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)), new ProcedureExpressionStatement(parent, enumValue.TypedValue))); } else { // Sample: @FilterFunctions = FilterFunctions.Equals return(new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue))); } }
public override void VisitProcedureStatement(ProcedureStatement node) => VisitFunc(node.Name, node.Block);
private ProcedureExpressionStatement CreateEnumerationEqualsStatement(ProcedureStatement parent, Parameter enumParameter, EnumerationValue enumValue) { if (FilterFunctionsEnumeration.IsFlags) { // Sample: (@FilterFunctions & FilterFunctions.Equals) = FilterFunctions.Equals return new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, ProcedureOperationType.BitwiseAnd, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)), new ProcedureExpressionStatement(parent, enumValue.TypedValue)); } else { // Sample: @FilterFunctions = FilterFunctions.Equals return new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)); } }
private ProcedureExpressionStatement CreateConcatStatement(ProcedureStatement parent, string prefix, Parameter parameter, string suffix) { return new ProcedureExpressionStatement( parent, ProcedureOperationType.Add, CreateConcatStatement(parent, "%", parameter), new ProcedureExpressionStatement(parent, suffix)); }
private ProcedureExpressionStatement CreateParameterTestStatement(ProcedureStatement parent, Parameter parameter, FilterFunctions op) { ProcedureExpressionStatement result = null; TableRefColumn refColumn = new TableRefColumn(parameter.Column); switch (op) { case FilterFunctions.Equals: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Equals, refColumn, parameter); break; case FilterFunctions.NotEquals: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.NotEquals, refColumn, parameter); break; case FilterFunctions.IsLessThan: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsLesserThan, refColumn, parameter); break; case FilterFunctions.IsLessThanOrEqualTo: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsLesserThanOrEqualTo, refColumn, parameter); break; case FilterFunctions.IsGreaterThan: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsGreaterThan, refColumn, parameter); break; case FilterFunctions.IsGreaterThanOrEqualTo: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsGreaterThanOrEqualTo, refColumn, parameter); break; case FilterFunctions.FullTextContains: case FilterFunctions.NotFullTextContains: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Contains, refColumn, parameter); break; case FilterFunctions.FreeText: case FilterFunctions.NotFreeText: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.FreeText, refColumn, parameter); break; case FilterFunctions.StartsWith: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, parameter, "%")); break; case FilterFunctions.EndsWith: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, "%", parameter)); break; case FilterFunctions.Contains: case FilterFunctions.NotContains: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, "%", parameter, "%")); break; } // Negate statement if needed switch (op) { case FilterFunctions.NotContains: case FilterFunctions.NotFullTextContains: case FilterFunctions.NotFreeText: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Not, result, null); break; } return result; }
private ProcedureExpressionStatement CreateEnumerationEqualsStatement(ProcedureStatement parent, Parameter enumParameter, EnumerationValue enumValue) { bool isZero = ConvertUtilities.ChangeType<int>(enumValue) == 0; if (!isZero && FilterFunctionsEnumeration.IsFlags) { // Sample: (@FilterFunctions & FilterFunctions.Equals) = FilterFunctions.Equals return new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, ProcedureOperationType.BitwiseAnd, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)), new ProcedureExpressionStatement(parent, enumValue.TypedValue)); } else { // Sample: @FilterFunctions = FilterFunctions.Equals return new ProcedureExpressionStatement( parent, ProcedureOperationType.Equals, new ProcedureExpressionStatement(parent, enumParameter), new ProcedureExpressionStatement(parent, enumValue.TypedValue)); } }
public virtual void VisitProcedureStatement(ProcedureStatement node) => DefaultVisit(node);
private bool IsInsertOrUpdateStatement(ProcedureStatement statement) { if (statement == null) return false; var blockStatement = statement as ProcedureBlockStatement; if (blockStatement != null) { if (blockStatement.Statements.Count == 0) return false; return blockStatement.Statements[0] is ProcedureInsertStatement || blockStatement.Statements[0] is ProcedureUpdateStatement; } return statement is ProcedureInsertStatement || statement is ProcedureUpdateStatement; }
public override void VisitProcedureStatement(ProcedureStatement node) { InProcedure = true; DefaultVisit(node); InProcedure = false; }
private TableRefColumn FindMatchingColumn(ProcedureStatement procedureStatement, Parameter parameter) { if (procedureStatement == null) throw new ArgumentNullException("procedureStatement"); if (parameter == null) throw new ArgumentNullException("parameter"); Column column = null; IEnumerable<Table> tables = GatherTables(procedureStatement); if (parameter.Column != null) { foreach (Table table in tables) { View view = table as View; if (view != null) { column = view.GetMatchingColumn(parameter.Column); } else if (parameter.Column.Table.IsEquivalent(table)) { column = parameter.Column; } if (column != null) break; } } if (column == null) { IEnumerable<TableRef> tableRefs = GatherTableRefs(procedureStatement); foreach (TableRef tableRef in tableRefs) { if (tableRef.Table.IsEquivalent(parameter.Column.Table)) { return new TableRefColumn(parameter.Column, tableRef); } } } return new TableRefColumn(column ?? parameter.Column); }
private IEnumerable<TableRef> GatherTableRefs(ProcedureStatement procedureStatement) { HashSet<TableRef> dict = new HashSet<TableRef>(); procedureStatement.Visit(delegate(ProcedureStatement current) { ProcedureJoinStatement js = current as ProcedureJoinStatement; if (js != null) { dict.Add(js.TableRef); } }); return dict; }
private IEnumerable<Table> GatherTables(ProcedureStatement procedureStatement) { HashSet<Table> dict = new HashSet<Table>(); procedureStatement.Visit(delegate(ProcedureStatement current) { ProcedureWithJoinsStatement joins = current as ProcedureWithJoinsStatement; if (joins != null) { foreach (Table table in joins.Tables) { dict.Add(table); } } }); return dict; }
private ProcedureSetStatement CreateSetStatement(ProcedureStatement statement, Column column) { ProcedureExpressionStatement rightExpression = new ProcedureExpressionStatement(statement, column.DefaultValue); rightExpression.Function = ProcedureFunctionType.Snippet; // Value will be written as is var setStatement = new ProcedureSetStatement(statement, new TableRefColumn(column)); setStatement.RightExpression = rightExpression; return setStatement; }
private ProcedureExpressionStatement CreateParameterTestStatement(ProcedureStatement parent, Parameter parameter, FilterFunctions op) { ProcedureExpressionStatement result = null; TableRefColumn refColumn = new TableRefColumn(parameter.Column); switch (op) { case FilterFunctions.Equals: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Equals, refColumn, parameter); break; case FilterFunctions.NotEquals: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.NotEquals, refColumn, parameter); break; case FilterFunctions.IsLessThan: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsLesserThan, refColumn, parameter); break; case FilterFunctions.IsLessThanOrEqualTo: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsLesserThanOrEqualTo, refColumn, parameter); break; case FilterFunctions.IsGreaterThan: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsGreaterThan, refColumn, parameter); break; case FilterFunctions.IsGreaterThanOrEqualTo: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.IsGreaterThanOrEqualTo, refColumn, parameter); break; case FilterFunctions.FullTextContains: case FilterFunctions.NotFullTextContains: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Contains, refColumn, parameter); break; case FilterFunctions.FreeText: case FilterFunctions.NotFreeText: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.FreeText, refColumn, parameter); break; case FilterFunctions.StartsWith: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, parameter, "%")); break; case FilterFunctions.EndsWith: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, "%", parameter)); break; case FilterFunctions.Contains: case FilterFunctions.NotContains: result = new ProcedureExpressionStatement( parent, ProcedureOperationType.Like, new ProcedureExpressionStatement(parent, refColumn), CreateConcatStatement(parent, "%", parameter, "%")); break; } // Negate statement if needed switch (op) { case FilterFunctions.NotContains: case FilterFunctions.NotFullTextContains: case FilterFunctions.NotFreeText: result = new ProcedureExpressionStatement(parent, ProcedureOperationType.Not, result, null); break; } return(result); }