diff options
author | Chris Xiong <chirs241097@gmail.com> | 2022-09-17 23:48:38 -0400 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2022-09-17 23:48:38 -0400 |
commit | 04f509fd948c03c8b8732ddb6787eea800bdc7f6 (patch) | |
tree | c82f4c00cd29f42b23066d8bb5123fa0b17a6e7b /signature_db.cpp | |
parent | c684f2433cfe65e93d6ff31ae82e98644964520b (diff) | |
download | deduper-04f509fd948c03c8b8732ddb6787eea800bdc7f6.tar.xz |
Finish similar image grouping.
Diffstat (limited to 'signature_db.cpp')
-rw-r--r-- | signature_db.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/signature_db.cpp b/signature_db.cpp index 71f2142..429581d 100644 --- a/signature_db.cpp +++ b/signature_db.cpp @@ -491,9 +491,42 @@ void signature_db::ds_merge(size_t id1, size_t id2) void signature_db::group_similar() { + ds_init(); + batch_ds_get_parent_begin(); + batch_ds_set_parent_begin(); + auto pairs = this->dupe_pairs(); + for (auto &p : pairs) + ds_merge(p.id1, p.id2); + batch_ds_get_parent_end(); + batch_ds_set_parent_end(); } std::vector<std::vector<size_t>> signature_db::groups_get() { - return {}; + sqlite3_stmt *sto = nullptr; + sqlite3_stmt *sti = nullptr; + sqlite3_prepare_v2(p->db, "select distinct parent from dspar;", -1, &sto, 0); + sqlite3_prepare_v2(p->db, "select id from dspar where parent = ?;", -1, &sti, 0); + std::vector<std::vector<size_t>> ret; + + while (1) + { + int r = sqlite3_step(sto); + if (r != SQLITE_ROW) break; + size_t dpar = (size_t)sqlite3_column_int(sto, 0); + sqlite3_bind_int(sti, 1, dpar); + std::vector<size_t> v; + while (1) + { + int ri = sqlite3_step(sti); + if (ri != SQLITE_ROW) break; + size_t id = (size_t)sqlite3_column_int(sti, 0); + v.push_back(id); + } + ret.push_back(v); + sqlite3_reset(sti); + } + sqlite3_finalize(sto); + sqlite3_finalize(sti); + return ret; } |