diff --git a/persistence/0001_2.3.0_users.sql b/persistence/0001_2.3.0_users.sql index 83455a97..3bd9bd86 100644 --- a/persistence/0001_2.3.0_users.sql +++ b/persistence/0001_2.3.0_users.sql @@ -32,8 +32,29 @@ VALUES "$5$PwFeXpBBIBZuZdZl$fP8fFPWCLoaWcnVXVSR.3Xi8TEqCvX92gjhowNNn6S4" ); ---- Modify tags table --- BEGIN TRANSACTION; + +ALTER TABLE nodes RENAME TO old_nodes; +CREATE TABLE + nodes ( + name TEXT PRIMARY KEY check(length(name) <= 128), + type integer(1) NOT NULL check(type IN (1, 2)), + state integer(1) NOT NULL check(state BETWEEN 1 AND 4), + plugin_name TEXT NOT NULL check(length(plugin_name) <= 32) + ); +INSERT INTO nodes SELECT * FROM old_nodes; + +ALTER TABLE groups RENAME TO old_groups; +CREATE TABLE IF NOT EXISTS + groups ( + driver_name TEXT NOT NULL, + name TEXT NULL check(length(name) <= 128), + interval INTEGER NOT NULL check(interval >= 100), + UNIQUE (driver_name, name), + FOREIGN KEY (driver_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE + ); +INSERT INTO groups SELECT * FROM old_groups; + ALTER TABLE tags RENAME TO old_tags; CREATE TABLE IF NOT EXISTS tags ( @@ -50,29 +71,28 @@ CREATE TABLE IF NOT EXISTS FOREIGN KEY (driver_name, group_name) REFERENCES groups (driver_name, name) ON UPDATE CASCADE ON DELETE CASCADE ); INSERT INTO tags SELECT * FROM old_tags; -DROP TABLE old_tags; -ALTER TABLE nodes RENAME TO old_nodes; +ALTER TABLE subscriptions RENAME TO old_subscriptions; CREATE TABLE IF NOT EXISTS - nodes ( - name TEXT PRIMARY KEY check(length(name) <= 128), - type integer(1) NOT NULL check(type IN (1, 2)), - state integer(1) NOT NULL check(state BETWEEN 1 AND 4), - plugin_name TEXT NOT NULL check(length(plugin_name) <= 32) - ); -INSERT INTO nodes SELECT * FROM old_nodes; -DROP TABLE old_nodes; - -ALTER TABLE groups RENAME TO old_groups; -CREATE TABLE IF NOT EXISTS - groups ( + subscriptions ( + app_name TEXT NOT NULL, driver_name TEXT NOT NULL, - name TEXT NULL check(length(name) <= 128), - interval INTEGER NOT NULL check(interval >= 100), - UNIQUE (driver_name, name), - FOREIGN KEY (driver_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE + group_name TEXT NOT NULL, + CHECK (app_name != driver_name), + UNIQUE (app_name, driver_name, group_name), + FOREIGN KEY (app_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE, + FOREIGN KEY (driver_name, group_name) REFERENCES groups (driver_name, name) ON UPDATE CASCADE ON DELETE CASCADE ); -INSERT INTO groups SELECT * FROM old_groups; -DROP TABLE old_groups; +INSERT INTO subscriptions SELECT * FROM old_subscriptions; + +ALTER TABLE settings RENAME TO old_settings; +CREATE TABLE IF NOT EXISTS + settings ( + node_name TEXT NOT NULL, + setting TEXT NOT NULL, + UNIQUE (node_name), + FOREIGN KEY (node_name) REFERENCES nodes (name) ON UPDATE CASCADE ON DELETE CASCADE + ); +INSERT INTO settings SELECT * FROM old_settings; COMMIT; \ No newline at end of file diff --git a/src/persist/persist.c b/src/persist/persist.c index 4bccfce2..ca0a6c25 100644 --- a/src/persist/persist.c +++ b/src/persist/persist.c @@ -333,7 +333,7 @@ static int apply_schema_file(sqlite3 *db, const char *dir, const char *file) char *err_msg = NULL; rv = sqlite3_exec(db, sql, NULL, NULL, &err_msg); if (SQLITE_OK != rv) { - nlog_error("execute %s fail: %s", path, err_msg); + nlog_error("execute %s fail: (%d)%s", path, rv, err_msg); sqlite3_free(err_msg); rv = NEU_ERR_EINTERNAL; goto end;