/// <summary> /// Parses ALTER TABLE view. /// </summary> private static void ParseView(Parser parser, PgView view, bool outputIgnoredStatements, string viewName, PgDatabase database) { while (!parser.ExpectOptional(";")) { if (parser.ExpectOptional("ALTER")) { parser.ExpectOptional("COLUMN"); var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier()); if (parser.ExpectOptional("SET", "DEFAULT")) { var expression = parser.Expression(); view.AddColumnDefaultValue(columnName, expression); } else if (parser.ExpectOptional("DROP", "DEFAULT")) { view.RemoveColumnDefaultValue(columnName); } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } else if (parser.ExpectOptional("OWNER", "TO")) { // we do not parse this one so we just consume the identifier if (outputIgnoredStatements) { database.AddIgnoredStatement("ALTER TABLE " + viewName + " OWNER TO " + parser.ParseIdentifier() + ';'); } else { parser.ParseIdentifier(); } } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } }
/// <summary> /// Parses ALTER VIEW statement. /// </summary> public static void Parse(PgDatabase database, string statement, bool outputIgnoredStatements) { var parser = new Parser(statement); parser.Expect("ALTER", "VIEW"); var viewName = parser.ParseIdentifier(); var schemaName = ParserUtils.GetSchemaName(viewName, database); if (database.SchemaIsIgnored(schemaName)) { return; } PgSchema schema = database.GetSchema(schemaName); if (schema == null) { throw new TeamworkParserException($"CannotFindSchema {schemaName} from {statement}"); } var objectName = ParserUtils.GetObjectName(viewName); PgView view = schema.GetView(objectName); if (view == null) { throw new TeamworkParserException($"CannotFindView {viewName} from {statement}"); } while (!parser.ExpectOptional(";")) { if (parser.ExpectOptional("ALTER")) { parser.ExpectOptional("COLUMN"); var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier()); if (parser.ExpectOptional("SET", "DEFAULT")) { var expression = parser.Expression(); view.AddColumnDefaultValue(columnName, expression); } else if (parser.ExpectOptional("DROP", "DEFAULT")) { view.RemoveColumnDefaultValue(columnName); } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } else if (parser.ExpectOptional("OWNER", "TO")) { // we do not parse this one so we just consume the identifier if (outputIgnoredStatements) { database.AddIgnoredStatement("ALTER TABLE " + viewName + " OWNER TO " + parser.ParseIdentifier() + ';'); } else { parser.ParseIdentifier(); } } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } }