Пример #1
0
 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();
         }
     }
 }
Пример #2
0
        public ProcDefinition ParseProc(ProcIdentifier procIdentifier)
        {
            var procDefinition = new ProcDefinition(procIdentifier);

            ReadBasicParameterDefinition(procIdentifier, procDefinition);
            ParseParameterDefaults(procDefinition);
            procDefinition.SortParametersRequriedFirst();
            Log(procDefinition);
            return(procDefinition);
        }
Пример #3
0
        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;
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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}");
                }
            }
        }
Пример #6
0
        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());
        }
Пример #7
0
 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));
         }
     }
 }