27
27
#include "miscadmin.h"
28
28
#include "utils/array.h"
29
29
#include "utils/builtins.h"
30
+ #include "utils/fmgroids.h"
30
31
#include "utils/memutils.h"
31
32
#include "utils/lsyscache.h"
32
33
33
34
#include "array_iterator.h"
34
35
35
36
36
37
static int32
37
- array_iterator (Oid elemtype , Oid proc , int and , ArrayType * array , Datum value )
38
+ array_iterator (Oid proc , int and , ArrayType * array , Datum value )
38
39
{
40
+ Oid elemtype ;
39
41
int16 typlen ;
40
42
bool typbyval ;
43
+ char typalign ;
41
44
int nitems ,
42
45
i ;
43
46
Datum result ;
@@ -63,7 +66,8 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
63
66
return (0 );
64
67
65
68
/* Lookup element type information */
66
- get_typlenbyval (elemtype , & typlen , & typbyval );
69
+ elemtype = ARR_ELEMTYPE (array );
70
+ get_typlenbyvalalign (elemtype , & typlen , & typbyval , & typalign );
67
71
68
72
/* Lookup the function entry point */
69
73
fmgr_info (proc , & finfo );
@@ -82,10 +86,8 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
82
86
83
87
itemvalue = fetch_att (p , typbyval , typlen );
84
88
85
- if (typlen > 0 )
86
- p += typlen ;
87
- else
88
- p += INTALIGN (* (int32 * ) p );
89
+ p = att_addlength (p , typlen , PointerGetDatum (p ));
90
+ p = (char * ) att_align (p , typalign );
89
91
90
92
result = FunctionCall2 (& finfo , itemvalue , value );
91
93
@@ -112,37 +114,33 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
112
114
*/
113
115
114
116
int32
115
- array_texteq (ArrayType * array , char * value )
117
+ array_texteq (ArrayType * array , void * value )
116
118
{
117
- return array_iterator ((Oid ) 25 , /* text */
118
- (Oid ) 67 , /* texteq */
119
+ return array_iterator (F_TEXTEQ ,
119
120
0 , /* logical or */
120
121
array , (Datum ) value );
121
122
}
122
123
123
124
int32
124
- array_all_texteq (ArrayType * array , char * value )
125
+ array_all_texteq (ArrayType * array , void * value )
125
126
{
126
- return array_iterator ((Oid ) 25 , /* text */
127
- (Oid ) 67 , /* texteq */
127
+ return array_iterator (F_TEXTEQ ,
128
128
1 , /* logical and */
129
129
array , (Datum ) value );
130
130
}
131
131
132
132
int32
133
- array_textregexeq (ArrayType * array , char * value )
133
+ array_textregexeq (ArrayType * array , void * value )
134
134
{
135
- return array_iterator ((Oid ) 25 , /* text */
136
- (Oid ) 1254 , /* textregexeq */
135
+ return array_iterator (F_TEXTREGEXEQ ,
137
136
0 , /* logical or */
138
137
array , (Datum ) value );
139
138
}
140
139
141
140
int32
142
- array_all_textregexeq (ArrayType * array , char * value )
141
+ array_all_textregexeq (ArrayType * array , void * value )
143
142
{
144
- return array_iterator ((Oid ) 25 , /* text */
145
- (Oid ) 1254 , /* textregexeq */
143
+ return array_iterator (F_TEXTREGEXEQ ,
146
144
1 , /* logical and */
147
145
array , (Datum ) value );
148
146
}
@@ -153,37 +151,33 @@ array_all_textregexeq(ArrayType *array, char *value)
153
151
*/
154
152
155
153
int32
156
- array_varchareq (ArrayType * array , char * value )
154
+ array_varchareq (ArrayType * array , void * value )
157
155
{
158
- return array_iterator ((Oid ) 1043 , /* varchar */
159
- (Oid ) 1070 , /* varchareq */
156
+ return array_iterator (F_VARCHAREQ ,
160
157
0 , /* logical or */
161
158
array , (Datum ) value );
162
159
}
163
160
164
161
int32
165
- array_all_varchareq (ArrayType * array , char * value )
162
+ array_all_varchareq (ArrayType * array , void * value )
166
163
{
167
- return array_iterator ((Oid ) 1043 , /* varchar */
168
- (Oid ) 1070 , /* varchareq */
164
+ return array_iterator (F_VARCHAREQ ,
169
165
1 , /* logical and */
170
166
array , (Datum ) value );
171
167
}
172
168
173
169
int32
174
- array_varcharregexeq (ArrayType * array , char * value )
170
+ array_varcharregexeq (ArrayType * array , void * value )
175
171
{
176
- return array_iterator ((Oid ) 1043 , /* varchar */
177
- (Oid ) 1254 , /* textregexeq */
172
+ return array_iterator (F_TEXTREGEXEQ ,
178
173
0 , /* logical or */
179
174
array , (Datum ) value );
180
175
}
181
176
182
177
int32
183
- array_all_varcharregexeq (ArrayType * array , char * value )
178
+ array_all_varcharregexeq (ArrayType * array , void * value )
184
179
{
185
- return array_iterator ((Oid ) 1043 , /* varchar */
186
- (Oid ) 1254 , /* textregexeq */
180
+ return array_iterator (F_TEXTREGEXEQ ,
187
181
1 , /* logical and */
188
182
array , (Datum ) value );
189
183
}
@@ -194,37 +188,33 @@ array_all_varcharregexeq(ArrayType *array, char *value)
194
188
*/
195
189
196
190
int32
197
- array_bpchareq (ArrayType * array , char * value )
191
+ array_bpchareq (ArrayType * array , void * value )
198
192
{
199
- return array_iterator ((Oid ) 1042 , /* bpchar */
200
- (Oid ) 1048 , /* bpchareq */
193
+ return array_iterator (F_BPCHAREQ ,
201
194
0 , /* logical or */
202
195
array , (Datum ) value );
203
196
}
204
197
205
198
int32
206
- array_all_bpchareq (ArrayType * array , char * value )
199
+ array_all_bpchareq (ArrayType * array , void * value )
207
200
{
208
- return array_iterator ((Oid ) 1042 , /* bpchar */
209
- (Oid ) 1048 , /* bpchareq */
201
+ return array_iterator (F_BPCHAREQ ,
210
202
1 , /* logical and */
211
203
array , (Datum ) value );
212
204
}
213
205
214
206
int32
215
- array_bpcharregexeq (ArrayType * array , char * value )
207
+ array_bpcharregexeq (ArrayType * array , void * value )
216
208
{
217
- return array_iterator ((Oid ) 1042 , /* bpchar */
218
- (Oid ) 1254 , /* textregexeq */
209
+ return array_iterator (F_TEXTREGEXEQ ,
219
210
0 , /* logical or */
220
211
array , (Datum ) value );
221
212
}
222
213
223
214
int32
224
- array_all_bpcharregexeq (ArrayType * array , char * value )
215
+ array_all_bpcharregexeq (ArrayType * array , void * value )
225
216
{
226
- return array_iterator ((Oid ) 1042 , /* bpchar */
227
- (Oid ) 1254 , /* textregexeq */
217
+ return array_iterator (F_TEXTREGEXEQ ,
228
218
1 , /* logical and */
229
219
array , (Datum ) value );
230
220
}
@@ -236,107 +226,95 @@ array_all_bpcharregexeq(ArrayType *array, char *value)
236
226
int32
237
227
array_int4eq (ArrayType * array , int4 value )
238
228
{
239
- return array_iterator ((Oid ) 23 , /* int4 */
240
- (Oid ) 65 , /* int4eq */
229
+ return array_iterator (F_INT4EQ ,
241
230
0 , /* logical or */
242
231
array , (Datum ) value );
243
232
}
244
233
245
234
int32
246
235
array_all_int4eq (ArrayType * array , int4 value )
247
236
{
248
- return array_iterator ((Oid ) 23 , /* int4 */
249
- (Oid ) 65 , /* int4eq */
237
+ return array_iterator (F_INT4EQ ,
250
238
1 , /* logical and */
251
239
array , (Datum ) value );
252
240
}
253
241
254
242
int32
255
243
array_int4ne (ArrayType * array , int4 value )
256
244
{
257
- return array_iterator ((Oid ) 23 , /* int4 */
258
- (Oid ) 144 , /* int4ne */
245
+ return array_iterator (F_INT4NE ,
259
246
0 , /* logical or */
260
247
array , (Datum ) value );
261
248
}
262
249
263
250
int32
264
251
array_all_int4ne (ArrayType * array , int4 value )
265
252
{
266
- return array_iterator ((Oid ) 23 , /* int4 */
267
- (Oid ) 144 , /* int4ne */
253
+ return array_iterator (F_INT4NE ,
268
254
1 , /* logical and */
269
255
array , (Datum ) value );
270
256
}
271
257
272
258
int32
273
259
array_int4gt (ArrayType * array , int4 value )
274
260
{
275
- return array_iterator ((Oid ) 23 , /* int4 */
276
- (Oid ) 147 , /* int4gt */
261
+ return array_iterator (F_INT4GT ,
277
262
0 , /* logical or */
278
263
array , (Datum ) value );
279
264
}
280
265
281
266
int32
282
267
array_all_int4gt (ArrayType * array , int4 value )
283
268
{
284
- return array_iterator ((Oid ) 23 , /* int4 */
285
- (Oid ) 147 , /* int4gt */
269
+ return array_iterator (F_INT4GT ,
286
270
1 , /* logical and */
287
271
array , (Datum ) value );
288
272
}
289
273
290
274
int32
291
275
array_int4ge (ArrayType * array , int4 value )
292
276
{
293
- return array_iterator ((Oid ) 23 , /* int4 */
294
- (Oid ) 150 , /* int4ge */
277
+ return array_iterator (F_INT4GE ,
295
278
0 , /* logical or */
296
279
array , (Datum ) value );
297
280
}
298
281
299
282
int32
300
283
array_all_int4ge (ArrayType * array , int4 value )
301
284
{
302
- return array_iterator ((Oid ) 23 , /* int4 */
303
- (Oid ) 150 , /* int4ge */
285
+ return array_iterator (F_INT4GE ,
304
286
1 , /* logical and */
305
287
array , (Datum ) value );
306
288
}
307
289
308
290
int32
309
291
array_int4lt (ArrayType * array , int4 value )
310
292
{
311
- return array_iterator ((Oid ) 23 , /* int4 */
312
- (Oid ) 66 , /* int4lt */
293
+ return array_iterator (F_INT4LT ,
313
294
0 , /* logical or */
314
295
array , (Datum ) value );
315
296
}
316
297
317
298
int32
318
299
array_all_int4lt (ArrayType * array , int4 value )
319
300
{
320
- return array_iterator ((Oid ) 23 , /* int4 */
321
- (Oid ) 66 , /* int4lt */
301
+ return array_iterator (F_INT4LT ,
322
302
1 , /* logical and */
323
303
array , (Datum ) value );
324
304
}
325
305
326
306
int32
327
307
array_int4le (ArrayType * array , int4 value )
328
308
{
329
- return array_iterator ((Oid ) 23 , /* int4 */
330
- (Oid ) 149 , /* int4le */
309
+ return array_iterator (F_INT4LE ,
331
310
0 , /* logical or */
332
311
array , (Datum ) value );
333
312
}
334
313
335
314
int32
336
315
array_all_int4le (ArrayType * array , int4 value )
337
316
{
338
- return array_iterator ((Oid ) 23 , /* int4 */
339
- (Oid ) 149 , /* int4le */
317
+ return array_iterator (F_INT4LE ,
340
318
1 , /* logical and */
341
319
array , (Datum ) value );
342
320
}
@@ -346,61 +324,47 @@ array_all_int4le(ArrayType *array, int4 value)
346
324
int32
347
325
array_oideq (ArrayType * array , Oid value )
348
326
{
349
- return array_iterator ((Oid ) 26 , /* oid */
350
- (Oid ) 184 , /* oideq */
327
+ return array_iterator (F_OIDEQ ,
351
328
0 , /* logical or */
352
329
array , (Datum ) value );
353
330
}
354
331
355
332
int32
356
333
array_all_oidne (ArrayType * array , Oid value )
357
334
{
358
- return array_iterator ((Oid ) 26 , /* int4 */
359
- (Oid ) 185 , /* oidne */
335
+ return array_iterator (F_OIDNE ,
360
336
1 , /* logical and */
361
337
array , (Datum ) value );
362
338
}
363
339
364
340
int32
365
- array_ineteq (ArrayType * array , Oid value )
341
+ array_ineteq (ArrayType * array , void * value )
366
342
{
367
- return array_iterator ((Oid ) 869 , /* inet */
368
- (Oid ) 920 , /* network_eq */
343
+ return array_iterator (F_NETWORK_EQ ,
369
344
0 , /* logical or */
370
345
array , (Datum ) value );
371
346
}
372
347
373
348
int32
374
- array_all_ineteq (ArrayType * array , Oid value )
349
+ array_all_ineteq (ArrayType * array , void * value )
375
350
{
376
- return array_iterator ((Oid ) 869 , /* inet */
377
- (Oid ) 920 , /* network_eq */
351
+ return array_iterator (F_NETWORK_EQ ,
378
352
1 , /* logical and */
379
353
array , (Datum ) value );
380
354
}
381
355
382
356
int32
383
- array_inetne (ArrayType * array , Oid value )
357
+ array_inetne (ArrayType * array , void * value )
384
358
{
385
- return array_iterator ((Oid ) 869 , /* inet */
386
- (Oid ) 925 , /* network_ne */
359
+ return array_iterator (F_NETWORK_NE ,
387
360
0 , /* logical and */
388
361
array , (Datum ) value );
389
362
}
390
363
391
364
int32
392
- array_all_inetne (ArrayType * array , Oid value )
365
+ array_all_inetne (ArrayType * array , void * value )
393
366
{
394
- return array_iterator ((Oid ) 869 , /* inet */
395
- (Oid ) 925 , /* network_ne */
367
+ return array_iterator (F_NETWORK_NE ,
396
368
1 , /* logical and */
397
369
array , (Datum ) value );
398
370
}
399
-
400
- /*
401
- * Local Variables:
402
- * tab-width: 4
403
- * c-indent-level: 4
404
- * c-basic-offset: 4
405
- * End:
406
- */
0 commit comments