Ejemplo n.º 1
0
static void
fetch_execute_result (GdaConnection *cnc, guint task_id)
{
	GObject *result;
	GError *error = NULL;
	gint i;
	for (i = 0; i < 10; i++) {
		g_print ("=========== Waiting for task %u\n", task_id);
		result = gda_connection_async_fetch_result (cnc, task_id, NULL, &error);
		if (result) {
			if (GDA_IS_DATA_MODEL (result))
				gda_data_model_dump (GDA_DATA_MODEL (result), NULL);
			else
				g_print ("Unknown result: %s\n", G_OBJECT_TYPE_NAME (result));
			g_object_unref (result);
			return;
		}
		else if (error) {
			if (error && (error->domain == GDA_CONNECTION_ERROR) &&
			    (error->code == GDA_CONNECTION_TASK_NOT_FOUND_ERROR))
				g_print ("Task not found error: %s\n", error->message);
			else
				g_print ("Execution failed: %s\n", error->message ? error->message : "No detail");
			return;
		}
		else {
			g_print ("Not yet executed...\n");
			g_usleep (100000);
		}
	}
}
static void
gda_data_meta_wrapper_set_property (GObject *object,
				      guint param_id,
				      const GValue *value,
				      GParamSpec *pspec)
{
	GdaDataMetaWrapper *model;

	model = GDA_DATA_META_WRAPPER (object);
	if (model->priv) {
		switch (param_id) {
		case PROP_MODEL: {
			GdaDataModel *mod = g_value_get_object(value);
			if (mod) {
				g_return_if_fail (GDA_IS_DATA_MODEL (mod));
				if (! (gda_data_model_get_access_flags (mod) & GDA_DATA_MODEL_ACCESS_RANDOM)) {
					g_warning ("Internal implementation error: data model does not support random access");
					return;
				}
  
                                if (model->priv->model)
					g_object_unref (model->priv->model);

				model->priv->model = mod;
				g_object_ref (mod);
				model->priv->nb_cols = gda_data_model_get_n_columns (mod);
			}
			break;
		}
		default:
			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
			break;
		}
	}
}
Ejemplo n.º 3
0
static gboolean
exec_statement (GdaConnection *cnc, GdaStatement *stmt, GdaSet *plist, GError **error)
{
	GObject *exec_res;
	exec_res = gda_connection_statement_execute (cnc, stmt, plist, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error);
	if (!exec_res)
		return FALSE;
	
	if (GDA_IS_DATA_MODEL (exec_res)) {
		g_print ("Query returned a GdaDataModel...\n");
		gda_data_model_dump ((GdaDataModel*) exec_res, stdout);
	}
	else {
		if (GDA_IS_SET (exec_res)) {
			GSList *list;

			g_print ("Query returned a GdaSet:\n");
			for (list = GDA_SET (exec_res)->holders; list; list = list->next) {
				gchar *str;
				str = gda_holder_get_value_str (GDA_HOLDER (list->data), NULL);
				g_print (" %s => %s\n", gda_holder_get_id (GDA_HOLDER (list->data)), str);
				g_free (str);
			}
					 
		}
		else
			g_print ("Query returned a %s object\n", G_OBJECT_TYPE_NAME (exec_res));
	}

	return TRUE;
}
/**
 * gda_data_meta_wrapper_new:
 * @model: a #GdaDataModel
 *
 * Creates a new #GdaDataModel object which buffers the rows of @model. This object is useful
 * only if @model can only be metaed using cursor based method.
 *
 * Returns: a pointer to the newly created #GdaDataModel.
 */
GdaDataModel *
_gda_data_meta_wrapper_new (GdaDataModel *model, gboolean reusable, gint *cols,
			    gint size, GdaSqlIdentifierStyle mode,
			    GdaSqlReservedKeywordsFunc reserved_keyword_func)
{
	GdaDataMetaWrapper *retmodel;

	g_return_val_if_fail (GDA_IS_DATA_MODEL (model), NULL);
	
	retmodel = g_object_new (GDA_TYPE_DATA_META_WRAPPER,
				 "model", model, NULL);
			      
	retmodel->priv->cols_to_wrap = g_new (gint, size);
	memcpy (retmodel->priv->cols_to_wrap, cols, sizeof (gint) * size); /* Flawfinder: ignore */
	retmodel->priv->cols_to_wrap_size = size;
	retmodel->priv->mode = mode;
	retmodel->priv->reserved_keyword_func = reserved_keyword_func;
	
	if (reusable)
		retmodel->priv->computed_rows = g_hash_table_new_full (g_int_hash, g_int_equal,
								       NULL, (GDestroyNotify) comp_row_free);
	else {
		retmodel->priv->buffer = g_new0 (CompRow, 1);
		retmodel->priv->buffer->size = size;
		retmodel->priv->buffer->values = g_new0 (GValue *, size);
	}

	return GDA_DATA_MODEL (retmodel);
}
Ejemplo n.º 5
0
/**
 * ui_formgrid_new
 * @model: a #GdaDataModel
 * @scroll_form: set to %TRUE to wrap the embedded form in a scrolled window
 * @flags: the #GdauiDataProxyInfoFlag, specifying what to display in the new widget
 *
 * Creates a new #UiFormGrid widget suitable to display the data in @model
 *
 *  Returns: the new widget
 */
