Persistence: Store cmsg_id and sub id for client_msgs.

pull/2558/merge
Roger A. Light 3 years ago
parent cfd4aa1c95
commit adf985bff8

@ -33,13 +33,16 @@ int persist_sqlite__client_msg_add_cb(int event, void *event_data, void *userdat
UNUSED(event); UNUSED(event);
if(sqlite3_bind_text(ms->client_msg_add_stmt, 1, ed->client_id, (int)strlen(ed->client_id), SQLITE_STATIC) == SQLITE_OK 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_int64(ms->client_msg_add_stmt, 2, (int64_t)ed->cmsg_id) == SQLITE_OK
&& sqlite3_bind_int(ms->client_msg_add_stmt, 3, ed->dup) == 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->direction) == 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->mid) == 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->qos) == 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->retain) == 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->state) == 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++; ms->event_count++;

@ -91,13 +91,15 @@ static int create_tables(struct mosquitto_sqlite *ms)
"CREATE TABLE IF NOT EXISTS client_msgs " "CREATE TABLE IF NOT EXISTS client_msgs "
"(" "("
"client_id TEXT NOT NULL," "client_id TEXT NOT NULL,"
"cmsg_id INT64,"
"store_id INT64," "store_id INT64,"
"dup INTEGER," "dup INTEGER,"
"direction INTEGER," "direction INTEGER,"
"mid INTEGER," "mid INTEGER,"
"qos INTEGER," "qos INTEGER,"
"retain INTEGER," "retain INTEGER,"
"state INTEGER" "state INTEGER,"
"subscription_identifier INTEGER"
//"state INTEGER," //"state INTEGER,"
//"FOREIGN KEY (client_id) REFERENCES clients(client_id) " //"FOREIGN KEY (client_id) REFERENCES clients(client_id) "
//"ON DELETE CASCADE," //"ON DELETE CASCADE,"
@ -178,8 +180,8 @@ static int prepare_statements(struct mosquitto_sqlite *ms)
/* Client messages */ /* Client messages */
rc = sqlite3_prepare_v3(ms->db, rc = sqlite3_prepare_v3(ms->db,
"INSERT INTO client_msgs " "INSERT INTO client_msgs "
"(client_id,store_id,dup,direction,mid,qos,retain,state) " "(client_id,cmsg_id,store_id,dup,direction,mid,qos,retain,state,subscription_identifier) "
"VALUES(?,?,?,?,?,?,?,?)", "VALUES(?,?,?,?,?,?,?,?,?,?)",
-1, SQLITE_PREPARE_PERSISTENT, -1, SQLITE_PREPARE_PERSISTENT,
&ms->client_msg_add_stmt, NULL); &ms->client_msg_add_stmt, NULL);
if(rc) goto fail; if(rc) goto fail;

@ -296,7 +296,7 @@ static int client_msg_restore(struct mosquitto_sqlite *ms)
long count = 0, failed = 0; long count = 0, failed = 0;
rc = sqlite3_prepare_v2(ms->db, 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", "FROM client_msgs ORDER BY rowid",
-1, &stmt, NULL); -1, &stmt, NULL);
@ -308,13 +308,15 @@ static int client_msg_restore(struct mosquitto_sqlite *ms)
memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg));
while(sqlite3_step(stmt) == SQLITE_ROW){ while(sqlite3_step(stmt) == SQLITE_ROW){
msg.client_id = (const char *)sqlite3_column_text(stmt, 0); msg.client_id = (const char *)sqlite3_column_text(stmt, 0);
msg.store_id = (uint64_t)sqlite3_column_int64(stmt, 1); msg.cmsg_id = (uint64_t)sqlite3_column_int64(stmt, 1);
msg.dup = sqlite3_column_int(stmt, 2); msg.store_id = (uint64_t)sqlite3_column_int64(stmt, 2);
msg.direction = (uint8_t)sqlite3_column_int(stmt, 3); msg.dup = sqlite3_column_int(stmt, 3);
msg.mid = (uint16_t)sqlite3_column_int(stmt, 4); msg.direction = (uint8_t)sqlite3_column_int(stmt, 4);
msg.qos = (uint8_t)sqlite3_column_int(stmt, 5); msg.mid = (uint16_t)sqlite3_column_int(stmt, 5);
msg.retain = sqlite3_column_int(stmt, 6); msg.qos = (uint8_t)sqlite3_column_int(stmt, 6);
msg.state = (uint8_t)sqlite3_column_int(stmt, 7); 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); rc = mosquitto_persist_client_msg_add(&msg);
if(rc == MOSQ_ERR_SUCCESS){ if(rc == MOSQ_ERR_SUCCESS){

Loading…
Cancel
Save