mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-28 07:26:01 +01:00
Implement document hash support for sqlite backend
This commit is contained in:
parent
75bab3f525
commit
eaa60ca37e
1 changed files with 23 additions and 10 deletions
|
@ -11,7 +11,7 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
/* version of the database layout */
|
/* version of the database layout */
|
||||||
#define DATABASE_VERSION 1
|
#define DATABASE_VERSION 2
|
||||||
|
|
||||||
static char*
|
static char*
|
||||||
sqlite3_column_text_dup(sqlite3_stmt* stmt, int col)
|
sqlite3_column_text_dup(sqlite3_stmt* stmt, int col)
|
||||||
|
@ -209,7 +209,8 @@ sqlite_db_check_layout(sqlite3* session, const int database_version, const bool
|
||||||
"position_x FLOAT,"
|
"position_x FLOAT,"
|
||||||
"position_y FLOAT,"
|
"position_y FLOAT,"
|
||||||
"time TIMESTAMP,"
|
"time TIMESTAMP,"
|
||||||
"page_right_to_left INTEGER"
|
"page_right_to_left INTEGER,"
|
||||||
|
"sha256 BLOB"
|
||||||
");";
|
");";
|
||||||
|
|
||||||
/* create history table */
|
/* create history table */
|
||||||
|
@ -248,6 +249,10 @@ sqlite_db_check_layout(sqlite3* session, const int database_version, const bool
|
||||||
static const char SQL_FILEINFO_ALTER5[] =
|
static const char SQL_FILEINFO_ALTER5[] =
|
||||||
"ALTER TABLE fileinfo ADD COLUMN page_right_to_left INTEGER;";
|
"ALTER TABLE fileinfo ADD COLUMN page_right_to_left INTEGER;";
|
||||||
|
|
||||||
|
/* update fileinfo table (part 6) */
|
||||||
|
static const char SQL_FILEINFO_ALTER6[] =
|
||||||
|
"ALTER TABLE fileinfo ADD COLUMN sha256 BLOB;";
|
||||||
|
|
||||||
/* update bookmark table */
|
/* update bookmark table */
|
||||||
static const char SQL_BOOKMARK_ALTER[] =
|
static const char SQL_BOOKMARK_ALTER[] =
|
||||||
"ALTER TABLE bookmarks ADD COLUMN hadj_ratio FLOAT;"
|
"ALTER TABLE bookmarks ADD COLUMN hadj_ratio FLOAT;"
|
||||||
|
@ -355,6 +360,12 @@ sqlite_db_check_layout(sqlite3* session, const int database_version, const bool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (database_version < 2) {
|
||||||
|
if (sqlite3_exec(session, SQL_FILEINFO_ALTER6, NULL, 0, NULL) != SQLITE_OK) {
|
||||||
|
girara_warning("failed to update database table layout: sha256");
|
||||||
|
all_updates_ok = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* update database version if all updates were successful */
|
/* update database version if all updates were successful */
|
||||||
if (all_updates_ok == true) {
|
if (all_updates_ok == true) {
|
||||||
|
@ -652,7 +663,7 @@ static bool
|
||||||
sqlite_set_fileinfo(zathura_database_t* db, const char* file, const uint8_t* hash_sha256,
|
sqlite_set_fileinfo(zathura_database_t* db, const char* file, const uint8_t* hash_sha256,
|
||||||
zathura_fileinfo_t* file_info)
|
zathura_fileinfo_t* file_info)
|
||||||
{
|
{
|
||||||
if (db == NULL || file == NULL || file_info == NULL) {
|
if (db == NULL || file == NULL || hash_sha256 == NULL || file_info == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,24 +671,25 @@ sqlite_set_fileinfo(zathura_database_t* db, const char* file, const uint8_t* has
|
||||||
ZathuraSQLDatabasePrivate* priv = zathura_sqldatabase_get_instance_private(sqldb);
|
ZathuraSQLDatabasePrivate* priv = zathura_sqldatabase_get_instance_private(sqldb);
|
||||||
|
|
||||||
static const char SQL_FILEINFO_SET[] =
|
static const char SQL_FILEINFO_SET[] =
|
||||||
"REPLACE INTO fileinfo (file, page, offset, zoom, rotation, pages_per_row, first_page_column, position_x, position_y, time, page_right_to_left) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now'), ?);";
|
"REPLACE INTO fileinfo (file, page, offset, zoom, rotation, pages_per_row, first_page_column, position_x, position_y, time, page_right_to_left, sha256) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, DATETIME('now'), ?, ?);";
|
||||||
|
|
||||||
sqlite3_stmt* stmt = prepare_statement(priv->session, SQL_FILEINFO_SET);
|
sqlite3_stmt* stmt = prepare_statement(priv->session, SQL_FILEINFO_SET);
|
||||||
if (stmt == NULL) {
|
if (stmt == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sqlite3_bind_text(stmt, 1, file, -1, NULL) != SQLITE_OK ||
|
if (sqlite3_bind_text(stmt, 1, file, -1, SQLITE_STATIC) != SQLITE_OK ||
|
||||||
sqlite3_bind_int(stmt, 2, file_info->current_page) != SQLITE_OK ||
|
sqlite3_bind_int(stmt, 2, file_info->current_page) != SQLITE_OK ||
|
||||||
sqlite3_bind_int(stmt, 3, file_info->page_offset) != SQLITE_OK ||
|
sqlite3_bind_int(stmt, 3, file_info->page_offset) != SQLITE_OK ||
|
||||||
sqlite3_bind_double(stmt, 4, file_info->zoom) != SQLITE_OK ||
|
sqlite3_bind_double(stmt, 4, file_info->zoom) != SQLITE_OK ||
|
||||||
sqlite3_bind_int(stmt, 5, file_info->rotation) != SQLITE_OK ||
|
sqlite3_bind_int(stmt, 5, file_info->rotation) != SQLITE_OK ||
|
||||||
sqlite3_bind_int(stmt, 6, file_info->pages_per_row) != SQLITE_OK ||
|
sqlite3_bind_int(stmt, 6, file_info->pages_per_row) != SQLITE_OK ||
|
||||||
sqlite3_bind_text(stmt, 7, file_info->first_page_column_list, -1, NULL)
|
sqlite3_bind_text(stmt, 7, file_info->first_page_column_list, -1, SQLITE_STATIC)
|
||||||
!= SQLITE_OK ||
|
!= SQLITE_OK ||
|
||||||
sqlite3_bind_double(stmt, 8, file_info->position_x) != SQLITE_OK ||
|
sqlite3_bind_double(stmt, 8, file_info->position_x) != SQLITE_OK ||
|
||||||
sqlite3_bind_double(stmt, 9, file_info->position_y) != SQLITE_OK ||
|
sqlite3_bind_double(stmt, 9, file_info->position_y) != SQLITE_OK ||
|
||||||
sqlite3_bind_int(stmt, 10, file_info->page_right_to_left) != SQLITE_OK) {
|
sqlite3_bind_int(stmt, 10, file_info->page_right_to_left) != SQLITE_OK ||
|
||||||
|
sqlite3_bind_blob(stmt, 11, hash_sha256, 32, SQLITE_STATIC) != SQLITE_OK) {
|
||||||
sqlite3_finalize(stmt);
|
sqlite3_finalize(stmt);
|
||||||
girara_error("Failed to bind arguments.");
|
girara_error("Failed to bind arguments.");
|
||||||
return false;
|
return false;
|
||||||
|
@ -693,7 +705,7 @@ static bool
|
||||||
sqlite_get_fileinfo(zathura_database_t* db, const char* file, const uint8_t* hash_sha256,
|
sqlite_get_fileinfo(zathura_database_t* db, const char* file, const uint8_t* hash_sha256,
|
||||||
zathura_fileinfo_t* file_info)
|
zathura_fileinfo_t* file_info)
|
||||||
{
|
{
|
||||||
if (db == NULL || file == NULL || file_info == NULL) {
|
if (db == NULL || file == NULL || hash_sha256 == NULL || file_info == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,14 +713,15 @@ sqlite_get_fileinfo(zathura_database_t* db, const char* file, const uint8_t* has
|
||||||
ZathuraSQLDatabasePrivate* priv = zathura_sqldatabase_get_instance_private(sqldb);
|
ZathuraSQLDatabasePrivate* priv = zathura_sqldatabase_get_instance_private(sqldb);
|
||||||
|
|
||||||
static const char SQL_FILEINFO_GET[] =
|
static const char SQL_FILEINFO_GET[] =
|
||||||
"SELECT page, offset, zoom, rotation, pages_per_row, first_page_column, position_x, position_y, page_right_to_left FROM fileinfo WHERE file = ?;";
|
"SELECT page, offset, zoom, rotation, pages_per_row, first_page_column, position_x, position_y, page_right_to_left FROM fileinfo WHERE file = ? OR sha256 = ? ORDER BY time DESC LIMIT 1;";
|
||||||
|
|
||||||
sqlite3_stmt* stmt = prepare_statement(priv->session, SQL_FILEINFO_GET);
|
sqlite3_stmt* stmt = prepare_statement(priv->session, SQL_FILEINFO_GET);
|
||||||
if (stmt == NULL) {
|
if (stmt == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sqlite3_bind_text(stmt, 1, file, -1, NULL) != SQLITE_OK) {
|
if (sqlite3_bind_text(stmt, 1, file, -1, SQLITE_STATIC) != SQLITE_OK ||
|
||||||
|
sqlite3_bind_blob(stmt, 2, hash_sha256, 32, SQLITE_STATIC) != SQLITE_OK) {
|
||||||
sqlite3_finalize(stmt);
|
sqlite3_finalize(stmt);
|
||||||
girara_error("Failed to bind arguments.");
|
girara_error("Failed to bind arguments.");
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue