Ejemplo n.º 1
0
/**
 * gda_sql_param_spec_serialize:
 * @pspec: a #GdaSqlParamSpec pointer
 *
 * Creates a new string representing @pspec.
 *
 * Returns: a new string.
 */
gchar *
gda_sql_param_spec_serialize (GdaSqlParamSpec *pspec)
{
	GString *string;
	gchar *str;

	if (!pspec)
		return NULL;

	string = g_string_new ("{");
	str = _json_quote_string (pspec->name);
	g_string_append_printf (string, "\"name\":%s", str);
	g_free (str);


	str = _json_quote_string (pspec->descr);
	g_string_append_printf (string, ",\"descr\":%s", str);
	g_free (str);

	if (pspec->g_type != GDA_TYPE_NULL) {
		str = _json_quote_string (gda_g_type_to_string (pspec->g_type));
		g_string_append_printf (string, ",\"type\":%s", str);
		g_free (str);
	}
	else
		g_string_append_printf (string, ",\"type\":null");

	g_string_append_printf (string, ",\"is_param\":%s", pspec->is_param ? "true" : "false");
	g_string_append_printf (string, ",\"nullok\":%s", pspec->nullok ? "true" : "false");
	g_string_append_c (string, '}');
	str = string->str;
	g_string_free (string, FALSE);
	return str;
}
Ejemplo n.º 2
0
/**
 * gda_sql_select_target_serialize
 * @target: a #GdaSqlSelectTarget structure
 *
 * Creates a new string representing a target used in a SELECT statement
 * after the FROM clause.
 *
 * Returns: a new string with the description of the expression or "null" in case @field is invalid.
 */
gchar *
gda_sql_select_target_serialize (GdaSqlSelectTarget *target)
{
	if (!target)
		return g_strdup ("null");
	else {
		GString *string;
		gchar *str;

		string = g_string_new ("{");

		g_string_append (string, "\"expr\":");
		str = gda_sql_expr_serialize (target->expr);
		g_string_append (string, str);
		g_free (str);

		if (target->table_name) {
			g_string_append (string, ",\"table_name\":");
			str = _json_quote_string (target->table_name);
			g_string_append (string, str);
			g_free (str);
		}
		if (target->as) {
			g_string_append (string, ",\"as\":");
			str = _json_quote_string (target->as);
			g_string_append (string, str);
			g_free (str);
		}

		g_string_append_c (string, '}');
		str = string->str;
		g_string_free (string, FALSE);
		return str;
	}
}
Ejemplo n.º 3
0
static gchar *
gda_sql_statement_trans_serialize (gpointer stmt)
{
        GString *string;
        gchar *str;
	GdaSqlStatementTransaction *trans = (GdaSqlStatementTransaction *) stmt;

        g_return_val_if_fail (stmt, NULL);

        string = g_string_new ("\"contents\":{");
	g_string_append (string, "\"trans_mode\":"); 

	str = _json_quote_string (trans->trans_mode);
	g_string_append (string, str);
	g_free (str);

	g_string_append (string, ",\"trans_name\":"); 
	str = _json_quote_string (trans->trans_name);
	g_string_append (string, str);
	g_free (str);

	g_string_append (string, ",\"isol_level\":"); 
	switch (trans->isolation_level) {
	default:
	case GDA_TRANSACTION_ISOLATION_UNKNOWN:
		str = NULL;
		break;
	case GDA_TRANSACTION_ISOLATION_READ_COMMITTED:
		str = "COMMITTED_READ";
		break;
	case GDA_TRANSACTION_ISOLATION_READ_UNCOMMITTED:
		str = "UNCOMMITTED_READ";
		break;
	case GDA_TRANSACTION_ISOLATION_REPEATABLE_READ:
		str = "REPEATABLE_READ";
		break;
	case GDA_TRANSACTION_ISOLATION_SERIALIZABLE:
		str = "SERIALIZABLE";
		break;
	}
	if (str)
		g_string_append_printf (string, "\"%s\"", str);
	else
		g_string_append (string, "null");

        g_string_append_c (string, '}');
        str = string->str;
        g_string_free (string, FALSE);
        return str;
}
Ejemplo n.º 4
0
/**
 * gda_sql_operation_serialize
 * @operation: a #GdaSqlOperation structure
 *
 * Creates a new string representing an operator. You need to free the returned string
 * using g_free();
 *
 * Returns: a new string with the description of the operator or "null" in case @operation is invalid.
 */
