public static ReadOnlyCollection <Line> Create(string schema, string table, ReadOnlyCollection <Column> columns)
    {
        var textBuilder = new TextBuilder();

        textBuilder.Add($"public static ReadOnlyCollection<Line> CreateInsertSqlStatement(IEnumerable<{table}> records)");
        using (textBuilder.AddCSharpBlock())
        {
            //textBuilder.Add($"var sqlTable = new SqlTable(\"{_owner}\",\"{_name}\", new[]");
            //using (textBuilder.AddCSharpBlock())
            //{
            //    sequence = new Sequence();
            //    foreach (var column in columns)
            //    {
            //        var last = sequence.Next() == columns.Count - 1;
            //        var name = column.ColumnName;
            //        var separator = !last ? "," : null;
            //        textBuilder.Add($"\"{name}\"{separator}");
            //    }
            //}

            //textBuilder.AddToLastLine(".ToReadOnlyCollection());");
            //textBuilder.Add(Line.Empty);

            textBuilder.Add("var columns = new[]");
            using (textBuilder.AddCSharpBlock())
            {
                foreach (var indexedColumn in columns.SelectIndexed())
                {
                    if (indexedColumn.Index > 0)
                    {
                        textBuilder.AddToLastLine(",");
                    }
                    var column = indexedColumn.Value;
                    textBuilder.Add($"\"{column.ColumnName}\"");
                }
            }

            textBuilder.AddToLastLine(";");
            textBuilder.Add($"var rows = records.Select(record => new[]");
            using (textBuilder.AddCSharpBlock())
            {
                foreach (var indexedColumn in columns.SelectIndexed())
                {
                    if (indexedColumn.Index > 0)
                    {
                        textBuilder.AddToLastLine(",");
                    }
                    var column     = indexedColumn.Value;
                    var methodName = MethodName.GetToSqlConstantMethodName(column.SqlDataTypeName, column.IsNullable);
                    textBuilder.Add($"record.{column.ColumnName}.{methodName}()");
                }
            }

            textBuilder.AddToLastLine(").ToReadOnlyCollection();");
            textBuilder.Add($"var insertSqlStatement = InsertSqlStatementFactory.Create(\"{schema}.{table}\", columns, rows);");
            textBuilder.Add("return insertSqlStatement;");
        }

        return(textBuilder.ToLines());
    }
Exemple #2
0
    public static ReadOnlyCollection <Line> Create(string schema, string table, Column identifierColumn, Column versionColumn,
                                                   IReadOnlyCollection <Column> columns)
    {
        var arguments = new List <string>();

        arguments.Add($"{table} record");
        if (versionColumn != null)
        {
            var csharpTypeName = SqlDataTypeArray.SqlDataTypes.First(i => i.SqlDataTypeName == versionColumn.SqlDataTypeName).CSharpTypeName;
            arguments.Add($"{csharpTypeName} expected{versionColumn.ColumnName}");
        }

        var textBuilder = new TextBuilder();

        textBuilder.Add($"public static ReadOnlyCollection<Line> CreateUpdateSqlStatement({arguments.Join(", ")})");
        using (textBuilder.AddCSharpBlock())
        {
            textBuilder.Add("var setColumns = new []");
            using (textBuilder.AddCSharpBlock())
                foreach (var item in columns.SelectIndexed())
                {
                    if (item.Index > 0)
                    {
                        textBuilder.AddToLastLine(",");
                    }
                    var column = item.Value;
                    var method = MethodName.GetToSqlConstantMethodName(column.SqlDataTypeName, column.IsNullable);
                    textBuilder.Add($"new ColumnNameValue(\"{column.ColumnName}\", record.{column.ColumnName}.{method}())");
                }

            textBuilder.AddToLastLine(";");

            textBuilder.Add("var whereColumns = new[]");
            using (textBuilder.AddCSharpBlock())
            {
                var method = MethodName.GetToSqlConstantMethodName(identifierColumn.SqlDataTypeName, identifierColumn.IsNullable);
                textBuilder.Add($"new ColumnNameValue(\"{identifierColumn.ColumnName}\", record.{identifierColumn.ColumnName}.{method}())");
                if (versionColumn != null)
                {
                    textBuilder.AddToLastLine(",");
                    method = MethodName.GetToSqlConstantMethodName(versionColumn.SqlDataTypeName, versionColumn.IsNullable);
                    textBuilder.Add($"new ColumnNameValue(\"{versionColumn.ColumnName}\", expected{versionColumn.ColumnName}.{method}())");
                }
            }

            textBuilder.AddToLastLine(";");
            textBuilder.Add($"var updateSqlStatement = UpdateSqlStatementFactory.Create(\"{schema}.{table}\", setColumns, whereColumns);");
            textBuilder.Add($"var validation = ValidationFactory.Create(\"update {schema}.{table} failed\");");
            textBuilder.Add("var textBuilder = new TextBuilder();");
            textBuilder.Add("textBuilder.Add(updateSqlStatement);");
            textBuilder.Add("textBuilder.Add(validation);");
            textBuilder.Add("return textBuilder.ToLines();");
        }

        return(textBuilder.ToLines());
    }
