[libgda: 2/7] db-index: Changing API definition
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda: 2/7] db-index: Changing API definition
- Date: Thu, 19 Mar 2020 14:56:26 +0000 (UTC)
commit d22a2eb4e6f636102ad7ce5fe672acd406e8cfe9
Author: Pavlo Solntsev <p sun fun gmail com>
Date: Fri Feb 14 15:38:26 2020 -0600
db-index: Changing API definition
* We need more flexible API to handle "collate" in
CREATE TABLE queries.
* Code cleaning
* Formatting
.gitlab-ci.yml | 2 +-
libgda/gda-db-index-field.c | 37 +++++++++++++++-----------------
libgda/gda-db-index-field.h | 18 ++--------------
libgda/gda-db-index.c | 4 ++--
libgda/gda-db-table.c | 5 ++---
tests/test-server-operation-postgresql.c | 20 ++++++++++++-----
tests/test-server-operation-sqlite.c | 2 +-
7 files changed, 40 insertions(+), 48 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c4ab96632..257e7ec1c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -56,7 +56,7 @@ variables:
SQLITE_DBCREATE_PARAMS: "DB_DIR=."
SQLITE_CNC_PARAMS: "DB_DIR=."
POSTGRESQL_DBCREATE_PARAMS: "HOST=$POSTGRES_HOST;ADM_LOGIN=$POSTGRES_USER;ADM_PASSWORD=$POSTGRES_PASSWORD"
- POSTGRESQL_CNC_PARAMS: "HOST=$POSTGRES_HOST;USERNAME=$POSTGRES_USER;PASSWORD=$POSTGRES_PASSWORD"
+ POSTGRESQL_CNC_PARAMS:
"HOST=$POSTGRES_HOST;USERNAME=$POSTGRES_USER;PASSWORD=$POSTGRES_PASSWORD;DB_NAME=$POSTGRES_DB"
POSTGRESQL_META_CNC:
"DB_NAME=$POSTGRES_DB;HOST=$POSTGRES_HOST;USERNAME=$POSTGRES_USER;PASSWORD=$POSTGRES_PASSWORD"
MYSQL_CNC_PARAMS:
"DB_NAME=$MYSQL_DATABASE;HOST=$MYSQL_HOST;USERNAME=$MYSQL_USER;PASSWORD=$MYSQL_ROOT_PASSWORD"
MYSQL_META_CNC:
"DB_NAME=$MYSQL_DATABASE;HOST=$MYSQL_HOST;USERNAME=$MYSQL_USER;PASSWORD=$MYSQL_ROOT_PASSWORD"
diff --git a/libgda/gda-db-index-field.c b/libgda/gda-db-index-field.c
index 8c7314acd..d8e0931cd 100644
--- a/libgda/gda-db-index-field.c
+++ b/libgda/gda-db-index-field.c
@@ -23,7 +23,7 @@
typedef struct
{
GdaDbColumn *mColumn;
- GdaDbIndexCollate mCollate;
+ gchar *mCollate;
GdaDbIndexSortOrder mSortOrder;
} GdaDbIndexFieldPrivate;
@@ -64,6 +64,9 @@ gda_db_index_field_dispose (GObject *object)
g_object_unref (priv->mColumn);
+ if (priv->mCollate)
+ g_free (priv->mCollate);
+
G_OBJECT_CLASS (gda_db_index_field_parent_class)->dispose (object);
}
@@ -81,7 +84,7 @@ gda_db_index_field_init (GdaDbIndexField *self)
GdaDbIndexFieldPrivate *priv = gda_db_index_field_get_instance_private (self);
priv->mColumn = NULL;
- priv->mCollate = GDA_DB_INDEX_COLLATE_BINARY;
+ priv->mCollate = NULL;
priv->mSortOrder = GDA_DB_INDEX_SORT_ORDER_ASC;
}
@@ -128,14 +131,23 @@ gda_db_index_field_get_column (GdaDbIndexField *self)
* @self: instance of #GdaDbIndexField
* @collate: collate to set
*
+ * Unfortunately, collate can vary from provider to provider. This method accepts collate name as a
+ * string but user should provide valid values. For instance, SQLite3 accepts only "BINARY",
+ * "NOCASE", and "RTRIM" values. PostgreSQL, on the other hand expects a name of a callable object,
+ * e.g. function.
+ *
* Since: 6.0
*/
void
gda_db_index_field_set_collate (GdaDbIndexField *self,
- GdaDbIndexCollate collate)
+ const gchar *collate)
{
GdaDbIndexFieldPrivate *priv = gda_db_index_field_get_instance_private (self);
- priv->mCollate = collate;
+
+ if (priv->mCollate)
+ g_free (priv->mCollate);
+
+ priv->mCollate = g_strdup (collate);
}
/**
@@ -146,7 +158,7 @@ gda_db_index_field_set_collate (GdaDbIndexField *self,
*
* Since: 6.0
*/
-GdaDbIndexCollate
+const gchar *
gda_db_index_field_get_collate (GdaDbIndexField *self)
{
GdaDbIndexFieldPrivate *priv = gda_db_index_field_get_instance_private (self);
@@ -183,21 +195,6 @@ gda_db_index_field_get_sort_order (GdaDbIndexField *self)
return priv->mSortOrder;
}
-const gchar *
-gda_db_index_field_get_collate_str (GdaDbIndexField *field)
-{
- g_return_val_if_fail (GDA_IS_DB_INDEX_FIELD(field), NULL);
-
- GdaDbIndexCollate collate = gda_db_index_field_get_collate(field);
-
- if (collate == GDA_DB_INDEX_COLLATE_BINARY)
- return "BINARY";
- else if (collate == GDA_DB_INDEX_COLLATE_NOCASE)
- return "NOCASE";
- else
- return NULL;
-}
-
const gchar *
gda_db_index_field_get_sort_order_str (GdaDbIndexField *field)
{
diff --git a/libgda/gda-db-index-field.h b/libgda/gda-db-index-field.h
index 59ffeb75c..381d6503e 100644
--- a/libgda/gda-db-index-field.h
+++ b/libgda/gda-db-index-field.h
@@ -36,19 +36,6 @@ struct _GdaDbIndexFieldClass
GObjectClass parent_class;
};
-/**
- * GdaDbIndexCollate:
- * @GDA_DB_INDEX_COLLATE_BINARY: BINARY collate
- * @GDA_DB_INDEX_COLLATE_NOCASE: NOCASE collate
- *
- * Enum values to specify the collate value for the column
- */
-typedef enum
-{
- GDA_DB_INDEX_COLLATE_BINARY = 0,
- GDA_DB_INDEX_COLLATE_NOCASE
-} GdaDbIndexCollate;
-
/**
* GdaDbIndexSortOrder:
* @GDA_DB_INDEX_SORT_ORDER_ASC: ascending sorting
@@ -70,16 +57,15 @@ void gda_db_index_field_set_column (GdaDbIndexField *self,
GdaDbColumn *gda_db_index_field_get_column (GdaDbIndexField *self);
void gda_db_index_field_set_collate (GdaDbIndexField *self,
- GdaDbIndexCollate collate);
+ const gchar *collate);
-GdaDbIndexCollate gda_db_index_field_get_collate (GdaDbIndexField *self);
+const gchar * gda_db_index_field_get_collate (GdaDbIndexField *self);
void gda_db_index_field_set_sort_order (GdaDbIndexField *self,
GdaDbIndexSortOrder sorder);
GdaDbIndexSortOrder gda_db_index_field_get_sort_order (GdaDbIndexField *self);
-const gchar * gda_db_index_field_get_collate_str (GdaDbIndexField *field);
const gchar * gda_db_index_field_get_sort_order_str (GdaDbIndexField *field);
G_END_DECLS
diff --git a/libgda/gda-db-index.c b/libgda/gda-db-index.c
index 46ca576a4..38e5356ea 100644
--- a/libgda/gda-db-index.c
+++ b/libgda/gda-db-index.c
@@ -151,8 +151,8 @@ gda_db_index_append_field (GdaDbIndex *self,
priv->mFieldList = g_slist_append (priv->mFieldList, g_object_ref (field));
else
{
- gda_db_index_field_set_collate (GDA_DB_INDEX_FIELD (it->data),
- gda_db_index_field_get_collate (field));
+ gda_db_index_field_set_collate (GDA_DB_INDEX_FIELD (it->data),
+ gda_db_index_field_get_collate (field));
gda_db_index_field_set_sort_order(GDA_DB_INDEX_FIELD (it->data),
gda_db_index_field_get_sort_order (field));
}
diff --git a/libgda/gda-db-table.c b/libgda/gda-db-table.c
index 2093d1f58..20d6ea8b0 100644
--- a/libgda/gda-db-table.c
+++ b/libgda/gda-db-table.c
@@ -1081,7 +1081,6 @@ gda_db_table_add_index (GdaDbTable *self,
g_return_val_if_fail(GDA_IS_DB_TABLE (self), FALSE);
g_return_val_if_fail(GDA_IS_CONNECTION (cnc), FALSE);
g_return_val_if_fail(GDA_IS_DB_INDEX(index), FALSE);
- g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
if (!gda_connection_is_opened (cnc))
{
@@ -1120,7 +1119,7 @@ gda_db_table_add_index (GdaDbTable *self,
goto on_error;
if (!gda_server_operation_set_value_at (op, GDA_BOOL_TO_STR (ifnotexists),
- error, "/INDEX_DEF_P/INDEX_IFNOTEXISTS"))
+ error, "/INDEX_DEF_P/INDEX_IFNOTEXISTS"))
goto on_error;
GSList *it = gda_db_index_get_fields (index);
@@ -1138,7 +1137,7 @@ gda_db_table_add_index (GdaDbTable *self,
goto on_error;
if (!gda_server_operation_set_value_at (op,
- gda_db_index_field_get_collate_str (it->data),
+ gda_db_index_field_get_collate (it->data),
error,
"/INDEX_FIELDS_S/%d/INDEX_COLLATE",
i))
diff --git a/tests/test-server-operation-postgresql.c b/tests/test-server-operation-postgresql.c
index b5c23cecd..3134edd08 100644
--- a/tests/test-server-operation-postgresql.c
+++ b/tests/test-server-operation-postgresql.c
@@ -41,6 +41,8 @@
#define PROVIDER_NAME "PostgreSQL"
+#define GDA_PGSQL_ERROR_HANDLE(e) (g_print("Error: %s: %s\n", G_STRLOC, e && e->message ? e->message : "No
default"));
+
typedef struct
{
GdaConnection *cnc;
@@ -58,17 +60,22 @@ test_server_operation_start (TestObjectFixture *fixture,
if (!db_string)
{
- g_print ("Please set POSTGRESQL_DBCREATE_PARAMS variable"
- "with host,user and port (usually 5432)");
+ g_print ("Please set POSTGRESQL_CNC_PARAMS variable"
+ "with dbname, host, user and port (usually 5432)\n");
g_print ("Test will not be performed\n");
return;
}
+ GError *error = NULL;
+
fixture->cnc = gda_connection_open_from_string (PROVIDER_NAME,
db_string,
NULL,
GDA_CONNECTION_OPTIONS_NONE,
- NULL);
+ &error);
+
+ if (!fixture->cnc)
+ GDA_PGSQL_ERROR_HANDLE(error);
g_assert_nonnull (fixture->cnc);
@@ -91,6 +98,7 @@ test_server_operation_operations (TestObjectFixture *fixture,
G_GNUC_UNUSED gconstpointer user_data)
{
GdaServerOperation *op = NULL;
+ GError *error = NULL;
/* CREATE_TABLE operation */
op = gda_server_provider_create_operation (fixture->provider,
@@ -248,7 +256,10 @@ test_server_operation_operations (TestObjectFixture *fixture,
res = gda_server_provider_perform_operation (fixture->provider,
fixture->cnc,
op,
- NULL);
+ &error);
+
+ if (!res)
+ GDA_PGSQL_ERROR_HANDLE(error);
g_assert_true (res);
@@ -958,7 +969,6 @@ test_server_operation_operations_db (TestObjectFixture *fixture,
gda_db_column_set_name (fcol, "name");
gda_db_index_field_set_column (field, fcol);
- gda_db_index_field_set_collate (field, GDA_DB_INDEX_COLLATE_BINARY);
gda_db_index_field_set_sort_order (field, GDA_DB_INDEX_SORT_ORDER_ASC);
gda_db_index_append_field (index, field);
diff --git a/tests/test-server-operation-sqlite.c b/tests/test-server-operation-sqlite.c
index 60d89e795..5fcc80ac4 100644
--- a/tests/test-server-operation-sqlite.c
+++ b/tests/test-server-operation-sqlite.c
@@ -954,7 +954,7 @@ test_server_operation_operations_db (TestObjectFixture *fixture,
gda_db_column_set_name (fcol, "name");
gda_db_index_field_set_column (field, fcol);
- gda_db_index_field_set_collate (field, GDA_DB_INDEX_COLLATE_BINARY);
+ gda_db_index_field_set_collate (field, "BINARY");
gda_db_index_field_set_sort_order (field, GDA_DB_INDEX_SORT_ORDER_ASC);
gda_db_index_append_field (index, field);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]