contrib/ltree patches - Mailing list pgsql-hackers

From Dan Langille
Subject contrib/ltree patches
Date
Msg-id 20021126202901.H66915-100000@undef.unixathome.org
Whole thread Raw
Responses Re: contrib/ltree patches  (Bruce Momjian <pgman@candle.pha.pa.us>)
List 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)



pgsql-hackers by date:

Previous
From: "Christopher Kings-Lynne"
Date:
Subject: Re: Request from eWeek for 7.3 comments
Next
From: snpe
Date:
Subject: Re: Why an array in pg_group?