Re: Executing regex in C code

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Gabriel Furstenheim Milerud <furstenheim(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Executing regex in C code
Date: 2017-07-30 16:26:19
Message-ID: 24047.1501431979@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Gabriel Furstenheim Milerud <furstenheim(at)gmail(dot)com> writes:
> I'm trying to execute the equivalent to '~' with regexp from within C code.

> text * s = cstring_to_text("aa");
> text * p = cstring_to_text("a");
> return DatumGetBool(DirectFunctionCall2(textregexeq, PointerGetDatum(s),
> PointerGetDatum(p)));

> But I'm getting an error with collate:
> ERROR: could not determine which collation to use for regular expression
> HINT: Use the COLLATE clause to set the collation explicitly.

Yes, you need to use DirectFunctionCall2Coll() if you're trying to invoke
a collation-aware function. It's probably good enough to pass
DEFAULT_COLLATION_OID, although if you're inside a SQL function of
your own, passing down whatever collation was passed to you would
be a better plan.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message marcelo 2017-07-30 16:36:11 Re: Schemas and serials
Previous Message Gabriel Furstenheim Milerud 2017-07-30 15:46:53 Executing regex in C code