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); } }
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); }
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 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); }
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; } }
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; }
public void Declare(DeclareVariableElement node) { DeclaredVariables[node.VariableName.Value] = new Variable(node.DataType) { Node = node.VariableName }; }
public override void ExplicitVisit(DeclareVariableElement element) { ValidateName(element); }
public override void Visit(DeclareVariableElement node) { this.action(node); }
public override void ExplicitVisit(DeclareVariableElement fragment) { _fragments.Add(fragment); }
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); }