GtkWidget *
ui_formgrid_new (GdaDataModel *model, gboolean scroll_form, GdauiDataProxyInfoFlag flags)
{
	UiFormGrid *formgrid;
	GdaDataProxy *proxy;

	g_return_val_if_fail (!model || GDA_IS_DATA_MODEL (model), NULL);

	formgrid = (UiFormGrid *) g_object_new (UI_TYPE_FORMGRID, "scroll-form", scroll_form, NULL);
	formgrid->priv->flags = flags;

	/* a raw form and a raw grid for the same proxy */
	g_object_set (formgrid->priv->raw_grid, "model", model, NULL);
	proxy = gdaui_data_proxy_get_proxy (GDAUI_DATA_PROXY (formgrid->priv->raw_grid));
	g_object_set (formgrid->priv->raw_form, "model", proxy, NULL);
	gdaui_data_proxy_set_write_mode (GDAUI_DATA_PROXY (formgrid->priv->raw_form),
					 GDAUI_DATA_PROXY_WRITE_ON_DEMAND);
	g_object_set (G_OBJECT (formgrid->priv->info),
		      "flags", formgrid->priv->flags | GRID_FLAGS, NULL);

	g_signal_connect (formgrid->priv->raw_grid, "proxy-changed",
			  G_CALLBACK (proxy_changed_cb), formgrid);

	/* no more than 300 rows at a time */
	if (model) {
		gda_data_proxy_set_sample_size (proxy, 300);
		if (flags & GDAUI_DATA_PROXY_INFO_ROW_MODIFY_BUTTONS)
			g_object_set (G_OBJECT (formgrid), "compute-mod-statements", TRUE, NULL);
	}


	return (GtkWidget *) formgrid;
}
Ejemplo n.º 6
0
static void
gda_data_access_wrapper_set_property (GObject *object,
				      guint param_id,
				      const GValue *value,
				      GParamSpec *pspec)
{
	GdaDataAccessWrapper *model;

	model = GDA_DATA_ACCESS_WRAPPER (object);
	if (model->priv) {
		switch (param_id) {
		case PROP_MODEL: {
			GdaDataModel *mod = g_value_get_object (value);
			if (mod) {
				g_return_if_fail (GDA_IS_DATA_MODEL (mod));
				model->priv->model_access_flags = gda_data_model_get_access_flags (mod);

				if (model->priv->model_access_flags & GDA_DATA_MODEL_ACCESS_RANDOM) {
					g_signal_connect (G_OBJECT (mod), "row-inserted",
							  G_CALLBACK (model_row_inserted_cb), model);
					g_signal_connect (G_OBJECT (mod), "row-updated",
							  G_CALLBACK (model_row_updated_cb), model);
					g_signal_connect (G_OBJECT (mod), "row-removed",
							  G_CALLBACK (model_row_removed_cb), model);
					g_signal_connect (G_OBJECT (mod), "reset",
							  G_CALLBACK (model_reset_cb), model);
				}
				else {
					model->priv->iter = gda_data_model_create_iter (mod);
					g_return_if_fail (model->priv->iter);
					g_object_set (model->priv->iter, "validate-changes", FALSE,
						      NULL);
					g_signal_connect (G_OBJECT (model->priv->iter), "row-changed",
							  G_CALLBACK (iter_row_changed_cb), model);
					g_signal_connect (G_OBJECT (model->priv->iter), "end-of-data",
							  G_CALLBACK (iter_end_of_data_cb), model);
					model->priv->iter_row = -1; /* because model->priv->iter is invalid */
					model->priv->rows = g_hash_table_new_full (g_int_hash, g_int_equal,
										   g_free,
										   (GDestroyNotify) g_object_unref);
				}
  
                                if (model->priv->model)
					g_object_unref (model->priv->model);

				model->priv->model = mod;
				g_object_ref (mod);

				compute_columns (model);
			}
			break;
		}
		default:
			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
			break;
		}
	}
}
Ejemplo n.º 7
0
/**
 * gdaui_data_selector_set_model:
 * @iface: an object which implements the #GdauiDataSelector interface
 * @model: a #GdaDataModel to use
 *
 * Sets the data model from which the data being displayed are. Also see gdaui_data_selector_get_model()
 *
 * Since: 4.2
 */
