Beispiel #1
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());
        }
        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());
        }