PostgreSQL Source Code: src/interfaces/ecpg/preproc/type.h File Reference (original) (raw)
223{
225
229 {
230 char *str;
231
235
236 if ((var->type->type != type->type) ||
237 (var->type->type_name && ->type_name) ||
238 (!var->type->type_name && type->type_name) ||
239 (var->type->type_name && type->type_name && strcmp(var->type->type_name, type->type_name) != 0))
243
245 {
249
251 (var->type->type_name && ->type_name) ||
252 (!var->type->type_name && ind_type->type_name) ||
253 (var->type->type_name && ind_type->type_name && strcmp(var->type->type_name, ind_type->type_name) != 0))
254 mmerror(PARSE_ERROR, ET_ERROR, "indicator variable \"%s\" is hidden by a local variable of a different type", ind_name);
255 else if (var->brace_level != ind_brace_level)
257 }
258 }
259
260 switch (type->type)
261 {
265 switch (type->u.element->type)
266 {
268 mmerror(PARSE_ERROR, ET_ERROR, "nested arrays are not supported (except strings)");
269 break;
273 ind_name,
275 type->u.element,
277 prefix, ind_prefix);
278 break;
279 default:
281 base_yyerror("internal error: unknown datatype, please report this to <" PACKAGE_BUGREPORT ">");
282
284 type->u.element->type,
285 type->u.element->size, type->size, struct_sizeof ? struct_sizeof : NULL,
286 prefix, type->u.element->counter);
287
289 {
291 {
292 char *str_neg_one = mm_strdup("-1");
293
295 free(str_neg_one);
296 }
297 else
298 {
300 ind_type->u.element->size, ind_type->size, NULL, ind_prefix, 0);
301 }
302 }
303 }
304 break;
306 {
308
311
313 free(str_one);
314 }
315 break;
316 case ECPGt_union:
317 base_yyerror("type of union has to be specified");
318 break;
320 {
321
322
323
324
325 char *str_varchar_one = mm_strdup("1");
326 char *str_arr_one = mm_strdup("1");
327 char *str_neg_one = mm_strdup("-1");
328
331
332 ECPGdump_a_simple(o, name, type->type, str_varchar_one, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_arr_one, struct_sizeof, prefix, 0);
334 ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_neg_one, ind_struct_sizeof, ind_prefix, 0);
335
336 free(str_varchar_one);
337 free(str_arr_one);
338 free(str_neg_one);
339 }
340 break;
342 {
343
344
345
346
347 char *str_neg_one = mm_strdup("-1");
348 char *ind_type_neg_one = mm_strdup("-1");
349
352
356
357 free(str_neg_one);
358 free(ind_type_neg_one);
359 }
360 break;
361 default:
362 {
363
364
365
366
367 char *str_neg_one = mm_strdup("-1");
368 char *ind_type_neg_one = mm_strdup("-1");
369
372
373 ECPGdump_a_simple(o, name, type->type, type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : str_neg_one, struct_sizeof, prefix, type->counter);
375 ECPGdump_a_simple(o, ind_name, ind_type->type, ind_type->size, (arr_str_size && strcmp(arr_str_size, "0") != 0) ? arr_str_size : ind_type_neg_one, ind_struct_sizeof, ind_prefix, 0);
376
377 free(str_neg_one);
378 free(ind_type_neg_one);
379 }
380 break;
381 }
382}
#define IS_SIMPLE_TYPE(type)
char * mm_strdup(const char *string)
void base_yyerror(const char *error)
void pg_noreturn void mmfatal(int error_code, const char *error,...) pg_attribute_printf(2
void mmerror(int error_code, enum errortype type, const char *error,...) pg_attribute_printf(3
#define INDICATOR_NOT_SIMPLE
#define INDICATOR_NOT_STRUCT
#define INDICATOR_NOT_ARRAY
struct variable * find_variable(const char *name)
static void ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, char *arrsize, struct ECPGtype *type, struct ECPGtype *ind_type, const char *prefix, const char *ind_prefix)
static void ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type, char *varcharsize, char *arrsize, const char *size, const char *prefix, int counter)