DuroDBMS API  1.2
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 
26 typedef struct {
28  char *name;
29 
32 
37  RDB_expression *defaultp;
38 
44  int options;
45 } RDB_attr;
46 
51 /* internal */
52 enum RDB_tp_kind {
53  RDB_TP_SCALAR,
54  RDB_TP_TUPLE,
55  RDB_TP_RELATION,
56  RDB_TP_ARRAY
57 };
58 
66 typedef struct {
67  char *name;
68  int compc;
69  RDB_attr *compv;
70 } RDB_possrep;
71 
76 typedef struct RDB_type {
77  /* internal */
78  char *name;
79  enum RDB_tp_kind kind;
80 
81  /* comparison function */
82  RDB_operator *compare_op;
83 
84  RDB_int ireplen;
85 
86  union {
87  struct RDB_type *basetyp; /* relation or array type */
88  struct {
89  int attrc;
90  RDB_attr *attrv;
91  } tuple;
92  struct {
93  int repc;
94  RDB_possrep *repv;
95  RDB_bool builtin;
96 
97  /* RDB_TRUE if selector/getters/setters are provided by the system */
98  RDB_bool sysimpl;
99 
100  RDB_bool ordered;
101 
102  /* Actual representation, if the type is represented by another type.
103  Otherwise NULL. */
104  struct RDB_type *arep;
105 
106  RDB_expression *constraintp;
107  RDB_expression *initexp;
108  RDB_object init_val;
109  RDB_bool init_val_is_valid;
110 
111  int supertypec;
112  struct RDB_type **supertypev;
113  int subtypec;
114  struct RDB_type **subtypev;
115  } scalar;
116  } def;
117  RDB_obj_cleanup_func *cleanup_fp;
118  RDB_bool locked;
119 } RDB_type;
120 
128 typedef struct {
129  char *from;
130  char *to;
131 } RDB_renaming;
132 
136 typedef struct {
137  int attrc;
138  char **attrv;
139  char *attrname;
140 } RDB_wrapping;
141 
144 RDB_bool
146 
147 RDB_bool
148 RDB_type_is_valid(const RDB_type *);
149 
150 RDB_bool
152 
153 RDB_bool
154 RDB_type_is_generic(const RDB_type *);
155 
156 RDB_bool
157 RDB_type_is_union(const RDB_type *);
158 
159 RDB_bool
160 RDB_type_is_dummy(const RDB_type *);
161 
162 RDB_bool
163 RDB_is_subtype(const RDB_type *, const RDB_type *);
164 
165 RDB_bool
166 RDB_share_subtype(const RDB_type *, const RDB_type *);
167 
168 RDB_bool
169 RDB_type_depends_type(const RDB_type *, const RDB_type *);
170 
171 RDB_bool
173 
174 RDB_possrep *
175 RDB_type_possreps(const RDB_type *, int *);
176 
177 RDB_possrep *
178 RDB_comp_possrep(const RDB_type *, const char *);
179 
180 RDB_attr *
181 RDB_type_property(const RDB_type *, const char *);
182 
183 char *
184 RDB_type_name(const RDB_type *);
185 
186 RDB_bool
188 
189 RDB_bool
191 
192 RDB_bool
193 RDB_type_is_tuple(const RDB_type *);
194 
195 RDB_bool
196 RDB_type_is_array(const RDB_type *);
197 
198 RDB_type *
199 RDB_base_type(const RDB_type *typ);
200 
201 RDB_attr *
202 RDB_type_attrs(RDB_type *, int *);
203 
204 RDB_type *
205 RDB_new_scalar_type(const char *, RDB_int, RDB_bool, RDB_bool,
206  RDB_exec_context *);
207 
208 RDB_type *
209 RDB_new_tuple_type(int attrc, const RDB_attr[],
210  RDB_exec_context *);
211 
212 RDB_type *
213 RDB_new_relation_type(int attrc, const RDB_attr[],
214  RDB_exec_context *);
215 
216 RDB_type *
217 RDB_new_relation_type_from_base(RDB_type *, RDB_exec_context *);
218 
219 RDB_type *
220 RDB_new_array_type(RDB_type *, RDB_exec_context *);
221 
222 RDB_type *
223 RDB_dup_nonscalar_type(RDB_type *typ, RDB_exec_context *);
224 
225 int
226 RDB_del_nonscalar_type(RDB_type *, RDB_exec_context*);
227 
228 RDB_bool
229 RDB_type_equals(const RDB_type *, const RDB_type *);
230 
231 RDB_bool
232 RDB_type_matches(const RDB_type *, const RDB_type *);
233 
234 RDB_attr *
235 RDB_tuple_type_attr(const RDB_type *, const char *attrname);
236 
237 RDB_type *
238 RDB_wrap_tuple_type(const RDB_type *typ, int wrapc,
239  const RDB_wrapping wrapv[], RDB_exec_context *ecp);
240 
241 RDB_type *
242 RDB_wrap_relation_type(const RDB_type *typ, int wrapc,
243  const RDB_wrapping wrapv[], RDB_exec_context *ecp);
244 
245 RDB_type *
246 RDB_unwrap_tuple_type(const RDB_type *typ, int attrc, char *attrv[],
247  RDB_exec_context *);
248 
249 RDB_type *
250 RDB_unwrap_relation_type(const RDB_type *typ, int attrc, char *attrv[],
251  RDB_exec_context *);
252 
253 RDB_type *
254 RDB_extend_tuple_type(const RDB_type *typ, int attrc, RDB_attr attrv[],
255  RDB_exec_context *);
256 
257 RDB_type *
258 RDB_extend_relation_type(const RDB_type *typ, int attrc, RDB_attr attrv[],
259  RDB_exec_context *);
260 
261 RDB_type *
262 RDB_project_tuple_type(const RDB_type *typ, int attrc, const char *attrv[],
263  RDB_exec_context *);
264 
265 RDB_type *
266 RDB_project_relation_type(const RDB_type *typ, int, const char *[],
267  RDB_exec_context *);
268 
269 RDB_type *
270 RDB_group_type(const RDB_type *, int, char *[], const char *,
271  RDB_exec_context *);
272 
273 RDB_type *
274 RDB_ungroup_type(RDB_type *typ, const char *attr, RDB_exec_context *);
275 
276 RDB_type *
277 RDB_rename_tuple_type(const RDB_type *, int, const RDB_renaming[],
278  RDB_exec_context *);
279 
280 RDB_type *
281 RDB_rename_relation_type(const RDB_type *, int, const RDB_renaming[],
282  RDB_exec_context *);
283 
284 void
286 
287 void
288 RDB_set_cleanup(RDB_type *, RDB_obj_cleanup_func *);
289 
290 #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:76
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:44
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:26
RDB_bool RDB_type_equals(const RDB_type *, const RDB_type *)
Definition: type.c:589
char * name
Definition: type.h:28
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:37
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:31
Definition: type.h:136
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:66
Definition: type.h:128
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