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;
}