Re: [gnome-db] GdaSqlSelectJoin



On 2 March 2010 19:22, Piotr Pokora <piotrek pokora gmail com> wrote:
> Hi!
>
> How to add join to select statement?
>
> What I try is:
>
> GdaSqlStatementSelect *select = valid_select_statement;
> GdaSqlSelectFrom *from = select->from;
> GdaSqlSelectJoin *join = gda_sql_select_join_new (GDA_SQL_ANY_PART (from));
> join->type = GDA_SQL_SELECT_JOIN_LEFT;
>
> GdaSqlExpr *expr = gda_sql_expr_new (GDA_SQL_ANY_PART (join));
> expr->value = gda_value_new (G_TYPE_STRING);
> g_value_take_string (expr->value, g_strdup ("style"));
> join->expr = expr;
>
> GdaSqlField *field_a = gda_sql_field_new (GDA_SQL_ANY_PART (join));
> field_a->field_name = g_strdup ("t1.style");
> join->use = g_slist_append (join->use, field_a);
>
> GdaSqlField *field_b = gda_sql_field_new (GDA_SQL_ANY_PART (join));
> field_b->field_name = g_strdup ("style.id");
> join->use = g_slist_append (join->use, field_b);
>
> gda_sql_select_from_take_new_join (from , join);
>
>
> gda_sql_select_join_serialize (join) returns:
> JOIN:
> {"join_type":"LEFT","join_pos":"0","on_cond":{"value":"style"},"using":["t1.style","style.id"]}
> So I assume join is valid.

Yes, the GdaSqlSelectJoin's structure is valid (I mean no wild pointers, ...)

However this would translate as
... FROM ... LEFT JOIN ... ON (style) USING (t1.style, style.id)
which is not what you want: you need to either define the USING part
or the ON part, more likely in your case:
... ON (t1.style=style.id)

So the "style" has to be defined as a GdaSqlSelectTarget and the
join->on has to point to a GdaSqlExpr representing the
"t1.style=style.id" condition (the same construct as for the WHERE
clause applies here), and join->use = NULL.

Vivien


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]