/** * 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; }
/** * 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; } }
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; }
/** * 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; } }
/** * 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; } }
/** * 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); }
/** * 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); }
/** * 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; } }
/** * 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; }
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; }
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; }
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; }
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; }