42 const int img_group_id = img->
group_id;
62 int new_group_id = -1;
66 const int img_group_id = img->
group_id;
68 if(img_group_id == image_id)
72 "SELECT id FROM main.images WHERE group_id = ?1 AND id != ?2", -1, &stmt, NULL);
75 while(sqlite3_step(stmt) == SQLITE_ROW)
77 int other_id = sqlite3_column_int(stmt, 0);
78 if(new_group_id == -1) new_group_id = other_id;
82 imgs = g_list_prepend(imgs, GINT_TO_POINTER(other_id));
84 sqlite3_finalize(stmt);
85 if(new_group_id != -1)
88 "UPDATE main.images SET group_id = ?1 WHERE group_id = ?2 AND id != ?3", -1, &stmt,
94 sqlite3_finalize(stmt);
109 imgs = g_list_prepend(imgs, GINT_TO_POINTER(image_id));
111 imgs = g_list_prepend(imgs, GINT_TO_POINTER(img_group_id));
130 while(sqlite3_step(stmt) == SQLITE_ROW)
132 const int other_id = sqlite3_column_int(stmt, 0);
136 imgs = g_list_prepend(imgs, GINT_TO_POINTER(other_id));
138 sqlite3_finalize(stmt);
150 const int img_group_id = image->
group_id;
155 "SELECT id FROM main.images WHERE group_id = ?1", -1, &stmt, NULL);
158 while(sqlite3_step(stmt) == SQLITE_ROW)
160 const int32_t image_id = sqlite3_column_int(stmt, 0);
161 imgs = g_list_prepend(imgs, GINT_TO_POINTER(image_id));
163 sqlite3_finalize(stmt);
166 return g_list_reverse(imgs);
174 for(GList *imgs = *images; imgs; imgs = g_list_next(imgs))
179 const int img_group_id = image->
group_id;
185 gchar *query = g_strdup_printf(
188 " WHERE group_id = %d AND id IN (%s)",
193 while(sqlite3_step(stmt) == SQLITE_ROW)
195 const int32_t image_id = sqlite3_column_int(stmt, 0);
196 if(image_id != GPOINTER_TO_INT(imgs->data))
197 gimgs = g_list_prepend(gimgs, GINT_TO_POINTER(image_id));
199 sqlite3_finalize(stmt);
206 *images = g_list_concat(*images, g_list_reverse(gimgs));
const gchar * dt_collection_get_query(const dt_collection_t *collection)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
sqlite3 * dt_database_get(const dt_database_t *db)
#define DT_DEBUG_SQLITE3_PREPARE_V2(a, b, c, d, e)
#define DT_DEBUG_SQLITE3_BIND_INT(a, b, c)
int dt_grouping_change_representative(const int32_t image_id)
int dt_grouping_remove_from_group(const int32_t image_id)
int32_t dt_grouping_get_image_group(const int32_t image_id)
void dt_grouping_add_grouped_images(GList **images)
void dt_grouping_add_to_group(const int32_t group_id, const int32_t image_id)
GList * dt_grouping_get_group_images(const int32_t imgid)
void dt_image_cache_read_release(dt_image_cache_t *cache, const dt_image_t *img)
dt_image_t * dt_image_cache_get(dt_image_cache_t *cache, const int32_t imgid, char mode)
void dt_image_cache_write_release(dt_image_cache_t *cache, dt_image_t *img, dt_image_cache_write_mode_t mode)
struct dt_collection_t * collection
const struct dt_database_t * db
struct dt_image_cache_t * image_cache