void
gdaui_data_selector_set_model (GdauiDataSelector *iface, GdaDataModel *model)
{
	g_return_if_fail (GDAUI_IS_DATA_SELECTOR (iface));
	g_return_if_fail (!model || GDA_IS_DATA_MODEL (model));
	
	if (GDAUI_DATA_SELECTOR_GET_IFACE (iface)->set_model)
		(GDAUI_DATA_SELECTOR_GET_IFACE (iface)->set_model) (iface, model);
}
Ejemplo n.º 8
0
void
dsn_config_delete (GtkWidget *dsn)
{
	DsnConfigPrivate *priv;
	GtkTreeSelection *sel;
	GList *list, *sel_rows;
	GList *sel_dsn = NULL;
	GdaDataModel *model;

	priv = g_object_get_data (G_OBJECT (dsn), DSN_CONFIG_DATA);

	sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->dsn_list));
	sel_rows = gtk_tree_selection_get_selected_rows (sel, NULL);
	model = gdaui_data_selector_get_model (GDAUI_DATA_SELECTOR (priv->dsn_list));
	g_assert (GDA_IS_DATA_MODEL (model));

	/* make a list of DSN to remove */
	for (list = sel_rows; list; list = list->next) {
		gchar *dsn;
		gint *row;
		const GValue *cvalue;
		
		row = gtk_tree_path_get_indices ((GtkTreePath *) list->data);
		cvalue = gda_data_model_get_value_at (model, 0, *row, NULL);
		if (cvalue) {
			dsn = gda_value_stringify ((GValue *) cvalue);
			sel_dsn = g_list_prepend (sel_dsn, dsn);
		}
		gtk_tree_path_free ((GtkTreePath *) list->data);
	}
	g_list_free (sel_rows);

	/* actually remove the DSN listed */
	for (list = sel_dsn; list; list = list->next) {
		gchar *str, *dsn;
		GtkWidget *dialog;
		dsn = (gchar *) list->data;

		str = g_strdup_printf (_("Are you sure you want to remove the data source '%s'?"), dsn);
		dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (gtk_widget_get_toplevel (priv->dsn_list)),
							     GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
							     GTK_BUTTONS_YES_NO, 
							     "<b>%s:</b>\n\n%s",
							     _("Data source removal confirmation"), str);
		g_free (str);
		gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_NO);
		gtk_widget_show (dialog);
		
		if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) 
			gda_config_remove_dsn (dsn, NULL);
		gtk_widget_destroy (dialog);
		
		g_free (dsn);
	}
}
Ejemplo n.º 9
0
/**
 * gda_data_access_wrapper_new:
 * @model: a #GdaDataModel
 *
 * Creates a new #GdaDataModel object which buffers the rows of @model. This object is useful
 * only if @model can only be accessed using cursor based method.
 *
 * Returns: (transfer full): a pointer to the newly created #GdaDataModel.
 */
GdaDataModel *
gda_data_access_wrapper_new (GdaDataModel *model)
{
	GdaDataAccessWrapper *retmodel;

	g_return_val_if_fail (GDA_IS_DATA_MODEL (model), NULL);
	
	retmodel = g_object_new (GDA_TYPE_DATA_ACCESS_WRAPPER,
				 "model", model, NULL);
			      
	return GDA_DATA_MODEL (retmodel);
}
Ejemplo n.º 10
0
/**
 * gdaui_cloud_new:
 * @model: a #GdaDataModel
 *
 * Creates a new #GdauiCloud widget suitable to display the data in @model
 *
 * Returns: (transfer full): the new widget
 *
 * Since: 4.2
 */
GtkWidget *
gdaui_cloud_new (GdaDataModel *model, gint label_column, gint weight_column)
{
	GdauiCloud *cloud;
	
	g_return_val_if_fail (!model || GDA_IS_DATA_MODEL (model), NULL);
	if (label_column < -1)
		label_column = -1;
	if (weight_column < -1)
		weight_column = -1;

	cloud = (GdauiCloud *) g_object_new (GDAUI_TYPE_CLOUD,
					     "label-column", label_column,
					     "weight-column", weight_column,
					     "model", model, NULL);
	return (GtkWidget *) cloud;
}
Ejemplo n.º 11
0
gboolean
_midgard_dbobject_get_property (MidgardDBObject *self, const gchar *name, GValue *value)
{
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (name != NULL, FALSE);
	g_return_val_if_fail (G_IS_VALUE (value), FALSE);

	if (!self->dbpriv->datamodel)
		return FALSE;

	GdaDataModel *model = GDA_DATA_MODEL (self->dbpriv->datamodel);
	if (!model || (model && !GDA_IS_DATA_MODEL (model)))
		return FALSE;

	gint col_idx = gda_data_model_get_column_index (model, name);
	if (col_idx == -1)
		return FALSE;

	const GValue *src_val = gda_data_model_get_value_at (model, col_idx, self->dbpriv->row, NULL);
	if (!src_val)
		return FALSE;

	if (!G_IS_VALUE (src_val) 
			|| (G_IS_VALUE (src_val) 
				&& G_VALUE_TYPE (src_val) == GDA_TYPE_NULL)) {
		/* NULL fetched from underlying field */
		if (G_VALUE_HOLDS_STRING (value)) {
			g_value_set_string (value, "");
			return TRUE;
		}
		g_warning ("Can not find value for given '%s' property \n", name);
		return FALSE;
	}

	if (G_VALUE_TYPE (src_val) != G_VALUE_TYPE (value))
		g_value_transform (src_val, value);
	else 
		g_value_copy (src_val, value);

	if (G_VALUE_HOLDS_STRING (value) && g_value_get_string (value) == NULL)
		g_value_set_string (value, "");

	return TRUE;
}
Ejemplo n.º 12
0
/**
 * gda_data_model_array_copy_model:
 * @src: a #GdaDataModel to copy data from
 * @error: a place to store errors, or %NULL
 *
 * Makes a copy of @src into a new #GdaDataModelArray object
 *
 * Returns: (transfer full) (allow-none): a new data model, or %NULL if an error occurred
 */
