1/*
2 * This file implements a data structure that is built and maintained by the
3 * preprocessor.
4 *
5 * All types that can be handled for host variable declarations has to
6 * be handled eventually.
7 *
8 * src/interfaces/ecpg/include/ecpgtype.h
9 */
10
11/*
12 * Here are all the types that we are to handle. Note that it is the type
13 * that is registered and that has nothing whatsoever to do with the storage
14 * class.
15 *
16 * Simple types
17 * integers: char, short, int, long (signed and unsigned)
18 * floats: float, double
19 *
20 * Complex types:
21 * VARCHAR, VARCHAR2 - Strings with length (maxlen is given in the declaration)
22 * Arrays of simple types and of VARCHAR, VARCHAR2 (size given in declaration)
23 * Records build of simple types, arrays and other structs.
24 *
25 * Complicating things:
26 * typedefs and struct names!
27 *
28 * Conclusion:
29 * This is a typically recursive definition. A structure of typed list elements
30 * would probably work fine:
31 */
32
33#ifndef _ECPGTYPE_H
34#define _ECPGTYPE_H
35
36#ifdef __cplusplus
37extern "C"
38{
39#endif
40
41enum ECPGttype
42{
43 ECPGt_char = 1, ECPGt_unsigned_char, ECPGt_short, ECPGt_unsigned_short,
44 ECPGt_int, ECPGt_unsigned_int, ECPGt_long, ECPGt_unsigned_long,
45 ECPGt_long_long, ECPGt_unsigned_long_long,
46 ECPGt_bool,
47 ECPGt_float, ECPGt_double,
48 ECPGt_varchar, ECPGt_varchar2,
49 ECPGt_numeric, /* this is a decimal that stores its digits in
50 * a malloced array */
51 ECPGt_decimal, /* this is a decimal that stores its digits in
52 * a fixed array */
53 ECPGt_date,
54 ECPGt_timestamp,
55 ECPGt_interval,
56 ECPGt_array,
57 ECPGt_struct,
58 ECPGt_union,
59 ECPGt_descriptor, /* sql descriptor, no C variable */
60 ECPGt_char_variable,
61 ECPGt_const, /* a constant is needed sometimes */
62 ECPGt_EOIT, /* End of insert types. */
63 ECPGt_EORT, /* End of result types. */
64 ECPGt_NO_INDICATOR, /* no indicator */
65 ECPGt_string, /* trimmed (char *) type */
66 ECPGt_sqlda, /* C struct descriptor */
67 ECPGt_bytea
68};
69
70 /* descriptor items */
71enum ECPGdtype
72{
73 ECPGd_count = 1,
74 ECPGd_data,
75 ECPGd_di_code,
76 ECPGd_di_precision,
77 ECPGd_indicator,
78 ECPGd_key_member,
79 ECPGd_length,
80 ECPGd_name,
81 ECPGd_nullable,
82 ECPGd_octet,
83 ECPGd_precision,
84 ECPGd_ret_length,
85 ECPGd_ret_octet,
86 ECPGd_scale,
87 ECPGd_type,
88 ECPGd_EODT, /* End of descriptor types. */
89 ECPGd_cardinality
90};
91
92#define IS_SIMPLE_TYPE(type) (((type) >= ECPGt_char && (type) <= ECPGt_interval) || ((type) == ECPGt_string) || ((type) == ECPGt_bytea))
93
94/* we also have to handle different statement types */
95enum ECPG_statement_type
96{
97 ECPGst_normal,
98 ECPGst_execute,
99 ECPGst_exec_immediate,
100 ECPGst_prepnormal,
101 ECPGst_prepare,
102 ECPGst_exec_with_exprlist
103};
104
105#ifdef __cplusplus
106}
107#endif
108
109#endif /* _ECPGTYPE_H */
110