diff options
author | Jan Wieck | 1999-12-21 00:06:44 +0000 |
---|---|---|
committer | Jan Wieck | 1999-12-21 00:06:44 +0000 |
commit | e2aef4969450da69bc759e19f62a2d6caec4a3d9 (patch) | |
tree | 1b64627630f068240b58bbe85d5c5edacfb857c3 /src/include | |
parent | 2c29c96ed6679861e1e5dec82ac7182549fcde45 (diff) |
Added empty TOASTER files and corrected some minor glitches
in regression tests.
Jan
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/access/htup.h | 16 | ||||
-rw-r--r-- | src/include/access/tupmacs.h | 4 | ||||
-rw-r--r-- | src/include/access/tuptoaster.h | 33 | ||||
-rw-r--r-- | src/include/postgres.h | 75 |
4 files changed, 124 insertions, 4 deletions
diff --git a/src/include/access/htup.h b/src/include/access/htup.h index c81dcfd6a8..862ce86e22 100644 --- a/src/include/access/htup.h +++ b/src/include/access/htup.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: htup.h,v 1.26 1999/12/16 22:19:58 wieck Exp $ + * $Id: htup.h,v 1.27 1999/12/21 00:06:42 wieck Exp $ * *------------------------------------------------------------------------- */ @@ -125,6 +125,11 @@ typedef HeapTupleData *HeapTuple; #define HEAP_HASNULL 0x0001 /* has null attribute(s) */ #define HEAP_HASVARLENA 0x0002 /* has variable length * attribute(s) */ +#define HEAP_HASEXTERNAL 0x0004 /* has external stored */ + /* attribute(s) */ +#define HEAP_HASCOMPRESSED 0x0008 /* has compressed stored */ + /* attribute(s) */ +#define HEAP_HASEXTENDED 0x000C /* the two above combined */ #define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */ #define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */ #define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */ @@ -144,4 +149,13 @@ typedef HeapTupleData *HeapTuple; #define HeapTupleAllFixed(tuple) \ (!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASVARLENA)) +#define HeapTupleHasExternal(tuple) \ + ((((HeapTuple)(tuple))->t_data->t_infomask & HEAP_HASEXTERNAL) != 0) + +#define HeapTupleHasCompressed(tuple) \ + ((((HeapTuple)(tuple))->t_data->t_infomask & HEAP_HASCOMPRESSED) != 0) + +#define HeapTupleHasExtended(tuple) \ + ((((HeapTuple)(tuple))->t_data->t_infomask & HEAP_HASEXTENDED) != 0) + #endif /* HTUP_H */ diff --git a/src/include/access/tupmacs.h b/src/include/access/tupmacs.h index baaf4bd0ac..177b68c5ec 100644 --- a/src/include/access/tupmacs.h +++ b/src/include/access/tupmacs.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: tupmacs.h,v 1.11 1999/07/15 15:20:56 momjian Exp $ + * $Id: tupmacs.h,v 1.12 1999/12/21 00:06:42 wieck Exp $ * *------------------------------------------------------------------------- */ @@ -88,7 +88,7 @@ ) \ : \ ( \ - (cur_offset) + VARSIZE(DatumGetPointer(attval)) \ + (cur_offset) + VARATT_SIZE(DatumGetPointer(attval)) \ ) \ ) diff --git a/src/include/access/tuptoaster.h b/src/include/access/tuptoaster.h new file mode 100644 index 0000000000..dedc770db2 --- /dev/null +++ b/src/include/access/tuptoaster.h @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------- + * + * tuptoaster.h + * POSTGRES definitions for external and compressed storage + * of variable size attributes. + * + * Copyright (c) 2000, PostgreSQL Development Team + * + * $Id: tuptoaster.h,v 1.1 1999/12/21 00:06:42 wieck Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef TUPTOASTER_H +#define TUPTOASTER_H + +#ifdef TUPLE_TOASTER_ACTIVE + +#include "postgres.h" +#include "access/heapam.h" +#include "access/htup.h" +#include "access/tupmacs.h" +#include "utils/rel.h" + + +extern void heap_tuple_toast_attrs(Relation rel, + HeapTuple newtup, HeapTuple oldtup); + +extern varattrib *heap_tuple_untoast_attr(varattrib *attr); + +#endif /* TUPLE_TOASTER_ACTIVE */ + + +#endif /* TUPTOASTER_H */ diff --git a/src/include/postgres.h b/src/include/postgres.h index 396c3c262b..e03922ceda 100644 --- a/src/include/postgres.h +++ b/src/include/postgres.h @@ -6,7 +6,7 @@ * * Copyright (c) 1995, Regents of the University of California * - * $Id: postgres.h,v 1.30 1999/11/07 23:08:32 momjian Exp $ + * $Id: postgres.h,v 1.31 1999/12/21 00:06:41 wieck Exp $ * *------------------------------------------------------------------------- */ @@ -104,6 +104,79 @@ typedef struct varlena text; typedef int2 int28[8]; typedef Oid oid8[8]; + +/* + * Proposed new layout for variable length attributes + * DO NOT USE YET - Jan + */ +#undef TUPLE_TOASTER_ACTIVE +#undef TUPLE_TOASTER_ALL_TYPES + +#ifdef TUPLE_TOASTER_ACTIVE +typedef struct varattrib +{ + int32 va_header; /* External/compressed storage */ + /* flags and item size */ + union + { + struct + { + int32 va_rawsize; /* Plain data size */ + } va_compressed; /* Compressed stored attribute */ + + struct + { + int32 va_rawsize; /* Plain data size */ + Oid va_valueid; /* Unique identifier of value */ + Oid va_longrelid; /* RelID where to find chunks */ + Oid va_rowid; /* Main tables row Oid */ + int16 va_attno; /* Main tables attno */ + } va_external; /* External stored attribute */ + + char va_data[1]; /* Plain stored attribute */ + } va_content; +} varattrib; + +#define VARATT_FLAG_EXTERNAL 0x8000 +#define VARATT_FLAG_COMPRESSED 0x4000 +#define VARATT_MASK_FLAGS 0xc000 +#define VARATT_MASK_SIZE 0x3fff + +#define VARATT_SIZEP(_PTR) (((varattrib *)(_PTR))->va_header) +#define VARATT_SIZE(PTR) (VARATT_SIZEP(PTR) & VARATT_MASK_SIZE) +#define VARATT_DATA(PTR) (((varattrib *)(PTR))->va_content.va_data) + +#define VARATT_IS_EXTENDED(PTR) \ + ((VARATT_SIZEP(PTR) & VARATT_MASK_FLAGS) != 0) +#define VARATT_IS_EXTERNAL(PTR) \ + ((VARATT_SIZEP(PTR) & VARATT_FLAG_EXTERNAL) != 0) +#define VARATT_IS_COMPRESSED(PTR) \ + ((VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0) + +/* ---------- + * This is regularly declared in access/tuptoaster.h, + * but we don't want to include that into every source, + * so we (evil evil evil) declare it here once more. + * ---------- + */ +extern varattrib *heap_tuple_untoast_attr(varattrib *attr); + +#define VARATT_GETPLAIN(_ARG,_VAR) { \ + if (VARATTR_IS_EXTENDED(_ARG)) \ + (_VAR) = (void *)heap_tuple_untoast_attr(_ARG); \ + else \ + (_VAR) = (_ARG); \ + } +#define VARATT_FREE(_ARG,VAR) { \ + if ((void *)(_VAR) != (void *)(_ARG)) \ + pfree((void *)(_VAR)); \ + } +#else /* TUPLE_TOASTER_ACTIVE */ +#define VARATT_SIZE(__PTR) VARSIZE(__PTR) +#define VARATT_SIZEP(__PTR) VARSIZE(__PTR) +#endif /* TUPLE_TOASTER_ACTIVE */ + + /* We want NameData to have length NAMEDATALEN and int alignment, * because that's how the data type 'name' is defined in pg_type. * Use a union to make sure the compiler agrees. |