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