}
else
{
- char buffer[40];
- char *mark;
- char *dropStmt = pg_strdup(te->dropStmt);
- char *dropStmtPtr = dropStmt;
- PQExpBuffer ftStmt = createPQExpBuffer();
-
/*
- * Need to inject IF EXISTS clause after ALTER TABLE
- * part in ALTER TABLE .. DROP statement
+ * Inject an appropriate spelling of "if exists". For
+ * large objects, we have a separate routine that
+ * knows how to do it, without depending on
+ * te->dropStmt; use that. For other objects we need
+ * to parse the command.
+ *
*/
- if (strncmp(dropStmt, "ALTER TABLE", 11) == 0)
+ if (strncmp(te->desc, "BLOB", 4) == 0)
{
- appendPQExpBuffer(ftStmt,
- "ALTER TABLE IF EXISTS");
- dropStmt = dropStmt + 11;
+ DropBlobIfExists(AH, te->catalogId.oid);
}
-
- /*
- * ALTER TABLE..ALTER COLUMN..DROP DEFAULT does not
- * support the IF EXISTS clause, and therefore we
- * simply emit the original command for such objects.
- * For other objects, we need to extract the first
- * part of the DROP which includes the object type.
- * Most of the time this matches te->desc, so search
- * for that; however for the different kinds of
- * CONSTRAINTs, we know to search for hardcoded "DROP
- * CONSTRAINT" instead.
- */
- if (strcmp(te->desc, "DEFAULT") == 0)
- appendPQExpBuffer(ftStmt, "%s", dropStmt);
else
{
- if (strcmp(te->desc, "CONSTRAINT") == 0 ||
- strcmp(te->desc, "CHECK CONSTRAINT") == 0 ||
- strcmp(te->desc, "FK CONSTRAINT") == 0)
- strcpy(buffer, "DROP CONSTRAINT");
+ char buffer[40];
+ char *mark;
+ char *dropStmt = pg_strdup(te->dropStmt);
+ char *dropStmtPtr = dropStmt;
+ PQExpBuffer ftStmt = createPQExpBuffer();
+
+ /*
+ * Need to inject IF EXISTS clause after ALTER
+ * TABLE part in ALTER TABLE .. DROP statement
+ */
+ if (strncmp(dropStmt, "ALTER TABLE", 11) == 0)
+ {
+ appendPQExpBuffer(ftStmt,
+ "ALTER TABLE IF EXISTS");
+ dropStmt = dropStmt + 11;
+ }
+
+ /*
+ * ALTER TABLE..ALTER COLUMN..DROP DEFAULT does
+ * not support the IF EXISTS clause, and therefore
+ * we simply emit the original command for such
+ * objects. For other objects, we need to extract
+ * the first part of the DROP which includes the
+ * object type. Most of the time this matches
+ * te->desc, so search for that; however for the
+ * different kinds of CONSTRAINTs, we know to
+ * search for hardcoded "DROP CONSTRAINT" instead.
+ */
+ if (strcmp(te->desc, "DEFAULT") == 0)
+ appendPQExpBuffer(ftStmt, "%s", dropStmt);
else
- snprintf(buffer, sizeof(buffer), "DROP %s",
- te->desc);
+ {
+ if (strcmp(te->desc, "CONSTRAINT") == 0 ||
+ strcmp(te->desc, "CHECK CONSTRAINT") == 0 ||
+ strcmp(te->desc, "FK CONSTRAINT") == 0)
+ strcpy(buffer, "DROP CONSTRAINT");
+ else
+ snprintf(buffer, sizeof(buffer), "DROP %s",
+ te->desc);
- mark = strstr(dropStmt, buffer);
- Assert(mark != NULL);
+ mark = strstr(dropStmt, buffer);
+ Assert(mark != NULL);
- *mark = '\0';
- appendPQExpBuffer(ftStmt, "%s%s IF EXISTS%s",
- dropStmt, buffer,
- mark + strlen(buffer));
- }
+ *mark = '\0';
+ appendPQExpBuffer(ftStmt, "%s%s IF EXISTS%s",
+ dropStmt, buffer,
+ mark + strlen(buffer));
+ }
- ahprintf(AH, "%s", ftStmt->data);
+ ahprintf(AH, "%s", ftStmt->data);
- destroyPQExpBuffer(ftStmt);
+ destroyPQExpBuffer(ftStmt);
- pg_free(dropStmtPtr);
+ pg_free(dropStmtPtr);
+ }
}
}
}