public override void Visit(TSqlFragment node)
 {
     base.Visit(node);
     if (DeclareVariableElements.Count > 0 && node.StartOffset >= index)
     {
         // Get the token stream for the fragment and try to match the variables from our list
         IList <TSqlParserToken> stream = node.ScriptTokenStream;
         for (int i = node.FirstTokenIndex; i <= node.LastTokenIndex; i++)
         {
             TSqlParserToken token = stream[i];
             if (token.TokenType == TSqlTokenType.Variable)
             {
                 if (DeclareVariableElements.ContainsKey(token.Text))
                 {
                     // Declared variable matches variable in other text. Remove it from the list.
                     DeclareVariableElements.Remove(token.Text);
                 }
             }
         }
     }
     if (node is DeclareVariableElement && (checkParameters && node is ProcedureParameter || !checkParameters && !(node is ProcedureParameter)))
     {
         DeclareVariableElement element = (DeclareVariableElement)node;
         DeclareVariableElements[element.VariableName.Value] = element;
         if (index < node.StartOffset + node.FragmentLength)
         {
             index = node.StartOffset + node.FragmentLength;
         }
     }
 }
 public void ProcessDeclareVariableElement(DeclareVariableElement Element)
 {
     if (Element.VariableName.Value.Length <= 2)
     {
         _smells.SendFeedBack(33, Element);
     }
     _smells.ProcessTsqlFragment(Element.DataType);
     if (Element.Value != null) _smells.ProcessTsqlFragment(Element.Value);
 }
        private void ValidateName(DeclareVariableElement element)
        {
            // Remove @ from the variable name
            var parameterName = element.VariableName.Value.Remove(0, 1);

            if (!ValidationHelpers.IsCamelCase(parameterName))
            {
                DeclareVariableElements.Add(element);
            }
        }
Пример #4
0
 public override void ExplicitVisit(DeclareVariableElement node)
 {
     if (string.Equals(node.VariableName.Value, VariableName, StringComparison.OrdinalIgnoreCase))
     {
         VariableDataType = node.DataType;
         //variableDefinition = node.Definition;
         //throw new NotImplementedException(node.WhatIsThis());
     }
     base.ExplicitVisit(node);
 }
Пример #5
0
 public void ProcessDeclareVariableElement(DeclareVariableElement Element)
 {
     if (Element.VariableName.Value.Length <= 2)
     {
         _smells.SendFeedBack(33, Element);
     }
     _smells.ProcessTsqlFragment(Element.DataType);
     if (Element.Value != null)
     {
         _smells.ProcessTsqlFragment(Element.Value);
     }
 }
Пример #6
0
        private void CreateDeclareVariableDefinitionForParmeter(string name, SqlDataType type)
        {
            var declare        = new DeclareVariableStatement();
            var declareElement = new DeclareVariableElement();

            var dataType = GetDataType(type);

            declareElement.Value        = GetDefaultValue(dataType);
            declareElement.DataType     = dataType;
            declareElement.VariableName = name.ToIdentifier();
            declare.Declarations.Add(declareElement);

            _testProcedure.StatementList.Statements.Add(declare);
        }
Пример #7
0
        public override void ExplicitVisit(DeclareVariableElement node)
        {
            var declarationScope = this.currentScopeRef.Current.GetDeclarationScope();

            node.Analyse.SqlCodeScope = declarationScope;
            var variableNameValue = new SqlName(null, node.VariableName.Value, ObjectLevel.Local);
            var lazy = new SqlCodeTypeLazy(node.DataType);

            node.DataType.Analyse.ResultType = lazy;
            node.Analyse.ResultType          = lazy;
            node.Analyse.SqlCodeScope.Add(variableNameValue, lazy);
            base.ExplicitVisit(node);
            var resolved = node.Analyse.ResultType.GetResolvedCodeType();

            if (resolved != null)
            {
                node.Analyse.ResultType = resolved;
            }
        }
