public SqlScriptingResult GenerateSqlScripts(SqlScriptingInput input)
        {
            var result = new SqlScriptingResult();

            HandleTables(result, input.Tables, input.RootFolder);
            HandleTextObjects(result, input.TextObjects, input.RootFolder);

            return result;
        }
        public void HandleTables(SqlScriptingResult result, List<SqlTable> tables, string rootFolder)
        {
            foreach (SqlTable table in tables)
            {
                // Ignore "tSQLt" schema.
                if (!table.Schema.Equals("tSQLt", System.StringComparison.InvariantCultureIgnoreCase))
                {
                    var contentBuilder = new StringBuilder(string.Empty);
                    string name = string.Format("{0}.{1}", table.Schema, table.Name);

                    AddTableHeader(contentBuilder, name, "table");
                    int totalColumnCount = table.Columns.Count;
                    for (int i = 0; i < totalColumnCount; i++)
                    {
                        SqlColumn column = table.Columns[i];
                        var columnBuilder = new StringBuilder(string.Empty);
                        columnBuilder.AppendFormat("        {0}", column.Name);
                        columnBuilder.AppendFormat(" {0}", column.DataTypeName);
                        HandleDataTypeLength(column, columnBuilder);
                        HandleIdentity(column, columnBuilder);
                        HandleNullability(column, columnBuilder);
                        HandlePrimaryKey(table, column, columnBuilder);
                        HandleDefault(table, column, columnBuilder);
                        HandleForeignKey(table, column, columnBuilder);
                        HandleSeperator(totalColumnCount, i, columnBuilder);
                        contentBuilder.AppendLine(columnBuilder.ToString());
                    }
                    AddTableFooter(contentBuilder);

                    AddScriptToResult(rootFolder, "Tables", table.Schema, table.Name, contentBuilder, result);
                }
            }
        }
        public void AddScriptToResult(string rootFolder, string folderName, string schema, string name , StringBuilder fileContent, SqlScriptingResult result)
        {
            string fileName = string.Format("{0}.{1}.sql", schema, name);
            string folderPath = string.IsNullOrWhiteSpace(rootFolder) ? folderName : Path.Combine(rootFolder, folderName);
            string path = Path.Combine(folderPath, fileName);
            var script = new FileInfoDto
            {
                Content = fileContent.ToString(),
                Path = path
            };

            result.Scripts.Add(script);
        }
        public void HandleTextObjects(SqlScriptingResult result, List<SqlTextObject> textObjects, string rootFolder)
        {
            foreach (SqlTextObject textObject in textObjects)
            {
                // Ignore "tSQLt" schema.
                if (!textObject.Schema.Equals("tSQLt", System.StringComparison.InvariantCultureIgnoreCase))
                {
                    var contentBuilder = new StringBuilder(string.Empty);
                    string name = string.Format("{0}.{1}", textObject.Schema, textObject.Name);

                    // Don't add drop statement for schema's.
                    if (!textObject.GroupName.ToLower().Equals("schema"))
                    {
                        AddTextObjectHeader(contentBuilder, name, textObject.TypeName);
                    }
                    contentBuilder.Append(textObject.TextHeader);
                    contentBuilder.Append(textObject.TextBody);
                    AddTextObjectFooter(contentBuilder);

                    AddScriptToResult(rootFolder, textObject.GroupName, textObject.Schema, textObject.Name, contentBuilder, result);
                }
            }
        }