示例#1
0
        private static void FillChangeScript(RowComparisonResult change, DetailedTableComparisonResult detail, Script script)
        {
            switch (change.Result)
            {
            case CompareResult.NotFoundInA:
                FillDelete(change, detail, script);
                break;

            case CompareResult.NotFoundInB:
                FillInsert(change, detail, script);
                break;

            case CompareResult.NotEqual:
                FillUpdate(change, detail, script);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            script.AddToken("\r\n\r\n");
        }
示例#2
0
        private static void FillInsert(RowComparisonResult change, DetailedTableComparisonResult result, Script script)
        {
            script.AddScript(string.Format("INSERT INTO [{0}].[{1}] (", result.SchemaName, result.TableName));
            var comma = "";

            foreach (var column in result.Columns)
            {
                script.AddToken(comma)
                .AddToken(TokenType.Text, string.Format("[{0}]", column.Name));
                comma = ", ";
            }
            script.AddScript(")\r\nVALUES (");
            var row = result.TableA[change.Key];

            comma = "";
            foreach (var column in result.Columns)
            {
                script.AddToken(comma)
                .AddToken(DataAccess.GetDatabaseValue(row[column.Name], column.DataType));
                comma = ", ";
            }
            script.AddToken(TokenType.GKeyword, ")");
        }
示例#3
0
        private static void FillUpdate(RowComparisonResult change, DetailedTableComparisonResult result, Script script)
        {
            var rowA = result.TableA[change.Key];
            var rowB = result.TableB[change.Key];

            script.AddScript(string.Format("UPDATE [{0}].[{1}] SET\r\n", result.SchemaName, result.TableName));
            var comma = "";

            foreach (var column in result.Columns.Except(result.PrimaryKey.Columns))
            {
                var columnName = column.Name;
                var aValue     = rowA[columnName];
                var bValue     = rowB[columnName];
                if (!TableComparer.ObjectsEqual(aValue, bValue))
                {
                    script.AddToken(comma);
                    script.AddScript(string.Format("[{0}] = {1}", columnName, DataAccess.GetDatabaseValue(aValue, column.DataType)));
                    comma = ",\r\n";
                }
            }
            script.AddToken("\r\n WHERE");
            script.AddScript(GetPrimaryKeyCondition(change, result));
        }
示例#4
0
 private static void FillDelete(RowComparisonResult change, DetailedTableComparisonResult result, Script script)
 {
     script.AddScript(string.Format("DELETE FROM [{0}].[{1}] WHERE {2}", result.SchemaName, result.TableName, GetPrimaryKeyCondition(change, result)));
 }
示例#5
0
 private static string GetPrimaryKeyCondition(RowComparisonResult change, DetailedTableComparisonResult result)
 {
     return(result.PrimaryKey.GetFormattedValue(change.Key, "[{0}] = {1}", " AND "));
 }