diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/access/heapam.h | 2 | ||||
| -rw-r--r-- | src/include/access/htup.h | 31 | ||||
| -rw-r--r-- | src/include/pgstat.h | 2 |
3 files changed, 34 insertions, 1 deletions
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 85cbeb3273..ed30b5dada 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -97,6 +97,8 @@ extern void FreeBulkInsertState(BulkInsertState); extern Oid heap_insert(Relation relation, HeapTuple tup, CommandId cid, int options, BulkInsertState bistate); +extern void heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples, + CommandId cid, int options, BulkInsertState bistate); extern HTSU_Result heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid, TransactionId *update_xmax, CommandId cid, Snapshot crosscheck, bool wait); diff --git a/src/include/access/htup.h b/src/include/access/htup.h index 966e2d0299..3ca25acb89 100644 --- a/src/include/access/htup.h +++ b/src/include/access/htup.h @@ -608,6 +608,7 @@ typedef HeapTupleData *HeapTuple; /* 0x20 is free, was XLOG_HEAP2_CLEAN_MOVE */ #define XLOG_HEAP2_CLEANUP_INFO 0x30 #define XLOG_HEAP2_VISIBLE 0x40 +#define XLOG_HEAP2_MULTI_INSERT 0x50 /* * All what we need to find changed tuple @@ -661,6 +662,36 @@ typedef struct xl_heap_insert #define SizeOfHeapInsert (offsetof(xl_heap_insert, all_visible_cleared) + sizeof(bool)) +/* + * This is what we need to know about a multi-insert. The record consists of + * xl_heap_multi_insert header, followed by a xl_multi_insert_tuple and tuple + * data for each tuple. 'offsets' array is omitted if the whole page is + * reinitialized (XLOG_HEAP_INIT_PAGE) + */ +typedef struct xl_heap_multi_insert +{ + RelFileNode node; + BlockNumber blkno; + bool all_visible_cleared; + uint16 ntuples; + OffsetNumber offsets[1]; + + /* TUPLE DATA (xl_multi_insert_tuples) FOLLOW AT END OF STRUCT */ +} xl_heap_multi_insert; + +#define SizeOfHeapMultiInsert offsetof(xl_heap_multi_insert, offsets) + +typedef struct xl_multi_insert_tuple +{ + uint16 datalen; /* size of tuple data that follows */ + uint16 t_infomask2; + uint16 t_infomask; + uint8 t_hoff; + /* TUPLE DATA FOLLOWS AT END OF STRUCT */ +} xl_multi_insert_tuple; + +#define SizeOfMultiInsertTuple (offsetof(xl_multi_insert_tuple, t_hoff) + sizeof(uint8)) + /* This is what we need to know about update|hot_update */ typedef struct xl_heap_update { diff --git a/src/include/pgstat.h b/src/include/pgstat.h index 7b2bd4edc0..651b7d9ddf 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -766,7 +766,7 @@ extern void pgstat_initstats(Relation rel); (rel)->pgstat_info->t_counts.t_blocks_hit++; \ } while (0) -extern void pgstat_count_heap_insert(Relation rel); +extern void pgstat_count_heap_insert(Relation rel, int n); extern void pgstat_count_heap_update(Relation rel, bool hot); extern void pgstat_count_heap_delete(Relation rel); extern void pgstat_update_heap_dead_tuples(Relation rel, int delta); |
