PostgreSQL Source Code  git master
ecpgtype.h
Go to the documentation of this file.
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 
42 {
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 */
59  ECPGt_descriptor, /* sql descriptor, no C 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 */
68 };
69 
70  /* descriptor items */
72 {
88  ECPGd_EODT, /* End of descriptor types. */
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 */
96 {
103 };
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif /* _ECPGTYPE_H */
ECPG_statement_type
Definition: ecpgtype.h:96
@ ECPGst_normal
Definition: ecpgtype.h:97
@ ECPGst_execute
Definition: ecpgtype.h:98
@ ECPGst_exec_immediate
Definition: ecpgtype.h:99
@ ECPGst_exec_with_exprlist
Definition: ecpgtype.h:102
@ ECPGst_prepare
Definition: ecpgtype.h:101
@ ECPGst_prepnormal
Definition: ecpgtype.h:100
ECPGttype
Definition: ecpgtype.h:42
@ ECPGt_float
Definition: ecpgtype.h:47
@ ECPGt_EOIT
Definition: ecpgtype.h:62
@ ECPGt_long_long
Definition: ecpgtype.h:45
@ ECPGt_sqlda
Definition: ecpgtype.h:66
@ ECPGt_short
Definition: ecpgtype.h:43
@ ECPGt_decimal
Definition: ecpgtype.h:51
@ ECPGt_char_variable
Definition: ecpgtype.h:60
@ ECPGt_bytea
Definition: ecpgtype.h:67
@ ECPGt_numeric
Definition: ecpgtype.h:49
@ ECPGt_union
Definition: ecpgtype.h:58
@ ECPGt_varchar
Definition: ecpgtype.h:48
@ ECPGt_struct
Definition: ecpgtype.h:57
@ ECPGt_timestamp
Definition: ecpgtype.h:54
@ ECPGt_unsigned_short
Definition: ecpgtype.h:43
@ ECPGt_int
Definition: ecpgtype.h:44
@ ECPGt_long
Definition: ecpgtype.h:44
@ ECPGt_unsigned_char
Definition: ecpgtype.h:43
@ ECPGt_double
Definition: ecpgtype.h:47
@ ECPGt_varchar2
Definition: ecpgtype.h:48
@ ECPGt_array
Definition: ecpgtype.h:56
@ ECPGt_NO_INDICATOR
Definition: ecpgtype.h:64
@ ECPGt_EORT
Definition: ecpgtype.h:63
@ ECPGt_date
Definition: ecpgtype.h:53
@ ECPGt_interval
Definition: ecpgtype.h:55
@ ECPGt_unsigned_long
Definition: ecpgtype.h:44
@ ECPGt_const
Definition: ecpgtype.h:61
@ ECPGt_bool
Definition: ecpgtype.h:46
@ ECPGt_unsigned_long_long
Definition: ecpgtype.h:45
@ ECPGt_unsigned_int
Definition: ecpgtype.h:44
@ ECPGt_descriptor
Definition: ecpgtype.h:59
@ ECPGt_char
Definition: ecpgtype.h:43
@ ECPGt_string
Definition: ecpgtype.h:65
ECPGdtype
Definition: ecpgtype.h:72
@ ECPGd_scale
Definition: ecpgtype.h:86
@ ECPGd_precision
Definition: ecpgtype.h:83
@ ECPGd_length
Definition: ecpgtype.h:79
@ ECPGd_nullable
Definition: ecpgtype.h:81
@ ECPGd_di_precision
Definition: ecpgtype.h:76
@ ECPGd_type
Definition: ecpgtype.h:87
@ ECPGd_cardinality
Definition: ecpgtype.h:89
@ ECPGd_indicator
Definition: ecpgtype.h:77
@ ECPGd_ret_length
Definition: ecpgtype.h:84
@ ECPGd_di_code
Definition: ecpgtype.h:75
@ ECPGd_count
Definition: ecpgtype.h:73
@ ECPGd_name
Definition: ecpgtype.h:80
@ ECPGd_key_member
Definition: ecpgtype.h:78
@ ECPGd_EODT
Definition: ecpgtype.h:88
@ ECPGd_octet
Definition: ecpgtype.h:82
@ ECPGd_ret_octet
Definition: ecpgtype.h:85
@ ECPGd_data
Definition: ecpgtype.h:74