public void Compose() { if (CheckForOverwrite(_fileName)) { _procDefinition = new ProcParser(_sqlConnection).ParseProc(_procIdentifier); using (_streamWriter = OpenStreamWriter()) { WriteAutoGenMessage(); WriteUsings(); WriteNamespace(); OpenBrace(); { WriteSchemaClassHeader(); OpenBrace(); { WriteProcClassHeader(); OpenBrace(); { WriteMethod(); } CloseBrace(); } CloseBrace(); } CloseBrace(); } } }
public ProcDefinition ParseProc(ProcIdentifier procIdentifier) { var procDefinition = new ProcDefinition(procIdentifier); ReadBasicParameterDefinition(procIdentifier, procDefinition); ParseParameterDefaults(procDefinition); procDefinition.SortParametersRequriedFirst(); Log(procDefinition); return(procDefinition); }
private static void UpdateParameterDefinitionWithHasDefault(ProcDefinition procDefinition, int parameterIndex, List <string> parameterDefinitions) { var nameWithoutAt = procDefinition.Parameters[parameterIndex].NameWithoutAt; var paramDefinition = parameterDefinitions[parameterIndex - 1]; //TODO: Parse the parameter value for more reliability (it might be useful) https://dotnetfiddle.net/fHMeFk var unreliableParameterHasDefault = paramDefinition.Contains(nameWithoutAt, StringComparison.OrdinalIgnoreCase) && paramDefinition.Contains("=", StringComparison.OrdinalIgnoreCase); procDefinition.Parameters[parameterIndex].HasDefault = unreliableParameterHasDefault; }
private void ParseParameterDefaults(ProcDefinition procDefinition) { //sys.sp_procedure_params_rowset does not accurately reflect parameter defaults. //We have to parse it from the text var script = GetProcedureScript(procDefinition); var parameterDefinitions = ParseParameterDefinitions(script); for (var parameterIndex = 1; parameterIndex < procDefinition.Parameters.Count; parameterIndex++) { UpdateParameterDefinitionWithHasDefault(procDefinition, parameterIndex, parameterDefinitions); } }
private void Log(ProcDefinition procDefinition) { Logger.Log(Logger.Level.Verbose, $" {procDefinition.Identifier}"); var procDefinitionParameters = procDefinition.Parameters; for (var index = 1; index < procDefinitionParameters.Count; index++) { { var procDefinitionParameter = procDefinitionParameters[index]; Logger.Log(Logger.Level.Verbose, $" {procDefinitionParameter}"); } } }
private string GetProcedureScript(ProcDefinition procDefinition) { var nameWithSchema = $"{procDefinition.Identifier.Schema}.{procDefinition.Identifier.Name}"; var script = new StringBuilder(); using (var dataReader = new SprocWrapper.Procs.sys.sp_helptext( nameWithSchema) .SetConnection(_sqlConnection) .ExecuteDataReader()) { while (dataReader.Read()) { script.Append(dataReader.GetString(0)); } } return(script.ToString()); }
private void ReadBasicParameterDefinition(ProcIdentifier procIdentifier, ProcDefinition procDefinition) { using (var dataReader = new Procs.Dbo.sp_procedure_params_rowset( procIdentifier.Name, procedure_schema: procIdentifier.Schema) .SetConnection(_sqlConnection) .ExecuteDataReader()) { while (dataReader.Read()) { var name = dataReader["PARAMETER_NAME"].ToString(); var sqlType = dataReader["TYPE_NAME"].ToString(); var originalOrder = dataReader.GetInt16(dataReader.GetOrdinal("ORDINAL_POSITION")) - 1; procDefinition.Parameters.Add(new ParameterDefinition(name, sqlType, originalOrder)); } } }