From 9698ea0c37fda34e65813fdacde972a2bcc9c5a6 Mon Sep 17 00:00:00 2001 From: simon987 Date: Tue, 26 Sep 2023 19:51:17 -0400 Subject: [PATCH] Fix #419 --- src/database/database.c | 47 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/database/database.c b/src/database/database.c index 62e409d..30a8c42 100644 --- a/src/database/database.c +++ b/src/database/database.c @@ -516,32 +516,31 @@ database_iterator_t *database_create_document_iterator(database_t *db) { CRASH_IF_NOT_SQLITE_OK( sqlite3_prepare_v2( db->db, - "WITH doc (j) AS (SELECT CASE" - " WHEN emb.embedding IS NULL THEN" - " json_set(document.json_data, " - " '$._id', document.id, " - " '$.size', document.size, " - " '$.mtime', document.mtime, " - " '$.mime', mim.name," - " '$.thumbnail', document.thumbnail_count, " - " '$.tag', json_group_array((SELECT tag FROM tag WHERE document.id = tag.id)))" - " ELSE" - " json_set(document.json_data," - " '$._id', document.id," - " '$.size', document.size," - " '$.mtime', document.mtime," - " '$.mime', mim.name," - " '$.thumbnail', document.thumbnail_count, " - " '$.tag', json_group_array((SELECT tag FROM tag WHERE document.id = tag.id))," - " '$.emb', json_group_object(m.path, json(emb_to_json(emb.embedding)))," - " '$.embedding', 1)" - " END" + "WITH doc (id, j) AS (" + "SELECT" + " document.id," + " json_set(document.json_data," + " '$._id', document.id," + " '$.index', (SELECT id FROM descriptor)," + " '$.size', document.size," + " '$.mtime', document.mtime," + " '$.mime', mim.name," + " '$.thumbnail', document.thumbnail_count," + " '$.tag', json_group_array(t.tag))" " FROM document" - " LEFT JOIN embedding emb ON document.id = emb.id" - " LEFT JOIN model m ON emb.model_id = m.id" - " LEFT JOIN mime mim ON mim.id = document.mime" + " LEFT JOIN mime mim ON mim.id = document.mime" + " LEFT JOIN tag t ON t.id = document.id" " GROUP BY document.id)" - " SELECT json_set(j, '$.index', (SELECT id FROM descriptor)) FROM doc", + "SELECT CASE" + " WHEN emb.embedding IS NULL THEN j" + " ELSE json_set(j," + " '$.emb', json_group_object(m.path, json(emb_to_json(emb.embedding)))," + " '$.embedding', 1" + " ) END" + " FROM doc" + " LEFT JOIN embedding emb ON doc.id = emb.id" + " LEFT JOIN model m ON emb.model_id = m.id" + " GROUP BY doc.id", -1, &stmt, NULL)); database_iterator_t *iter = malloc(sizeof(database_iterator_t));