static void compute_columns (GdaDataAccessWrapper *model) { if (model->priv->rows_mapping) { /* use model->priv->rows_mapping to create columns, and correct it if * needed to remove out of range columns */ gint *nmapping; gint i, j, nb_cols; g_assert (!model->priv->columns); nmapping = g_new (gint, model->priv->nb_cols); nb_cols = gda_data_model_get_n_columns (model->priv->model); for (i = 0, j = 0; i < model->priv->nb_cols; i++) { gint nb = model->priv->rows_mapping [i]; if (nb >= nb_cols) continue; GdaColumn *column; column = gda_data_model_describe_column (model->priv->model, nb); if (!column) continue; model->priv->columns = g_slist_append (model->priv->columns, gda_column_copy (column)); nmapping [j] = nb; j++; } model->priv->nb_cols = j; g_free (model->priv->rows_mapping); model->priv->rows_mapping = nmapping; } else model->priv->nb_cols = gda_data_model_get_n_columns (model->priv->model); }
/** * gda_pstmt_copy_contents: * @src: a #GdaPStmt object * @dest: a #GdaPStmt object * * Copies @src's data to @dest */ void gda_pstmt_copy_contents (GdaPStmt *src, GdaPStmt *dest) { GSList *list; g_return_if_fail (GDA_IS_PSTMT (src)); g_return_if_fail (GDA_IS_PSTMT (dest)); GdaPStmtPrivate *priv = gda_pstmt_get_instance_private (src); GdaPStmtPrivate *dpriv = gda_pstmt_get_instance_private (dest); g_rec_mutex_lock (& priv->mutex); g_rec_mutex_lock (& dpriv->mutex); g_free (dpriv->sql); dpriv->sql = NULL; if (priv->sql) dpriv->sql = g_strdup (priv->sql); if (dpriv->param_ids) { g_slist_free_full (dpriv->param_ids, (GDestroyNotify) g_free); dpriv->param_ids = NULL; } for (list = priv->param_ids; list; list = list->next) dpriv->param_ids = g_slist_append (dpriv->param_ids, g_strdup ((gchar *) list->data)); dpriv->ncols = priv->ncols; if (dpriv->types != NULL) { g_free (dpriv->types); } dpriv->types = NULL; if (priv->types) { dpriv->types = g_new (GType, dpriv->ncols); memcpy (dpriv->types, priv->types, sizeof (GType) * dpriv->ncols); /* Flawfinder: ignore */ } if (priv->tmpl_columns) { GSList *list; for (list = priv->tmpl_columns; list; list = list->next) dpriv->tmpl_columns = g_slist_append (dpriv->tmpl_columns, gda_column_copy (GDA_COLUMN (list->data))); } GdaStatement *stmt; stmt = g_weak_ref_get (& priv->gda_stmt_ref); if (stmt) { gda_pstmt_set_gda_statement (dest, stmt); g_object_unref (stmt); } g_rec_mutex_unlock (& priv->mutex); g_rec_mutex_unlock (& dpriv->mutex); }
/** * gda_pstmt_copy_contents: * @src: a #GdaPStmt object * @dest: a #GdaPStmt object * * Copies @src's data to @dest */ void gda_pstmt_copy_contents (GdaPStmt *src, GdaPStmt *dest) { GSList *list; g_return_if_fail (GDA_IS_PSTMT (src)); g_return_if_fail (GDA_IS_PSTMT (dest)); g_rec_mutex_lock (& src->priv->mutex); g_rec_mutex_lock (& dest->priv->mutex); g_free (dest->sql); dest->sql = NULL; if (src->sql) dest->sql = g_strdup (src->sql); if (dest->param_ids) { g_slist_foreach (dest->param_ids, (GFunc) g_free, NULL); g_slist_free (dest->param_ids); dest->param_ids = NULL; } for (list = src->param_ids; list; list = list->next) dest->param_ids = g_slist_append (dest->param_ids, g_strdup ((gchar *) list->data)); dest->ncols = src->ncols; g_free (dest->types); dest->types = NULL; if (src->types) { dest->types = g_new (GType, dest->ncols); memcpy (dest->types, src->types, sizeof (GType) * dest->ncols); /* Flawfinder: ignore */ } if (src->tmpl_columns) { GSList *list; for (list = src->tmpl_columns; list; list = list->next) dest->tmpl_columns = g_slist_append (dest->tmpl_columns, gda_column_copy (GDA_COLUMN (list->data))); } GdaStatement *stmt; stmt = g_weak_ref_get (& src->priv->gda_stmt_ref); if (stmt) { gda_pstmt_set_gda_statement (dest, stmt); g_object_unref (stmt); } g_rec_mutex_unlock (& src->priv->mutex); g_rec_mutex_unlock (& dest->priv->mutex); }