static void gmc_video_model_iter_get_value (ClutterModelIter *iter, guint column, GValue *value) { ClutterModel *model; GmcVideoModelPrivate *priv_model; gchar *query, *string_value, *tmp; guint row, uint_value, sort_column; sqlite3_stmt *statement; gint error_code; GType type; model = clutter_model_iter_get_model (iter); row = clutter_model_iter_get_row (iter); priv_model = GMC_VIDEO_MODEL_GET_PRIVATE (model); query = g_strdup_printf ("SELECT %s FROM %s", clutter_model_get_column_name (model, column), TABLE); sort_column = clutter_model_get_sorting_column (model); if (sort_column != -1) { tmp = g_strdup_printf ("%s ORDER BY %s", query, clutter_model_get_column_name (model, sort_column)); g_free (query); query = tmp; } tmp = g_strdup_printf ("%s LIMIT %d, 1", query, row); g_free (query); query = tmp; error_code = sqlite3_prepare_v2 (priv_model->sql, query, strlen (query), &statement, NULL); g_free (query); if (error_code != SQLITE_OK) { g_critical ("%s [prepare] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } error_code = sqlite3_step (statement); if (error_code != SQLITE_ROW) { g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } type = clutter_model_get_column_type (model, column); switch (type) { case G_TYPE_STRING: string_value = (gchar *) sqlite3_column_text (statement, 0); g_value_set_string (value, string_value); break; case G_TYPE_UINT: uint_value = sqlite3_column_int (statement, 0); g_value_set_uint (value, uint_value); break; } sqlite3_finalize (statement); }
static VALUE rbclt_model_get_column_name (VALUE self, VALUE column) { ClutterModel *model = CLUTTER_MODEL (RVAL2GOBJ (self)); const gchar *name; name = clutter_model_get_column_name (model, NUM2UINT (column)); return name ? rb_str_new2 (name) : Qnil; }
static void print_iter (ClutterModelIter *iter, const gchar *text) { ClutterModel *model; gint i; gchar *string; model = clutter_model_iter_get_model (iter); clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: %s: (%s: %d), (%s: %s)\n", clutter_model_iter_get_row (iter), text, clutter_model_get_column_name (model, COLUMN_FOO), i, clutter_model_get_column_name (model, COLUMN_BAR), string); g_free (string); }
static void gmc_video_model_iter_set_value (ClutterModelIter *iter, guint column, const GValue *value) { ClutterModel *model; GmcVideoModelPrivate *priv_model; const gchar *name; gchar *query, *str_value; sqlite3_stmt *statement; gint error_code; GType type; GValue title_value = {0, }; model = clutter_model_iter_get_model (iter); priv_model = GMC_VIDEO_MODEL_GET_PRIVATE (model); name = clutter_model_get_column_name (model, column); type = clutter_model_get_column_type (model, column); switch (type) { case G_TYPE_STRING: str_value = g_strdup (g_value_get_string (value)); break; case G_TYPE_UINT: str_value = g_strdup_printf ("%u", g_value_get_uint (value)); break; default: g_warning ("%s : Invalid type", G_STRFUNC); break; } clutter_model_iter_get_value (iter, 0, &title_value); query = g_strdup_printf ("UPDATE %s SET %s = '%s' WHERE Title = '%s'", TABLE, name, str_value, g_value_get_string (&title_value)); error_code = sqlite3_prepare_v2 (priv_model->sql, query, strlen (query), &statement, NULL); g_free (query); if (error_code != SQLITE_OK) { g_critical ("%s [prepare] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } error_code = sqlite3_step (statement); if (error_code != SQLITE_DONE) { g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } sqlite3_finalize (statement); }
static ClutterModelIter * gmc_video_model_get_iter_at_row (ClutterModel *model, guint row) { GmcVideoModelPrivate *priv; GmcVideoModelIter *iter; gchar *query, *tmp; gint column; sqlite3_stmt *statement; gint error_code; priv = GMC_VIDEO_MODEL_GET_PRIVATE (model); query = g_strdup_printf ("SELECT Title FROM %s", TABLE); column = clutter_model_get_sorting_column (model); if (column != -1) { tmp = g_strdup_printf ("%s ORDER BY %s", query, clutter_model_get_column_name (model, column)); g_free (query); query = tmp; } tmp = g_strdup_printf ("%s LIMIT %d, 1", query, row); g_free (query); query = tmp; error_code = sqlite3_prepare_v2 (priv->sql, query, strlen (query), &statement, NULL); g_free (query); if (error_code != SQLITE_OK) { g_critical ("%s [prepare] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv->sql)); return 0; } error_code = sqlite3_step (statement); if (error_code != SQLITE_ROW) { g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv->sql)); return 0; } sqlite3_finalize (statement); iter = g_object_new (GMC_TYPE_VIDEO_MODEL_ITER, "model", model, "row", row, NULL); return CLUTTER_MODEL_ITER (iter); }