/* * assign_parameters_values * * Tries to assign a value for each parameter in @plist, from the context * * Returns: TRUE on success */ static gboolean assign_parameters_values (GdaReportEngine *engine, RunContext *context, GdaSet *plist, GError **error) { if (plist) { GSList *list; for (list = plist->holders; list; list = list->next) { GdaHolder *source_param; source_param = run_context_find_param (engine, context, BAD_CAST gda_holder_get_id (GDA_HOLDER (list->data))); if (!source_param) { g_set_error (error, 0, 0, _("Unknown parameter '%s'"), gda_holder_get_id (GDA_HOLDER (list->data))); return FALSE; } gda_holder_set_not_null (GDA_HOLDER (list->data), FALSE); GType ptype, source_ptype; ptype = gda_holder_get_g_type (GDA_HOLDER (list->data)); source_ptype = gda_holder_get_g_type (source_param); if (ptype == source_ptype) { if (! gda_holder_set_bind (GDA_HOLDER (list->data), source_param, error)) return FALSE; } else { const GValue *source_value; source_value = gda_holder_get_value (source_param); if (source_value && !gda_value_is_null (source_value)) { GValue *trans; trans = gda_value_new (ptype); if (g_value_transform (source_value, trans)) { if (! gda_holder_set_value (GDA_HOLDER (list->data), trans, error)) { gda_value_free (trans); return FALSE; } gda_value_free (trans); } else { gda_value_free (trans); g_set_error (error, 0, 0, _("Cannot cast parameter from type '%s' to type '%s'"), g_type_name (source_ptype), g_type_name (ptype)); return FALSE; } } else if (! gda_holder_set_value (GDA_HOLDER (list->data), NULL, error)) return FALSE; } } } return TRUE; }
static gchar * params_to_string (GdauiProviderAuthEditor *auth) { GString *string = NULL; gchar *str; GdaSet *dset; GSList *list; g_assert (auth->priv->auth_widget); if (! GDAUI_IS_BASIC_FORM (auth->priv->auth_widget)) return NULL; dset = gdaui_basic_form_get_data_set (GDAUI_BASIC_FORM (auth->priv->auth_widget)); for (list = dset->holders; list; list = list->next) { GdaHolder *param = GDA_HOLDER (list->data); if (gda_holder_is_valid (param)) { const GValue *value; value = gda_holder_get_value (param); str = NULL; if (value && !gda_value_is_null ((GValue *) value)) { GdaDataHandler *dh; GType dtype; dtype = gda_holder_get_g_type (param); dh = gda_data_handler_get_default (dtype); str = gda_data_handler_get_str_from_value (dh, value); } if (str && *str) { gchar *name; gchar *ename, *evalue; if (!string) string = g_string_new (""); else g_string_append_c (string, ';'); g_object_get (G_OBJECT (list->data), "id", &name, NULL); ename = gda_rfc1738_encode (name); evalue = gda_rfc1738_encode (str); g_string_append_printf (string, "%s=%s", ename, evalue); g_free (ename); g_free (evalue); } g_free (str); } } str = string ? string->str : NULL; if (string) g_string_free (string, FALSE); return str; }
static void dump_iter (GdaDataModelIter *iter) { GdaSet *set; GSList *list; set = GDA_SET (iter); g_print ("Dump of GdaDataModelIter %p, @row %d\n", set, gda_data_model_iter_get_row (iter)); for (list = set->holders; list; list = list->next) { GdaHolder *h = GDA_HOLDER (list->data); gchar *str; const GValue *cvalue; cvalue = gda_holder_get_value (h); str = gda_value_stringify (cvalue); g_print (" [%s] type: %s value:[%s]\n", gda_holder_get_id (h), gda_g_type_to_string (gda_holder_get_g_type (h)), str); g_free (str); } }
static gboolean rewrite_statement_foreach_func (GdaSqlAnyPart *node, ForeachData *fdata, GError **error) { GdaSqlParamSpec *pspec; if (!node) return TRUE; if ((node->type == GDA_SQL_ANY_EXPR) && (pspec = ((GdaSqlExpr*) node)->param_spec)) { if (pspec->g_type != GDA_TYPE_NULL) return TRUE; GdaHolder *source_param; source_param = run_context_find_param (fdata->engine, fdata->context, BAD_CAST pspec->name); if (!source_param) { g_set_error (error, 0, 0, _("Unknown parameter '%s'"), pspec->name); return FALSE; } pspec->g_type = gda_holder_get_g_type (source_param); } return TRUE; }
static gboolean compare_iter (GdaDataModelIter *iter, gint exp_row, const gchar **col_ids, const gchar **col_types, const gchar **col_values) { GdaSet *set; GSList *list; gint i; set = GDA_SET (iter); if (gda_data_model_iter_get_row (iter) != exp_row) { g_print ("Iter is at wrong row: got %d and expected %d\n", gda_data_model_iter_get_row (iter), exp_row); return FALSE; } if (!col_ids) return TRUE; for (i = 0, list = set->holders; col_ids[i] && list; i++, list = list->next) { GdaHolder *h = GDA_HOLDER (list->data); gchar *str; const GValue *cvalue; if (strcmp (col_ids[i], gda_holder_get_id (h))) { g_print ("Wrong column %d ID: got [%s] and expected [%s]\n", i, gda_holder_get_id (h), col_ids[i]); return FALSE; } if (strcmp (col_types[i], gda_g_type_to_string (gda_holder_get_g_type (h)))) { g_print ("Wrong column %d type: got [%s] and expected [%s]\n", i, gda_g_type_to_string (gda_holder_get_g_type (h)), col_types[i]); return FALSE; } cvalue = gda_holder_get_value (h); str = gda_value_stringify (cvalue); if (strcmp (col_values[i], str)) { g_print ("Wrong column %d value: got [%s] and expected [%s]\n", i, str, col_values[i]); g_free (str); return FALSE; } g_free (str); } if (col_ids[i]) { g_print ("Missing at least the [%s] column %d\n", col_ids[i], i); return FALSE; } if (list) { GdaHolder *h = GDA_HOLDER (list->data); g_print ("Too much columns, at least [%s] column %d\n", gda_holder_get_id (h), i); return FALSE; } return TRUE; }
gchar * tests_common_holder_serialize (GdaHolder *h) { GString *string; gchar *str, *json; const GValue *value; string = g_string_new ("{"); g_string_append (string, "\"type\":"); g_string_append_printf (string, "\"%s\"", g_type_name (gda_holder_get_g_type (h))); g_string_append (string, ",\"id\":"); json = _json_quote_string (gda_holder_get_id (h)); g_string_append (string, json); g_free (json); g_object_get (G_OBJECT (h), "name", &str, NULL); if (str) { g_string_append (string, ",\"name\":"); json = _json_quote_string (str); g_string_append (string, json); g_free (json); g_free (str); } g_object_get (G_OBJECT (h), "description", &str, NULL); if (str) { g_string_append (string, ",\"descr\":"); json = _json_quote_string (str); g_string_append (string, json); g_free (json); g_free (str); } g_string_append (string, ",\"value\":"); value = gda_holder_get_value (h); str = gda_value_stringify (value); json = _json_quote_string (str); g_free (str); g_string_append (string, json); g_free (json); g_string_append (string, ",\"default_value\":"); value = gda_holder_get_default_value (h); str = gda_value_stringify (value); json = _json_quote_string (str); g_free (str); g_string_append (string, json); g_free (json); g_string_append (string, ",\"is_default\":"); g_string_append_printf (string, gda_holder_value_is_default (h) ? "\"TRUE\"" : "\"FALSE\""); g_string_append (string, ",\"is_valid\":"); g_string_append_printf (string, gda_holder_is_valid (h) ? "\"TRUE\"" : "\"FALSE\""); g_string_append (string, ",\"not_null\":"); g_string_append_printf (string, gda_holder_get_not_null (h) ? "\"TRUE\"" : "\"FALSE\""); g_string_append_c (string, '}'); str = string->str; g_string_free (string, FALSE); return str; }
/** * gda_batch_get_parameters: * @batch: a #GdaBatch object * @out_params: (out) (transfer full) (allow-none): a place to store a new #GdaSet object, or %NULL * @error: a place to store errors, or %NULL * * Get a new #GdaSet object which groups all the execution parameters * which @batch needs for all the statements it includes. * This new object is returned though @out_params. * * Note that if @batch does not need any parameter, then @out_params is set to %NULL. * * Returns: TRUE if no error occurred. */ gboolean gda_batch_get_parameters (GdaBatch *batch, GdaSet **out_params, GError **error) { GdaSet *set = NULL; GSList *list; g_return_val_if_fail (GDA_IS_BATCH (batch), FALSE); g_return_val_if_fail (batch->priv, FALSE); if (out_params) *out_params = NULL; if (!batch->priv->statements) return TRUE; for (list = batch->priv->statements; list; list = list->next) { GdaSet *tmpset = NULL; if (!gda_statement_get_parameters (GDA_STATEMENT (list->data), out_params ? &tmpset : NULL, error)) { if (tmpset) g_object_unref (tmpset); if (set) g_object_unref (set); return FALSE; } if (tmpset && tmpset->holders) { if (!set) { set = tmpset; tmpset = NULL; } else { /* merge @set and @tmp_set */ GSList *holders; for (holders = tmpset->holders; holders; holders = holders->next) { GdaHolder *holder = (GdaHolder *) holders->data; if (! gda_set_add_holder (set, holder)) { GdaHolder *eholder = gda_set_get_holder (set, gda_holder_get_id (holder)); if (!eholder || (gda_holder_get_g_type (eholder) != (gda_holder_get_g_type (holder)))) { /* error */ g_set_error (error, GDA_BATCH_ERROR, GDA_BATCH_CONFLICTING_PARAMETER_ERROR, _("Conflicting parameter '%s'"), gda_holder_get_id (holder)); g_object_unref (tmpset); g_object_unref (set); return FALSE; } } } } } if (tmpset) g_object_unref (tmpset); } if (set) { if (out_params) *out_params = set; else g_object_unref (set); } return TRUE; }