diff --git a/expected/update.out b/expected/update.out index c4932b53..c81d2c0a 100644 --- a/expected/update.out +++ b/expected/update.out @@ -15,11 +15,11 @@ CREATE TABLE update_test ( a INT DEFAULT 10, b INT, c TEXT -); +) USING tde_heap_basic; CREATE TABLE upsert_test ( a INT PRIMARY KEY, b TEXT -); +) USING tde_heap_basic; INSERT INTO update_test VALUES (5, 10, 'foo'); INSERT INTO update_test(b, a) VALUES (15, 10); INSERT INTO upsert_test VALUES (2, 'Beeble') ON CONFLICT(a) diff --git a/meson.build b/meson.build index aa45a232..3198a59f 100644 --- a/meson.build +++ b/meson.build @@ -93,6 +93,7 @@ tests += { 'move_large_tuples', 'non_sorted_off_compact', 'update_compare_indexes', + 'update', 'pg_tde_is_encrypted', 'test_issue_153_fix', 'multi_insert', diff --git a/src/access/pg_tde_slot.c b/src/access/pg_tde_slot.c index cc989d20..8db45d2a 100644 --- a/src/access/pg_tde_slot.c +++ b/src/access/pg_tde_slot.c @@ -241,6 +241,17 @@ tdeheap_tts_buffer_heap_copyslot(TupleTableSlot *dstslot, TupleTableSlot *srcslo } } +static HeapTuple +tdeheap_tts_buffer_heap_get_heap_tuple(TupleTableSlot *slot) +{ + BufferHeapTupleTableSlot *bslot = (BufferHeapTupleTableSlot *) slot; + Assert(!TTS_EMPTY(slot)); + + if (!bslot->base.tuple) + tdeheap_tts_buffer_heap_materialize(slot); + return bslot->base.tuple; +} + static HeapTuple tdeheap_tts_buffer_heap_copy_heap_tuple(TupleTableSlot *slot) { @@ -462,7 +473,7 @@ const TupleTableSlotOps TTSOpsTDEBufferHeapTuple = { .is_current_xact_tuple = tdeheap_buffer_is_current_xact_tuple, #endif .copyslot = tdeheap_tts_buffer_heap_copyslot, - .get_heap_tuple = NULL, + .get_heap_tuple = tdeheap_tts_buffer_heap_get_heap_tuple, /* A buffer heap tuple table slot can not "own" a minimal tuple. */ .get_minimal_tuple = NULL,