From: Andrea Zagli Date: Sat, 22 Oct 2011 13:07:52 +0000 (+0200) Subject: On GdaExQueryEditor added join_type to relation. X-Git-Tag: 0.5.0~28 X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=faea5e8eca4001b7e40d8a68989a028b0c60d3a5;p=libgdaex On GdaExQueryEditor added join_type to relation. --- diff --git a/src/queryeditor.c b/src/queryeditor.c index f2f63a7..3432c12 100644 --- a/src/queryeditor.c +++ b/src/queryeditor.c @@ -40,6 +40,8 @@ typedef struct GdaExQueryEditorTable *table1; GdaExQueryEditorTable *table2; + GdaExQueryEditorJoinType join_type; + GSList *fields1; GSList *fields2; } GdaExQueryEditorRelation; @@ -595,6 +597,7 @@ gboolean gdaex_query_editor_add_relation (GdaExQueryEditor *qe, const gchar *table1, const gchar *table2, + GdaExQueryEditorJoinType join_type, ...) { GdaExQueryEditorPrivate *priv; @@ -636,7 +639,7 @@ gdaex_query_editor_add_relation (GdaExQueryEditor *qe, } relation->table2 = table; - va_start (fields, table2); + va_start (fields, join_type); while ((field_name1 = va_arg (fields, gchar *)) != NULL && (field_name2 = va_arg (fields, gchar *)) != NULL) @@ -662,6 +665,7 @@ gdaex_query_editor_add_relation (GdaExQueryEditor *qe, if (create_relation) { + relation->join_type = join_type; priv->relations = g_slist_append (priv->relations, relation); } else @@ -773,6 +777,7 @@ GdaSqlBuilder sqlbuilder = gda_sql_builder_new (GDA_SQL_STATEMENT_SELECT); + /* SHOW */ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->lstore_show), &iter)) { guint id_target1; @@ -825,6 +830,7 @@ GdaSqlBuilder } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->lstore_show), &iter)); } + /* WHERE */ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->tstore_where), &iter)) { guint link_type; @@ -921,7 +927,7 @@ GdaSqlBuilder field = g_hash_table_lookup (table->fields, field_name); id_field = gda_sql_builder_add_id (sqlbuilder, - g_strconcat (case_insensitive ? "lower(" : "", + g_strconcat (case_insensitive ? "LOWER(" : "", table->name, ".", field->name, case_insensitive ? ")" : "", NULL)); @@ -1064,6 +1070,7 @@ GdaSqlBuilder } } + /* ORDER */ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->lstore_order), &iter)) { do diff --git a/src/queryeditor.h b/src/queryeditor.h index 89e8306..e2c9c09 100644 --- a/src/queryeditor.h +++ b/src/queryeditor.h @@ -142,6 +142,7 @@ gboolean gdaex_query_editor_table_add_field (GdaExQueryEditor *qe, gboolean gdaex_query_editor_add_relation (GdaExQueryEditor *qe, const gchar *table1, const gchar *table2, + GdaExQueryEditorJoinType join_type, ...); void gdaex_query_editor_clean_choices (GdaExQueryEditor *qe); diff --git a/tests/query_editor.c b/tests/query_editor.c index a05a925..86fbfd7 100644 --- a/tests/query_editor.c +++ b/tests/query_editor.c @@ -275,6 +275,22 @@ main (int argc, char *argv[]) gdaex_query_editor_table_add_field (qe, "orders", *field); g_free (field); + gdaex_query_editor_add_relation (qe, + "clients", "orders", + GDAEX_QE_JOIN_TYPE_LEFT, + "id", "id_clients", + NULL); + + field = g_new0 (GdaExQueryEditorField, 1); + field->name = g_strdup ("amount"); + field->name_visible = g_strdup ("Amount"); + field->type = GDAEX_QE_FIELD_TYPE_DOUBLE; + field->for_show = TRUE; + field->for_where = TRUE; + field->available_where_type = GDAEX_QE_WHERE_TYPE_NUMBER; + gdaex_query_editor_table_add_field (qe, "orders", *field); + g_free (field); + w = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (w), 610, 400); gtk_window_set_modal (GTK_WINDOW (w), TRUE);