public void Reset() { Parameters.Clear(); CodeSenseMessages.Clear(); CodeSenseErrors.Clear(); ExecutionParameters.Clear(); }
public override void ExplicitVisit(DeclareVariableStatement node) { if (node == null || node.Declarations == null) { return; } StringBuilder codeSenseMessageStringBuilder = new StringBuilder(); int endLine = -1; int endCol = -1; foreach (DeclareVariableElement declareVariableElement in node.Declarations) { if (declareVariableElement.DataType is SqlDataTypeReference dataTypeReference) { SqlDataTypeOption sqlDataTypeOption = dataTypeReference.SqlDataTypeOption; if (ShouldParamterize(sqlDataTypeOption)) { IList <Literal> sqlDataTypeParameters = dataTypeReference.Parameters; ScalarExpressionTransformer.SqlDataTypeOption = sqlDataTypeOption; ScalarExpressionTransformer.SqlDataTypeParameters = sqlDataTypeParameters; ScalarExpressionTransformer.VariableName = declareVariableElement.VariableName.Value; ScalarExpression declareVariableElementValue = declareVariableElement.Value; ScalarExpressionTransformer.ExplicitVisit(declareVariableElementValue); declareVariableElement.Value = ScalarExpressionTransformer.GetTransformedExpression(); IList <SqlParameter> sqlParameters = ScalarExpressionTransformer.Parameters; if (sqlParameters.Count == 1 && declareVariableElementValue != null) { codeSenseMessageStringBuilder.Append(SR.ParameterizationDetails(declareVariableElement.VariableName.Value, sqlParameters[0].SqlDbType.ToString(), sqlParameters[0].Size, sqlParameters[0].Precision, sqlParameters[0].Scale, sqlParameters[0].SqlValue.ToString())); endLine = declareVariableElementValue.StartLine; endCol = declareVariableElementValue.StartColumn + declareVariableElementValue.FragmentLength; if (!IsCodeSenseRequest) { string sqlParameterKey = sqlParameters[0].SqlDbType.ToString(); ExecutionParameters.TryGetValue(sqlParameterKey, out int currentCount); ExecutionParameters[sqlParameterKey] = currentCount + 1; } } Parameters.AddRange(sqlParameters); ScalarExpressionTransformer.Reset(); } } } if (codeSenseMessageStringBuilder.Length > 0) { CodeSenseMessages.Add(new ScriptFileMarker { Level = ScriptFileMarkerLevel.Information, Message = codeSenseMessageStringBuilder.ToString(), ScriptRegion = new ScriptRegion { StartLineNumber = node.StartLine, StartColumnNumber = node.StartColumn, EndLineNumber = endLine == -1 ? node.StartLine : endLine, EndColumnNumber = endCol == -1 ? node.StartColumn + node.LastTokenIndex - node.FirstTokenIndex : endCol } }); } node.AcceptChildren(this); base.ExplicitVisit(node); // let the base class finish up }