Exemple #3
0
    public static ReadOnlyCollection <Line> Create(string schema, string table, Column identifierColumn, Column versionColumn)
    {
        var arguments      = new List <string>();
        var csharpTypeName = SqlDataTypeArray.SqlDataTypes.First(i => i.SqlDataTypeName == identifierColumn.SqlDataTypeName).CSharpTypeName;

        arguments.Add($"{csharpTypeName} {identifierColumn.ColumnName.ToCamelCase()}");
        if (versionColumn != null)
        {
            csharpTypeName = SqlDataTypeArray.SqlDataTypes.First(i => i.SqlDataTypeName == versionColumn.SqlDataTypeName).CSharpTypeName;
            arguments.Add($"{csharpTypeName} {versionColumn.ColumnName.ToCamelCase()}");
        }

        var textBuilder = new TextBuilder();

        textBuilder.Add($"public static ReadOnlyCollection<Line> CreateDeleteSqlStatement({arguments.Join(", ")})");
        using (textBuilder.AddCSharpBlock())
        {
            textBuilder.Add("var whereColumns = new[]");
            using (textBuilder.AddCSharpBlock())
            {
                var method = MethodName.GetToSqlConstantMethodName(identifierColumn.SqlDataTypeName, identifierColumn.IsNullable);
                textBuilder.Add($"new ColumnNameValue(\"{identifierColumn.ColumnName}\", {identifierColumn.ColumnName.ToCamelCase()}.{method}())");
                if (versionColumn != null)
                {
                    textBuilder.AddToLastLine(",");
                    method = MethodName.GetToSqlConstantMethodName(versionColumn.SqlDataTypeName, versionColumn.IsNullable);
                    textBuilder.Add($"new ColumnNameValue(\"{versionColumn.ColumnName}\", {versionColumn.ColumnName.ToCamelCase()}.{method}())");
                }
            }

            textBuilder.AddToLastLine(";");
            textBuilder.Add($"var deleteSqlStatement = DeleteSqlStatementFactory.Create(\"{schema}.{table}\", whereColumns);");
            textBuilder.Add($"var validation = ValidationFactory.Create(\"delete {schema}.{table} failed\");");
            textBuilder.Add("var textBuilder = new TextBuilder();");
            textBuilder.Add("textBuilder.Add(deleteSqlStatement);");
            textBuilder.Add("textBuilder.Add(validation);");
            textBuilder.Add("return textBuilder.ToLines();");
        }

        return(textBuilder.ToLines());
    }
Exemple #4
0
        public static ReadOnlyCollection <Line> Create(string message)
        {
            var textBuilder = new TextBuilder();

            textBuilder.Add("textBuilder.Add(\"if @@rowcount = 0\");");
            textBuilder.Add("using (textBuilder.AddBlock(\"begin\", \"end\"))");
            using (textBuilder.AddCSharpBlock())
            {
                textBuilder.Add($"textBuilder.Add(\"raiserror('{message}',16,1)\");");
                textBuilder.Add("textBuilder.Add(\"return\");");
            }

            return(textBuilder.ToLines());
        }
Exemple #5
0
    private static ReadOnlyCollection <Line> GetConstructor(string name, ReadOnlyCollection <DataTransferObjectField> fields)
    {
        var textBuilder = new TextBuilder();

        var parameters = fields.Select(field => $"{field.Type} {field.Name.ToCamelCase()}").Join(", ");

        textBuilder.Add($"public {name}({parameters})");
        using (textBuilder.AddCSharpBlock())
        {
            foreach (var field in fields)
            {
                textBuilder.Add($"{field.Name} = {field.Name.ToCamelCase()};");
            }
        }

        return(textBuilder.ToLines());
    }
