From adf985bff8a7cf8d3482a65363f9df5f218a80a4 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 11 Oct 2022 21:51:43 +0100 Subject: [PATCH] Persistence: Store cmsg_id and sub id for client_msgs. --- plugins/persist-sqlite/client_msgs.c | 17 ++++++++++------- plugins/persist-sqlite/init.c | 8 +++++--- plugins/persist-sqlite/restore.c | 18 ++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/plugins/persist-sqlite/client_msgs.c b/plugins/persist-sqlite/client_msgs.c index eec240a6..65b1cb48 100644 --- a/plugins/persist-sqlite/client_msgs.c +++ b/plugins/persist-sqlite/client_msgs.c @@ -33,13 +33,16 @@ int persist_sqlite__client_msg_add_cb(int event, void *event_data, void *userdat UNUSED(event); if(sqlite3_bind_text(ms->client_msg_add_stmt, 1, ed->client_id, (int)strlen(ed->client_id), SQLITE_STATIC) == SQLITE_OK - && sqlite3_bind_int64(ms->client_msg_add_stmt, 2, (int64_t)ed->store_id) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 3, ed->dup) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 4, ed->direction) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 5, ed->mid) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 6, ed->qos) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 7, ed->retain) == SQLITE_OK - && sqlite3_bind_int(ms->client_msg_add_stmt, 8, ed->state) == SQLITE_OK + && sqlite3_bind_int64(ms->client_msg_add_stmt, 2, (int64_t)ed->cmsg_id) == SQLITE_OK + && sqlite3_bind_int64(ms->client_msg_add_stmt, 3, (int64_t)ed->store_id) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 4, ed->dup) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 5, ed->direction) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 6, ed->mid) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 7, ed->qos) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 8, ed->retain) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 9, ed->state) == SQLITE_OK + && sqlite3_bind_int(ms->client_msg_add_stmt, 10, (int)ed->subscription_identifier) == SQLITE_OK + ){ ms->event_count++; diff --git a/plugins/persist-sqlite/init.c b/plugins/persist-sqlite/init.c index cb4ff58e..49f43200 100644 --- a/plugins/persist-sqlite/init.c +++ b/plugins/persist-sqlite/init.c @@ -91,13 +91,15 @@ static int create_tables(struct mosquitto_sqlite *ms) "CREATE TABLE IF NOT EXISTS client_msgs " "(" "client_id TEXT NOT NULL," + "cmsg_id INT64," "store_id INT64," "dup INTEGER," "direction INTEGER," "mid INTEGER," "qos INTEGER," "retain INTEGER," - "state INTEGER" + "state INTEGER," + "subscription_identifier INTEGER" //"state INTEGER," //"FOREIGN KEY (client_id) REFERENCES clients(client_id) " //"ON DELETE CASCADE," @@ -178,8 +180,8 @@ static int prepare_statements(struct mosquitto_sqlite *ms) /* Client messages */ rc = sqlite3_prepare_v3(ms->db, "INSERT INTO client_msgs " - "(client_id,store_id,dup,direction,mid,qos,retain,state) " - "VALUES(?,?,?,?,?,?,?,?)", + "(client_id,cmsg_id,store_id,dup,direction,mid,qos,retain,state,subscription_identifier) " + "VALUES(?,?,?,?,?,?,?,?,?,?)", -1, SQLITE_PREPARE_PERSISTENT, &ms->client_msg_add_stmt, NULL); if(rc) goto fail; diff --git a/plugins/persist-sqlite/restore.c b/plugins/persist-sqlite/restore.c index 044228d2..de29993e 100644 --- a/plugins/persist-sqlite/restore.c +++ b/plugins/persist-sqlite/restore.c @@ -296,7 +296,7 @@ static int client_msg_restore(struct mosquitto_sqlite *ms) long count = 0, failed = 0; rc = sqlite3_prepare_v2(ms->db, - "SELECT client_id, store_id, dup, direction, mid, qos, retain, state " + "SELECT client_id, cmsg_id, store_id, dup, direction, mid, qos, retain, state, subscription_identifier " "FROM client_msgs ORDER BY rowid", -1, &stmt, NULL); @@ -308,13 +308,15 @@ static int client_msg_restore(struct mosquitto_sqlite *ms) memset(&msg, 0, sizeof(msg)); while(sqlite3_step(stmt) == SQLITE_ROW){ msg.client_id = (const char *)sqlite3_column_text(stmt, 0); - msg.store_id = (uint64_t)sqlite3_column_int64(stmt, 1); - msg.dup = sqlite3_column_int(stmt, 2); - msg.direction = (uint8_t)sqlite3_column_int(stmt, 3); - msg.mid = (uint16_t)sqlite3_column_int(stmt, 4); - msg.qos = (uint8_t)sqlite3_column_int(stmt, 5); - msg.retain = sqlite3_column_int(stmt, 6); - msg.state = (uint8_t)sqlite3_column_int(stmt, 7); + msg.cmsg_id = (uint64_t)sqlite3_column_int64(stmt, 1); + msg.store_id = (uint64_t)sqlite3_column_int64(stmt, 2); + msg.dup = sqlite3_column_int(stmt, 3); + msg.direction = (uint8_t)sqlite3_column_int(stmt, 4); + msg.mid = (uint16_t)sqlite3_column_int(stmt, 5); + msg.qos = (uint8_t)sqlite3_column_int(stmt, 6); + msg.retain = sqlite3_column_int(stmt, 7); + msg.state = (uint8_t)sqlite3_column_int(stmt, 8); + msg.subscription_identifier = (uint32_t)sqlite3_column_int(stmt, 9); rc = mosquitto_persist_client_msg_add(&msg); if(rc == MOSQ_ERR_SUCCESS){