DuroDBMS API  1.7
type.h
1 /*
2  * Type functions and definitions
3  *
4  * Copyright (C) 2013-2016 Rene Hartmann.
5  * See the file COPYING for redistribution information.
6  */
7 
8 #ifndef TYPE_H_
9 #define TYPE_H_
10 
11 #include <gen/types.h>
12 #include "object.h"
13 
14 typedef struct RDB_op_data RDB_operator;
15 typedef struct RDB_expression RDB_expression;
16 typedef struct RDB_exec_context RDB_exec_context;
17 typedef struct RDB_type RDB_type;
18 
19 typedef RDB_type *RDB_gettypefn(const char *, void *);
20 
28 typedef struct {
30  char *name;
31 
34 
39  RDB_expression *defaultp;
40 
46  int options;
47 } RDB_attr;
48 
53 /* internal */
54 enum RDB_tp_kind {
55  RDB_TP_SCALAR,
56  RDB_TP_TUPLE,
57  RDB_TP_RELATION,
58  RDB_TP_ARRAY
59 };
60 
68 typedef struct {
69  char *name;
70  int compc;
71  RDB_attr *compv;
72 } RDB_possrep;
73 
78 typedef struct RDB_type {
79  /* Internal */
80  char *name;
81  enum RDB_tp_kind kind;
82 
83  /* Comparison function */
84  RDB_operator *compare_op;
85 
86  RDB_int ireplen;
87 
88  union {
89  struct RDB_type *basetyp; /* Relation or array type */
90  struct {
91  int attrc;
92  RDB_attr *attrv;
93  } tuple;
94  struct {
95  int repc;
96  RDB_possrep *repv;
97  RDB_bool builtin;
98 
99  /* RDB_TRUE if selector/getters/setters are provided by the system */
100  RDB_bool sysimpl;
101 
102  RDB_bool ordered;
103 
104  /* Actual representation, if the type is represented by another type.
105  Otherwise NULL. */
106  struct RDB_type *arep;
107 
108  RDB_expression *constraintp;
109  RDB_expression *initexp;
110  RDB_object init_val;
111  RDB_bool init_val_is_valid;
112 
113  int supertypec;
114  struct RDB_type **supertypev;
115  int subtypec;
116  struct RDB_type **subtypev;
117  } scalar;
118  } def;
119  RDB_obj_cleanup_func *cleanup_fp;
120  RDB_bool locked;
121 } RDB_type;
122 
130 typedef struct {
131  char *from;
132  char *to;
133 } RDB_renaming;
134 
138 typedef struct {
139  int attrc;
140  char **attrv;
141  char *attrname;
142 } RDB_wrapping;
143 
146 RDB_bool
148 
149 RDB_bool
150 RDB_type_is_valid(const RDB_type *);
151 
152 RDB_bool
154 
155 RDB_bool
156 RDB_type_is_generic(const RDB_type *);
157 
158 RDB_bool
159 RDB_type_is_union(const RDB_type *);
160 
161 RDB_bool
162 RDB_type_is_dummy(const RDB_type *);
163 
164 RDB_bool
165 RDB_is_subtype(const RDB_type *, const RDB_type *);
166 
167 RDB_bool
168 RDB_share_subtype(const RDB_type *, const RDB_type *);
169 
170 RDB_bool
171 RDB_type_depends_type(const RDB_type *, const RDB_type *);
172 
173 RDB_bool
175 
176 RDB_possrep *
177 RDB_type_possreps(const RDB_type *, int *);
178 
179 RDB_possrep *
180 RDB_comp_possrep(const RDB_type *, const char *);
181 
182 RDB_attr *
183 RDB_type_property(const RDB_type *, const char *);
184 
185 char *
186 RDB_type_name(const RDB_type *);
187 
188 RDB_bool
190 
191 RDB_bool
193 
194 RDB_bool
195 RDB_type_is_tuple(const RDB_type *);
196 
197 RDB_bool
198 RDB_type_is_array(const RDB_type *);
199 
200 RDB_type *
201 RDB_base_type(const RDB_type *typ);
202 
203 RDB_attr *
204 RDB_type_attrs(RDB_type *, int *);
205 
206 RDB_type *
207 RDB_new_scalar_type(const char *, RDB_int, RDB_bool, RDB_bool,
208  RDB_exec_context *);
209 
210 RDB_type *
211 RDB_new_tuple_type(int attrc, const RDB_attr[],
212  RDB_exec_context *);
213 
214 RDB_type *
215 RDB_new_relation_type(int attrc, const RDB_attr[],
216  RDB_exec_context *);
217 
218 RDB_type *
219 RDB_new_relation_type_from_base(RDB_type *, RDB_exec_context *);
220 
221 RDB_type *
222 RDB_new_array_type(RDB_type *, RDB_exec_context *);
223 
224 RDB_type *
225 RDB_dup_nonscalar_type(RDB_type *typ, RDB_exec_context *);
226 
227 int
228 RDB_del_nonscalar_type(RDB_type *, RDB_exec_context*);
229 
230 RDB_bool
231 RDB_type_equals(const RDB_type *, const RDB_type *);
232 
233 RDB_bool
234 RDB_type_matches(const RDB_type *, const RDB_type *);
235 
236 RDB_attr *
237 RDB_tuple_type_attr(const RDB_type *, const char *attrname);
238 
239 RDB_type *
240 RDB_wrap_tuple_type(const RDB_type *typ, int wrapc,
241  const RDB_wrapping wrapv[], RDB_exec_context *ecp);
242 
243 RDB_type *
244 RDB_wrap_relation_type(const RDB_type *typ, int wrapc,
245  const RDB_wrapping wrapv[], RDB_exec_context *ecp);
246 
247 RDB_type *
248 RDB_unwrap_tuple_type(const RDB_type *typ, int attrc, char *attrv[],
249  RDB_exec_context *);
250 
251 RDB_type *
252 RDB_unwrap_relation_type(const RDB_type *typ, int attrc, char *attrv[],
253  RDB_exec_context *);
254 
255 RDB_type *
256 RDB_extend_tuple_type(const RDB_type *typ, int attrc, RDB_attr attrv[],
257  RDB_exec_context *);
258 
259 RDB_type *
260 RDB_extend_relation_type(const RDB_type *typ, int attrc, RDB_attr attrv[],
261  RDB_exec_context *);
262 
263 RDB_type *
264 RDB_project_tuple_type(const RDB_type *typ, int attrc, const char *attrv[],
265  RDB_exec_context *);
266 
267 RDB_type *
268 RDB_project_relation_type(const RDB_type *typ, int, const char *[],
269  RDB_exec_context *);
270 
271 RDB_type *
272 RDB_group_type(const RDB_type *, int, char *[], const char *,
273  RDB_exec_context *);
274 
275 RDB_type *
276 RDB_ungroup_type(RDB_type *typ, const char *attr, RDB_exec_context *);
277 
278 RDB_type *
279 RDB_rename_tuple_type(const RDB_type *, int, const RDB_renaming[],
280  RDB_exec_context *);
281 
282 RDB_type *
283 RDB_rename_relation_type(const RDB_type *, int, const RDB_renaming[],
284  RDB_exec_context *);
285 
286 void
288 
289 void
290 RDB_set_cleanup(RDB_type *, RDB_obj_cleanup_func *);
291 
292 #endif /* TYPE_H_ */
RDB_type * RDB_new_relation_type_from_base(RDB_type *, RDB_exec_context *)
Definition: type.c:404
RDB_bool RDB_type_is_tuple(const RDB_type *)
Definition: type.c:481
Definition: type.h:78
void RDB_set_cleanup(RDB_type *, RDB_obj_cleanup_func *)
Definition: type.c:726
RDB_type * RDB_dup_nonscalar_type(RDB_type *typ, RDB_exec_context *)
Definition: type.c:200
RDB_attr * RDB_type_attrs(RDB_type *, int *)
Definition: type.c:528
RDB_bool RDB_type_is_ordered(const RDB_type *)
Definition: type.c:83
void RDB_lock_type(RDB_type *)
Definition: type.c:716
int options
Definition: type.h:46
RDB_type * RDB_base_type(const RDB_type *typ)
Definition: type.c:506
int RDB_del_nonscalar_type(RDB_type *, RDB_exec_context *)
Definition: type.c:544
RDB_possrep * RDB_type_possreps(const RDB_type *, int *)
Definition: type.c:136
Definition: type.h:28
RDB_bool RDB_type_equals(const RDB_type *, const RDB_type *)
Definition: type.c:589
char * name
Definition: type.h:30
RDB_bool RDB_type_is_scalar(const RDB_type *)
Definition: type.c:455
RDB_bool RDB_type_has_possreps(const RDB_type *)
Definition: type.c:127
RDB_type * RDB_new_tuple_type(int attrc, const RDB_attr[], RDB_exec_context *)
Definition: type.c:291
RDB_type * RDB_new_scalar_type(const char *, RDB_int, RDB_bool, RDB_bool, RDB_exec_context *)
Definition: type.c:236
RDB_bool RDB_is_subtype(const RDB_type *, const RDB_type *)
Definition: type.c:653
RDB_expression * defaultp
Definition: type.h:39
RDB_attr * RDB_type_property(const RDB_type *, const char *)
Definition: type.c:173
RDB_bool RDB_share_subtype(const RDB_type *, const RDB_type *)
Definition: type.c:693
RDB_type * RDB_new_array_type(RDB_type *, RDB_exec_context *)
Definition: type.c:430
RDB_bool RDB_type_is_relation(const RDB_type *)
Definition: type.c:468
char * RDB_type_name(const RDB_type *)
Definition: type.c:643
RDB_type * typ
Definition: type.h:33
Definition: type.h:138
RDB_bool RDB_type_depends_type(const RDB_type *, const RDB_type *)
Definition: type.c:94
RDB_bool RDB_type_is_array(const RDB_type *)
Definition: type.c:493
RDB_possrep * RDB_comp_possrep(const RDB_type *, const char *)
Definition: type.c:154
Definition: type.h:68
Definition: type.h:130
RDB_bool RDB_type_is_valid(const RDB_type *)
Definition: type.c:46
RDB_type * RDB_new_relation_type(int attrc, const RDB_attr[], RDB_exec_context *)
Definition: type.c:381
RDB_bool RDB_type_is_numeric(const RDB_type *)
Definition: type.c:31