1- /* $PostgreSQL: pgsql/contrib/ltree/ltree.h,v 1.20 2008/05/12 00:00:42 alvherre Exp $ */
1+ /* $PostgreSQL: pgsql/contrib/ltree/ltree.h,v 1.21 2008/06/30 18:30:48 teodor Exp $ */
22
33#ifndef __LTREE_H__
44#define __LTREE_H__
55
6+ #include "postgres.h"
67#include "fmgr.h"
8+ #include "tsearch/ts_locale.h"
79
810typedef struct
911{
10- uint8 len ;
12+ uint16 len ;
1113char name [1 ];
1214}ltree_level ;
1315
14- #define LEVEL_HDRSIZE (sizeof(uint8 ))
16+ #define LEVEL_HDRSIZE (offsetof(ltree_level,name ))
1517#define LEVEL_NEXT (x )( (ltree_level*)( ((char*)(x)) + MAXALIGN(((ltree_level*)(x))->len + LEVEL_HDRSIZE) ) )
1618
1719typedef struct
@@ -21,7 +23,7 @@ typedef struct
2123char data [1 ];
2224}ltree ;
2325
24- #define LTREE_HDRSIZE MAXALIGN(VARHDRSZ + sizeof(uint16) )
26+ #define LTREE_HDRSIZE MAXALIGN( offsetof(ltree, data) )
2527#define LTREE_FIRST (x )( (ltree_level*)( ((char*)(x))+LTREE_HDRSIZE ) )
2628
2729
@@ -30,12 +32,12 @@ typedef struct
3032typedef struct
3133{
3234int4 val ;
33- uint8 len ;
35+ uint16 len ;
3436uint8 flag ;
3537char name [1 ];
3638}lquery_variant ;
3739
38- #define LVAR_HDRSIZE MAXALIGN(sizeof(uint8)*2 + sizeof(int4 ))
40+ #define LVAR_HDRSIZE MAXALIGN(offsetof(lquery_variant, name ))
3941#define LVAR_NEXT (x )( (lquery_variant*)( ((char*)(x)) + MAXALIGN(((lquery_variant*)(x))->len) + LVAR_HDRSIZE ) )
4042
4143#define LVAR_ANYEND 0x01
@@ -52,7 +54,7 @@ typedef struct
5254char variants [1 ];
5355}lquery_level ;
5456
55- #define LQL_HDRSIZE MAXALIGN(sizeof(uint16)*5 )
57+ #define LQL_HDRSIZE MAXALIGN(offsetof(lquery_level,variants) )
5658#define LQL_NEXT (x ) ( (lquery_level*)( ((char*)(x)) + MAXALIGN(((lquery_level*)(x))->totallen) ) )
5759#define LQL_FIRST (x )( (lquery_variant*)( ((char*)(x))+LQL_HDRSIZE ) )
5860
@@ -73,12 +75,12 @@ typedef struct
7375char data [1 ];
7476}lquery ;
7577
76- #define LQUERY_HDRSIZE MAXALIGN(VARHDRSZ + 3*sizeof(uint16) )
78+ #define LQUERY_HDRSIZE MAXALIGN( offsetof(lquery, data) )
7779#define LQUERY_FIRST (x ) ( (lquery_level*)( ((char*)(x))+LQUERY_HDRSIZE ) )
7880
7981#define LQUERY_HASNOT 0x01
8082
81- #define ISALNUM (x )(isalnum((unsigned char) (x)) || (x) == '_' )
83+ #define ISALNUM (x )(t_isalpha(x) || t_isdigit (x) || ( pg_mblen( x) ==1 && t_iseq((x), '_') ) )
8284
8385/* full text query */
8486
@@ -156,9 +158,10 @@ bool ltree_execute(ITEM * curitem, void *checkval,
156158
157159int ltree_compare (const ltree * a ,const ltree * b );
158160bool inner_isparent (const ltree * c ,const ltree * p );
159- bool compare_subnode (ltree_level * t ,char * q ,int len ,
160- int (* cmpptr ) (const char * ,const char * ,size_t ),bool anyend );
161+ bool compare_subnode (ltree_level * t ,char * q ,int len ,
162+ int (* cmpptr ) (const char * ,const char * ,size_t ),bool anyend );
161163ltree * lca_inner (ltree * * a ,int len );
164+ int ltree_strncasecmp (const char * a ,const char * b ,size_t s );
162165
163166#define PG_GETARG_LTREE (x )((ltree*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
164167#define PG_GETARG_LTREE_COPY (x ) ((ltree*)DatumGetPointer(PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(x))))