contrib/ltree patches

From: Dan Langille <dan(at)langille(dot)org>
To: pgsql-hackers(at)postgresql(dot)org
Cc: teodor(at)stack(dot)net, <oleg(at)sai(dot)msu(dot)su>
Subject: contrib/ltree patches
Date: 2002-11-27 01:33:10
Message-ID: 20021126202901.H66915-100000@undef.unixathome.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I have been looking at contrib/ltree in the PostgreSQL repository. I've
modified the code to allow / as a node delimiter instead of . which is the
default.

Below are the patches to make this change. I have also moved the
delimiter to a DEFINE so that other customizations are easily done. This
is a work in progress.

My thanks to DarbyD for assistance.

cheers

--- ltree.h.orig Tue Nov 26 18:57:58 2002
+++ ltree.h Tue Nov 26 20:16:40 2002
@@ -6,6 +6,8 @@
#include "utils/palloc.h"
#include "utils/builtins.h"

+#define NODE_DELIMITER '/'
+
typedef struct
{
uint8 len;
@@ -88,7 +90,7 @@
#ifndef abs
#define abs(a) ((a) < (0) ? -(a) : (a))
#endif
-#define ISALNUM(x) ( isalnum((unsigned int)(x)) || (x) == '_' )
+#define ISALNUM(x) ( isalnum((unsigned int)(x)) || (x) == '_' || (x) == NODE_DELIMITER )

/* full text query */

--- ltree_io.c Tue Nov 26 20:23:45 2002
+++ ltree_io.c.orig Tue Nov 26 18:57:26 2002
@@ -48,7 +48,7 @@
ptr = buf;
while (*ptr)
{
- if (*ptr == NODE_DELIMITER)
+ if (*ptr == '.')
num++;
ptr++;
}
@@ -69,7 +69,7 @@
}
else if (state == LTPRS_WAITDELIM)
{
- if (*ptr == NODE_DELIMITER)
+ if (*ptr == '.')
{
lptr->len = ptr - lptr->start;
if (lptr->len > 255)
@@ -131,7 +131,7 @@
{
if (i != 0)
{
- *ptr = NODE_DELIMITER;
+ *ptr = '.';
ptr++;
}
memcpy(ptr, curlevel->name, curlevel->len);
@@ -181,7 +181,7 @@
ptr = buf;
while (*ptr)
{
- if (*ptr == NODE_DELIMITER)
+ if (*ptr == '.')
num++;
else if (*ptr == '|')
numOR++;
@@ -265,7 +265,7 @@
lptr->len, (int) (lptr->start - buf));
state = LQPRS_WAITVAR;
}
- else if (*ptr == NODE_DELIMITER)
+ else if (*ptr == '.')
{
lptr->len = ptr - lptr->start -
((lptr->flag & LVAR_SUBLEXEM) ? 1 : 0) -
@@ -289,7 +289,7 @@
{
if (*ptr == '{')
state = LQPRS_WAITFNUM;
- else if (*ptr == NODE_DELIMITER)
+ else if (*ptr == '.')
{
curqlevel->low = 0;
curqlevel->high = 0xffff;
@@ -347,7 +347,7 @@
}
else if (state == LQPRS_WAITEND)
{
- if (*ptr == NODE_DELIMITER)
+ if (*ptr == '.')
{
state = LQPRS_WAITLEVEL;
curqlevel = NEXTLEV(curqlevel);
@@ -471,7 +471,7 @@
{
if (i != 0)
{
- *ptr = NODE_DELIMITER;
+ *ptr = '.';
ptr++;
}
if (curqlevel->numvar)

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message snpe 2002-11-27 01:36:19 Re: Why an array in pg_group?
Previous Message Christopher Kings-Lynne 2002-11-27 00:57:18 Re: Request from eWeek for 7.3 comments