Esempio n. 1
0
        /// <summary>
        /// Adds statements for modification of columns to the list of statements.
        /// </summary>
        private static void AddModifyTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable, IList <PgColumn> dropDefaultsColumns, bool addDefaults)
        {
            foreach (PgColumn newColumn in newTable.Columns)
            {
                if (!oldTable.ContainsColumn(newColumn.Name))
                {
                    continue;
                }

                PgColumn oldColumn = oldTable.GetColumn(newColumn.Name);

                var newColumnName = PgDiffStringExtension.QuoteName(newColumn.Name);

                if (!oldColumn.Type.Equals(newColumn.Type))
                {
                    statements.Add($"\tALTER COLUMN {newColumnName} TYPE {newColumn.Type} /* TypeParameterChange of table {newTable.Name}. Old: {oldColumn.Type} New: {newColumn.Type} */");
                }

                var oldDefault = oldColumn.DefaultValue ?? string.Empty;
                var newDefault = newColumn.DefaultValue ?? string.Empty;

                if (!oldDefault.Equals(newDefault))
                {
                    if (newDefault.Length == 0)
                    {
                        statements.Add("\tALTER COLUMN " + newColumnName + " DROP DEFAULT");
                    }
                    else
                    {
                        statements.Add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + newDefault);
                    }
                }

                if (oldColumn.NullValue != newColumn.NullValue)
                {
                    if (newColumn.NullValue)
                    {
                        statements.Add("\tALTER COLUMN " + newColumnName + " DROP NOT NULL");
                    }
                    else
                    {
                        if (addDefaults)
                        {
                            var defaultValue = PgColumnUtils.GetDefaultValue(newColumn.Type);

                            if (defaultValue != null)
                            {
                                statements.Add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + defaultValue);
                                dropDefaultsColumns.Add(newColumn);
                            }
                        }

                        statements.Add("\tALTER COLUMN " + newColumnName + " SET NOT NULL");
                    }
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Adds statements for removal of columns to the list of statements.
 /// </summary>
 private static void AddDropTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable)
 {
     foreach (PgColumn column in oldTable.Columns)
     {
         if (!newTable.ContainsColumn(column.Name))
         {
             statements.Add("\tDROP COLUMN " + PgDiffStringExtension.QuoteName(column.Name));
         }
     }
 }
Esempio n. 3
0
 private static void AddDropTableColumns(List <string> statements, PgTable oldTable, PgTable newTable)
 {
     foreach (var column in oldTable.Columns)
     {
         if (!newTable.ContainsColumn(column.Name))
         {
             statements.Add("\tDROP COLUMN " + PgDiffUtils.GetQuotedName(column.Name));
         }
     }
 }
