midgard/query_builder.h

00001 /*
00002  * Copyright (c) 2005 Jukka Zitting <jz@yukatan.fi>
00003  * Copyright (c) 2005 Piotr Pokora <piotr.pokora@infoglob.pl>
00004  *
00005  * This program is free software; you can redistribute it and/or modify it
00006  * under the terms of the GNU Lesser General Public License as published
00007  * by the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018  */
00019 #ifndef MIDGARD_QUERY_BUILDER_H
00020 #define MIDGARD_QUERY_BUILDER_H
00021 
00038 #include "midgard/midgard_connection.h"
00039 
00040 /* convention macros */
00041 #define MIDGARD_TYPE_QUERY_BUILDER (midgard_query_builder_get_type())
00042 #define MIDGARD_QUERY_BUILDER(object)  \
00043         (G_TYPE_CHECK_INSTANCE_CAST ((object),MIDGARD_TYPE_QUERY_BUILDER, MidgardQueryBuilder))
00044 #define MIDGARD_QUERY_BUILDER_CLASS(klass)  \
00045         (G_TYPE_CHECK_CLASS_CAST ((klass), MIDGARD_TYPE_QUERY_BUILDER, MidgardQueryBuilderClass))
00046 #define MIDGARD_IS_QUERY_BUILDER(object)   \
00047         (G_TYPE_CHECK_INSTANCE_TYPE ((object), MIDGARD_QUERY_BUILDER))
00048 #define MIDGARD_IS_QUERY_BUILDER_CLASS(klass) \
00049         (G_TYPE_CHECK_CLASS_TYPE ((klass), MIDGARD_TYPE_QUERY_BUILDER))
00050 #define MIDGARD_QUERY_BUILDER_GET_CLASS(obj) \
00051         (G_TYPE_INSTANCE_GET_CLASS ((obj), MIDGARD_TYPE_QUERY_BUILDER, MidgardQueryBuilderClass))
00052 
00058 typedef struct MidgardQueryBuilder MidgardQueryBuilder;
00059 
00060 /* FIXME! Implement MidgardQueryBuilderPrivate! */
00061 struct MidgardQueryBuilder {
00062         GObject parent;
00063         midgard *mgd;
00064         GType parent_type; /* parent for metadata, attachment, parameter */
00065         GType ext_type; /* metadata, attachment, parameter */
00066         GType type;
00067         GList *types;
00068         MgdSchemaTypeAttr *schema;
00069         GSList *stack;
00070         GArray *orders;
00071         guint offset;
00072         guint limit;
00073         gint lang;
00074         gint default_lang;
00075         gboolean unset_lang;
00076         gboolean include_deleted;
00077         gchar *tables;
00078         const gchar *link;
00079         GString *join;
00080         gint error;
00081 };
00082 
00087 typedef struct MidgardQueryBuilderClass MidgardQueryBuilderClass;
00088 
00093 struct MidgardQueryBuilderClass{
00094         GObjectClass parent;
00095 
00096         void (*set_lang) (
00097                 MidgardQueryBuilder *builder, gint lang);
00098 
00099         void (*unset_languages) (
00100                 MidgardQueryBuilder *builder);
00101         
00102         gboolean (*add_constraint) (
00103                 MidgardQueryBuilder *builder,
00104                 const gchar *name, const gchar *op, const GValue *value);
00105         
00106         gboolean (*begin_group) (
00107                 MidgardQueryBuilder *builder, const gchar *type);
00108 
00109         gboolean (*end_group) (
00110                 MidgardQueryBuilder *builder);
00111 
00112         gboolean (*add_order) (
00113                 MidgardQueryBuilder *builder, 
00114                 const gchar *name, const gchar *dir);
00115 
00116         void (*set_offset) (
00117                 MidgardQueryBuilder *builder, guint offset);
00118 
00119         void (*set_limit) (
00120                 MidgardQueryBuilder *builder, guint limit);
00121 
00122         GObject **(*execute) (
00123                 MidgardQueryBuilder *builder, guint *n_objects);
00124 
00125         guint (*count) (
00126                 MidgardQueryBuilder *builder);
00127 };
00128 
00135 extern GType midgard_query_builder_get_type(void);
00136 
00146 extern MidgardQueryBuilder *midgard_query_builder_new(
00147         midgard *mgd, const gchar *classname);
00148 
00155 extern void midgard_query_builder_free(MidgardQueryBuilder *builder);
00156 
00167 extern void midgard_query_builder_set_lang(
00168         MidgardQueryBuilder *builder, gint lang);
00169 
00180 extern void midgard_query_builder_unset_languages(
00181         MidgardQueryBuilder *builder);
00182 
00204 extern gboolean midgard_query_builder_add_constraint(
00205         MidgardQueryBuilder *builder,
00206         const gchar *name, const gchar *op, const GValue *value);
00207 
00219 extern gboolean midgard_query_builder_begin_group(
00220         MidgardQueryBuilder *builder, const gchar *type);
00221 
00232 extern gboolean midgard_query_builder_end_group(MidgardQueryBuilder *builder);
00233 
00247 extern gboolean midgard_query_builder_add_order(
00248         MidgardQueryBuilder *builder, const gchar *name, const gchar *dir);
00249 
00265 extern void midgard_query_builder_set_offset(
00266         MidgardQueryBuilder *builder, guint offset);
00267 
00283 extern void midgard_query_builder_set_limit(
00284         MidgardQueryBuilder *builder, guint limit);
00285 
00295 extern GObject **midgard_query_builder_execute(
00296         MidgardQueryBuilder *builder, guint *n_objects);
00297 
00310 extern guint midgard_query_builder_count(MidgardQueryBuilder *builder); 
00311 
00312 
00326 gboolean midgard_query_builder_join(
00327                 MidgardQueryBuilder *builder, const gchar *prop,
00328                 const gchar *jobject, const gchar *jprop);
00342 GList *midgard_query_builder_get_guid(MidgardQueryBuilder *builder);
00343 
00360 const gchar *midgard_query_builder_get_type_name(MidgardQueryBuilder *builder);
00361 
00372 extern void midgard_query_builder_include_deleted(MidgardQueryBuilder *builder);
00373 
00374 #endif

Generated on Thu Feb 22 06:15:14 2007 for midgard-core by  doxygen 1.4.6