aboutsummaryrefslogtreecommitdiff
path: root/src/database_interaction.c
diff options
context:
space:
mode:
authorThorsten Töpper <atsutane@freethoughts.de>2026-02-28 22:01:40 +0100
committerThorsten Töpper <atsutane@freethoughts.de>2026-02-28 22:01:40 +0100
commit55d4d6adc4c7e9e849229b24bcf75910d548ff44 (patch)
tree92afe71ad6a0fe19c0b176e6f2a4f2a1a0043b2e /src/database_interaction.c
parent819779a68bc6da0c3d298efe52e3b1ca0d2e66cf (diff)
downloadduplicate_finder-55d4d6adc4c7e9e849229b24bcf75910d548ff44.tar.gz
duplicate_finder-55d4d6adc4c7e9e849229b24bcf75910d548ff44.tar.bz2
dump: fullpath and fileinfos
Diffstat (limited to 'src/database_interaction.c')
-rw-r--r--src/database_interaction.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/database_interaction.c b/src/database_interaction.c
index 3acc81c..2b5a3f8 100644
--- a/src/database_interaction.c
+++ b/src/database_interaction.c
@@ -74,6 +74,8 @@ sqlite3_stmt *select_filename_by_id,
*select_fileinfo_complete_table,
*select_fileinfo_complete_table_resolved;
+sqlite3_stmt *select_full_path;
+
sqlite3_stmt *insert_filename,
*insert_pathname,
*insert_hashes,
@@ -159,6 +161,7 @@ void dbi_close() {
LOCAL_FINALIZE(select_fileinfo_complete_table);
LOCAL_FINALIZE(select_fileinfo_complete_table_resolved);
+ LOCAL_FINALIZE(select_full_path);
LOCAL_FINALIZE(insert_filename);
LOCAL_FINALIZE(insert_pathname);
LOCAL_FINALIZE(insert_hashes);
@@ -260,6 +263,7 @@ int prepare_statements() {
LOCAL_PREP_STMT("SELECT paths.pathname, filenames.name, hashes.blake2, hashes.sha256, hashes.sha512, fileinfo.size, fileinfo.last_seen, fileinfo.stat_struct FROM fileinfo INNER JOIN paths ON fileinfo.p_id = paths.id INNER JOIN filenames ON fileinfo.fn_id = filenames.id INNER JOIN hashes ON fileinfo.h_id = hashes.id WHERE fileinfo.fn_id = ?;", &select_fileinfo_by_filename_id_resolved);
LOCAL_PREP_STMT("SELECT p_id, fn_id, h_id, size, last_seen, stat_struct FROM fileinfo ;", &select_fileinfo_complete_table);
+ LOCAL_PREP_STMT("SELECT paths.pathname, filenames.name FROM fileinfo INNER JOIN paths ON fileinfo.p_id = paths.id INNER JOIN filenames ON fileinfo.fn_id = filenames.id ;", &select_full_path);
/* INSERT */
LOCAL_PREP_STMT("INSERT INTO filenames (name) VALUES (?);", &insert_filename);
@@ -1281,7 +1285,44 @@ int dbi_print_identical_filenames(FILE *out) {
return rc;
}
+int dbi_print_fullpaths(FILE *out) {
+ int rc = 0;
+ int strc = 0;
+ FILE *fd = out;
+ const unsigned char *txt = NULL;
+ sqlite3_stmt *st = select_full_path;
+
+ DBCONN_CHECK(-1);
+
+ if (fd == NULL) { fd = stdout; }
+ sqlite3_clear_bindings(st);
+ sqlite3_reset(st);
+ do {
+ strc = sqlite3_step(st);
+
+ if (strc == SQLITE_DONE) {
+ break;
+ }
+
+ if (strc != SQLITE_ROW) {
+ LOGERR("ERROR: Failed step to get fileinfo content: %s\n", sqlite3_errmsg(dbconn));
+ return -1; /* drop-it */
+ }
+
+ txt = sqlite3_column_text(st, 0); /* paths.pathname */
+ fprintf(fd, "%s/", txt);
+ txt = sqlite3_column_text(st, 1); /* filenames.name */
+ fprintf(fd, "%s\n", txt);
+ } while (strc == SQLITE_ROW);
+
+
+ sqlite3_clear_bindings(st);
+ sqlite3_reset(st);
+
+ return rc;
+
+}
#if 0
*select_fileinfo_by_id,