1 /* 2 * Copyright (C) 2008 - 2011 Vivien Malerba <malerba@gnome-db.org> 3 * Copyright (C) 2009 Murray Cumming <murrayc@murrayc.com> 4 * Copyright (C) 2011 Daniel Espinosa <despinosa@src.gnome.org> 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the 18 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 #ifndef _GDA_STATEMENT_STRUCT_DECL_H 23 #define _GDA_STATEMENT_STRUCT_DECL_H 24 25 #include <glib.h> 26 #include <glib-object.h> 27 #include <libgda/gda-decl.h> 28 #include <libgda/gda-meta-store.h> 29 #include <libgda/gda-meta-struct.h> 30 31 G_BEGIN_DECLS 32 33 /* error reporting */ 34 extern GQuark gda_sql_error_quark (void); 35 #define GDA_SQL_ERROR gda_sql_error_quark () 36 /* 37 * GdaSqlError: (skip) 38 * 39 **/ 40 typedef enum { 41 GDA_SQL_STRUCTURE_CONTENTS_ERROR, 42 GDA_SQL_MALFORMED_IDENTIFIER_ERROR, 43 GDA_SQL_MISSING_IDENTIFIER_ERROR, 44 GDA_SQL_VALIDATION_ERROR 45 } GdaSqlError; 46 /* 47 * GdaSqlErrorType: 48 * 49 **/ 50 typedef GdaSqlError GdaSqlErrorType; 51 52 /* 53 * Struct declarations 54 */ 55 /* 56 * GdaSqlAnyPart: (skip) 57 * 58 **/ 59 typedef struct _GdaSqlAnyPart GdaSqlAnyPart; 60 /* 61 * GdaSqlStatement: (skip) 62 * 63 **/ 64 typedef struct _GdaSqlStatement GdaSqlStatement; 65 /* 66 * GdaSqlStatementUnknown: (skip) 67 * 68 **/ 69 typedef struct _GdaSqlStatementUnknown GdaSqlStatementUnknown; 70 /* 71 * GdaSqlStatementTransaction: (skip) 72 * 73 **/ 74 typedef struct _GdaSqlStatementTransaction GdaSqlStatementTransaction; 75 /* 76 * GdaSqlStatementSelect: (skip) 77 * 78 **/ 79 typedef struct _GdaSqlStatementSelect GdaSqlStatementSelect; 80 /* 81 * GdaSqlStatementInsert: (skip) 82 * 83 **/ 84 typedef struct _GdaSqlStatementInsert GdaSqlStatementInsert; 85 /* 86 * GdaSqlStatementDelete: (skip) 87 * 88 **/ 89 typedef struct _GdaSqlStatementDelete GdaSqlStatementDelete; 90 /* 91 * GdaSqlStatementUpdate: (skip) 92 * 93 **/ 94 typedef struct _GdaSqlStatementUpdate GdaSqlStatementUpdate; 95 /* 96 * GdaSqlStatementCompound: (skip) 97 * 98 **/ 99 typedef struct _GdaSqlStatementCompound GdaSqlStatementCompound; 100 101 /* 102 * Statement type 103 */ 104 /** 105 * GdaSqlStatementType: 106 * @GDA_SQL_STATEMENT_SELECT: a SELECT statement 107 * @GDA_SQL_STATEMENT_INSERT: an INSERT statement 108 * @GDA_SQL_STATEMENT_UPDATE: an UPDATE statement 109 * @GDA_SQL_STATEMENT_DELETE: a DELETE statement 110 * @GDA_SQL_STATEMENT_COMPOUND: a compound statement: multiple SELECT statements grouped together using an operator 111 * @GDA_SQL_STATEMENT_BEGIN: start of transaction statement 112 * @GDA_SQL_STATEMENT_ROLLBACK: transaction abort statement 113 * @GDA_SQL_STATEMENT_COMMIT: transaction commit statement 114 * @GDA_SQL_STATEMENT_SAVEPOINT: new savepoint definition statement 115 * @GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT: return to savepoint statement 116 * @GDA_SQL_STATEMENT_DELETE_SAVEPOINT: savepoint deletion statement 117 * @GDA_SQL_STATEMENT_UNKNOWN: unknown statement, only identifies variables 118 * @GDA_SQL_STATEMENT_NONE: not used 119 * 120 * Known types of statements 121 */ 122 typedef enum { 123 GDA_SQL_STATEMENT_SELECT, 124 GDA_SQL_STATEMENT_INSERT, 125 GDA_SQL_STATEMENT_UPDATE, 126 GDA_SQL_STATEMENT_DELETE, 127 GDA_SQL_STATEMENT_COMPOUND, 128 129 GDA_SQL_STATEMENT_BEGIN, 130 GDA_SQL_STATEMENT_ROLLBACK, 131 GDA_SQL_STATEMENT_COMMIT, 132 133 GDA_SQL_STATEMENT_SAVEPOINT, 134 GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT, 135 GDA_SQL_STATEMENT_DELETE_SAVEPOINT, 136 137 GDA_SQL_STATEMENT_UNKNOWN, 138 GDA_SQL_STATEMENT_NONE 139 } GdaSqlStatementType; 140 141 142 /* 143 * Structures identification 144 */ 145 /** 146 * GdaSqlAnyPartType: (skip) 147 * @GDA_SQL_ANY_STMT_SELECT: structure is a #GdaSqlStatementSelect 148 * @GDA_SQL_ANY_STMT_INSERT: structure is a #GdaSqlStatementInsert 149 * @GDA_SQL_ANY_STMT_UPDATE: structure is a #GdaSqlStatementUpdate 150 * @GDA_SQL_ANY_STMT_DELETE: structure is a #GdaSqlStatementDelete 151 * @GDA_SQL_ANY_STMT_COMPOUND: structure is a #GdaSqlStatementCompound 152 * @GDA_SQL_ANY_STMT_BEGIN: structure is a #GdaSqlStatementTransaction 153 * @GDA_SQL_ANY_STMT_ROLLBACK: structure is a #GdaSqlStatementTransaction 154 * @GDA_SQL_ANY_STMT_COMMIT: structure is a #GdaSqlStatementTransaction 155 * @GDA_SQL_ANY_STMT_SAVEPOINT: structure is a #GdaSqlStatementTransaction 156 * @GDA_SQL_ANY_STMT_ROLLBACK_SAVEPOINT: structure is a #GdaSqlStatementTransaction 157 * @GDA_SQL_ANY_STMT_DELETE_SAVEPOINT: structure is a #GdaSqlStatementTransaction 158 * @GDA_SQL_ANY_STMT_UNKNOWN: structure is a #GdaSqlStatementUnknown 159 * @GDA_SQL_ANY_EXPR: structure is a #GdaSqlExpr 160 * @GDA_SQL_ANY_SQL_FIELD: structure is a #GdaSqlField 161 * @GDA_SQL_ANY_SQL_TABLE: structure is a #GdaSqlTable 162 * @GDA_SQL_ANY_SQL_FUNCTION: structure is a #GdaSqlFunction 163 * @GDA_SQL_ANY_SQL_OPERATION: structure is a #GdaSqlOperation 164 * @GDA_SQL_ANY_SQL_CASE: structure is a #GdaSqlCase 165 * @GDA_SQL_ANY_SQL_SELECT_FIELD: structure is a #GdaSqlSelectField 166 * @GDA_SQL_ANY_SQL_SELECT_TARGET: structure is a #GdaSqlSelectTarget 167 * @GDA_SQL_ANY_SQL_SELECT_JOIN: structure is a #GdaSqlSelectJoin 168 * @GDA_SQL_ANY_SQL_SELECT_FROM: structure is a #GdaSqlSelectFrom 169 * @GDA_SQL_ANY_SQL_SELECT_ORDER: structure is a #GdaSqlSelectOrder 170 * 171 * Type of part. 172 */ 173 typedef enum { 174 /* complete statements */ 175 GDA_SQL_ANY_STMT_SELECT = GDA_SQL_STATEMENT_SELECT, 176 GDA_SQL_ANY_STMT_INSERT = GDA_SQL_STATEMENT_INSERT, 177 GDA_SQL_ANY_STMT_UPDATE = GDA_SQL_STATEMENT_UPDATE, 178 GDA_SQL_ANY_STMT_DELETE = GDA_SQL_STATEMENT_DELETE, 179 GDA_SQL_ANY_STMT_COMPOUND = GDA_SQL_STATEMENT_COMPOUND, 180 GDA_SQL_ANY_STMT_BEGIN = GDA_SQL_STATEMENT_BEGIN, 181 GDA_SQL_ANY_STMT_ROLLBACK = GDA_SQL_STATEMENT_ROLLBACK, 182 GDA_SQL_ANY_STMT_COMMIT = GDA_SQL_STATEMENT_COMMIT, 183 GDA_SQL_ANY_STMT_SAVEPOINT = GDA_SQL_STATEMENT_SAVEPOINT, 184 GDA_SQL_ANY_STMT_ROLLBACK_SAVEPOINT = GDA_SQL_STATEMENT_ROLLBACK_SAVEPOINT, 185 GDA_SQL_ANY_STMT_DELETE_SAVEPOINT = GDA_SQL_STATEMENT_DELETE_SAVEPOINT, 186 GDA_SQL_ANY_STMT_UNKNOWN = GDA_SQL_STATEMENT_UNKNOWN, 187 188 /* individual parts */ 189 GDA_SQL_ANY_EXPR = 500, 190 GDA_SQL_ANY_SQL_FIELD, 191 GDA_SQL_ANY_SQL_TABLE, 192 GDA_SQL_ANY_SQL_FUNCTION, 193 GDA_SQL_ANY_SQL_OPERATION, 194 GDA_SQL_ANY_SQL_CASE, 195 GDA_SQL_ANY_SQL_SELECT_FIELD, 196 GDA_SQL_ANY_SQL_SELECT_TARGET, 197 GDA_SQL_ANY_SQL_SELECT_JOIN, 198 GDA_SQL_ANY_SQL_SELECT_FROM, 199 GDA_SQL_ANY_SQL_SELECT_ORDER 200 } GdaSqlAnyPartType; 201 202 203 /** 204 * GdaSqlAnyPart: (skip) 205 * @type: type of structure, as a #GdaSqlAnyPartType enum. 206 * @parent: pointer to the parent #GdaSqlAnyPart structure 207 * 208 * Base structure of which all structures (except #GdaSqlStatement) "inherit". It identifies, for each structure, 209 * its type and its parent in the structure hierarchy. 210 */ 211 struct _GdaSqlAnyPart { 212 GdaSqlAnyPartType type; 213 GdaSqlAnyPart *parent; 214 }; 215 216 #define GDA_SQL_ANY_PART(x) ((GdaSqlAnyPart*)(x)) 217 #define gda_sql_any_part_set_parent(a,p) \ 218 if (a) GDA_SQL_ANY_PART(a)->parent = GDA_SQL_ANY_PART(p) 219 220 /* 221 * Iteration 222 */ 223 224 /* returns FALSE if a recursive walking should be stopped (mandatory is @error is set) */ 225 /** 226 * GdaSqlForeachFunc: (skip) 227 * @part: the current #GdaSqlAnyPart node 228 * @data: user data passed to gda_sql_any_part_foreach(). 229 * @error: pointer to a place to store errors 230 * @Returns: FALSE if the gda_sql_any_part_foreach() should stop at this point and fail 231 * 232 * Specifies the type of functions passed to gda_sql_any_part_foreach(). 233 */ 234 typedef gboolean (*GdaSqlForeachFunc) (GdaSqlAnyPart *part, gpointer data, GError **error); 235 236 gboolean gda_sql_any_part_foreach (GdaSqlAnyPart *node, GdaSqlForeachFunc func, gpointer data, GError **error); 237 238 /* 239 * Structure validation 240 */ 241 gboolean gda_sql_any_part_check_structure (GdaSqlAnyPart *node, GError **error); 242 243 /** 244 * GdaSqlStatementContentsInfo: (skip) 245 * 246 * Contents' infos 247 */ 248 typedef struct { 249 GdaSqlStatementType type; 250 gchar *name; 251 gpointer (*construct) (void); 252 void (*free) (gpointer stm); 253 gpointer (*copy) (gpointer stm); 254 gchar *(*serialize) (gpointer stm); 255 256 /* augmenting information precision using a dictionary */ 257 GdaSqlForeachFunc check_structure_func; 258 GdaSqlForeachFunc check_validity_func; 259 260 /*< private >*/ 261 /* Padding for future expansion */ 262 gpointer _gda_reserved1; 263 gpointer _gda_reserved2; 264 gpointer _gda_reserved3; 265 gpointer _gda_reserved4; 266 } GdaSqlStatementContentsInfo; 267 268 /** 269 * GdaSqlStatementCheckValidityData: (skip) 270 * 271 * Validation against a dictionary 272 */ 273 typedef struct { 274 GdaConnection *cnc; 275 GdaMetaStore *store; 276 GdaMetaStruct *mstruct; 277 278 /*< private >*/ 279 /* Padding for future expansion */ 280 gpointer _gda_reserved1; 281 gpointer _gda_reserved2; 282 gpointer _gda_reserved3; 283 gpointer _gda_reserved4; 284 } GdaSqlStatementCheckValidityData; 285 286 G_END_DECLS 287 288 #endif 289