Пример #8
0
        private string buildChunkedDelete(DeleteSpecification delete)
        {

            var counter = new DeclareVariableStatement();
            var counterVariable = new DeclareVariableElement();
            counterVariable.DataType = new SqlDataTypeReference() {SqlDataTypeOption = SqlDataTypeOption.Int};
            counterVariable.VariableName = new Identifier() {Value = "@rowcount"};
            counterVariable.Value = new IntegerLiteral() {Value = "10000"};
            counter.Declarations.Add(counterVariable);
            
            delete.TopRowFilter = new TopRowFilter();
            delete.TopRowFilter.Expression = new ParenthesisExpression() {Expression = new IntegerLiteral() {Value = "10000"} };

            var setCounter = new SetVariableStatement();
            setCounter.Variable = new VariableReference() {Name = "@rowcount"};
            setCounter.Expression = new GlobalVariableExpression() {Name = "@@rowcount"};
            setCounter.AssignmentKind = AssignmentKind.Equals;

            var deleteStatement = new DeleteStatement();
            deleteStatement.DeleteSpecification = delete;

            var beginEnd = new BeginEndBlockStatement();
            beginEnd.StatementList = new StatementList();
            beginEnd.StatementList.Statements.Add(deleteStatement);
            beginEnd.StatementList.Statements.Add(setCounter);

            var whilePredicate = new BooleanComparisonExpression();
            whilePredicate.ComparisonType = BooleanComparisonType.GreaterThan;
            whilePredicate.FirstExpression = new VariableReference() {Name = "@rowcount"};
            whilePredicate.SecondExpression = new IntegerLiteral() {Value = "0"};

            var whileStatement = new WhileStatement();
            whileStatement.Predicate = whilePredicate;
            whileStatement.Statement = beginEnd;
            
            var text = ScriptDom.GenerateTSql(counter) + "\r\n" + ScriptDom.GenerateTSql(whileStatement);

            return text;
        }
Пример #9
0
 public void Declare(DeclareVariableElement node)
 {
     DeclaredVariables[node.VariableName.Value] = new Variable(node.DataType) { Node = node.VariableName };
 }
 public override void ExplicitVisit(DeclareVariableElement element)
 {
     ValidateName(element);
 }
        private void CreateDeclareVariableDefinitionForParmeter(string name, SqlDataType type)
        {
            var declare = new DeclareVariableStatement();
            var declareElement = new DeclareVariableElement();

            var dataType = GetDataType(type);
            declareElement.Value = GetDefaultValue(dataType);
            declareElement.DataType = dataType;
            declareElement.VariableName = name.ToIdentifier();
            declare.Declarations.Add(declareElement);

            _testProcedure.StatementList.Statements.Add(declare);
        }
Пример #12
0
 public override void Visit(DeclareVariableElement node) { this.action(node); }
 public override void ExplicitVisit(DeclareVariableElement fragment)
 {
     _fragments.Add(fragment);
 }
Пример #14
0
        private string buildChunkedDelete(DeleteSpecification delete)
        {
            var counter         = new DeclareVariableStatement();
            var counterVariable = new DeclareVariableElement();

            counterVariable.DataType = new SqlDataTypeReference()
            {
                SqlDataTypeOption = SqlDataTypeOption.Int
            };
            counterVariable.VariableName = new Identifier()
            {
                Value = "@rowcount"
            };
            counterVariable.Value = new IntegerLiteral()
            {
                Value = "10000"
            };
            counter.Declarations.Add(counterVariable);

            delete.TopRowFilter            = new TopRowFilter();
            delete.TopRowFilter.Expression = new ParenthesisExpression()
            {
                Expression = new IntegerLiteral()
                {
                    Value = "10000"
                }
            };

            var setCounter = new SetVariableStatement();

            setCounter.Variable = new VariableReference()
            {
                Name = "@rowcount"
            };
            setCounter.Expression = new GlobalVariableExpression()
            {
                Name = "@@rowcount"
            };
            setCounter.AssignmentKind = AssignmentKind.Equals;

            var deleteStatement = new DeleteStatement();

            deleteStatement.DeleteSpecification = delete;

            var beginEnd = new BeginEndBlockStatement();

            beginEnd.StatementList = new StatementList();
            beginEnd.StatementList.Statements.Add(deleteStatement);
            beginEnd.StatementList.Statements.Add(setCounter);

            var whilePredicate = new BooleanComparisonExpression();

            whilePredicate.ComparisonType  = BooleanComparisonType.GreaterThan;
            whilePredicate.FirstExpression = new VariableReference()
            {
                Name = "@rowcount"
            };
            whilePredicate.SecondExpression = new IntegerLiteral()
            {
                Value = "0"
            };

            var whileStatement = new WhileStatement();

            whileStatement.Predicate = whilePredicate;
            whileStatement.Statement = beginEnd;

            var text = ScriptDom.GenerateTSql(counter) + "\r\n" + ScriptDom.GenerateTSql(whileStatement);

            return(text);
        }
            // This is getting called for create procedure parameters as well, so no need to visit ProcedureParameter node.
            //
            public override void Visit(DeclareVariableElement variableElement)
            {
                Analyze(variableElement.VariableName.Value, variableElement.DataType as SqlDataTypeReference);

                base.Visit(variableElement);
            }