gchar *
gda_sql_operation_serialize (GdaSqlOperation *operation)
{
	if (!operation)
		return g_strdup ("null");
	else {
		GString *string;
		gchar *str;
		GSList *list;
		gint i = 0;

		string = g_string_new ("{");

		g_string_append (string, "\"operator\":");
		str = _json_quote_string (gda_sql_operation_operator_to_string (operation->operator_type));
		g_string_append (string, str);
		g_free (str);

		for (list = operation->operands; list; list = list->next) {
			g_string_append_printf (string, ",\"operand%d\":", i++);
			if (list->data) {
				str = gda_sql_expr_serialize ((GdaSqlExpr*) list->data);
				g_string_append (string, str);
				g_free (str);
			}
			else
				g_string_append (string, "null");
		}

		g_string_append_c (string, '}');
		str = string->str;
		g_string_free (string, FALSE);
		return str;
	}
}
Ejemplo n.º 5
0
/**
 * gda_sql_select_order_serialize
 * @order: a #GdaSqlSelectOrder structure
 *
 * Creates a new string description of the ORDER BY clause used in a SELECT statement.
 *
 * Returns: a new string with the description of the ORDER BY or "null" in case @order is invalid.
 */
gchar *
gda_sql_select_order_serialize (GdaSqlSelectOrder *order)
{
	if (!order)
		return g_strdup ("null");
	else {
		GString *string;
		gchar *str;

		string = g_string_new ("{");

		g_string_append (string, "\"expr\":");
		str = gda_sql_expr_serialize (order->expr);
		g_string_append (string, str);
		g_free (str);

		g_string_append (string, ",\"sort\":");
		g_string_append (string, order->asc ? "\"ASC\"" : "\"DESC\"");

		if (order->collation_name) {
			g_string_append (string, ",\"collation\":");
			str = _json_quote_string (order->collation_name);
			g_string_append (string, str);
			g_free (str);
		}

		g_string_append_c (string, '}');
		str = string->str;
		g_string_free (string, FALSE);
		return str;
	}
}
Ejemplo n.º 6
0
/**
 * gda_sql_table_serialize
 * @field: a #GdaSqlTable structure
 *
 * Creates a new string representing a table. You need to free the returned string
 * using g_free();
 *
 * Returns: a new string with the name of the field or "null" in case @table is invalid.
 */
gchar *
gda_sql_table_serialize (GdaSqlTable *table)
{
	if (!table)
		return g_strdup ("null");
	else
		return _json_quote_string (table->table_name);
}
Ejemplo n.º 7
0
/**
 * gda_sql_field_serialize
 * @field: a #GdaSqlField structure
 *
 * Creates a new string representing a field. You need to free the returned string
 * using g_free();
 *
 * Returns: a new string with the name of the field or "null" in case @field is invalid.
 */
gchar *
gda_sql_field_serialize (GdaSqlField *field)
{
	if (!field)
		return g_strdup ("null");
	else
		return _json_quote_string (field->field_name);
}
Ejemplo n.º 8
0
/**
 * gda_sql_function_serialize
 * @function: a #GdaSqlFunction structure
 *
 * Creates a new string representing a function. You need to free the returned string
 * using g_free();
 *
 * Returns: a new string with the description of the function or "null" in case @function is invalid.
 */
