aboutsummaryrefslogtreecommitdiff
path: root/signature_db.cpp
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2022-09-17 23:48:38 -0400
committerGravatar Chris Xiong <chirs241097@gmail.com> 2022-09-17 23:48:38 -0400
commit04f509fd948c03c8b8732ddb6787eea800bdc7f6 (patch)
treec82f4c00cd29f42b23066d8bb5123fa0b17a6e7b /signature_db.cpp
parentc684f2433cfe65e93d6ff31ae82e98644964520b (diff)
downloaddeduper-04f509fd948c03c8b8732ddb6787eea800bdc7f6.tar.xz
Finish similar image grouping.
Diffstat (limited to 'signature_db.cpp')
-rw-r--r--signature_db.cpp35
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;
}