2727#include "miscadmin.h"
2828#include "utils/array.h"
2929#include "utils/builtins.h"
30+ #include "utils/fmgroids.h"
3031#include "utils/memutils.h"
3132#include "utils/lsyscache.h"
3233
3334#include "array_iterator.h"
3435
3536
3637static 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 )
3839{
40+ Oid elemtype ;
3941int16 typlen ;
4042bool typbyval ;
43+ char typalign ;
4144int nitems ,
4245i ;
4346Datum result ;
@@ -63,7 +66,8 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
6366return (0 );
6467
6568/* Lookup element type information */
66- get_typlenbyval (elemtype ,& typlen ,& typbyval );
69+ elemtype = ARR_ELEMTYPE (array );
70+ get_typlenbyvalalign (elemtype ,& typlen ,& typbyval ,& typalign );
6771
6872/* Lookup the function entry point */
6973fmgr_info (proc ,& finfo );
@@ -82,10 +86,8 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
8286
8387itemvalue = fetch_att (p ,typbyval ,typlen );
8488
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 );
8991
9092result = FunctionCall2 (& finfo ,itemvalue ,value );
9193
@@ -112,37 +114,33 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
112114 */
113115
114116int32
115- array_texteq (ArrayType * array ,char * value )
117+ array_texteq (ArrayType * array ,void * value )
116118{
117- return array_iterator ((Oid )25 ,/* text */
118- (Oid )67 ,/* texteq */
119+ return array_iterator (F_TEXTEQ ,
1191200 ,/* logical or */
120121array , (Datum )value );
121122}
122123
123124int32
124- array_all_texteq (ArrayType * array ,char * value )
125+ array_all_texteq (ArrayType * array ,void * value )
125126{
126- return array_iterator ((Oid )25 ,/* text */
127- (Oid )67 ,/* texteq */
127+ return array_iterator (F_TEXTEQ ,
1281281 ,/* logical and */
129129array , (Datum )value );
130130}
131131
132132int32
133- array_textregexeq (ArrayType * array ,char * value )
133+ array_textregexeq (ArrayType * array ,void * value )
134134{
135- return array_iterator ((Oid )25 ,/* text */
136- (Oid )1254 ,/* textregexeq */
135+ return array_iterator (F_TEXTREGEXEQ ,
1371360 ,/* logical or */
138137array , (Datum )value );
139138}
140139
141140int32
142- array_all_textregexeq (ArrayType * array ,char * value )
141+ array_all_textregexeq (ArrayType * array ,void * value )
143142{
144- return array_iterator ((Oid )25 ,/* text */
145- (Oid )1254 ,/* textregexeq */
143+ return array_iterator (F_TEXTREGEXEQ ,
1461441 ,/* logical and */
147145array , (Datum )value );
148146}
@@ -153,37 +151,33 @@ array_all_textregexeq(ArrayType *array, char *value)
153151 */
154152
155153int32
156- array_varchareq (ArrayType * array ,char * value )
154+ array_varchareq (ArrayType * array ,void * value )
157155{
158- return array_iterator ((Oid )1043 ,/* varchar */
159- (Oid )1070 ,/* varchareq */
156+ return array_iterator (F_VARCHAREQ ,
1601570 ,/* logical or */
161158array , (Datum )value );
162159}
163160
164161int32
165- array_all_varchareq (ArrayType * array ,char * value )
162+ array_all_varchareq (ArrayType * array ,void * value )
166163{
167- return array_iterator ((Oid )1043 ,/* varchar */
168- (Oid )1070 ,/* varchareq */
164+ return array_iterator (F_VARCHAREQ ,
1691651 ,/* logical and */
170166array , (Datum )value );
171167}
172168
173169int32
174- array_varcharregexeq (ArrayType * array ,char * value )
170+ array_varcharregexeq (ArrayType * array ,void * value )
175171{
176- return array_iterator ((Oid )1043 ,/* varchar */
177- (Oid )1254 ,/* textregexeq */
172+ return array_iterator (F_TEXTREGEXEQ ,
1781730 ,/* logical or */
179174array , (Datum )value );
180175}
181176
182177int32
183- array_all_varcharregexeq (ArrayType * array ,char * value )
178+ array_all_varcharregexeq (ArrayType * array ,void * value )
184179{
185- return array_iterator ((Oid )1043 ,/* varchar */
186- (Oid )1254 ,/* textregexeq */
180+ return array_iterator (F_TEXTREGEXEQ ,
1871811 ,/* logical and */
188182array , (Datum )value );
189183}
@@ -194,37 +188,33 @@ array_all_varcharregexeq(ArrayType *array, char *value)
194188 */
195189
196190int32
197- array_bpchareq (ArrayType * array ,char * value )
191+ array_bpchareq (ArrayType * array ,void * value )
198192{
199- return array_iterator ((Oid )1042 ,/* bpchar */
200- (Oid )1048 ,/* bpchareq */
193+ return array_iterator (F_BPCHAREQ ,
2011940 ,/* logical or */
202195array , (Datum )value );
203196}
204197
205198int32
206- array_all_bpchareq (ArrayType * array ,char * value )
199+ array_all_bpchareq (ArrayType * array ,void * value )
207200{
208- return array_iterator ((Oid )1042 ,/* bpchar */
209- (Oid )1048 ,/* bpchareq */
201+ return array_iterator (F_BPCHAREQ ,
2102021 ,/* logical and */
211203array , (Datum )value );
212204}
213205
214206int32
215- array_bpcharregexeq (ArrayType * array ,char * value )
207+ array_bpcharregexeq (ArrayType * array ,void * value )
216208{
217- return array_iterator ((Oid )1042 ,/* bpchar */
218- (Oid )1254 ,/* textregexeq */
209+ return array_iterator (F_TEXTREGEXEQ ,
2192100 ,/* logical or */
220211array , (Datum )value );
221212}
222213
223214int32
224- array_all_bpcharregexeq (ArrayType * array ,char * value )
215+ array_all_bpcharregexeq (ArrayType * array ,void * value )
225216{
226- return array_iterator ((Oid )1042 ,/* bpchar */
227- (Oid )1254 ,/* textregexeq */
217+ return array_iterator (F_TEXTREGEXEQ ,
2282181 ,/* logical and */
229219array , (Datum )value );
230220}
@@ -236,107 +226,95 @@ array_all_bpcharregexeq(ArrayType *array, char *value)
236226int32
237227array_int4eq (ArrayType * array ,int4 value )
238228{
239- return array_iterator ((Oid )23 ,/* int4 */
240- (Oid )65 ,/* int4eq */
229+ return array_iterator (F_INT4EQ ,
2412300 ,/* logical or */
242231array , (Datum )value );
243232}
244233
245234int32
246235array_all_int4eq (ArrayType * array ,int4 value )
247236{
248- return array_iterator ((Oid )23 ,/* int4 */
249- (Oid )65 ,/* int4eq */
237+ return array_iterator (F_INT4EQ ,
2502381 ,/* logical and */
251239array , (Datum )value );
252240}
253241
254242int32
255243array_int4ne (ArrayType * array ,int4 value )
256244{
257- return array_iterator ((Oid )23 ,/* int4 */
258- (Oid )144 ,/* int4ne */
245+ return array_iterator (F_INT4NE ,
2592460 ,/* logical or */
260247array , (Datum )value );
261248}
262249
263250int32
264251array_all_int4ne (ArrayType * array ,int4 value )
265252{
266- return array_iterator ((Oid )23 ,/* int4 */
267- (Oid )144 ,/* int4ne */
253+ return array_iterator (F_INT4NE ,
2682541 ,/* logical and */
269255array , (Datum )value );
270256}
271257
272258int32
273259array_int4gt (ArrayType * array ,int4 value )
274260{
275- return array_iterator ((Oid )23 ,/* int4 */
276- (Oid )147 ,/* int4gt */
261+ return array_iterator (F_INT4GT ,
2772620 ,/* logical or */
278263array , (Datum )value );
279264}
280265
281266int32
282267array_all_int4gt (ArrayType * array ,int4 value )
283268{
284- return array_iterator ((Oid )23 ,/* int4 */
285- (Oid )147 ,/* int4gt */
269+ return array_iterator (F_INT4GT ,
2862701 ,/* logical and */
287271array , (Datum )value );
288272}
289273
290274int32
291275array_int4ge (ArrayType * array ,int4 value )
292276{
293- return array_iterator ((Oid )23 ,/* int4 */
294- (Oid )150 ,/* int4ge */
277+ return array_iterator (F_INT4GE ,
2952780 ,/* logical or */
296279array , (Datum )value );
297280}
298281
299282int32
300283array_all_int4ge (ArrayType * array ,int4 value )
301284{
302- return array_iterator ((Oid )23 ,/* int4 */
303- (Oid )150 ,/* int4ge */
285+ return array_iterator (F_INT4GE ,
3042861 ,/* logical and */
305287array , (Datum )value );
306288}
307289
308290int32
309291array_int4lt (ArrayType * array ,int4 value )
310292{
311- return array_iterator ((Oid )23 ,/* int4 */
312- (Oid )66 ,/* int4lt */
293+ return array_iterator (F_INT4LT ,
3132940 ,/* logical or */
314295array , (Datum )value );
315296}
316297
317298int32
318299array_all_int4lt (ArrayType * array ,int4 value )
319300{
320- return array_iterator ((Oid )23 ,/* int4 */
321- (Oid )66 ,/* int4lt */
301+ return array_iterator (F_INT4LT ,
3223021 ,/* logical and */
323303array , (Datum )value );
324304}
325305
326306int32
327307array_int4le (ArrayType * array ,int4 value )
328308{
329- return array_iterator ((Oid )23 ,/* int4 */
330- (Oid )149 ,/* int4le */
309+ return array_iterator (F_INT4LE ,
3313100 ,/* logical or */
332311array , (Datum )value );
333312}
334313
335314int32
336315array_all_int4le (ArrayType * array ,int4 value )
337316{
338- return array_iterator ((Oid )23 ,/* int4 */
339- (Oid )149 ,/* int4le */
317+ return array_iterator (F_INT4LE ,
3403181 ,/* logical and */
341319array , (Datum )value );
342320}
@@ -346,61 +324,47 @@ array_all_int4le(ArrayType *array, int4 value)
346324int32
347325array_oideq (ArrayType * array ,Oid value )
348326{
349- return array_iterator ((Oid )26 ,/* oid */
350- (Oid )184 ,/* oideq */
327+ return array_iterator (F_OIDEQ ,
3513280 ,/* logical or */
352329array , (Datum )value );
353330}
354331
355332int32
356333array_all_oidne (ArrayType * array ,Oid value )
357334{
358- return array_iterator ((Oid )26 ,/* int4 */
359- (Oid )185 ,/* oidne */
335+ return array_iterator (F_OIDNE ,
3603361 ,/* logical and */
361337array , (Datum )value );
362338}
363339
364340int32
365- array_ineteq (ArrayType * array ,Oid value )
341+ array_ineteq (ArrayType * array ,void * value )
366342{
367- return array_iterator ((Oid )869 ,/* inet */
368- (Oid )920 ,/* network_eq */
343+ return array_iterator (F_NETWORK_EQ ,
3693440 ,/* logical or */
370345array , (Datum )value );
371346}
372347
373348int32
374- array_all_ineteq (ArrayType * array ,Oid value )
349+ array_all_ineteq (ArrayType * array ,void * value )
375350{
376- return array_iterator ((Oid )869 ,/* inet */
377- (Oid )920 ,/* network_eq */
351+ return array_iterator (F_NETWORK_EQ ,
3783521 ,/* logical and */
379353array , (Datum )value );
380354}
381355
382356int32
383- array_inetne (ArrayType * array ,Oid value )
357+ array_inetne (ArrayType * array ,void * value )
384358{
385- return array_iterator ((Oid )869 ,/* inet */
386- (Oid )925 ,/* network_ne */
359+ return array_iterator (F_NETWORK_NE ,
3873600 ,/* logical and */
388361array , (Datum )value );
389362}
390363
391364int32
392- array_all_inetne (ArrayType * array ,Oid value )
365+ array_all_inetne (ArrayType * array ,void * value )
393366{
394- return array_iterator ((Oid )869 ,/* inet */
395- (Oid )925 ,/* network_ne */
367+ return array_iterator (F_NETWORK_NE ,
3963681 ,/* logical and */
397369array , (Datum )value );
398370}
399-
400- /*
401- * Local Variables:
402- *tab-width: 4
403- *c-indent-level: 4
404- *c-basic-offset: 4
405- * End:
406- */