11
11
* Portions Copyright (c) 1994, Regents of the University of California
12
12
*
13
13
* IDENTIFICATION
14
- * $PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.69 2007/06/02 02:03:42 adunstan Exp $
14
+ * $PostgreSQL: pgsql/src/backend/utils/adt/like.c,v 1.70 2007/09/21 22:52:52 tgl Exp $
15
15
*
16
16
*-------------------------------------------------------------------------
17
17
*/
@@ -135,6 +135,7 @@ Generic_Text_IC_like(text *str, text *pat)
135
135
/* Force inputs to lower case to achieve case insensitivity */
136
136
str = DatumGetTextP (DirectFunctionCall1 (lower , PointerGetDatum (str )));
137
137
pat = DatumGetTextP (DirectFunctionCall1 (lower , PointerGetDatum (pat )));
138
+ /* lower's result is never packed, so OK to use old macros here */
138
139
s = VARDATA (str );
139
140
slen = (VARSIZE (str ) - VARHDRSZ );
140
141
p = VARDATA (pat );
@@ -151,7 +152,7 @@ Datum
151
152
namelike (PG_FUNCTION_ARGS )
152
153
{
153
154
Name str = PG_GETARG_NAME (0 );
154
- text * pat = PG_GETARG_TEXT_P (1 );
155
+ text * pat = PG_GETARG_TEXT_PP (1 );
155
156
bool result ;
156
157
char * s ,
157
158
* p ;
@@ -160,8 +161,8 @@ namelike(PG_FUNCTION_ARGS)
160
161
161
162
s = NameStr (* str );
162
163
slen = strlen (s );
163
- p = VARDATA (pat );
164
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
164
+ p = VARDATA_ANY (pat );
165
+ plen = VARSIZE_ANY_EXHDR ( pat );
165
166
166
167
result = (GenericMatchText (s , slen , p , plen ) == LIKE_TRUE );
167
168
@@ -172,7 +173,7 @@ Datum
172
173
namenlike (PG_FUNCTION_ARGS )
173
174
{
174
175
Name str = PG_GETARG_NAME (0 );
175
- text * pat = PG_GETARG_TEXT_P (1 );
176
+ text * pat = PG_GETARG_TEXT_PP (1 );
176
177
bool result ;
177
178
char * s ,
178
179
* p ;
@@ -181,8 +182,8 @@ namenlike(PG_FUNCTION_ARGS)
181
182
182
183
s = NameStr (* str );
183
184
slen = strlen (s );
184
- p = VARDATA (pat );
185
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
185
+ p = VARDATA_ANY (pat );
186
+ plen = VARSIZE_ANY_EXHDR ( pat );
186
187
187
188
result = (GenericMatchText (s , slen , p , plen ) != LIKE_TRUE );
188
189
@@ -192,18 +193,18 @@ namenlike(PG_FUNCTION_ARGS)
192
193
Datum
193
194
textlike (PG_FUNCTION_ARGS )
194
195
{
195
- text * str = PG_GETARG_TEXT_P (0 );
196
- text * pat = PG_GETARG_TEXT_P (1 );
196
+ text * str = PG_GETARG_TEXT_PP (0 );
197
+ text * pat = PG_GETARG_TEXT_PP (1 );
197
198
bool result ;
198
199
char * s ,
199
200
* p ;
200
201
int slen ,
201
202
plen ;
202
203
203
- s = VARDATA (str );
204
- slen = ( VARSIZE ( str ) - VARHDRSZ );
205
- p = VARDATA (pat );
206
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
204
+ s = VARDATA_ANY (str );
205
+ slen = VARSIZE_ANY_EXHDR ( str );
206
+ p = VARDATA_ANY (pat );
207
+ plen = VARSIZE_ANY_EXHDR ( pat );
207
208
208
209
result = (GenericMatchText (s , slen , p , plen ) == LIKE_TRUE );
209
210
@@ -213,18 +214,18 @@ textlike(PG_FUNCTION_ARGS)
213
214
Datum
214
215
textnlike (PG_FUNCTION_ARGS )
215
216
{
216
- text * str = PG_GETARG_TEXT_P (0 );
217
- text * pat = PG_GETARG_TEXT_P (1 );
217
+ text * str = PG_GETARG_TEXT_PP (0 );
218
+ text * pat = PG_GETARG_TEXT_PP (1 );
218
219
bool result ;
219
220
char * s ,
220
221
* p ;
221
222
int slen ,
222
223
plen ;
223
224
224
- s = VARDATA (str );
225
- slen = ( VARSIZE ( str ) - VARHDRSZ );
226
- p = VARDATA (pat );
227
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
225
+ s = VARDATA_ANY (str );
226
+ slen = VARSIZE_ANY_EXHDR ( str );
227
+ p = VARDATA_ANY (pat );
228
+ plen = VARSIZE_ANY_EXHDR ( pat );
228
229
229
230
result = (GenericMatchText (s , slen , p , plen ) != LIKE_TRUE );
230
231
@@ -234,18 +235,18 @@ textnlike(PG_FUNCTION_ARGS)
234
235
Datum
235
236
bytealike (PG_FUNCTION_ARGS )
236
237
{
237
- bytea * str = PG_GETARG_BYTEA_P (0 );
238
- bytea * pat = PG_GETARG_BYTEA_P (1 );
238
+ bytea * str = PG_GETARG_BYTEA_PP (0 );
239
+ bytea * pat = PG_GETARG_BYTEA_PP (1 );
239
240
bool result ;
240
241
char * s ,
241
242
* p ;
242
243
int slen ,
243
244
plen ;
244
245
245
- s = VARDATA (str );
246
- slen = ( VARSIZE ( str ) - VARHDRSZ );
247
- p = VARDATA (pat );
248
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
246
+ s = VARDATA_ANY (str );
247
+ slen = VARSIZE_ANY_EXHDR ( str );
248
+ p = VARDATA_ANY (pat );
249
+ plen = VARSIZE_ANY_EXHDR ( pat );
249
250
250
251
result = (SB_MatchText (s , slen , p , plen ) == LIKE_TRUE );
251
252
@@ -255,18 +256,18 @@ bytealike(PG_FUNCTION_ARGS)
255
256
Datum
256
257
byteanlike (PG_FUNCTION_ARGS )
257
258
{
258
- bytea * str = PG_GETARG_BYTEA_P (0 );
259
- bytea * pat = PG_GETARG_BYTEA_P (1 );
259
+ bytea * str = PG_GETARG_BYTEA_PP (0 );
260
+ bytea * pat = PG_GETARG_BYTEA_PP (1 );
260
261
bool result ;
261
262
char * s ,
262
263
* p ;
263
264
int slen ,
264
265
plen ;
265
266
266
- s = VARDATA (str );
267
- slen = ( VARSIZE ( str ) - VARHDRSZ );
268
- p = VARDATA (pat );
269
- plen = ( VARSIZE ( pat ) - VARHDRSZ );
267
+ s = VARDATA_ANY (str );
268
+ slen = VARSIZE_ANY_EXHDR ( str );
269
+ p = VARDATA_ANY (pat );
270
+ plen = VARSIZE_ANY_EXHDR ( pat );
270
271
271
272
result = (SB_MatchText (s , slen , p , plen ) != LIKE_TRUE );
272
273
@@ -281,7 +282,7 @@ Datum
281
282
nameiclike (PG_FUNCTION_ARGS )
282
283
{
283
284
Name str = PG_GETARG_NAME (0 );
284
- text * pat = PG_GETARG_TEXT_P (1 );
285
+ text * pat = PG_GETARG_TEXT_PP (1 );
285
286
bool result ;
286
287
text * strtext ;
287
288
@@ -296,7 +297,7 @@ Datum
296
297
nameicnlike (PG_FUNCTION_ARGS )
297
298
{
298
299
Name str = PG_GETARG_NAME (0 );
299
- text * pat = PG_GETARG_TEXT_P (1 );
300
+ text * pat = PG_GETARG_TEXT_PP (1 );
300
301
bool result ;
301
302
text * strtext ;
302
303
@@ -310,8 +311,8 @@ nameicnlike(PG_FUNCTION_ARGS)
310
311
Datum
311
312
texticlike (PG_FUNCTION_ARGS )
312
313
{
313
- text * str = PG_GETARG_TEXT_P (0 );
314
- text * pat = PG_GETARG_TEXT_P (1 );
314
+ text * str = PG_GETARG_TEXT_PP (0 );
315
+ text * pat = PG_GETARG_TEXT_PP (1 );
315
316
bool result ;
316
317
317
318
result = (Generic_Text_IC_like (str , pat ) == LIKE_TRUE );
@@ -322,8 +323,8 @@ texticlike(PG_FUNCTION_ARGS)
322
323
Datum
323
324
texticnlike (PG_FUNCTION_ARGS )
324
325
{
325
- text * str = PG_GETARG_TEXT_P (0 );
326
- text * pat = PG_GETARG_TEXT_P (1 );
326
+ text * str = PG_GETARG_TEXT_PP (0 );
327
+ text * pat = PG_GETARG_TEXT_PP (1 );
327
328
bool result ;
328
329
329
330
result = (Generic_Text_IC_like (str , pat ) != LIKE_TRUE );
@@ -338,8 +339,8 @@ texticnlike(PG_FUNCTION_ARGS)
338
339
Datum
339
340
like_escape (PG_FUNCTION_ARGS )
340
341
{
341
- text * pat = PG_GETARG_TEXT_P (0 );
342
- text * esc = PG_GETARG_TEXT_P (1 );
342
+ text * pat = PG_GETARG_TEXT_PP (0 );
343
+ text * esc = PG_GETARG_TEXT_PP (1 );
343
344
text * result ;
344
345
345
346
if (pg_database_encoding_max_length () == 1 )
@@ -357,8 +358,8 @@ like_escape(PG_FUNCTION_ARGS)
357
358
Datum
358
359
like_escape_bytea (PG_FUNCTION_ARGS )
359
360
{
360
- bytea * pat = PG_GETARG_BYTEA_P (0 );
361
- bytea * esc = PG_GETARG_BYTEA_P (1 );
361
+ bytea * pat = PG_GETARG_BYTEA_PP (0 );
362
+ bytea * esc = PG_GETARG_BYTEA_PP (1 );
362
363
bytea * result = SB_do_like_escape ((text * )pat , (text * )esc );
363
364
364
365
PG_RETURN_BYTEA_P ((bytea * )result );
0 commit comments