mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
db: fix sqlite3 code which manipulates columns.
Because it used internal routines, it didn't pass operations through the db hook! So make it use the generic routines, with the twist that they are not translated. And when we use this in a migration hook, we're actually in a transaction. This, in turn, introduces an issue: we need to be outside a transaction to "PRAGMA foreign_keys = OFF", but completing the transaction when there is a db hook actually enters the io loop, freeing the tmpctx! Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
d7aa2749c3
commit
e853cdc3ff
@@ -277,19 +277,11 @@ static bool db_postgres_rename_column(struct db *db,
|
||||
const char *tablename,
|
||||
const char *from, const char *to)
|
||||
{
|
||||
PGresult *res;
|
||||
char *cmd;
|
||||
|
||||
cmd = tal_fmt(db, "ALTER TABLE %s RENAME %s TO %s;",
|
||||
tablename, from, to);
|
||||
res = PQexec(db->conn, cmd);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
||||
db->error = tal_fmt(db, "Rename '%s' failed: %s",
|
||||
cmd, PQerrorMessage(db->conn));
|
||||
PQclear(res);
|
||||
return false;
|
||||
}
|
||||
PQclear(res);
|
||||
db_exec_prepared_v2(take(db_prepare_untranslated(db, cmd)));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -297,7 +289,6 @@ static bool db_postgres_delete_columns(struct db *db,
|
||||
const char *tablename,
|
||||
const char **colnames, size_t num_cols)
|
||||
{
|
||||
PGresult *res;
|
||||
char *cmd;
|
||||
|
||||
cmd = tal_fmt(db, "ALTER TABLE %s ", tablename);
|
||||
@@ -307,14 +298,8 @@ static bool db_postgres_delete_columns(struct db *db,
|
||||
tal_append_fmt(&cmd, "DROP %s", colnames[i]);
|
||||
}
|
||||
tal_append_fmt(&cmd, ";");
|
||||
res = PQexec(db->conn, cmd);
|
||||
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
||||
db->error = tal_fmt(db, "Delete '%s' failed: %s",
|
||||
cmd, PQerrorMessage(db->conn));
|
||||
PQclear(res);
|
||||
return false;
|
||||
}
|
||||
PQclear(res);
|
||||
|
||||
db_exec_prepared_v2(take(db_prepare_untranslated(db, cmd)));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user