GdaDataModelArray *
gda_data_model_array_copy_model (GdaDataModel *src, GError **error)
{
	GdaDataModel *model;
	gint nbfields, i;

	g_return_val_if_fail (GDA_IS_DATA_MODEL (src), NULL);

	nbfields = gda_data_model_get_n_columns (src);
	model = gda_data_model_array_new (nbfields);

	if (g_object_get_data (G_OBJECT (src), "name"))
		g_object_set_data_full (G_OBJECT (model), "name", g_strdup (g_object_get_data (G_OBJECT (src), "name")), g_free);
	if (g_object_get_data (G_OBJECT (src), "descr"))
		g_object_set_data_full (G_OBJECT (model), "descr", g_strdup (g_object_get_data (G_OBJECT (src), "descr")), g_free);
	for (i = 0; i < nbfields; i++) {
		GdaColumn *copycol, *srccol;
		gchar *colid;

		srccol = gda_data_model_describe_column (src, i);
		copycol = gda_data_model_describe_column (model, i);

		g_object_get (G_OBJECT (srccol), "id", &colid, NULL);
		g_object_set (G_OBJECT (copycol), "id", colid, NULL);
		g_free (colid);
		gda_column_set_description (copycol, gda_column_get_description (srccol));
		gda_column_set_name (copycol, gda_column_get_name (srccol));
		gda_column_set_dbms_type (copycol, gda_column_get_dbms_type (srccol));
		gda_column_set_g_type (copycol, gda_column_get_g_type (srccol));
		gda_column_set_position (copycol, gda_column_get_position (srccol));
		gda_column_set_allow_null (copycol, gda_column_get_allow_null (srccol));
	}

	if (! gda_data_model_import_from_model (model, src, FALSE, NULL, error)) {
		g_object_unref (model);
		model = NULL;
	}
	/*else
	  gda_data_model_dump (model, stdout);*/

	return (GdaDataModelArray*) model;
}
Ejemplo n.º 13
0
GPtrArray *
symbol_db_util_get_files_with_zero_symbols (SymbolDBEngine *dbe)
{
	SymbolDBEnginePriv *priv;
	GdaDataModel *data_model;
	GPtrArray *files_to_scan;
	const GdaStatement *stmt;
	gint i, num_rows = 0;

	g_return_val_if_fail (dbe != NULL, NULL);
	priv = dbe->priv;

	SDB_LOCK(priv);

	if ((stmt = sdb_engine_get_statement_by_query_id (dbe,
								 PREP_QUERY_GET_ALL_FROM_FILE_WHERE_NOT_IN_SYMBOLS))
		== NULL)
	{
		SDB_UNLOCK(priv);
		return NULL;
	}

	data_model = gda_connection_statement_execute_select (priv->db_connection, 
														  (GdaStatement*)stmt, 
														  NULL, NULL);
	
	if (!GDA_IS_DATA_MODEL (data_model) ||
		(num_rows = gda_data_model_get_n_rows (GDA_DATA_MODEL (data_model))) <= 0)
	{
		if (data_model != NULL)
			g_object_unref (data_model);
		SDB_UNLOCK(priv);
		return NULL;
	}	
		
	/* initialize the array */
	files_to_scan = g_ptr_array_new_with_free_func (g_free);

	/* we can now scan each filename entry to check the last modification time. */
	for (i = 0; i < num_rows; i++)
	{
		const GValue *value;
		const gchar *file_name;
		gchar *file_abs_path = NULL;

		if ((value =
			 gda_data_model_get_value_at (data_model, 
						gda_data_model_get_column_index(data_model, "db_file_path"),
										  i, NULL)) == NULL)
		{
			continue;
		}

		/* build abs path. */
		file_name = g_value_get_string (value);
		file_abs_path = symbol_db_util_get_full_local_path (dbe, file_name);
		g_ptr_array_add (files_to_scan, file_abs_path);
	}

	g_object_unref (data_model);

	SDB_UNLOCK(priv);
	
	return files_to_scan;
}
Ejemplo n.º 14
0
static void
list_selection_changed_cb (GdauiRawGrid *grid, gpointer user_data)
{
	DsnConfigPrivate *priv;
	GdaDataModel *model;
	GArray *selection;
	gchar *str;
	const GValue *cvalue;
	GtkWidget *win = gtk_widget_get_toplevel (GTK_WIDGET (grid));
	if (gtk_widget_is_toplevel (win)) {
		g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (win),
											  "DatasourceDelete")), FALSE);
	}

	priv = g_object_get_data (G_OBJECT (user_data), DSN_CONFIG_DATA);

	selection = gdaui_data_selector_get_selected_rows (GDAUI_DATA_SELECTOR (priv->dsn_list));
	if (!selection) {
		gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), ST_NOPROP);
		return;
	}

	model = gdaui_data_selector_get_model (GDAUI_DATA_SELECTOR (priv->dsn_list));
	if (!GDA_IS_DATA_MODEL (model)) {
		g_array_free (selection, TRUE);
		gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), ST_NOPROP);
		return;
	}

	cvalue = gda_data_model_get_value_at (model, 0, g_array_index (selection, gint, 0), NULL);
	g_array_free (selection, TRUE);
	if (!cvalue) {
		gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), ST_NOPROP);
		return;
	}

	str = gda_value_stringify ((GValue *) cvalue);
	g_print ("==> %s\n", str);

	GdaDsnInfo *dsn_info;
	dsn_info = gda_config_get_dsn_info (str);
	g_free (str);
	if (!dsn_info) {
		/* something went wrong here... */
		gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), ST_NOPROP);
		return;
	}

	gdaui_dsn_editor_set_dsn (priv->dsn_editor, dsn_info);

	if (gdaui_dsn_editor_need_authentication (priv->dsn_editor))
		gtk_widget_show (GTK_WIDGET (priv->view_buttons [GDAUI_DSN_EDITOR_PANE_AUTH]));
	else
		gtk_widget_hide (GTK_WIDGET (priv->view_buttons [GDAUI_DSN_EDITOR_PANE_AUTH]));
	gtk_toggle_button_set_active (priv->view_buttons [GDAUI_DSN_EDITOR_PANE_DEFINITION], TRUE);

	gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), ST_PROP);
	if (gtk_widget_is_toplevel (win)) {
		g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (win),
											  "DatasourceDelete")), TRUE);
	}
}
Ejemplo n.º 15
0
SimEvent *
sim_event_light_new_from_dm (GdaDataModel *dm, gint row)
{
  SimEvent *event;
  const GValue *value;
  const GdaBinary *binary;
  const GdaTimestamp *timestamp;
  struct tm tm;

  g_return_val_if_fail (GDA_IS_DATA_MODEL (dm), NULL);

  event = sim_event_new ();

  event->id = sim_uuid_new ();

  value = gda_data_model_get_value_at (dm, 0, row, NULL);
  if (!gda_value_is_null (value))
  {
    binary = (GdaBinary *) gda_value_get_blob (value);
    event->src_ia = sim_inet_new_from_db_binary (binary->data, binary->binary_length);
  }

  value = gda_data_model_get_value_at (dm, 1, row, NULL);
  if (!gda_value_is_null (value))
  {
    binary = (GdaBinary *) gda_value_get_blob (value);
    event->dst_ia = sim_inet_new_from_db_binary (binary->data, binary->binary_length);
  }

  value = gda_data_model_get_value_at (dm, 2, row, NULL);
  if (!gda_value_is_null (value))
    event->src_id = sim_uuid_new_from_blob (gda_value_get_blob (value));

  value = gda_data_model_get_value_at (dm, 3, row, NULL);
  if (!gda_value_is_null (value))
    event->dst_id = sim_uuid_new_from_blob (gda_value_get_blob (value));

  value = gda_data_model_get_value_at (dm, 4, row, NULL);
  event->src_port = gda_value_is_null (value) ? 0 : g_value_get_int (value);

  value = gda_data_model_get_value_at (dm, 5, row, NULL);
  event->dst_port = gda_value_is_null (value) ? 0 : g_value_get_int (value);

  value = gda_data_model_get_value_at (dm, 6, row, NULL);
  if (!gda_value_is_null (value))
  {
    timestamp = gda_value_get_timestamp (value);
    tm.tm_year = timestamp->year - 1900;
    tm.tm_mon = timestamp->month - 1;
    tm.tm_mday = timestamp->day;
    tm.tm_hour = timestamp->hour - 1;
    tm.tm_min = timestamp->minute;
    tm.tm_mday = timestamp->day;
    tm.tm_sec = timestamp->second;
    tm.tm_wday = 0;
    tm.tm_yday = 0;
    tm.tm_isdst = 0;
    event->time = mktime (&tm);
  }

  value = gda_data_model_get_value_at (dm, 7, row, NULL);
  event->tzone = gda_value_is_null (value) ? 0.0 : g_value_get_float (value);

  return event;
}
Ejemplo n.º 16
0
static void
execute_action_mitem_cb (GtkMenuItem *menuitem, UiFormGrid *formgrid)
{
	TFavoritesAction *act;
	GtkWidget *dlg;
	gchar *tmp;
	gint response;
	GtkWidget *toplevel;

	act = (TFavoritesAction*) g_object_get_data (G_OBJECT (menuitem), "action");
	toplevel = gtk_widget_get_toplevel ((GtkWidget*) formgrid);
	tmp = g_strdup_printf (_("Set or confirm the parameters to execute\n"
				 "action '%s'"), act->name);
	dlg = gdaui_basic_form_new_in_dialog (act->params,
					      (GtkWindow*) toplevel,
					      _("Execution of action"), tmp);
	g_free (tmp);
	response = gtk_dialog_run (GTK_DIALOG (dlg));
	gtk_widget_destroy (dlg);
	if (response == GTK_RESPONSE_ACCEPT) {
                GError *lerror = NULL;
		TConnection *tcnc;
		
		tcnc = get_t_connection (formgrid);
		g_assert (tcnc);

		GObject *result;
		result = t_connection_execute_statement (tcnc, act->stmt, act->params,
                                                               GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL,
							       &lerror);
		if (result && GDA_IS_DATA_MODEL (result)) {
			GtkWidget *dialog, *label, *fg;
			GtkWidget *dcontents;
			gchar *tmp;
			dialog = gtk_dialog_new_with_buttons (act->name, NULL, 0,
							      _("_Close"), GTK_RESPONSE_CLOSE, NULL);
			dcontents = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
			gtk_box_set_spacing (GTK_BOX (dcontents), 5);
			gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE, TRUE);

			tmp = g_markup_printf_escaped ("<b>%s:</b>", act->name);
			label = gtk_label_new ("");
			gtk_label_set_markup (GTK_LABEL (label), tmp);
			g_free (tmp);
			gtk_widget_set_halign (label, GTK_ALIGN_START);
			gtk_box_pack_start (GTK_BOX (dcontents), label, FALSE, FALSE, 5);

			fg = ui_formgrid_new (GDA_DATA_MODEL (result), TRUE,
					      GDAUI_DATA_PROXY_INFO_CURRENT_ROW);
			ui_formgrid_set_connection (UI_FORMGRID (fg), tcnc);

			ActionExecutedData *aed;
			aed = g_new0 (ActionExecutedData, 1);
			aed->formgrid = g_object_ref (formgrid);
			aed->tcnc = g_object_ref (tcnc);
			if (act->name)
				aed->name = g_strdup (act->name);
			aed->stmt = g_object_ref (act->stmt);
			aed->params = g_object_ref (act->params);

			if (GDA_IS_DATA_SELECT (result)) {
				GdaStatement *stmt;
				g_object_get (G_OBJECT (result), "select-stmt", &stmt, NULL);
				if (stmt) {
					ui_formgrid_handle_user_prefs (UI_FORMGRID (fg), NULL, stmt);
					g_object_unref (stmt);
				}
				aed->model = g_object_ref (result);
				g_signal_connect (aed->params, "holder-changed",
						  G_CALLBACK (action_executed_holder_changed_cb), aed);

				aed->formgrid = g_object_ref (fg);
				aed->formgrid->priv->autoupdate_possible = TRUE;
				gtk_widget_show (aed->formgrid->priv->autoupdate_toggle);
			}
			gtk_box_pack_start (GTK_BOX (dcontents), fg, TRUE, TRUE, 0);

			gtk_window_set_default_size (GTK_WINDOW (dialog), 400, 600);
			gtk_widget_show_all (dialog);

			g_signal_connect (dialog, "response",
					  G_CALLBACK (gtk_widget_destroy), NULL);
			g_signal_connect (dialog, "close",
					  G_CALLBACK (gtk_widget_destroy), NULL);
			g_object_set_data_full (G_OBJECT (dialog), "aed", aed,
						(GDestroyNotify) action_executed_data_free);
		}
		else if (result) {
			if (BROWSER_IS_WINDOW (toplevel)) {
				browser_window_show_notice_printf (BROWSER_WINDOW (toplevel),
								   GTK_MESSAGE_INFO,
								   "ActionExecution",
								   "%s", _("Action successfully executed"));
			}
			else
				ui_show_message (GTK_WINDOW (toplevel),
						 "%s", _("Action successfully executed"));
			g_object_unref (result);
		}
		else {
                        ui_show_error (GTK_WINDOW (toplevel),
				       _("Error executing query: %s"),
				       lerror && lerror->message ? lerror->message : _("No detail"));
                        g_clear_error (&lerror);
                }
	}
}
Ejemplo n.º 17
0
/**
 * gda_data_model_array_copy_model_ext:
 * @src: a #GdaDataModel to copy data from
 * @ncols: size of @cols
 * @cols: (array length=ncols): array of @src's columns to copy into the new array, not %NULL
 * @error: a place to store errors, or %NULL
 *
 * Like gda_data_model_array_copy_model(), makes a copy of @src, but copies only some
 * columns.
 *
 * Returns: (transfer full) (allow-none): a new data model, or %NULL if an error occurred
 *
 * Since: 5.2.0
 */
