gboolean _midgard_query_select_add_join (MidgardQueryExecutor *self, const gchar *join_type, MidgardQueryHolder *left_holder, MidgardQueryHolder *right_holder) { g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (join_type != NULL, FALSE); g_return_val_if_fail (left_holder != NULL, FALSE); g_return_val_if_fail (right_holder != NULL, FALSE); MidgardQueryProperty *left_property = MIDGARD_QUERY_PROPERTY (left_holder); g_return_val_if_fail (MIDGARD_IS_QUERY_PROPERTY (left_property), FALSE); MidgardQueryProperty *right_property = MIDGARD_QUERY_PROPERTY (right_holder); g_return_val_if_fail (MIDGARD_IS_QUERY_PROPERTY (right_property), FALSE); /* validate join type */ GdaSqlSelectJoinType join_type_id; if (!__query_join_type_is_valid (join_type, &join_type_id)) return FALSE; /* MidgardQueryStorage *left_storage = left_property->priv->storage; */ MidgardQueryStorage *right_storage = right_property->priv->storage; /* We can not join the same table adding new implicit table alias */ if (!right_storage) { g_warning ("Can not add join. Right property storage is NULL. "); return FALSE; } qsj *_sj = g_new (qsj, 1); _sj->left_property = g_object_ref (left_property); _sj->right_property = g_object_ref (right_property); _sj->join_type = join_type_id; self->priv->joins = g_slist_append (self->priv->joins, _sj); return TRUE; }
/** * midgard_query_constraint_set_property: * @self: #MidgardQueryConstraint instance * @property: #MidgardQueryProperty to associate with @self constraint * * Returns: %TRUE on success, %FALSE otherwise * Since: 10.05 */ gboolean midgard_query_constraint_set_property (MidgardQueryConstraint *self, MidgardQueryProperty *property) { g_return_val_if_fail (self != NULL, FALSE); g_return_val_if_fail (MIDGARD_IS_QUERY_PROPERTY (property), FALSE); if (self->priv->property_value) g_object_unref (self->priv->property_value); self->priv->property_value = g_object_ref (property); /* set default storage */ if (!self->priv->storage) { MidgardQueryProperty *_p = self->priv->property_value; midgard_query_constraint_set_storage (self, _p->priv->storage); } return TRUE; }