gchar *
gda_sql_function_serialize (GdaSqlFunction *function)
{
	if (!function)
		return g_strdup ("null");
	else {
		GString *string;
		gchar *str;

		string = g_string_new ("{");

		g_string_append (string, "\"function_name\":");
		str = _json_quote_string (function->function_name);
		g_string_append (string, str);
		g_free (str);

		g_string_append (string, ",\"function_args\":");
		if (function->args_list) {
			GSList *list;
			g_string_append_c (string, '[');
			for (list = function->args_list; list; list = list->next) {
				if (list != function->args_list)
					g_string_append_c (string, ',');
				str = gda_sql_expr_serialize ((GdaSqlExpr*) list->data);
				g_string_append (string, str);
				g_free (str);
			}
			g_string_append_c (string, ']');
		}
		else
			g_string_append (string, "null");
		g_string_append_c (string, '}');
		str = string->str;
		g_string_free (string, FALSE);
		return str;
	}
}
Ejemplo n.º 9
0
/**
 * gda_sql_expr_serialize
 * @expr: a #GdaSqlExpr structure
 *
 * Creates a new string representation of the SQL expression. You need to free the returned string
 * using g_free();
 *
 * Returns: a new string with the SQL expression or "null" in case @expr is invalid.
 */
gchar *
gda_sql_expr_serialize (GdaSqlExpr *expr)
{
	GString *string;
	gchar *str, *tmp;

	if (!expr)
		return g_strdup ("null");

	string = g_string_new ("{");
	if (expr->cond) {
		str = gda_sql_operation_serialize (expr->cond);
		g_string_append_printf (string, "\"operation\":%s", str);
		g_free (str);
	}
	else if (expr->func) {
		str = gda_sql_function_serialize (expr->func);
		g_string_append_printf (string, "\"func\":%s", str);
		g_free (str);
	}
	else if (expr->select) {
		if (GDA_SQL_ANY_PART (expr->select)->type == GDA_SQL_ANY_STMT_SELECT)
			str = _gda_sql_statement_select_serialize (expr->select);
		else if (GDA_SQL_ANY_PART (expr->select)->type == GDA_SQL_ANY_STMT_COMPOUND)
			str = _gda_sql_statement_compound_serialize (expr->select);
		else
			g_assert_not_reached ();
		g_string_append_printf (string, "\"select\":{%s}", str);
		g_free (str);
	}
	else if (expr->case_s) {
		str = gda_sql_case_serialize (expr->case_s);
		g_string_append_printf (string, "\"case\":%s", str);
		g_free (str);
	}
	else {
		if (expr->value) {
			tmp = gda_sql_value_stringify (expr->value);
			str = _json_quote_string (tmp);
			g_free (tmp);
			g_string_append_printf (string, "\"value\":%s", str);
			g_free (str);
		}
		else
			g_string_append_printf (string, "\"value\":null");
		if (expr->param_spec) {
			str = gda_sql_param_spec_serialize (expr->param_spec);
			g_string_append_printf (string, ",\"param_spec\":%s", str);
			g_free (str);
		}
	}

	if (expr->cast_as) {
		str = _json_quote_string (expr->cast_as);
		g_string_append_printf (string, ",\"cast\":%s", str);
		g_free (str);
	}

	if (expr->value_is_ident) {
		str = _json_quote_string (expr->cast_as);
		g_string_append (string, ",\"sqlident\":\"TRUE\"");
		g_free (str);
	}

	g_string_append_c (string, '}');
	str = string->str;
	g_string_free (string, FALSE);
	return str;
}
Ejemplo n.º 10
0
static gchar *
gda_sql_statement_insert_serialize (gpointer stmt)
{
	GString *string;
	gchar *str;
	GSList *list;
	GdaSqlStatementInsert *insert = (GdaSqlStatementInsert *) stmt;

	g_return_val_if_fail (stmt, NULL);

	string = g_string_new ("\"contents\":{");

	/* table name */
	g_string_append (string, "\"table\":");
	str = gda_sql_table_serialize (insert->table);
	g_string_append (string, str);
	g_free (str);

	/* fields */
	g_string_append (string, ",\"fields\":");
	if (insert->fields_list) {
		g_string_append_c (string, '[');
		for (list = insert->fields_list; list; list = list->next) {
			if (list != insert->fields_list)
				g_string_append_c (string, ',');
			str = gda_sql_field_serialize ((GdaSqlField*) list->data);
			g_string_append (string, str);
			g_free (str);
		}
		g_string_append_c (string, ']');
	}
	else
		g_string_append (string, "null");	

	/* values */
	if (insert->values_list) {
		g_string_append (string, ",\"values\":[");
		for (list = insert->values_list; list; list = list->next) {
			if (list != insert->values_list)
				g_string_append_c (string, ',');
			if (list->data) {
				GSList *vlist;
				g_string_append_c (string, '[');
				for (vlist = (GSList *) list->data; vlist; vlist = vlist->next) {
					if (vlist != (GSList *) list->data)
						g_string_append_c (string, ',');
					str = gda_sql_expr_serialize ((GdaSqlExpr*) vlist->data);
					g_string_append (string, str);
					g_free (str);
				}
				g_string_append_c (string, ']');
			}
			else
				g_string_append (string, "null");
		}
		g_string_append_c (string, ']');
	}
	
	/* select statement */
	if (insert->select) {
		g_string_append (string, ",\"select\":{");
		if (GDA_SQL_ANY_PART (insert->select)->type == GDA_SQL_ANY_STMT_SELECT)
			str = _gda_sql_statement_select_serialize (insert->select);
		else if (GDA_SQL_ANY_PART (insert->select)->type == GDA_SQL_ANY_STMT_COMPOUND)
			str = _gda_sql_statement_compound_serialize (insert->select);
		else
			g_assert_not_reached ();
		
		g_string_append (string, str);
		g_free (str);
		g_string_append_c (string, '}');
	}

	/* conflict clause */
	if (insert->on_conflict) {
		g_string_append (string, ",\"on_conflict\":");
		str = _json_quote_string (insert->on_conflict);
		g_string_append (string, str);
		g_free (str);
	}
	g_string_append_c (string, '}');
	str = string->str;
	g_string_free (string, FALSE);
	return str;	
}
Ejemplo n.º 11
0
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;
}
Ejemplo n.º 12
0
gchar *
tests_common_set_serialize (GdaSet *set)
{
	GString *string;
	gchar *str, *json;
	GSList *list;

	string = g_string_new ("{");

	/* holders */
	if (set->holders) {
		g_string_append (string, "\"holders\":[");
		for (list = set->holders; list; list = list->next) {
			if (list != set->holders)
				g_string_append_c (string, ',');
			str = tests_common_holder_serialize (GDA_HOLDER (list->data));
			g_string_append (string, str);
			g_free (str);
		}
		g_string_append_c (string, ']');
	}

	/* set description */
	g_object_get (G_OBJECT (set), "id", &str, NULL);
	if (str) {
		g_string_append (string, "\"id\":");
		json = _json_quote_string (str);
		g_string_append (string, json);
		g_free (json);
		g_free (str);
	}

	g_object_get (G_OBJECT (set), "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 (set), "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);
	}

	/* public data */
	if (set->nodes_list) {
		g_string_append (string, ",\"nodes\":[");
		for (list = set->nodes_list; list; list = list->next) {
			GdaSetNode *node = (GdaSetNode*) list->data;
			if (list != set->nodes_list)
				g_string_append_c (string, ',');

			g_string_append_c (string, '{');
			g_string_append_printf (string, "\"holder\":%d", g_slist_index (set->holders, gda_set_node_get_holder (node)));

			GdaDataModel *source_model;
			source_model = gda_set_node_get_data_model (node);
			if (source_model) {
				g_string_append (string, ",\"source_model\":");
				if (g_object_get_data (G_OBJECT (source_model), "name"))
					json = _json_quote_string (g_object_get_data (G_OBJECT (source_model), "name"));
				else {
					str = gda_data_model_export_to_string (source_model,
									       GDA_DATA_MODEL_IO_TEXT_SEPARATED,
									       NULL, 0, NULL, 0, NULL);
					json = _json_quote_string (str);
					g_free (str);
				}
				g_string_append (string, json);
				g_free (json);

				g_string_append (string, ",\"source_column\":");
				g_string_append_printf (string, "\"%d\"", gda_set_node_get_source_column (node));
				/* FIXME: node->hint */
			}
			g_string_append_c (string, '}');
		}
		g_string_append_c (string, ']');
	}

	if (set->sources_list) {
		g_string_append (string, ",\"sources\":[");
		for (list = set->sources_list; list; list = list->next) {
			GdaSetSource *source = (GdaSetSource*) list->data;
			if (list != set->sources_list)
				g_string_append_c (string, ',');
			g_string_append_c (string, '{');
			g_string_append (string, "\"model\":");
			GdaDataModel *data_model;
			data_model = gda_set_source_get_data_model (source);
			if (g_object_get_data (G_OBJECT (data_model), "name"))
				json = _json_quote_string (g_object_get_data (G_OBJECT (data_model), "name"));
			else {
				str = gda_data_model_export_to_string (data_model,
								       GDA_DATA_MODEL_IO_TEXT_SEPARATED,
								       NULL, 0, NULL, 0, NULL);
				json = _json_quote_string (str);
				g_free (str);
			}
			g_string_append (string, json);
			g_free (json);

			g_string_append (string, ",\"nodes\":[");
			GSList *nodes;
			for (nodes = gda_set_source_get_nodes (source); nodes; nodes = nodes->next) {
				if (nodes != gda_set_source_get_nodes (source))
					g_string_append_c (string, ',');
				g_string_append_printf (string, "%d", g_slist_index (set->nodes_list, nodes->data));
			}
			g_string_append_c (string, ']');

			g_string_append_c (string, '}');
		}
		g_string_append_c (string, ']');
	}

	g_string_append_c (string, '}');
	str = string->str;
	g_string_free (string, FALSE);
	return str;
}
Ejemplo n.º 13
0
static gchar *
gda_sql_statement_update_serialize (gpointer stmt)
{
	GString *string;
	gchar *str;
	GSList *list;
	GdaSqlStatementUpdate *update = (GdaSqlStatementUpdate *) stmt;

	g_return_val_if_fail (stmt, NULL);

	string = g_string_new ("\"contents\":{");

	/* table name */
	g_string_append (string, "\"table\":");
	str = gda_sql_table_serialize (update->table);
	g_string_append (string, str);
	g_free (str);

	/* fields */
	g_string_append (string, ",\"fields\":");
	if (update->fields_list) {
		g_string_append_c (string, '[');
		for (list = update->fields_list; list; list = list->next) {
			if (list != update->fields_list)
				g_string_append_c (string, ',');
			str = gda_sql_field_serialize ((GdaSqlField *) list->data);
			g_string_append (string, str);
			g_free (str);
		}
		g_string_append_c (string, ']');
	}
	else
		g_string_append (string, "null");

	/* expressions */
	g_string_append (string, ",\"expressions\":");
	if (update->expr_list) {
		g_string_append_c (string, '[');
		for (list = update->expr_list; list; list = list->next) {
			if (list != update->expr_list)
				g_string_append_c (string, ',');
			str = gda_sql_expr_serialize ((GdaSqlExpr *) list->data);
			g_string_append (string, str);
			g_free (str);
		}
		g_string_append_c (string, ']');
	}
	else
		g_string_append (string, "null");	

	/* condition */
	if (update->cond) {
		g_string_append (string, ",\"condition\":");
		str = gda_sql_expr_serialize (update->cond);
		g_string_append (string, str);
		g_free (str);
	}

	/* conflict clause */
        if (update->on_conflict) {
                g_string_append (string, ",\"on_conflict\":");
                str = _json_quote_string (update->on_conflict);
                g_string_append (string, str);
                g_free (str);
        }
	g_string_append_c (string, '}');
	str = string->str;
	g_string_free (string, FALSE);
	return str;	
}