[libgda] Secured GdaServerOperation usage of SQL identifiers
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Secured GdaServerOperation usage of SQL identifiers
- Date: Wed, 16 Apr 2014 13:00:55 +0000 (UTC)
commit 902bfdfe9258de57076473742f6f065abe71f26a
Author: Vivien Malerba <malerba gnome-db org>
Date: Tue Apr 15 21:14:44 2014 +0200
Secured GdaServerOperation usage of SQL identifiers
doc/C/migration4.xml | 2 +-
libgda/gda-server-operation.c | 32 +-
libgda/gda-server-operation.h | 7 +-
libgda/sqlite/gda-sqlite-ddl.c | 90 ++-
providers/jdbc/gda-jdbc-ddl.c | 23 +-
providers/mysql/gda-mysql-ddl.c | 735 ++++++++++++---------
providers/oracle/gda-oracle-ddl.c | 23 +-
providers/postgres/gda-postgres-ddl.c | 596 ++++++++++-------
providers/skel-implementation/capi/gda-capi-ddl.c | 19 +-
providers/web/gda-web-ddl.c | 24 +-
10 files changed, 941 insertions(+), 610 deletions(-)
---
diff --git a/doc/C/migration4.xml b/doc/C/migration4.xml
index 3bba6c0..8581221 100644
--- a/doc/C/migration4.xml
+++ b/doc/C/migration4.xml
@@ -85,7 +85,7 @@
<listitem><para>The gda_connection_async_statement_execute() function has been
removed</para></listitem>
<listitem><para>The gda_connection_internal_get_provider_data() has been replaced by
<link
linkend="gda-connection-internal-get-provider-data-error">gda_connection_internal_get_provider_data_error</link>()</para></listitem>
- <listitem><para>The </para></listitem>
+ <listitem><para>The <link
linkend="gda-server-operation-get-sql-identifier-at">gda_server_operation_get_sql_identifier_at()</link> and
<link
linkend="gda-server-operation-get-sql-identifier-at-path">gda_server_operation_get_sql_identifier_at_path()</link>
now have an extra argument for errors</para></listitem>
<listitem><para>The </para></listitem>
<listitem><para>The </para></listitem>
<listitem><para>The </para></listitem>
diff --git a/libgda/gda-server-operation.c b/libgda/gda-server-operation.c
index 0a67b6c..6f9fb13 100644
--- a/libgda/gda-server-operation.c
+++ b/libgda/gda-server-operation.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 - 2008 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2006 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2006 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2007 Leonardo Boshell <lb kmc com co>
* Copyright (C) 2008 Armin Burgmeier <armin openismus com>
* Copyright (C) 2008 Phil Longstaff <plongstaff rogers com>
@@ -2097,6 +2097,7 @@ gda_server_operation_get_value_at (GdaServerOperation *op, const gchar *path_for
* @cnc: (allow-none): a #GdaConnection, or %NULL
* @prov: (allow-none): a #GdaServerProvider, or %NULL
* @path_format: a complete path to a node (starting with "/")
+ * @error: (allow-none): a place to store errors, or %NULL
* @...: arguments to use with @path_format to make a complete path
*
* This method is similar to gda_server_operation_get_value_at(), but for SQL identifiers: a new string
@@ -2112,7 +2113,7 @@ gda_server_operation_get_value_at (GdaServerOperation *op, const gchar *path_for
*/
gchar *
gda_server_operation_get_sql_identifier_at (GdaServerOperation *op, GdaConnection *cnc, GdaServerProvider
*prov,
- const gchar *path_format, ...)
+ const gchar *path_format, GError **error, ...)
{
gchar *path, *ret;
va_list args;
@@ -2120,11 +2121,11 @@ gda_server_operation_get_sql_identifier_at (GdaServerOperation *op, GdaConnectio
g_return_val_if_fail (GDA_IS_SERVER_OPERATION (op), NULL);
/* build path */
- va_start (args, path_format);
+ va_start (args, error);
path = g_strdup_vprintf (path_format, args);
va_end (args);
- ret = gda_server_operation_get_sql_identifier_at_path (op, cnc, prov, path);
+ ret = gda_server_operation_get_sql_identifier_at_path (op, cnc, prov, path, error);
g_free (path);
return ret;
@@ -2136,6 +2137,7 @@ gda_server_operation_get_sql_identifier_at (GdaServerOperation *op, GdaConnectio
* @cnc: (allow-none): a #GdaConnection, or %NULL
* @prov: (allow-none): a #GdaServerProvider, or %NULL
* @path: a complete path to a node (starting with "/")
+ * @error: (allow-none): a place to store errors, or %NULL
*
* This method is similar to gda_server_operation_get_value_at(), but for SQL identifiers: a new string
* is returned instead of a #GValue. Also the returned string is assumed to represents an SQL identifier
@@ -2143,8 +2145,8 @@ gda_server_operation_get_sql_identifier_at (GdaServerOperation *op, GdaConnectio
* will be applied if both are %NULL).
*
* Returns: (transfer full): a new string, or %NULL if the value is undefined or
- * if the @path is not defined or @path does not hold any value, or if the value held is not a string
- * (in that last case a warning is shown).
+ * if the @path is not defined or @path does not hold any value, or if the value held is not a string or
+ * a valid SQL identifier.
*
* Since: 4.2.6
*
@@ -2152,7 +2154,7 @@ gda_server_operation_get_sql_identifier_at (GdaServerOperation *op, GdaConnectio
*/
gchar *
gda_server_operation_get_sql_identifier_at_path (GdaServerOperation *op, GdaConnection *cnc,
GdaServerProvider *prov,
- const gchar *path)
+ const gchar *path, GError **error)
{
const GValue *value = NULL;
GdaConnectionOptions cncoptions = 0;
@@ -2161,13 +2163,25 @@ gda_server_operation_get_sql_identifier_at_path (GdaServerOperation *op, GdaConn
value = gda_server_operation_get_value_at_path (op, path);
- if (!value || (G_VALUE_TYPE (value) == GDA_TYPE_NULL))
+ if (!value || (G_VALUE_TYPE (value) == GDA_TYPE_NULL)) {
+ g_set_error (error, GDA_SERVER_OPERATION_ERROR, GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
+ _("Wrong SQL identifier value"));
return NULL;
+ }
+
g_return_val_if_fail (G_VALUE_TYPE (value) == G_TYPE_STRING, NULL);
+ const gchar *str;
+ str = g_value_get_string (value);
+ if (!str || !*str) {
+ g_set_error (error, GDA_SERVER_OPERATION_ERROR, GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
+ _("Wrong SQL identifier value"));
+ return NULL;
+ }
+
if (cnc)
g_object_get (G_OBJECT (cnc), "options", &cncoptions, NULL);
- return gda_sql_identifier_quote (g_value_get_string (value), cnc, prov, FALSE,
+ return gda_sql_identifier_quote (str, cnc, prov, FALSE,
cncoptions & GDA_CONNECTION_OPTIONS_SQL_IDENTIFIERS_CASE_SENSITIVE);
}
diff --git a/libgda/gda-server-operation.h b/libgda/gda-server-operation.h
index cec195f..fb3ba43 100644
--- a/libgda/gda-server-operation.h
+++ b/libgda/gda-server-operation.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2006 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2006 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2010 David King <davidk openismus com>
* Copyright (C) 2010 Jonh Wendell <jwendell gnome org>
*
@@ -208,10 +208,11 @@ const GValue *gda_server_operation_get_value_at (GdaServ
const GValue *gda_server_operation_get_value_at_path (GdaServerOperation *op, const gchar
*path);
gchar *gda_server_operation_get_sql_identifier_at (GdaServerOperation *op,
GdaConnection *cnc,
GdaServerProvider *prov,
- const gchar *path_format, ...);
+ const gchar *path_format, GError
**error,
+ ...);
gchar *gda_server_operation_get_sql_identifier_at_path (GdaServerOperation *op,
GdaConnection *cnc,
GdaServerProvider *prov,
- const gchar *path);
+ const gchar *path, GError
**error);
gboolean gda_server_operation_set_value_at (GdaServerOperation *op, const gchar
*value,
GError **error, const gchar
*path_format, ...);
gboolean gda_server_operation_set_value_at_path (GdaServerOperation *op, const gchar
*value,
diff --git a/libgda/sqlite/gda-sqlite-ddl.c b/libgda/sqlite/gda-sqlite-ddl.c
index c879057..58c4fb3 100644
--- a/libgda/sqlite/gda-sqlite-ddl.c
+++ b/libgda/sqlite/gda-sqlite-ddl.c
@@ -53,7 +53,11 @@ _gda_sqlite_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF NOT EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
@@ -71,7 +75,12 @@ _gda_sqlite_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc
value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
+
"/FIELDS_A/@COLUMN_NAME/%d", error,
+ i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
pkfields = g_slist_append (pkfields, tmp);
nbpkfields++;
}
@@ -87,7 +96,12 @@ _gda_sqlite_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc
else
g_string_append (string, ", ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/FIELDS_A/@COLUMN_NAME/%d", i);
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append_c (string, ' ');
@@ -230,7 +244,7 @@ _gda_sqlite_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc
gchar *
_gda_sqlite_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
- GdaServerOperation *op, G_GNUC_UNUSED GError **error)
+ GdaServerOperation *op, GError **error)
{
GString *string;
const GValue *value;
@@ -244,7 +258,11 @@ _gda_sqlite_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, " IF EXISTS");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
@@ -257,7 +275,7 @@ _gda_sqlite_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
gchar *
_gda_sqlite_render_RENAME_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
- GdaServerOperation *op, G_GNUC_UNUSED GError **error)
+ GdaServerOperation *op, GError **error)
{
GString *string;
gchar *sql = NULL;
@@ -266,11 +284,19 @@ _gda_sqlite_render_RENAME_TABLE (GdaServerProvider *provider, GdaConnection *cnc
/* DROP TABLE */
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, " RENAME TO ");
g_string_append (string, tmp);
g_free (tmp);
@@ -293,13 +319,21 @@ _gda_sqlite_render_ADD_COLUMN (GdaServerProvider *provider, GdaConnection *cnc,
/* DROP TABLE */
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " ADD COLUMN ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
@@ -377,13 +411,21 @@ _gda_sqlite_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc
g_string_append (string, " IF NOT EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " ON ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
@@ -394,7 +436,7 @@ _gda_sqlite_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc
nrows = gda_server_operation_get_sequence_size (op, "/INDEX_FIELDS_S");
for (i = 0; i < nrows; i++) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/INDEX_FIELDS_S/%d/INDEX_FIELD", i);
+ "/INDEX_FIELDS_S/%d/INDEX_FIELD", error, i);
if (tmp) {
if (i != 0)
g_string_append (string, ", ");
@@ -420,6 +462,10 @@ _gda_sqlite_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc
}
}
}
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
}
g_string_append (string, ")");
@@ -446,7 +492,11 @@ _gda_sqlite_render_DROP_INDEX (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
@@ -477,7 +527,11 @@ _gda_sqlite_render_CREATE_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF NOT EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
@@ -515,7 +569,11 @@ _gda_sqlite_render_DROP_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, " IF EXISTS");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DESC_P/VIEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DESC_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
diff --git a/providers/jdbc/gda-jdbc-ddl.c b/providers/jdbc/gda-jdbc-ddl.c
index 8e4ca9f..a985a36 100644
--- a/providers/jdbc/gda-jdbc-ddl.c
+++ b/providers/jdbc/gda-jdbc-ddl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -41,7 +41,11 @@ gda_jdbc_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
/* CREATE TABLE */
string = g_string_new ("CREATE TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
@@ -59,7 +63,13 @@ gda_jdbc_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
pkfields = g_slist_append (pkfields, tmp);
nbpkfields++;
}
@@ -75,7 +85,12 @@ gda_jdbc_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append_c (string, ' ');
diff --git a/providers/mysql/gda-mysql-ddl.c b/providers/mysql/gda-mysql-ddl.c
index c7fd5d9..a80c971 100644
--- a/providers/mysql/gda-mysql-ddl.c
+++ b/providers/mysql/gda-mysql-ddl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 - 2009 Bas Driessen <bas driessen xobas com>
- * Copyright (C) 2006 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2006 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2008 - 2011 Murray Cumming <murrayc murrayc com>
*
* This library is free software; you can redistribute it and/or
@@ -40,19 +40,29 @@ gda_mysql_render_CREATE_DB (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF NOT EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DEF_P/DB_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DEF_P/DB_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- value = gda_server_operation_get_value_at (op, "/DB_DEF_P/DB_CSET");
+ value = gda_server_operation_get_value_at_path (op, "/DB_DEF_P/DB_CSET");
if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value)) {
g_string_append (string, " CHARACTER SET ");
g_string_append (string, g_value_get_string (value));
first = FALSE;
}
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DEF_P/DB_COLLATION");
- if (tmp) {
+ if (gda_server_operation_get_value_at_path (op, "/DB_DEF_P/DB_COLLATION")) {
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/DB_DEF_P/DB_COLLATION", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
if (first)
first = FALSE;
else
@@ -83,7 +93,11 @@ gda_mysql_render_DROP_DB (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DESC_P/DB_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DESC_P/DB_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
@@ -100,7 +114,6 @@ gda_mysql_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
{
GString *string;
const GValue *value;
- gboolean allok = TRUE;
gboolean hasfields = FALSE;
gint nrows;
gint i;
@@ -120,110 +133,124 @@ gda_mysql_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "IF NOT EXISTS ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
/* FIELDS */
- if (allok) {
- GdaServerOperationNode *node;
+ GdaServerOperationNode *node;
- node = gda_server_operation_get_node_info (op, "/FIELDS_A");
- g_assert (node);
+ node = gda_server_operation_get_node_info (op, "/FIELDS_A");
+ g_assert (node);
- /* finding if there is a composed primary key */
- nrows = gda_data_model_get_n_rows (node->model);
- for (i = 0; i < nrows; i++) {
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
- pkfields = g_slist_append (pkfields, tmp);
- nbpkfields ++;
+ /* finding if there is a composed primary key */
+ nrows = gda_data_model_get_n_rows (node->model);
+ for (i = 0; i < nrows; i++) {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+
+ pkfields = g_slist_append (pkfields, tmp);
+ nbpkfields ++;
}
+ }
- /* manually defined fields */
- first = TRUE;
- for (i = 0; i < nrows; i++) {
- hasfields = TRUE;
- if (first)
- first = FALSE;
- else
- g_string_append (string, ", ");
-
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
- g_string_append (string, tmp);
- g_free (tmp);
- g_string_append_c (string, ' ');
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_TYPE/%d", i);
- g_string_append (string, g_value_get_string (value));
+ /* manually defined fields */
+ first = TRUE;
+ for (i = 0; i < nrows; i++) {
+ hasfields = TRUE;
+ if (first)
+ first = FALSE;
+ else
+ g_string_append (string, ", ");
+
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d", error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
+ g_string_append (string, tmp);
+ g_free (tmp);
+ g_string_append_c (string, ' ');
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_TYPE/%d", i);
+ g_string_append (string, g_value_get_string (value));
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SIZE/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_UINT)) {
- g_string_append_printf (string, "(%d", g_value_get_uint (value));
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SCALE/%d",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_UINT))
- g_string_append_printf (string, ",%d)", g_value_get_uint (value));
- else
- g_string_append (string, ")");
- }
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SIZE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_UINT)) {
+ g_string_append_printf (string, "(%d", g_value_get_uint (value));
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_DEFAULT/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- const gchar *str = g_value_get_string (value);
- if (str && *str) {
- g_string_append (string, " DEFAULT ");
- g_string_append (string, str);
- }
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SCALE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_UINT))
+ g_string_append_printf (string, ",%d)", g_value_get_uint (value));
+ else
+ g_string_append (string, ")");
+ }
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_DEFAULT/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+ const gchar *str = g_value_get_string (value);
+ if (str && *str) {
+ g_string_append (string, " DEFAULT ");
+ g_string_append (string, str);
}
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_NNUL/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " NOT NULL");
+ }
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_NNUL/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " NOT NULL");
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_AUTOINC/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " AUTO_INCREMENT");
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_AUTOINC/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " AUTO_INCREMENT");
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_UNIQUE/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " UNIQUE");
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_UNIQUE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " UNIQUE");
- if (nbpkfields == 1) {
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean
(value))
- g_string_append (string, " PRIMARY KEY");
- }
+ if (nbpkfields == 1) {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " PRIMARY KEY");
+ }
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_COMMENT/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- GdaDataHandler *dh;
- gchar *str;
-
- dh = gda_server_provider_get_data_handler_g_type (provider, cnc,
G_TYPE_STRING);
- str = gda_data_handler_get_sql_from_value (dh, value);
- if (str) {
- if (*str) {
- g_string_append (string, " COMMENT ");
- g_string_append (string, str);
- }
- g_free (str);
- }
- }
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_CHECK/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- const gchar *str = g_value_get_string (value);
- if (str && *str) {
- g_string_append (string, " CHECK (");
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_COMMENT/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+ GdaDataHandler *dh;
+ gchar *str;
+
+ dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
+ str = gda_data_handler_get_sql_from_value (dh, value);
+ if (str) {
+ if (*str) {
+ g_string_append (string, " COMMENT ");
g_string_append (string, str);
- g_string_append_c (string, ')');
}
+ g_free (str);
+ }
+ }
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_CHECK/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+ const gchar *str = g_value_get_string (value);
+ if (str && *str) {
+ g_string_append (string, " CHECK (");
+ g_string_append (string, str);
+ g_string_append_c (string, ')');
}
}
}
@@ -244,232 +271,225 @@ gda_mysql_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
g_slist_free (pkfields);
/* foreign keys */
- if (allok) {
- GdaServerOperationNode *node;
-
- first = TRUE;
- node = gda_server_operation_get_node_info (op, "/FKEY_S");
- if (node) {
- nrows = gda_server_operation_get_sequence_size (op, "/FKEY_S");
- for (i = 0; i < nrows; i++) {
- gint nbfields = 0, j;
-
- g_string_append (string, ", FOREIGN KEY (");
- node = gda_server_operation_get_node_info (op, "/FKEY_S/%d/FKEY_FIELDS_A", i);
- if (!node || ((nbfields = gda_data_model_get_n_rows (node->model)) == 0)) {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s", _("No field specified in foreign key constraint"));
- }
- else {
- for (j = 0; j < nbfields; j++) {
- if (j != 0)
- g_string_append (string, ", ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc,
provider,
-
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_FIELD/%d", i, j);
- if (tmp) {
- g_string_append (string, tmp);
- g_free (tmp);
- }
- else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
-
GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("Empty field specified in foreign key
constraint"));
- }
- }
- }
- g_string_append (string, ") REFERENCES ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FKEY_S/%d/FKEY_REF_TABLE", i);
- if (tmp) {
- g_string_append (string, tmp);
- g_free (tmp);
- }
- else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s", _("No referenced table specified in foreign key
constraint"));
- }
+ first = TRUE;
+ node = gda_server_operation_get_node_info (op, "/FKEY_S");
+ if (node) {
+ nrows = gda_server_operation_get_sequence_size (op, "/FKEY_S");
+ for (i = 0; i < nrows; i++) {
+ gint nbfields = 0, j;
- g_string_append (string, " (");
+ g_string_append (string, ", FOREIGN KEY (");
+ node = gda_server_operation_get_node_info (op, "/FKEY_S/%d/FKEY_FIELDS_A", i);
+ if (!node || ((nbfields = gda_data_model_get_n_rows (node->model)) == 0)) {
+ g_string_free (string, TRUE);
+ g_set_error (error, GDA_SERVER_OPERATION_ERROR,
+ GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
+ "%s", _("No field specified in foreign key constraint"));
+ return NULL;
+ }
+ else {
for (j = 0; j < nbfields; j++) {
if (j != 0)
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_REF_PK_FIELD/%d", i, j);
+
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_FIELD/%d",
+ error, i, j);
if (tmp) {
g_string_append (string, tmp);
g_free (tmp);
}
else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("Empty referenced field specified in foreign
key constraint"));
+ g_string_free (string, TRUE);
+ return NULL;
}
}
- g_string_append_c (string, ')');
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_MATCH_TYPE",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " %s", g_value_get_string (value));
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONUPDATE", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " ON UPDATE %s", g_value_get_string
(value));
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONDELETE", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " ON DELETE %s", g_value_get_string
(value));
}
+ g_string_append (string, ") REFERENCES ");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FKEY_S/%d/FKEY_REF_TABLE", error,
i);
+ if (tmp) {
+ g_string_append (string, tmp);
+ g_free (tmp);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
+ g_string_append (string, " (");
+ for (j = 0; j < nbfields; j++) {
+ if (j != 0)
+ g_string_append (string, ", ");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_REF_PK_FIELD/%d",
+ error, i, j);
+ if (tmp) {
+ g_string_append (string, tmp);
+ g_free (tmp);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+ }
+ g_string_append_c (string, ')');
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_MATCH_TYPE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " %s", g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONUPDATE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " ON UPDATE %s", g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONDELETE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " ON DELETE %s", g_value_get_string (value));
}
}
g_string_append (string, ")");
if (!hasfields) {
- allok = FALSE;
g_set_error (error, GDA_SERVER_OPERATION_ERROR,
GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
"%s", _("Table to create must have at least one row"));
+ g_string_free (string, TRUE);
+ return NULL;
}
/* other options */
- if (allok) {
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_ENGINE");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value))
- g_string_append (string, " ENGINE = ");
- g_string_append (string, g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_ENGINE");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value))
+ g_string_append (string, " ENGINE = ");
+ g_string_append (string, g_value_get_string (value));
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_AUTOINC_VALUE");
- if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
- g_string_append_printf (string, " AUTO_INCREMENT = %d", g_value_get_int (value));
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_AUTOINC_VALUE");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
+ g_string_append_printf (string, " AUTO_INCREMENT = %d", g_value_get_int (value));
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_AVG_ROW_LENTGH");
- if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
- g_string_append_printf (string, " AVG_ROW_LENGTH = %d", g_value_get_int (value));
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_AVG_ROW_LENTGH");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
+ g_string_append_printf (string, " AVG_ROW_LENGTH = %d", g_value_get_int (value));
-
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_CSET");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- g_string_append (string, " CHARACTER SET ");
- g_string_append (string, g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_CSET");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ g_string_append (string, " CHARACTER SET ");
+ g_string_append (string, g_value_get_string (value));
+ if (gda_server_operation_get_value_at_path (op, "/TABLE_OPTIONS_P/TABLE_COLLATION")) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/TABLE_OPTIONS_P/TABLE_COLLATION");
- if (tmp) {
- g_string_append (string, " COLLATE ");
- g_string_append (string, tmp);
- g_free (tmp);
- }
- }
-
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_CHECKSUM");
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " CHECKSUM = 1");
-
- value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_COMMENT");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- GdaDataHandler *dh;
- gchar *str;
-
- dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
- str = gda_data_handler_get_sql_from_value (dh, value);
- if (str) {
- g_string_append (string, " COMMENT = ");
- g_string_append (string, str);
- g_free (str);
+ "/TABLE_OPTIONS_P/TABLE_COLLATION",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+ g_string_append (string, " COLLATE ");
+ g_string_append (string, tmp);
+ g_free (tmp);
}
-
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_MAX_ROWS");
- if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
- g_string_append_printf (string, " MAX_ROWS = %d", g_value_get_int (value));
-
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_MIN_ROWS");
- if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
- g_string_append_printf (string, " MIN_ROWS = %d", g_value_get_int (value));
-
- value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_PACK_KEYS");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- g_string_append (string, " PACK_KEYS = ");
- g_string_append (string, g_value_get_string (value));
- }
+ }
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_PASSWORD");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- GdaDataHandler *dh;
- gchar *str;
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_CHECKSUM");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " CHECKSUM = 1");
- dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
- str = gda_data_handler_get_sql_from_value (dh, value);
- if (str) {
- g_string_append (string, " PASSWORD = ");
- g_string_append (string, str);
- g_free (str);
- }
+ value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_COMMENT");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ GdaDataHandler *dh;
+ gchar *str;
+
+ dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
+ str = gda_data_handler_get_sql_from_value (dh, value);
+ if (str) {
+ g_string_append (string, " COMMENT = ");
+ g_string_append (string, str);
+ g_free (str);
}
+ }
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_DELAY_KEY_WRITE");
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " DELAY_KEY_WRITE = 1");
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_MAX_ROWS");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
+ g_string_append_printf (string, " MAX_ROWS = %d", g_value_get_int (value));
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_ROW_FORMAT");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- g_string_append (string, " ROW_FORMAT = ");
- g_string_append (string, g_value_get_string (value));
- }
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_MIN_ROWS");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_INT))
+ g_string_append_printf (string, " MIN_ROWS = %d", g_value_get_int (value));
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_UNION");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- g_string_append (string, " UNION = ");
- g_string_append (string, g_value_get_string (value));
- }
+ value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_PACK_KEYS");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ g_string_append (string, " PACK_KEYS = ");
+ g_string_append (string, g_value_get_string (value));
+ }
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_INSERT_METHOD");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- g_string_append (string, " INSERT_METHOD = ");
- g_string_append (string, g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_PASSWORD");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ GdaDataHandler *dh;
+ gchar *str;
+
+ dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
+ str = gda_data_handler_get_sql_from_value (dh, value);
+ if (str) {
+ g_string_append (string, " PASSWORD = ");
+ g_string_append (string, str);
+ g_free (str);
}
+ }
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_DATA_DIR");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- GdaDataHandler *dh;
- gchar *str;
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_DELAY_KEY_WRITE");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " DELAY_KEY_WRITE = 1");
- dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
- str = gda_data_handler_get_sql_from_value (dh, value);
- if (str) {
- g_string_append (string, " DATA_DIRECTORY = ");
- g_string_append (string, str);
- g_free (str);
- }
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_ROW_FORMAT");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ g_string_append (string, " ROW_FORMAT = ");
+ g_string_append (string, g_value_get_string (value));
+ }
+
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_UNION");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ g_string_append (string, " UNION = ");
+ g_string_append (string, g_value_get_string (value));
+ }
+
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_INSERT_METHOD");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ g_string_append (string, " INSERT_METHOD = ");
+ g_string_append (string, g_value_get_string (value));
+ }
+
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_DATA_DIR");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ GdaDataHandler *dh;
+ gchar *str;
+
+ dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
+ str = gda_data_handler_get_sql_from_value (dh, value);
+ if (str) {
+ g_string_append (string, " DATA_DIRECTORY = ");
+ g_string_append (string, str);
+ g_free (str);
}
+ }
- value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_INDEX_DIR");
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
- g_value_get_string (value) && *g_value_get_string (value)) {
- GdaDataHandler *dh;
- gchar *str;
+ value = gda_server_operation_get_value_at (op, "/TABLE_OPTIONS_P/TABLE_INDEX_DIR");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) &&
+ g_value_get_string (value) && *g_value_get_string (value)) {
+ GdaDataHandler *dh;
+ gchar *str;
- dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
- str = gda_data_handler_get_sql_from_value (dh, value);
- if (str) {
- g_string_append (string, " INDEX_DIRECTORY = ");
- g_string_append (string, str);
- g_free (str);
- }
+ dh = gda_server_provider_get_data_handler_g_type (provider, cnc, G_TYPE_STRING);
+ str = gda_data_handler_get_sql_from_value (dh, value);
+ if (str) {
+ g_string_append (string, " INDEX_DIRECTORY = ");
+ g_string_append (string, str);
+ g_free (str);
}
}
@@ -500,7 +520,12 @@ gda_mysql_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, " IF EXISTS");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
@@ -527,11 +552,21 @@ gda_mysql_render_RENAME_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, " RENAME TO ");
g_string_append (string, tmp);
g_free (tmp);
@@ -554,7 +589,12 @@ gda_mysql_render_COMMENT_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -582,13 +622,23 @@ gda_mysql_render_ADD_COLUMN (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " ADD COLUMN ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -689,11 +739,21 @@ gda_mysql_render_DROP_COLUMN (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, " DROP COLUMN ");
g_string_append (string, tmp);
g_free (tmp);
@@ -718,12 +778,22 @@ gda_mysql_render_COMMENT_COLUMN (GdaServerProvider *provider, GdaConnection *cnc
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
table_name = tmp;
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
column_name = tmp;
g_string_append (string, " CHANGE COLUMN ");
g_string_append (string, tmp);
@@ -805,7 +875,12 @@ gda_mysql_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, "INDEX ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -817,7 +892,12 @@ gda_mysql_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, " ON ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -828,23 +908,25 @@ gda_mysql_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cnc,
nrows = gda_server_operation_get_sequence_size (op, "/INDEX_FIELDS_S");
for (i = 0; i < nrows; i++) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/INDEX_FIELDS_S/%d/INDEX_FIELD", i);
- if (tmp) {
+ "/INDEX_FIELDS_S/%d/INDEX_FIELD", error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
- if (i != 0)
- g_string_append (string, ", ");
- g_string_append (string, tmp);
- g_free (tmp);
+ if (i != 0)
+ g_string_append (string, ", ");
+ g_string_append (string, tmp);
+ g_free (tmp);
- value = gda_server_operation_get_value_at (op, "/INDEX_FIELDS_S/%d/INDEX_LENGTH", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_INT) && (g_value_get_int (value) > 0))
- g_string_append_printf (string, " (%d)", g_value_get_int (value));
-
- value = gda_server_operation_get_value_at (op, "/INDEX_FIELDS_S/%d/INDEX_SORT_ORDER",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value)) {
- g_string_append_c (string, ' ');
- g_string_append (string, g_value_get_string (value));
- }
+ value = gda_server_operation_get_value_at (op, "/INDEX_FIELDS_S/%d/INDEX_LENGTH", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_INT) && (g_value_get_int (value) > 0))
+ g_string_append_printf (string, " (%d)", g_value_get_int (value));
+
+ value = gda_server_operation_get_value_at (op, "/INDEX_FIELDS_S/%d/INDEX_SORT_ORDER", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value)) {
+ g_string_append_c (string, ' ');
+ g_string_append (string, g_value_get_string (value));
}
}
@@ -866,11 +948,21 @@ gda_mysql_render_DROP_INDEX (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("DROP INDEX ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_ON_TABLE");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_ON_TABLE",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, " ON ");
g_string_append (string, tmp);
g_free (tmp);
@@ -900,7 +992,12 @@ gda_mysql_render_CREATE_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, "VIEW ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -915,21 +1012,18 @@ gda_mysql_render_CREATE_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, " (");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
- if (tmp) {
- if (i != 0)
- g_string_append (string, ", ");
-
- g_string_append (string, tmp);
- g_string_append_c (string, ' ');
- g_free (tmp);
- }
- else {
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s", _("Incorrect specified column name"));
- allok = FALSE;
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+
+ if (i != 0)
+ g_string_append (string, ", ");
+
+ g_string_append (string, tmp);
+ g_string_append_c (string, ' ');
+ g_free (tmp);
}
if (i > 0)
g_string_append (string, ")");
@@ -969,7 +1063,12 @@ gda_mysql_render_DROP_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, " IF EXISTS");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DESC_P/VIEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DESC_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
diff --git a/providers/oracle/gda-oracle-ddl.c b/providers/oracle/gda-oracle-ddl.c
index 2267646..7da2921 100644
--- a/providers/oracle/gda-oracle-ddl.c
+++ b/providers/oracle/gda-oracle-ddl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 Bas Driessen <bas driessen xobas com>
- * Copyright (C) 2009 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2009 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -41,7 +41,11 @@ gda_oracle_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
/* CREATE TABLE */
string = g_string_new ("CREATE TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
@@ -59,7 +63,13 @@ gda_oracle_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
pkfields = g_slist_append (pkfields, tmp);
nbpkfields ++;
}
@@ -75,7 +85,12 @@ gda_oracle_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append_c (string, ' ');
diff --git a/providers/postgres/gda-postgres-ddl.c b/providers/postgres/gda-postgres-ddl.c
index 60f7382..4364add 100644
--- a/providers/postgres/gda-postgres-ddl.c
+++ b/providers/postgres/gda-postgres-ddl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006 Bas Driessen <bas driessen xobas com>
- * Copyright (C) 2006 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2006 - 2014 Vivien Malerba <malerba gnome-db org>
* Copyright (C) 2008 - 2011 Murray Cumming <murrayc murrayc com>
* Copyright (C) 2010 David King <davidk openismus com>
*
@@ -36,7 +36,12 @@ gda_postgres_render_CREATE_DB (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("CREATE DATABASE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DEF_P/DB_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DEF_P/DB_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -88,7 +93,12 @@ gda_postgres_render_DROP_DB (GdaServerProvider *provider, GdaConnection *cnc,
string = g_string_new ("DROP DATABASE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DESC_P/DB_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/DB_DESC_P/DB_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -104,7 +114,6 @@ gda_postgres_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cn
{
GString *string;
const GValue *value;
- gboolean allok = TRUE;
gboolean hasfields = FALSE;
gint nrows;
gint i;
@@ -121,123 +130,139 @@ gda_postgres_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cn
g_string_append (string, "TABLE ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/TABLE_DEF_P/TABLE_NAME");
+ "/TABLE_DEF_P/TABLE_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
/* FIELDS */
- if (allok) {
- GdaServerOperationNode *node;
+ GdaServerOperationNode *node;
- node = gda_server_operation_get_node_info (op, "/FIELDS_A");
- g_assert (node);
+ node = gda_server_operation_get_node_info (op, "/FIELDS_A");
+ g_assert (node);
- /* finding if there is a composed primary key */
- nrows = gda_data_model_get_n_rows (node->model);
- for (i = 0; i < nrows; i++) {
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
- pkfields = g_slist_append (pkfields, tmp);
- nbpkfields ++;
+ /* finding if there is a composed primary key */
+ nrows = gda_data_model_get_n_rows (node->model);
+ for (i = 0; i < nrows; i++) {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+
+ pkfields = g_slist_append (pkfields, tmp);
+ nbpkfields ++;
}
+ }
- /* manually defined fields */
- first = TRUE;
- for (i = 0; i < nrows; i++) {
- hasfields = TRUE;
- if (first)
- first = FALSE;
+ /* manually defined fields */
+ first = TRUE;
+ for (i = 0; i < nrows; i++) {
+ hasfields = TRUE;
+ if (first)
+ first = FALSE;
+ else
+ g_string_append (string, ", ");
+
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d", error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
+ g_string_append (string, tmp);
+ g_free (tmp);
+ g_string_append_c (string, ' ');
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_AUTOINC/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, "serial");
+ else {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_TYPE/%d", i);
+ g_string_append (string, g_value_get_string (value));
+ }
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SIZE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_UINT)) {
+ g_string_append_printf (string, "(%d", g_value_get_uint (value));
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SCALE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_UINT))
+ g_string_append_printf (string, ",%d)", g_value_get_uint (value));
else
- g_string_append (string, ", ");
-
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
- g_string_append (string, tmp);
- g_free (tmp);
- g_string_append_c (string, ' ');
+ g_string_append (string, ")");
+ }
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_AUTOINC/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, "serial");
- else {
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_TYPE/%d",
i);
- g_string_append (string, g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_DEFAULT/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+ const gchar *str = g_value_get_string (value);
+ if (str && *str) {
+ g_string_append (string, " DEFAULT ");
+ g_string_append (string, str);
}
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SIZE/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_UINT)) {
- g_string_append_printf (string, "(%d", g_value_get_uint (value));
+ }
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_SCALE/%d",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_UINT))
- g_string_append_printf (string, ",%d)", g_value_get_uint (value));
- else
- g_string_append (string, ")");
- }
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_DEFAULT/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- const gchar *str = g_value_get_string (value);
- if (str && *str) {
- g_string_append (string, " DEFAULT ");
- g_string_append (string, str);
- }
- }
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_NNUL/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " NOT NULL");
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_UNIQUE/%d", i);
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_NNUL/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " NOT NULL");
+
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_UNIQUE/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " UNIQUE");
+
+ if (nbpkfields == 1) {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " UNIQUE");
-
- if (nbpkfields == 1) {
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean
(value))
- g_string_append (string, " PRIMARY KEY");
- }
-
- value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_CHECK/%d", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
- const gchar *str = g_value_get_string (value);
- if (str && *str) {
- g_string_append (string, " CHECK (");
- g_string_append (string, str);
- g_string_append_c (string, ')');
- }
- }
+ g_string_append (string, " PRIMARY KEY");
}
- /* LIKE inheritance */
- nrows = gda_server_operation_get_sequence_size (op, "/TABLE_PARENTS_S");
- for (i = 0; i < nrows; i++) {
- value = gda_server_operation_get_value_at (op,
"/TABLE_PARENTS_S/%d/TABLE_PARENT_COPY", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && !g_value_get_boolean (value)) {
+ value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_CHECK/%d", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+ const gchar *str = g_value_get_string (value);
+ if (str && *str) {
+ g_string_append (string, " CHECK (");
+ g_string_append (string, str);
+ g_string_append_c (string, ')');
+ }
+ }
+ }
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/TABLE_PARENTS_S/%d/TABLE_PARENT_TABLE", i);
- if (tmp && *tmp) {
- hasfields = TRUE;
- if (first)
- first = FALSE;
- else
- g_string_append (string, ", ");
-
- g_string_append (string, "LIKE ");
- g_string_append (string, tmp);
- value = gda_server_operation_get_value_at (op,
-
"/TABLE_PARENTS_S/%d/TABLE_PARENT_COPY_DEFAULTS", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) &&
- g_value_get_boolean (value))
- g_string_append (string, " INCLUDING DEFAULTS");
- }
- g_free (tmp);
+ /* LIKE inheritance */
+ nrows = gda_server_operation_get_sequence_size (op, "/TABLE_PARENTS_S");
+ for (i = 0; i < nrows; i++) {
+ value = gda_server_operation_get_value_at (op, "/TABLE_PARENTS_S/%d/TABLE_PARENT_COPY", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && !g_value_get_boolean (value)) {
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+
"/TABLE_PARENTS_S/%d/TABLE_PARENT_TABLE",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+
+ hasfields = TRUE;
+ if (first)
+ first = FALSE;
+ else
+ g_string_append (string, ", ");
+
+ g_string_append (string, "LIKE ");
+ g_string_append (string, tmp);
+ value = gda_server_operation_get_value_at (op,
+
"/TABLE_PARENTS_S/%d/TABLE_PARENT_COPY_DEFAULTS", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) &&
+ g_value_get_boolean (value))
+ g_string_append (string, " INCLUDING DEFAULTS");
+ g_free (tmp);
}
}
@@ -257,93 +282,83 @@ gda_postgres_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cn
g_slist_free (pkfields);
/* foreign keys */
- if (allok) {
- GdaServerOperationNode *node;
-
- first = TRUE;
- node = gda_server_operation_get_node_info (op, "/FKEY_S");
- if (node) {
- nrows = gda_server_operation_get_sequence_size (op, "/FKEY_S");
- for (i = 0; i < nrows; i++) {
- gint nbfields = 0;
- gint j;
-
- g_string_append (string, ", FOREIGN KEY (");
- node = gda_server_operation_get_node_info (op, "/FKEY_S/%d/FKEY_FIELDS_A", i);
- if (!node || ((nbfields = gda_data_model_get_n_rows (node->model)) == 0)) {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("No field specified in foreign key constraint"));
- }
- else {
- for (j = 0; j < nbfields; j++) {
- if (j != 0)
- g_string_append (string, ", ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc,
provider,
- "/FKEY_S/%d/FKEY_FIELDS_A/@FK_FIELD/%d", i,
j);
- if (tmp) {
- g_string_append (string, tmp);
- g_free (tmp);
- }
- else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
-
GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("Empty field specified in foreign key
constraint"));
- }
- }
- }
- g_string_append (string, ") REFERENCES ");
-
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FKEY_S/%d/FKEY_REF_TABLE", i);
- if (tmp) {
- g_string_append (string, tmp);
- g_free (tmp);
- }
- else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("No referenced table specified in foreign key
constraint"));
- }
-
- g_string_append (string, " (");
+ first = TRUE;
+ node = gda_server_operation_get_node_info (op, "/FKEY_S");
+ if (node) {
+ nrows = gda_server_operation_get_sequence_size (op, "/FKEY_S");
+ for (i = 0; i < nrows; i++) {
+ gint nbfields = 0;
+ gint j;
+
+ g_string_append (string, ", FOREIGN KEY (");
+ node = gda_server_operation_get_node_info (op, "/FKEY_S/%d/FKEY_FIELDS_A", i);
+ if (!node || ((nbfields = gda_data_model_get_n_rows (node->model)) == 0)) {
+ g_string_free (string, TRUE);
+ g_set_error (error, GDA_SERVER_OPERATION_ERROR,
+ GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
+ "%s",
+ _("No field specified in foreign key constraint"));
+ return NULL;
+ }
+ else {
for (j = 0; j < nbfields; j++) {
if (j != 0)
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_REF_PK_FIELD/%d", i, j);
+
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_FIELD/%d",
+ error, i, j);
if (tmp) {
g_string_append (string, tmp);
g_free (tmp);
}
else {
- allok = FALSE;
- g_set_error (error, GDA_SERVER_OPERATION_ERROR,
- GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
- "%s",
- _("Empty referenced field specified in foreign
key constraint"));
+ g_string_free (string, TRUE);
+ return NULL;
}
}
- g_string_append_c (string, ')');
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_MATCH_TYPE",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " %s", g_value_get_string (value));
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONUPDATE", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " ON UPDATE %s", g_value_get_string
(value));
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONDELETE", i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " ON DELETE %s", g_value_get_string
(value));
- value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_DEFERRABLE",
i);
- if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string
(value))
- g_string_append_printf (string, " %s", g_value_get_string (value));
}
+ g_string_append (string, ") REFERENCES ");
+
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FKEY_S/%d/FKEY_REF_TABLE", error,
i);
+ if (tmp) {
+ g_string_append (string, tmp);
+ g_free (tmp);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
+ g_string_append (string, " (");
+ for (j = 0; j < nbfields; j++) {
+ if (j != 0)
+ g_string_append (string, ", ");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+
"/FKEY_S/%d/FKEY_FIELDS_A/@FK_REF_PK_FIELD/%d",
+ error, i, j);
+ if (tmp) {
+ g_string_append (string, tmp);
+ g_free (tmp);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+ }
+ g_string_append_c (string, ')');
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_MATCH_TYPE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " %s", g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONUPDATE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " ON UPDATE %s", g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_ONDELETE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " ON DELETE %s", g_value_get_string (value));
+ value = gda_server_operation_get_value_at (op, "/FKEY_S/%d/FKEY_DEFERRABLE", i);
+ if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string (value))
+ g_string_append_printf (string, " %s", g_value_get_string (value));
}
}
@@ -356,7 +371,8 @@ gda_postgres_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cn
value = gda_server_operation_get_value_at (op, "/TABLE_PARENTS_S/%d/TABLE_PARENT_COPY", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/TABLE_PARENTS_S/%d/TABLE_PARENT_TABLE", i);
+
"/TABLE_PARENTS_S/%d/TABLE_PARENT_TABLE",
+ error, i);
if (tmp) {
hasfields = TRUE;
if (first) {
@@ -368,21 +384,24 @@ gda_postgres_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cn
g_string_append (string, tmp);
g_free (tmp);
}
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
}
}
if (!hasfields) {
- allok = FALSE;
+ g_string_free (string, TRUE);
g_set_error (error, GDA_SERVER_OPERATION_ERROR,
GDA_SERVER_OPERATION_INCORRECT_VALUE_ERROR,
"%s", _("Table to create must have at least one row"));
+ return NULL;
}
- if (allok) {
- value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_WITH_OIDS");
- if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
- g_string_append (string, " WITH OIDS");
- }
+ value = gda_server_operation_get_value_at (op, "/TABLE_DEF_P/TABLE_WITH_OIDS");
+ if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
+ g_string_append (string, " WITH OIDS");
sql = string->str;
g_string_free (string, FALSE);
@@ -402,7 +421,12 @@ gda_postgres_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cn
string = g_string_new ("DROP TABLE ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/TABLE_DESC_P/TABLE_NAME");
+ "/TABLE_DESC_P/TABLE_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -428,11 +452,21 @@ gda_postgres_render_RENAME_TABLE (GdaServerProvider *provider, GdaConnection *cn
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DESC_P/TABLE_NEW_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, " RENAME TO ");
g_string_append (string, tmp);
g_free (tmp);
@@ -459,13 +493,23 @@ gda_postgres_render_ADD_COLUMN (GdaServerProvider *provider, GdaConnection *cnc,
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value))
g_string_append (string, "ONLY ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " ADD COLUMN ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DEF_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -533,10 +577,20 @@ gda_postgres_render_DROP_COLUMN (GdaServerProvider *provider, GdaConnection *cn
string = g_string_new ("ALTER TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/COLUMN_DESC_P/COLUMN_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, " DROP COLUMN ");
g_string_append (string, tmp);
g_free (tmp);
@@ -579,13 +633,23 @@ gda_postgres_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cn
g_string_append (string, "INDEX ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " ON ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DEF_P/INDEX_ON_TABLE",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -602,13 +666,18 @@ gda_postgres_render_CREATE_INDEX (GdaServerProvider *provider, GdaConnection *cn
nrows = gda_server_operation_get_sequence_size (op, "/INDEX_FIELDS_S");
for (i = 0; i < nrows; i++) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/INDEX_FIELDS_S/%d/INDEX_FIELD", i);
+ "/INDEX_FIELDS_S/%d/INDEX_FIELD", error, i);
if (tmp) {
if (i != 0)
g_string_append (string, ", ");
g_string_append (string, tmp);
g_free (tmp);
}
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
}
g_string_append (string, ")");
@@ -643,7 +712,12 @@ gda_postgres_render_DROP_INDEX (GdaServerProvider *provider, GdaConnection *cn
string = g_string_new ("DROP INDEX ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/INDEX_DESC_P/INDEX_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -665,7 +739,6 @@ gda_postgres_render_CREATE_VIEW (GdaServerProvider *provider, GdaConnection *cnc
{
GString *string;
const GValue *value;
- gboolean allok = TRUE;
gchar *sql = NULL;
gchar *tmp;
@@ -681,53 +754,51 @@ gda_postgres_render_CREATE_VIEW (GdaServerProvider *provider, GdaConnection *cnc
g_string_append (string, "VIEW ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/VIEW_DEF_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
- if (allok) {
- GdaServerOperationNode *node;
-
- node = gda_server_operation_get_node_info (op, "/FIELDS_A");
- if (node) {
- gint i, nrows;
- GString *cols = NULL;
-
- nrows = gda_data_model_get_n_rows (node->model);
- for (i = 0; i < nrows; i++) {
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
- if (!tmp)
- continue;
- if (cols)
- g_string_append (cols, ", ");
- g_string_append (cols, tmp);
- g_string_append_c (cols, ' ');
- g_free (tmp);
- }
- if (cols) {
- g_string_append_c (cols, ')');
- g_string_append (string, cols->str);
- g_string_free (cols, TRUE);
+ GdaServerOperationNode *node;
+
+ node = gda_server_operation_get_node_info (op, "/FIELDS_A");
+ if (node) {
+ gint i, nrows;
+ GString *cols = NULL;
+
+ nrows = gda_data_model_get_n_rows (node->model);
+ for (i = 0; i < nrows; i++) {
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
+ "/FIELDS_A/@COLUMN_NAME/%d",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
}
+ if (cols)
+ g_string_append (cols, ", ");
+ g_string_append (cols, tmp);
+ g_string_append_c (cols, ' ');
+ g_free (tmp);
+ }
+ if (cols) {
+ g_string_append_c (cols, ')');
+ g_string_append (string, cols->str);
+ g_string_free (cols, TRUE);
}
}
- if (allok) {
- value = gda_server_operation_get_value_at (op, "/VIEW_DEF_P/VIEW_DEF");
- g_assert (value && G_VALUE_HOLDS (value, G_TYPE_STRING));
- g_string_append (string, " AS ");
- g_string_append (string, g_value_get_string (value));
- }
+ value = gda_server_operation_get_value_at (op, "/VIEW_DEF_P/VIEW_DEF");
+ g_assert (value && G_VALUE_HOLDS (value, G_TYPE_STRING));
+ g_string_append (string, " AS ");
+ g_string_append (string, g_value_get_string (value));
- if (allok) {
- sql = string->str;
- g_string_free (string, FALSE);
- }
- else {
- sql = NULL;
- g_string_free (string, TRUE);
- }
+ sql = string->str;
+ g_string_free (string, FALSE);
return sql;
}
@@ -748,7 +819,12 @@ gda_postgres_render_DROP_VIEW (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, " IF EXISTS");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/VIEW_DESC_P/VIEW_NAME");
+ "/VIEW_DESC_P/VIEW_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
@@ -789,7 +865,12 @@ gda_postgres_render_CREATE_USER (GdaServerProvider *provider, GdaConnection *cnc
else
string = g_string_new ("CREATE USER ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/USER_DEF_P/USER_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/USER_DEF_P/USER_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
@@ -891,11 +972,13 @@ gda_postgres_render_CREATE_USER (GdaServerProvider *provider, GdaConnection *cnc
for (first = TRUE, i = 0; i < nrows; i++) {
gchar *name;
if (use_role)
- name = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/GROUPS_S/%d/ROLE", i);
+ name = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/GROUPS_S/%d/ROLE",
+ error, i);
else
- name = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/GROUPS_S/%d/USER", i);
+ name = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
"/GROUPS_S/%d/USER",
+ error, i);
- if (name && *name) {
+ if (name) {
if (first) {
first = FALSE;
if (use_role)
@@ -907,15 +990,19 @@ gda_postgres_render_CREATE_USER (GdaServerProvider *provider, GdaConnection *cnc
g_string_append (string, ", ");
g_string_append (string, name);
+ g_free (name);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
}
- g_free (name);
}
nrows = gda_server_operation_get_sequence_size (op, "/ROLES_S");
for (first = TRUE, i = 0; i < nrows; i++) {
gchar *name;
- name = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/ROLES_S/%d/ROLE", i);
- if (name && *name) {
+ name = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/ROLES_S/%d/ROLE",
error, i);
+ if (name) {
if (first) {
first = FALSE;
g_string_append (string, " ROLE ");
@@ -924,15 +1011,19 @@ gda_postgres_render_CREATE_USER (GdaServerProvider *provider, GdaConnection *cnc
g_string_append (string, ", ");
g_string_append (string, name);
+ g_free (name);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
}
- g_free (name);
}
nrows = gda_server_operation_get_sequence_size (op, "/ADMINS_S");
for (first = TRUE, i = 0; i < nrows; i++) {
gchar *name;
- name = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/ADMINS_S/%d/ROLE", i);
- if (name && *name) {
+ name = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/ADMINS_S/%d/ROLE",
error, i);
+ if (name) {
if (first) {
first = FALSE;
g_string_append (string, " ADMIN ");
@@ -941,8 +1032,12 @@ gda_postgres_render_CREATE_USER (GdaServerProvider *provider, GdaConnection *cnc
g_string_append (string, ", ");
g_string_append (string, name);
+ g_free (name);
+ }
+ else {
+ g_string_free (string, TRUE);
+ return NULL;
}
- g_free (name);
}
value = gda_server_operation_get_value_at (op, "/USER_DEF_P/VALIDITY");
@@ -999,7 +1094,12 @@ gda_postgres_render_DROP_USER (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, " IF EXISTS");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/USER_DESC_P/USER_NAME");
+ "/USER_DESC_P/USER_NAME", error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append_c (string, ' ');
g_string_append (string, tmp);
g_free (tmp);
diff --git a/providers/skel-implementation/capi/gda-capi-ddl.c
b/providers/skel-implementation/capi/gda-capi-ddl.c
index 0528fbd..30535b7 100644
--- a/providers/skel-implementation/capi/gda-capi-ddl.c
+++ b/providers/skel-implementation/capi/gda-capi-ddl.c
@@ -43,7 +43,11 @@ gda_capi_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
/* CREATE TABLE */
string = g_string_new ("CREATE TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
@@ -61,7 +65,11 @@ gda_capi_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
+
"/FIELDS_A/@COLUMN_NAME/%d", error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
pkfields = g_slist_append (pkfields, tmp);
nbpkfields++;
}
@@ -77,7 +85,12 @@ gda_capi_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append_c (string, ' ');
diff --git a/providers/web/gda-web-ddl.c b/providers/web/gda-web-ddl.c
index b083c4a..6d8cdfe 100644
--- a/providers/web/gda-web-ddl.c
+++ b/providers/web/gda-web-ddl.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008 Murray Cumming <murrayc murrayc com>
- * Copyright (C) 2008 - 2011 Vivien Malerba <malerba gnome-db org>
+ * Copyright (C) 2008 - 2014 Vivien Malerba <malerba gnome-db org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -40,7 +40,12 @@ gda_web_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
/* CREATE TABLE */
string = g_string_new ("CREATE TABLE ");
- tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME");
+ tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider, "/TABLE_DEF_P/TABLE_NAME",
error);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append (string, " (");
@@ -58,7 +63,13 @@ gda_web_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
value = gda_server_operation_get_value_at (op, "/FIELDS_A/@COLUMN_PKEY/%d", i);
if (value && G_VALUE_HOLDS (value, G_TYPE_BOOLEAN) && g_value_get_boolean (value)) {
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
-
"/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d",
+ error, i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
pkfields = g_slist_append (pkfields, tmp);
nbpkfields++;
}
@@ -74,7 +85,12 @@ gda_web_render_CREATE_TABLE (GdaServerProvider *provider, GdaConnection *cnc,
g_string_append (string, ", ");
tmp = gda_server_operation_get_sql_identifier_at (op, cnc, provider,
- "/FIELDS_A/@COLUMN_NAME/%d", i);
+ "/FIELDS_A/@COLUMN_NAME/%d", error,
i);
+ if (!tmp) {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
+
g_string_append (string, tmp);
g_free (tmp);
g_string_append_c (string, ' ');
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]