diff options
| author | Tom Lane | 2002-08-26 17:54:02 +0000 |
|---|---|---|
| committer | Tom Lane | 2002-08-26 17:54:02 +0000 |
| commit | 5cabcfccce4b8b826c9b30828f3012b7926a6946 (patch) | |
| tree | 3e14c0710a45b4195734dd3189eb89eac4969073 /contrib/ltree | |
| parent | 8009c275925dda90f1275ba70f5c2a63abaa520b (diff) | |
Modify array operations to include array's element type OID in the
array header, and to compute sizing and alignment of array elements
the same way normal tuple access operations do --- viz, using the
tupmacs.h macros att_addlength and att_align. This makes the world
safe for arrays of cstrings or intervals, and should make it much
easier to write array-type-polymorphic functions; as examples see
the cleanups of array_out and contrib/array_iterator. By Joe Conway
and Tom Lane.
Diffstat (limited to 'contrib/ltree')
| -rw-r--r-- | contrib/ltree/_ltree_gist.c | 2 | ||||
| -rw-r--r-- | contrib/ltree/_ltree_op.c | 18 |
2 files changed, 10 insertions, 10 deletions
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c index 8b7420e6d9e..27bd057a567 100644 --- a/contrib/ltree/_ltree_gist.c +++ b/contrib/ltree/_ltree_gist.c @@ -59,7 +59,7 @@ _ltree_compress(PG_FUNCTION_ARGS) { if ( entry->leafkey ) { /* ltree */ ltree_gist *key; - ArrayType *val = (ArrayType*)DatumGetPointer(PG_DETOAST_DATUM(entry->key)); + ArrayType *val = DatumGetArrayTypeP(entry->key); int4 len = LTG_HDRSIZE + ASIGLEN; int num=ArrayGetNItems( ARR_NDIM(val), ARR_DIMS(val) ); ltree *item = (ltree*)ARR_DATA_PTR(val); diff --git a/contrib/ltree/_ltree_op.c b/contrib/ltree/_ltree_op.c index cc7a16c27e6..336b83820cf 100644 --- a/contrib/ltree/_ltree_op.c +++ b/contrib/ltree/_ltree_op.c @@ -61,7 +61,7 @@ array_iterator( ArrayType *la, PGCALL2 callback, void* param, ltree ** found) { Datum _ltree_isparent(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltree *query = PG_GETARG_LTREE(1); bool res = array_iterator( la, ltree_isparent, (void*)query, NULL ); PG_FREE_IF_COPY(la,0); @@ -79,7 +79,7 @@ _ltree_r_isparent(PG_FUNCTION_ARGS) { Datum _ltree_risparent(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltree *query = PG_GETARG_LTREE(1); bool res = array_iterator( la, ltree_risparent, (void*)query, NULL ); PG_FREE_IF_COPY(la,0); @@ -97,7 +97,7 @@ _ltree_r_risparent(PG_FUNCTION_ARGS) { Datum _ltq_regex(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); lquery *query = PG_GETARG_LQUERY(1); bool res = array_iterator( la, ltq_regex, (void*)query, NULL ); PG_FREE_IF_COPY(la,0); @@ -115,7 +115,7 @@ _ltq_rregex(PG_FUNCTION_ARGS) { Datum _ltxtq_exec(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltxtquery *query = PG_GETARG_LTXTQUERY(1); bool res = array_iterator( la, ltxtq_exec, (void*)query, NULL ); PG_FREE_IF_COPY(la,0); @@ -134,7 +134,7 @@ _ltxtq_rexec(PG_FUNCTION_ARGS) { Datum _ltree_extract_isparent(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltree *query = PG_GETARG_LTREE(1); ltree *found,*item; @@ -154,7 +154,7 @@ _ltree_extract_isparent(PG_FUNCTION_ARGS) { Datum _ltree_extract_risparent(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltree *query = PG_GETARG_LTREE(1); ltree *found,*item; @@ -174,7 +174,7 @@ _ltree_extract_risparent(PG_FUNCTION_ARGS) { Datum _ltq_extract_regex(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); lquery *query = PG_GETARG_LQUERY(1); ltree *found,*item; @@ -194,7 +194,7 @@ _ltq_extract_regex(PG_FUNCTION_ARGS) { Datum _ltxtq_extract_exec(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); ltxtquery *query = PG_GETARG_LTXTQUERY(1); ltree *found,*item; @@ -214,7 +214,7 @@ _ltxtq_extract_exec(PG_FUNCTION_ARGS) { Datum _lca(PG_FUNCTION_ARGS) { - ArrayType *la = (ArrayType *)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); + ArrayType *la = PG_GETARG_ARRAYTYPE_P(0); int num=ArrayGetNItems( ARR_NDIM(la), ARR_DIMS(la)); ltree *item = (ltree*)ARR_DATA_PTR(la); ltree **a,*res; |
