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 };
68 
69  /* descriptor items */
70 enum ECPGdtype
71 {
72 	ECPGd_count = 1,
73 	ECPGd_data,
74 	ECPGd_di_code,
75 	ECPGd_di_precision,
76 	ECPGd_indicator,
77 	ECPGd_key_member,
78 	ECPGd_length,
79 	ECPGd_name,
80 	ECPGd_nullable,
81 	ECPGd_octet,
82 	ECPGd_precision,
83 	ECPGd_ret_length,
84 	ECPGd_ret_octet,
85 	ECPGd_scale,
86 	ECPGd_type,
87 	ECPGd_EODT,					/* End of descriptor types. */
88 	ECPGd_cardinality
89 };
90 
91 #define IS_SIMPLE_TYPE(type) (((type) >= ECPGt_char && (type) <= ECPGt_interval) || ((type) == ECPGt_string))
92 
93 /* we also have to handle different statement types */
94 enum ECPG_statement_type
95 {
96 	ECPGst_normal,
97 	ECPGst_execute,
98 	ECPGst_exec_immediate,
99 	ECPGst_prepnormal
100 };
101 
102 #ifdef __cplusplus
103 }
104 #endif
105 
106 #endif							/* _ECPGTYPE_H */
107