GdaDataModelArray *
gda_data_model_array_copy_model_ext (GdaDataModel *src, gint ncols, gint *cols, GError **error)
{
	GdaDataModel *model;
	gint nbfields, i;

	g_return_val_if_fail (GDA_IS_DATA_MODEL (src), NULL);
	g_return_val_if_fail (cols, NULL);
	g_return_val_if_fail (ncols > 0, NULL);

	/* check columns' validity */
	nbfields = gda_data_model_get_n_columns (src);
	for (i = 0; i < ncols; i++) {
		if ((cols[i] < 0) || (cols[i] >= nbfields)) {
			g_set_error (error, GDA_DATA_MODEL_ERROR,
				     GDA_DATA_MODEL_COLUMN_OUT_OF_RANGE_ERROR,
                                     _("Column %d out of range (0-%d)"), cols[i], nbfields - 1);
			return NULL;
		}
	}

	/* initialize new model */
	model = gda_data_model_array_new (ncols);
	if (g_object_get_data (G_OBJECT (src), "name"))
		g_object_set_data_full (G_OBJECT (model), "name", g_strdup (g_object_get_data (G_OBJECT (src), "name")), g_free);
	if (g_object_get_data (G_OBJECT (src), "descr"))
		g_object_set_data_full (G_OBJECT (model), "descr", g_strdup (g_object_get_data (G_OBJECT (src), "descr")), g_free);


	/* map new columns */
	GHashTable *hash;
	hash = g_hash_table_new_full (g_int_hash, g_int_equal, g_free, NULL);
	for (i = 0; i < ncols; i++) {
		gint *ptr;
		ptr = g_new (gint, 1);
		*ptr = i;
		g_hash_table_insert (hash, ptr, GINT_TO_POINTER (cols[i]));

		GdaColumn *copycol, *srccol;
		gchar *colid;

		srccol = gda_data_model_describe_column (src, cols[i]);
		copycol = gda_data_model_describe_column (model, i);

		g_object_get (G_OBJECT (srccol), "id", &colid, NULL);
		g_object_set (G_OBJECT (copycol), "id", colid, NULL);
		g_free (colid);
		gda_column_set_description (copycol, gda_column_get_description (srccol));
		gda_column_set_name (copycol, gda_column_get_name (srccol));
		gda_column_set_dbms_type (copycol, gda_column_get_dbms_type (srccol));
		gda_column_set_g_type (copycol, gda_column_get_g_type (srccol));
		gda_column_set_position (copycol, gda_column_get_position (srccol));
		gda_column_set_allow_null (copycol, gda_column_get_allow_null (srccol));
	}

	if (! gda_data_model_import_from_model (model, src, FALSE, hash, error)) {
		g_hash_table_destroy (hash);
		g_object_unref (model);
		model = NULL;
	}
	/*else
	  gda_data_model_dump (model, stdout);*/

	g_hash_table_destroy (hash);
	return (GdaDataModelArray*) model;
}
Ejemplo n.º 18
0
/**
 * base_tool_output_data_model_to_string:
 */
