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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 9
0
        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)));
            }
        }
Exemplo n.º 10
0
 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));
            }
        }
Exemplo n.º 15
0
 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;
        }
Exemplo n.º 17
0
 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);
        }