mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Add an "absval" parameter to allow contrib/dict_int to ignore signs.
Jeff Janes Discussion: https://postgr.es/m/CAMkU=1xRcs_BUPzR0+V3WndaCAv0E_m3h6aUEJ8NF-sY1nnHsw@mail.gmail.com
This commit is contained in:
@ -21,6 +21,7 @@ typedef struct
|
||||
{
|
||||
int maxlen;
|
||||
bool rejectlong;
|
||||
bool absval;
|
||||
} DictInt;
|
||||
|
||||
|
||||
@ -37,6 +38,7 @@ dintdict_init(PG_FUNCTION_ARGS)
|
||||
d = (DictInt *) palloc0(sizeof(DictInt));
|
||||
d->maxlen = 6;
|
||||
d->rejectlong = false;
|
||||
d->absval = false;
|
||||
|
||||
foreach(l, dictoptions)
|
||||
{
|
||||
@ -55,6 +57,10 @@ dintdict_init(PG_FUNCTION_ARGS)
|
||||
{
|
||||
d->rejectlong = defGetBoolean(defel);
|
||||
}
|
||||
else if (strcmp(defel->defname, "absval") == 0)
|
||||
{
|
||||
d->absval = defGetBoolean(defel);
|
||||
}
|
||||
else
|
||||
{
|
||||
ereport(ERROR,
|
||||
@ -72,11 +78,21 @@ dintdict_lexize(PG_FUNCTION_ARGS)
|
||||
{
|
||||
DictInt *d = (DictInt *) PG_GETARG_POINTER(0);
|
||||
char *in = (char *) PG_GETARG_POINTER(1);
|
||||
char *txt = pnstrdup(in, PG_GETARG_INT32(2));
|
||||
int len = PG_GETARG_INT32(2);
|
||||
char *txt;
|
||||
TSLexeme *res = palloc0(sizeof(TSLexeme) * 2);
|
||||
|
||||
res[1].lexeme = NULL;
|
||||
if (PG_GETARG_INT32(2) > d->maxlen)
|
||||
|
||||
if (d->absval && (in[0] == '+' || in[0] == '-'))
|
||||
{
|
||||
len--;
|
||||
txt = pnstrdup(in + 1, len);
|
||||
}
|
||||
else
|
||||
txt = pnstrdup(in, len);
|
||||
|
||||
if (len > d->maxlen)
|
||||
{
|
||||
if (d->rejectlong)
|
||||
{
|
||||
|
Reference in New Issue
Block a user