gchar *
base_tool_output_data_model_to_string (GdaDataModel *model, ToolOutputFormat format, FILE *stream, GdaSet *options)
{
    if (!GDA_IS_DATA_MODEL (model))
        return NULL;

    if (format & BASE_TOOL_OUTPUT_FORMAT_DEFAULT) {
        gchar *tmp;
        GdaSet *local_options;
        gint width;
        base_tool_input_get_size (&width, NULL);
        local_options = gda_set_new_inline (6, "NAME", G_TYPE_BOOLEAN, TRUE,
                                            "NULL_AS_EMPTY", G_TYPE_BOOLEAN, TRUE,
                                            "MAX_WIDTH", G_TYPE_INT, width,
                                            "COLUMN_SEPARATORS", G_TYPE_BOOLEAN, TRUE,
                                            "SEPARATOR_LINE", G_TYPE_BOOLEAN, TRUE,
                                            "NAMES_ON_FIRST_LINE", G_TYPE_BOOLEAN, TRUE);
        if (options)
            gda_set_merge_with_set (local_options, options);
        tmp = gda_data_model_export_to_string (model, GDA_DATA_MODEL_IO_TEXT_TABLE, NULL, 0, NULL, 0,
                                               local_options);
        g_object_unref (local_options);
        if (GDA_IS_DATA_SELECT (model)) {
            gchar *tmp2, *tmp3;
            gdouble etime;
            g_object_get ((GObject*) model, "execution-delay", &etime, NULL);
            tmp2 = g_strdup_printf ("%s: %.03f s", _("Execution delay"), etime);
            tmp3 = g_strdup_printf ("%s\n%s", tmp, tmp2);
            g_free (tmp);
            g_free (tmp2);
            return tmp3;
        }
        else
            return tmp;
    }
    else if (format & BASE_TOOL_OUTPUT_FORMAT_XML)
        return gda_data_model_export_to_string (model, GDA_DATA_MODEL_IO_DATA_ARRAY_XML,
                                                NULL, 0,
                                                NULL, 0, NULL);
    else if (format & BASE_TOOL_OUTPUT_FORMAT_CSV) {
        gchar *retval;
        GdaSet *optexp;
        optexp = make_options_set_from_string ("csv", options);
        retval = gda_data_model_export_to_string (model, GDA_DATA_MODEL_IO_TEXT_SEPARATED,
                 NULL, 0,
                 NULL, 0, optexp);
        if (optexp)
            g_object_unref (optexp);
        return retval;
    }
    else if (format & BASE_TOOL_OUTPUT_FORMAT_HTML) {
        xmlBufferPtr buffer;
        xmlNodePtr top, div, table, node, row_node, col_node, header, meta;
        gint ncols, nrows, i, j;
        gchar *str;

        top = xmlNewNode (NULL, BAD_CAST "html");
        header = xmlNewChild (top, NULL, BAD_CAST "head", NULL);
        meta = xmlNewChild (header, NULL, BAD_CAST "meta", NULL);
        xmlSetProp (meta, BAD_CAST "http-equiv", BAD_CAST "content-type");
        xmlSetProp (meta, BAD_CAST "content", BAD_CAST "text/html; charset=UTF-8");
        div = xmlNewChild (top, NULL, BAD_CAST "body", NULL);
        table = xmlNewChild (div, NULL, BAD_CAST "table", NULL);
        xmlSetProp (table, BAD_CAST "border", BAD_CAST "1");

        if (g_object_get_data (G_OBJECT (model), "name"))
            xmlNewTextChild (table, NULL, BAD_CAST "caption", g_object_get_data (G_OBJECT (model), "name"));

        ncols = gda_data_model_get_n_columns (model);
        nrows = gda_data_model_get_n_rows (model);

        row_node = xmlNewChild (table, NULL, BAD_CAST "tr", NULL);
        for (j = 0; j < ncols; j++) {
            const gchar *cstr;
            cstr = gda_data_model_get_column_title (model, j);
            col_node = xmlNewTextChild (row_node, NULL, BAD_CAST "th", BAD_CAST cstr);
            xmlSetProp (col_node, BAD_CAST "align", BAD_CAST "center");
        }

        for (i = 0; i < nrows; i++) {
            row_node = xmlNewChild (table, NULL, BAD_CAST "tr", NULL);
            xmlSetProp (row_node, BAD_CAST "valign", BAD_CAST "top");
            for (j = 0; j < ncols; j++) {
                const GValue *value;
                value = gda_data_model_get_value_at (model, j, i, NULL);
                if (!value) {
                    col_node = xmlNewChild (row_node, NULL, BAD_CAST "td", BAD_CAST "ERROR");
                    xmlSetProp (col_node, BAD_CAST "align", BAD_CAST "left");
                }
                else {
                    str = gda_value_stringify (value);
                    col_node = xmlNewTextChild (row_node, NULL, BAD_CAST "td", BAD_CAST str);
                    xmlSetProp (col_node, BAD_CAST "align", BAD_CAST "left");
                    g_free (str);
                }
            }
        }

        node = xmlNewChild (div, NULL, BAD_CAST "p", NULL);
        str = g_strdup_printf (ngettext ("(%d row)", "(%d rows)", nrows), nrows);
        xmlNodeSetContent (node, BAD_CAST str);
        g_free (str);

        buffer = xmlBufferCreate ();
        xmlNodeDump (buffer, NULL, top, 0, 1);
        str = g_strdup ((gchar *) xmlBufferContent (buffer));
        xmlBufferFree (buffer);
        xmlFreeNode (top);
        return str;
    }
    else
        TO_IMPLEMENT;

    return NULL;
}