|
6 | 6 | *
|
7 | 7 | * Copyright (c) 1995, Regents of the University of California
|
8 | 8 | *
|
9 |
| - * $Id: postgres.h,v 1.30 1999/11/07 23:08:32 momjian Exp $ |
| 9 | + * $Id: postgres.h,v 1.31 1999/12/21 00:06:41 wieck Exp $ |
10 | 10 | *
|
11 | 11 | *-------------------------------------------------------------------------
|
12 | 12 | */
|
@@ -104,6 +104,79 @@ typedef struct varlena text;
|
104 | 104 | typedefint2int28[8];
|
105 | 105 | typedefOidoid8[8];
|
106 | 106 |
|
| 107 | + |
| 108 | +/* |
| 109 | + * Proposed new layout for variable length attributes |
| 110 | + * DO NOT USE YET - Jan |
| 111 | + */ |
| 112 | +#undef TUPLE_TOASTER_ACTIVE |
| 113 | +#undef TUPLE_TOASTER_ALL_TYPES |
| 114 | + |
| 115 | +#ifdefTUPLE_TOASTER_ACTIVE |
| 116 | +typedefstructvarattrib |
| 117 | +{ |
| 118 | +int32va_header;/* External/compressed storage */ |
| 119 | +/* flags and item size */ |
| 120 | +union |
| 121 | +{ |
| 122 | +struct |
| 123 | +{ |
| 124 | +int32va_rawsize;/* Plain data size */ |
| 125 | +}va_compressed;/* Compressed stored attribute */ |
| 126 | + |
| 127 | +struct |
| 128 | +{ |
| 129 | +int32va_rawsize;/* Plain data size */ |
| 130 | +Oidva_valueid;/* Unique identifier of value */ |
| 131 | +Oidva_longrelid;/* RelID where to find chunks */ |
| 132 | +Oidva_rowid;/* Main tables row Oid */ |
| 133 | +int16va_attno;/* Main tables attno */ |
| 134 | +}va_external;/* External stored attribute */ |
| 135 | + |
| 136 | +charva_data[1];/* Plain stored attribute */ |
| 137 | +}va_content; |
| 138 | +}varattrib; |
| 139 | + |
| 140 | +#defineVARATT_FLAG_EXTERNAL0x8000 |
| 141 | +#defineVARATT_FLAG_COMPRESSED0x4000 |
| 142 | +#defineVARATT_MASK_FLAGS0xc000 |
| 143 | +#defineVARATT_MASK_SIZE0x3fff |
| 144 | + |
| 145 | +#defineVARATT_SIZEP(_PTR)(((varattrib *)(_PTR))->va_header) |
| 146 | +#defineVARATT_SIZE(PTR)(VARATT_SIZEP(PTR) & VARATT_MASK_SIZE) |
| 147 | +#defineVARATT_DATA(PTR)(((varattrib *)(PTR))->va_content.va_data) |
| 148 | + |
| 149 | +#defineVARATT_IS_EXTENDED(PTR)\ |
| 150 | +((VARATT_SIZEP(PTR) & VARATT_MASK_FLAGS) != 0) |
| 151 | +#defineVARATT_IS_EXTERNAL(PTR)\ |
| 152 | +((VARATT_SIZEP(PTR) & VARATT_FLAG_EXTERNAL) != 0) |
| 153 | +#defineVARATT_IS_COMPRESSED(PTR)\ |
| 154 | +((VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0) |
| 155 | + |
| 156 | +/* ---------- |
| 157 | + * This is regularly declared in access/tuptoaster.h, |
| 158 | + * but we don't want to include that into every source, |
| 159 | + * so we (evil evil evil) declare it here once more. |
| 160 | + * ---------- |
| 161 | + */ |
| 162 | +externvarattrib*heap_tuple_untoast_attr(varattrib*attr); |
| 163 | + |
| 164 | +#defineVARATT_GETPLAIN(_ARG,_VAR) {\ |
| 165 | +if (VARATTR_IS_EXTENDED(_ARG))\ |
| 166 | +(_VAR) = (void *)heap_tuple_untoast_attr(_ARG);\ |
| 167 | +else\ |
| 168 | +(_VAR) = (_ARG);\ |
| 169 | +} |
| 170 | +#defineVARATT_FREE(_ARG,VAR) {\ |
| 171 | +if ((void *)(_VAR) != (void *)(_ARG))\ |
| 172 | +pfree((void *)(_VAR));\ |
| 173 | +} |
| 174 | +#else/* TUPLE_TOASTER_ACTIVE */ |
| 175 | +#defineVARATT_SIZE(__PTR) VARSIZE(__PTR) |
| 176 | +#defineVARATT_SIZEP(__PTR) VARSIZE(__PTR) |
| 177 | +#endif/* TUPLE_TOASTER_ACTIVE */ |
| 178 | + |
| 179 | + |
107 | 180 | /* We want NameData to have length NAMEDATALEN and int alignment,
|
108 | 181 | * because that's how the data type 'name' is defined in pg_type.
|
109 | 182 | * Use a union to make sure the compiler agrees.
|
|