Exemple #6
0
    public static ReadOnlyCollection <Line> CreateDataTransferObject(string name, ReadOnlyCollection <DataTransferObjectField> fields)
    {
        var textBuilder = new TextBuilder();

        textBuilder.Add($"public sealed class {name}");
        using (textBuilder.AddCSharpBlock())
        {
            foreach (var field in fields)
            {
                textBuilder.Add($"public readonly {field.Type} {field.Name};");
            }

            textBuilder.Add(Line.Empty);
            var constructor = GetConstructor(name, fields);
            textBuilder.Add(constructor);
        }

        return(textBuilder.ToLines());
    }
Exemple #7
0
        private void CsharpOrm_Click(object sender, EventArgs e)
        {
            var connectionString = DatabaseNode.Databases.Server.ConnectionString;
            GetTableSchemaResult getTableSchemaResult;

            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();
                var tableName = $"{DatabaseNode.Name}.{_owner}.{_name}";
                getTableSchemaResult = TableSchema.GetTableSchema(connection, tableName);
            }

            var dataTransferObjectFields = getTableSchemaResult.Columns
                                           .Select(column =>
            {
                var name           = column.ColumnName;
                var typeName       = column.TypeName;
                var isNullable     = column.IsNullable;
                var csharpTypeName = SqlDataTypeArray.SqlDataTypes.First(i => i.SqlDataTypeName == typeName).CSharpTypeName;
                var csharpType     = CSharpTypeArray.CSharpTypes.First(i => i.Name == csharpTypeName);
                if (isNullable == true && csharpType.Type.IsValueType)
                {
                    csharpTypeName += "?";
                }

                return(new DataTransferObjectField(name, csharpTypeName));
            })
                                           .ToReadOnlyCollection();
            var dataTransferObject = DataTransferObjectFactory.CreateDataTransferObject(_name, dataTransferObjectFields).ToIndentedString("    ");

            var columns = getTableSchemaResult.Columns
                          .Select(i => new Foundation.Data.DbQueryBuilding.Column(i.ColumnName, i.TypeName, i.IsNullable == true))
                          .ToReadOnlyCollection();
            var createInsertSqlSqlStatementMethod = CreateInsertSqlStatementMethodFactory.Create(_owner, _name, columns);

            var identifierColumn = getTableSchemaResult.UniqueIndexColumns
                                   .Select(i => getTableSchemaResult.Columns.First(j => j.ColumnId == i.ColumnId))
                                   .Select(i => new Foundation.Data.DbQueryBuilding.Column(i.ColumnName, i.TypeName, i.IsNullable == true))
                                   .First();
            var versionColumn = columns.FirstOrDefault(i => i.ColumnName == "Version");

            columns = columns.Where(i => i.ColumnName != identifierColumn.ColumnName).ToReadOnlyCollection();
            var createUpdateSqlStatementMethod = CreateUpdateSqlStatementMethodFactory.Create(_owner, _name, identifierColumn, versionColumn, columns);
            var createDeleteSqlStatementMethod = CreateDeleteSqlStatementMethodFactory.Create(_owner, _name, identifierColumn, versionColumn);

            var textBuilder = new TextBuilder();

            textBuilder.Add(dataTransferObject);
            textBuilder.Add(Line.Empty);
            textBuilder.Add($"public static class {_name}SqlStatementFactory");
            using (textBuilder.AddCSharpBlock())
            {
                textBuilder.Add(createInsertSqlSqlStatementMethod);
                textBuilder.Add(Line.Empty);
                textBuilder.Add(createUpdateSqlStatementMethod);
                textBuilder.Add(Line.Empty);
                textBuilder.Add(createDeleteSqlStatementMethod);
            }

            Clipboard.SetText(textBuilder.ToLines().ToIndentedString("    "));
            var queryForm = (QueryForm)DataCommanderApplication.Instance.MainForm.ActiveMdiChild;

            queryForm.SetStatusbarPanelText("Copying script to clipboard finished.",
                                            queryForm.ColorTheme != null ? queryForm.ColorTheme.ForeColor : SystemColors.ControlText);
        }