1 /**
2 *   PostgreSQL major types oids.
3 *
4 *   Copyright: © 2014 DSoftOut
5 *   Authors: NCrashed <ncrashed@gmail.com>
6 */
7 
8 module dpq2.oids;
9 
10 @safe:
11 
12 import derelict.pq.pq: Oid;
13 
14 package OidType oid2oidType(Oid oid) pure
15 {
16     static assert(Oid.sizeof == OidType.sizeof);
17 
18     return cast(OidType)(oid);
19 }
20 
21 bool isNativeInteger(OidType t) pure
22 {
23     with(OidType)
24     switch(t)
25     {
26         case Int8:
27         case Int2:
28         case Int4:
29             return true;
30         default:
31             break;
32     }
33 
34     return false;
35 }
36 
37 bool isNativeFloat(OidType t) pure
38 {
39     with(OidType)
40     switch(t)
41     {
42         case Float4:
43         case Float8:
44             return true;
45         default:
46             break;
47     }
48 
49     return false;
50 }
51 
52 bool isSupportedArray(OidType t) pure
53 {
54     with(OidType)
55     switch(t)
56     {
57         case BoolArray:
58         case ByteArrayArray:
59         case CharArray:
60         case Int2Array:
61         case Int4Array:
62         case TextArray:
63         case Int8Array:
64         case Float4Array:
65         case Float8Array:
66         case TimeStampArray:
67         case DateArray:
68         case TimeArray:
69         case NumericArray:
70         case UUIDArray:
71         case JsonArray:
72         //case JsonbArray:
73             return true;
74         default:
75             break;
76     }
77 
78     return false;
79 }
80 
81 enum OidType : Oid
82 {
83     Undefined = 0,
84 
85     Bool = 16,
86     ByteArray = 17,
87     Char = 18,
88     Name = 19,
89     Int8 = 20,
90     Int2 = 21,
91     Int2Vector = 22,
92     Int4 = 23,
93     RegProc = 24,
94     Text = 25,
95     Oid = 26,
96     Tid = 27,
97     Xid = 28,
98     Cid = 29,
99     OidVector = 30,
100 
101     AccessControlList = 1033,
102     TypeCatalog = 71,
103     AttributeCatalog = 75,
104     ProcCatalog = 81,
105     ClassCatalog = 83,
106     
107     Json = 114,
108     Jsonb = 3802,
109     Xml = 142,
110     NodeTree = 194,
111     StorageManager = 210,
112     
113     Point = 600,
114     LineSegment = 601,
115     Path = 602,
116     Box = 603,
117     Polygon = 604,
118     Line = 628,
119     
120     Float4 = 700,
121     Float8 = 701,
122     AbsTime = 702,
123     RelTime = 703,
124     Interval = 704,
125     Unknown = 705,
126     
127     Circle = 718,
128     Money = 790,
129     MacAddress = 829,
130     HostAddress = 869,
131     NetworkAddress = 650,
132     
133     FixedString = 1042,
134     VariableString = 1043,
135     
136     Date = 1082,
137     Time = 1083,
138     TimeStamp = 1114,
139     TimeStampWithZone = 1184,
140     TimeInterval = 1186,
141     TimeWithZone = 1266,
142     
143     FixedBitString = 1560,
144     VariableBitString = 1562,
145     
146     Numeric = 1700,
147     RefCursor = 1790,
148     RegProcWithArgs = 2202,
149     RegOperator = 2203,
150     RegOperatorWithArgs = 2204,
151     RegClass = 2205,
152     RegType = 2206,
153     
154     UUID = 2950,
155     TSVector = 3614,
156     GTSVector = 3642,
157     TSQuery = 3615,
158     RegConfig = 3734,
159     RegDictionary = 3769,
160     TXidSnapshot = 2970,
161     
162     Int4Range = 3904,
163     NumRange = 3906,
164     TimeStampRange = 3908,
165     TimeStampWithZoneRange = 3910,
166     DateRange = 3912,
167     Int8Range = 3926,
168     
169     // Arrays
170     XmlArray = 143,
171     JsonArray = 3807,
172     JsonbArray = 199,
173     BoolArray = 1000,
174     ByteArrayArray = 1001,
175     CharArray = 1002,
176     NameArray = 1003,
177     Int2Array = 1005,
178     Int2VectorArray = 1006,
179     Int4Array = 1007,
180     RegProcArray = 1008,
181     TextArray = 1009,
182     OidArray  = 1028,
183     TidArray = 1010,
184     XidArray = 1011,
185     CidArray = 1012,
186     OidVectorArray = 1013,
187     FixedStringArray = 1014,
188     VariableStringArray = 1015,
189     Int8Array = 1016,
190     PointArray = 1017,
191     LineSegmentArray = 1018,
192     PathArray = 1019,
193     BoxArray = 1020,
194     Float4Array = 1021,
195     Float8Array = 1022,
196     AbsTimeArray = 1023,
197     RelTimeArray = 1024,
198     IntervalArray = 1025,
199     PolygonArray = 1027,
200     AccessControlListArray = 1034,
201     MacAddressArray = 1040,
202     HostAdressArray = 1041,
203     NetworkAdressArray = 651,
204     CStringArray = 1263,
205     TimeStampArray = 1115,
206     DateArray = 1182,
207     TimeArray = 1183,
208     TimeStampWithZoneArray = 1185,
209     TimeIntervalArray = 1187,
210     NumericArray = 1231,
211     TimeWithZoneArray = 1270, 
212     FixedBitStringArray = 1561,
213     VariableBitStringArray = 1563,
214     RefCursorArray = 2201,
215     RegProcWithArgsArray = 2207,
216     RegOperatorArray = 2208,
217     RegOperatorWithArgsArray = 2209,
218     RegClassArray = 2210,
219     RegTypeArray = 2211,
220     UUIDArray = 2951,
221     TSVectorArray = 3643,
222     GTSVectorArray = 3644,
223     TSQueryArray = 3645,
224     RegConfigArray = 3735,
225     RegDictionaryArray = 3770,
226     TXidSnapshotArray = 2949,
227     Int4RangeArray = 3905,
228     NumRangeArray = 3907,
229     TimeStampRangeArray = 3909,
230     TimeStampWithZoneRangeArray = 3911,
231     DateRangeArray = 3913,
232     Int8RangeArray = 3927,
233     
234     // Pseudo types
235     Record = 2249,
236     RecordArray = 2287,
237     CString = 2275,
238     AnyVoid = 2276,
239     AnyArray = 2277,
240     Void = 2278,
241     Trigger = 2279,
242     EventTrigger = 3838,
243     LanguageHandler = 2280,
244     Internal = 2281,
245     Opaque = 2282,
246     AnyElement = 2283,
247     AnyNoArray = 2776,
248     AnyEnum = 3500,
249     FDWHandler = 3115,
250     AnyRange = 3831
251 }