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 |
37 | extern "C" |
38 | { |
39 | #endif |
40 | |
41 | enum 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 */ |
71 | enum 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 */ |
95 | enum 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 | |