1111 * Portions Copyright (c) 1994, Regents of the University of California
1212 *
1313 * 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 $
1515 *
1616 *-------------------------------------------------------------------------
1717 */
@@ -135,6 +135,7 @@ Generic_Text_IC_like(text *str, text *pat)
135135/* Force inputs to lower case to achieve case insensitivity */
136136str = DatumGetTextP (DirectFunctionCall1 (lower ,PointerGetDatum (str )));
137137pat = DatumGetTextP (DirectFunctionCall1 (lower ,PointerGetDatum (pat )));
138+ /* lower's result is never packed, so OK to use old macros here */
138139s = VARDATA (str );
139140slen = (VARSIZE (str )- VARHDRSZ );
140141p = VARDATA (pat );
@@ -151,7 +152,7 @@ Datum
151152namelike (PG_FUNCTION_ARGS )
152153{
153154Name str = PG_GETARG_NAME (0 );
154- text * pat = PG_GETARG_TEXT_P (1 );
155+ text * pat = PG_GETARG_TEXT_PP (1 );
155156bool result ;
156157char * s ,
157158* p ;
@@ -160,8 +161,8 @@ namelike(PG_FUNCTION_ARGS)
160161
161162s = NameStr (* str );
162163slen = strlen (s );
163- p = VARDATA (pat );
164- plen = ( VARSIZE ( pat ) - VARHDRSZ );
164+ p = VARDATA_ANY (pat );
165+ plen = VARSIZE_ANY_EXHDR ( pat );
165166
166167result = (GenericMatchText (s ,slen ,p ,plen )== LIKE_TRUE );
167168
@@ -172,7 +173,7 @@ Datum
172173namenlike (PG_FUNCTION_ARGS )
173174{
174175Name str = PG_GETARG_NAME (0 );
175- text * pat = PG_GETARG_TEXT_P (1 );
176+ text * pat = PG_GETARG_TEXT_PP (1 );
176177bool result ;
177178char * s ,
178179* p ;
@@ -181,8 +182,8 @@ namenlike(PG_FUNCTION_ARGS)
181182
182183s = NameStr (* str );
183184slen = strlen (s );
184- p = VARDATA (pat );
185- plen = ( VARSIZE ( pat ) - VARHDRSZ );
185+ p = VARDATA_ANY (pat );
186+ plen = VARSIZE_ANY_EXHDR ( pat );
186187
187188result = (GenericMatchText (s ,slen ,p ,plen )!= LIKE_TRUE );
188189
@@ -192,18 +193,18 @@ namenlike(PG_FUNCTION_ARGS)
192193Datum
193194textlike (PG_FUNCTION_ARGS )
194195{
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 );
197198bool result ;
198199char * s ,
199200* p ;
200201int slen ,
201202plen ;
202203
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 );
207208
208209result = (GenericMatchText (s ,slen ,p ,plen )== LIKE_TRUE );
209210
@@ -213,18 +214,18 @@ textlike(PG_FUNCTION_ARGS)
213214Datum
214215textnlike (PG_FUNCTION_ARGS )
215216{
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 );
218219bool result ;
219220char * s ,
220221* p ;
221222int slen ,
222223plen ;
223224
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 );
228229
229230result = (GenericMatchText (s ,slen ,p ,plen )!= LIKE_TRUE );
230231
@@ -234,18 +235,18 @@ textnlike(PG_FUNCTION_ARGS)
234235Datum
235236bytealike (PG_FUNCTION_ARGS )
236237{
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 );
239240bool result ;
240241char * s ,
241242* p ;
242243int slen ,
243244plen ;
244245
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 );
249250
250251result = (SB_MatchText (s ,slen ,p ,plen )== LIKE_TRUE );
251252
@@ -255,18 +256,18 @@ bytealike(PG_FUNCTION_ARGS)
255256Datum
256257byteanlike (PG_FUNCTION_ARGS )
257258{
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 );
260261bool result ;
261262char * s ,
262263* p ;
263264int slen ,
264265plen ;
265266
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 );
270271
271272result = (SB_MatchText (s ,slen ,p ,plen )!= LIKE_TRUE );
272273
@@ -281,7 +282,7 @@ Datum
281282nameiclike (PG_FUNCTION_ARGS )
282283{
283284Name str = PG_GETARG_NAME (0 );
284- text * pat = PG_GETARG_TEXT_P (1 );
285+ text * pat = PG_GETARG_TEXT_PP (1 );
285286bool result ;
286287text * strtext ;
287288
@@ -296,7 +297,7 @@ Datum
296297nameicnlike (PG_FUNCTION_ARGS )
297298{
298299Name str = PG_GETARG_NAME (0 );
299- text * pat = PG_GETARG_TEXT_P (1 );
300+ text * pat = PG_GETARG_TEXT_PP (1 );
300301bool result ;
301302text * strtext ;
302303
@@ -310,8 +311,8 @@ nameicnlike(PG_FUNCTION_ARGS)
310311Datum
311312texticlike (PG_FUNCTION_ARGS )
312313{
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 );
315316bool result ;
316317
317318result = (Generic_Text_IC_like (str ,pat )== LIKE_TRUE );
@@ -322,8 +323,8 @@ texticlike(PG_FUNCTION_ARGS)
322323Datum
323324texticnlike (PG_FUNCTION_ARGS )
324325{
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 );
327328bool result ;
328329
329330result = (Generic_Text_IC_like (str ,pat )!= LIKE_TRUE );
@@ -338,8 +339,8 @@ texticnlike(PG_FUNCTION_ARGS)
338339Datum
339340like_escape (PG_FUNCTION_ARGS )
340341{
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 );
343344text * result ;
344345
345346if (pg_database_encoding_max_length ()== 1 )
@@ -357,8 +358,8 @@ like_escape(PG_FUNCTION_ARGS)
357358Datum
358359like_escape_bytea (PG_FUNCTION_ARGS )
359360{
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 );
362363bytea * result = SB_do_like_escape ((text * )pat , (text * )esc );
363364
364365PG_RETURN_BYTEA_P ((bytea * )result );