Esempio n. 4
0
        private static void AddModifyTableColumns(List <string> statements, PgDiffArguments arguments,
                                                  PgTable oldTable, PgTable newTable, List <PgColumn> dropDefaultsColumns)
        {
            foreach (var newColumn in newTable.Columns)
            {
                if (!oldTable.ContainsColumn(newColumn.Name))
                {
                    continue;
                }

                var oldColumn     = oldTable.GetColumn(newColumn.Name);
                var newColumnName = PgDiffUtils.GetQuotedName(newColumn.Name);

                if (!oldColumn.Type.Equals(newColumn.Type))
                {
                    statements.Add("\tALTER COLUMN " + newColumnName + " TYPE "
                                   + newColumn.Type + " /* "
                                   + string.Format(Resources.TypeParameterChange, newTable.Name, oldColumn.Type, newColumn.Type) + " */");
                }

                var oldDefault = oldColumn.DefaultValue ?? "";
                var newDefault = newColumn.DefaultValue ?? "";

                if (!oldDefault.Equals(newDefault))
                {
                    statements.Add(newDefault.Length == 0
                        ? $"\tALTER COLUMN {newColumnName} DROP DEFAULT"
                        : $"\tALTER COLUMN {newColumnName} SET DEFAULT {newDefault}");
                }

                if (oldColumn.NullValue == newColumn.NullValue)
                {
                    continue;
                }

                if (newColumn.NullValue)
                {
                    statements.Add($"\tALTER COLUMN {newColumnName} DROP NOT NULL");
                }
                else
                {
                    if (arguments.AddDefaults)
                    {
                        var defaultValue = PgColumnUtils.GetDefaultValue(newColumn.Type);
                        if (defaultValue != null)
                        {
                            statements.Add($"\tALTER COLUMN {newColumnName} SET DEFAULT {defaultValue}");
                            dropDefaultsColumns.Add(newColumn);
                        }
                    }
                    statements.Add($"\tALTER COLUMN {newColumnName} SET NOT NULL");
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Adds statements for creation of new columns to the list of statements.
        /// </summary>
        private static void AddCreateTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable, IList <PgColumn> dropDefaultsColumns, bool addDefaults)
        {
            foreach (PgColumn column in newTable.Columns)
            {
                if (!oldTable.ContainsColumn(column.Name))
                {
                    statements.Add("\tADD COLUMN " + column.GetFullDefinition(addDefaults));

                    if (addDefaults && !column.NullValue && (column.DefaultValue == null || column.DefaultValue == string.Empty))
                    {
                        dropDefaultsColumns.Add(column);
                    }
                }
            }
        }
Esempio n. 6
0
        private static void AddCreateTableColumns(List <string> statements, PgDiffArguments arguments,
                                                  PgTable oldTable, PgTable newTable, List <PgColumn> dropDefaultsColumns)
        {
            foreach (var column in newTable.Columns)
            {
                if (!oldTable.ContainsColumn(column.Name))
                {
                    statements.Add("\tADD COLUMN " + column.GetFullDefinition(arguments.AddDefaults));

                    if (arguments.AddDefaults && !column.NullValue && string.IsNullOrEmpty(column.DefaultValue))
                    {
                        dropDefaultsColumns.Add(column);
                    }
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Parses ALTER COLUMN action.
        /// </summary>
        private static void ParseAlterColumn(Parser parser, PgTable table)
        {
            parser.ExpectOptional("COLUMN");

            var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier());

            if (parser.ExpectOptional("SET"))
            {
                if (parser.ExpectOptional("STATISTICS"))
                {
                    PgColumn column = table.GetColumn(columnName);

                    if (column == null)
                    {
                        throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}");
                    }

                    column.Statistics = parser.ParseInteger();
                }
                else if (parser.ExpectOptional("DEFAULT"))
                {
                    var defaultValue = parser.Expression();

                    if (table.ContainsColumn(columnName))
                    {
                        PgColumn column = table.GetColumn(columnName);

                        if (column == null)
                        {
                            throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}");
                        }

                        column.DefaultValue = defaultValue;
                    }
                    else
                    {
                        throw new TeamworkParserException($"CannotFindColumnInTable {columnName} in table {table.Name}");
                    }
                }
                else if (parser.ExpectOptional("STORAGE"))
                {
                    PgColumn column = table.GetColumn(columnName);

                    if (column == null)
                    {
                        throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}");
                    }

                    if (parser.ExpectOptional("PLAIN"))
                    {
                        column.Storage = "PLAIN";
                    }
                    else if (parser.ExpectOptional("EXTERNAL"))
                    {
                        column.Storage = "EXTERNAL";
                    }
                    else if (parser.ExpectOptional("EXTENDED"))
                    {
                        column.Storage = "EXTENDED";
                    }
                    else if (parser.ExpectOptional("MAIN"))
                    {
                        column.Storage = "MAIN";
                    }
                    else
                    {
                        throw new TeamworkParserException("CannotParseStringUnsupportedCommand");
                    }
                }
                else
                {
                    throw new TeamworkParserException("CannotParseStringUnsupportedCommand");
                }
            }
            else
            {
                throw new TeamworkParserException("CannotParseStringUnsupportedCommand");
            }
        }
Esempio n. 8
0
        private static void ParseAlterColumn(Parser parser, PgTable table)
        {
            parser.ExpectOptional("COLUMN");

            var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier());

            if (parser.ExpectOptional("SET"))
            {
                if (parser.ExpectOptional("STATISTICS"))
                {
                    var column = table.GetColumn(columnName);
                    if (column == null)
                    {
                        throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name, parser.GetString()));
                    }

                    column.Statistics = parser.ParseInteger();
                }
                else if (parser.ExpectOptional("DEFAULT"))
                {
                    var defaultValue = parser.GetExpression();
                    if (table.ContainsColumn(columnName))
                    {
                        var column = table.GetColumn(columnName);
                        if (column == null)
                        {
                            throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name, parser.GetString()));
                        }

                        column.DefaultValue = defaultValue;
                    }
                    else
                    {
                        throw new ParserException(string.Format(Resources.CannotFindColumnInTable, columnName, table.Name));
                    }
                }
                else if (parser.ExpectOptional("STORAGE"))
                {
                    var column = table.GetColumn(columnName);

                    if (column == null)
                    {
                        throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name,
                                                          parser.GetString()));
                    }

                    if (parser.ExpectOptional("PLAIN"))
                    {
                        column.Storage = "PLAIN";
                    }
                    else if (parser.ExpectOptional("EXTERNAL"))
                    {
                        column.Storage = "EXTERNAL";
                    }
                    else if (parser.ExpectOptional("EXTENDED"))
                    {
                        column.Storage = "EXTENDED";
                    }
                    else if (parser.ExpectOptional("MAIN"))
                    {
                        column.Storage = "MAIN";
                    }
                    else
                    {
                        parser.ThrowUnsupportedCommand();
                    }
                }
                else
                {
                    parser.ThrowUnsupportedCommand();
                }
            }
            else
            {
                parser.ThrowUnsupportedCommand();
            }
        }