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 $ */
2
2
3
3
#ifndef __LTREE_H__
4
4
#define __LTREE_H__
5
5
6
+ #include "postgres.h"
6
7
#include "fmgr.h"
8
+ #include "tsearch/ts_locale.h"
7
9
8
10
typedef struct
9
11
{
10
- uint8 len ;
12
+ uint16 len ;
11
13
char name [1 ];
12
14
} ltree_level ;
13
15
14
- #define LEVEL_HDRSIZE (sizeof(uint8 ))
16
+ #define LEVEL_HDRSIZE (offsetof(ltree_level,name ))
15
17
#define LEVEL_NEXT (x ) ( (ltree_level*)( ((char*)(x)) + MAXALIGN(((ltree_level*)(x))->len + LEVEL_HDRSIZE) ) )
16
18
17
19
typedef struct
@@ -21,7 +23,7 @@ typedef struct
21
23
char data [1 ];
22
24
} ltree ;
23
25
24
- #define LTREE_HDRSIZE MAXALIGN(VARHDRSZ + sizeof(uint16) )
26
+ #define LTREE_HDRSIZE MAXALIGN( offsetof(ltree, data) )
25
27
#define LTREE_FIRST (x ) ( (ltree_level*)( ((char*)(x))+LTREE_HDRSIZE ) )
26
28
27
29
@@ -30,12 +32,12 @@ typedef struct
30
32
typedef struct
31
33
{
32
34
int4 val ;
33
- uint8 len ;
35
+ uint16 len ;
34
36
uint8 flag ;
35
37
char name [1 ];
36
38
} lquery_variant ;
37
39
38
- #define LVAR_HDRSIZE MAXALIGN(sizeof(uint8)*2 + sizeof(int4 ))
40
+ #define LVAR_HDRSIZE MAXALIGN(offsetof(lquery_variant, name ))
39
41
#define LVAR_NEXT (x ) ( (lquery_variant*)( ((char*)(x)) + MAXALIGN(((lquery_variant*)(x))->len) + LVAR_HDRSIZE ) )
40
42
41
43
#define LVAR_ANYEND 0x01
@@ -52,7 +54,7 @@ typedef struct
52
54
char variants [1 ];
53
55
} lquery_level ;
54
56
55
- #define LQL_HDRSIZE MAXALIGN( sizeof(uint16)*5 )
57
+ #define LQL_HDRSIZE MAXALIGN( offsetof(lquery_level,variants) )
56
58
#define LQL_NEXT (x ) ( (lquery_level*)( ((char*)(x)) + MAXALIGN(((lquery_level*)(x))->totallen) ) )
57
59
#define LQL_FIRST (x ) ( (lquery_variant*)( ((char*)(x))+LQL_HDRSIZE ) )
58
60
@@ -73,12 +75,12 @@ typedef struct
73
75
char data [1 ];
74
76
} lquery ;
75
77
76
- #define LQUERY_HDRSIZE MAXALIGN(VARHDRSZ + 3*sizeof(uint16) )
78
+ #define LQUERY_HDRSIZE MAXALIGN( offsetof(lquery, data) )
77
79
#define LQUERY_FIRST (x ) ( (lquery_level*)( ((char*)(x))+LQUERY_HDRSIZE ) )
78
80
79
81
#define LQUERY_HASNOT 0x01
80
82
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), '_') ) )
82
84
83
85
/* full text query */
84
86
@@ -156,9 +158,10 @@ bool ltree_execute(ITEM * curitem, void *checkval,
156
158
157
159
int ltree_compare (const ltree * a , const ltree * b );
158
160
bool 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 );
161
163
ltree * lca_inner (ltree * * a , int len );
164
+ int ltree_strncasecmp (const char * a , const char * b , size_t s );
162
165
163
166
#define PG_GETARG_LTREE (x ) ((ltree*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
164
167
#define PG_GETARG_LTREE_COPY (x ) ((ltree*)DatumGetPointer(PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(x))))
0 commit comments