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
|
| 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: