Skip to content

Commit 60ef2ba

Browse files
committed
some polishing
1 parent ab26048 commit 60ef2ba

File tree

2 files changed

+45
-23
lines changed

2 files changed

+45
-23
lines changed

contrib/test_decoding/test_decoding.c

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "storage/ipc.h"
4646
#include "pgstat.h"
4747
#include "tcop/utility.h"
48+
#include "commands/portalcmds.h"
4849

4950
PG_MODULE_MAGIC;
5051

@@ -190,28 +191,32 @@ test_decoding_process_utility(PlannedStmt *pstmt,
190191
ParamListInfo params, DestReceiver *dest, char *completionTag)
191192
{
192193
Node *parsetree = pstmt->utilityStmt;
194+
193195
switch (nodeTag(parsetree))
194196
{
195197
case T_TransactionStmt:
196-
{
197-
TransactionStmt *stmt = (TransactionStmt *) parsetree;
198-
switch (stmt->kind)
199198
{
200-
case TRANS_STMT_BEGIN:
201-
case TRANS_STMT_START:
202-
break;
203-
case TRANS_STMT_COMMIT:
204-
if (test_decoding_twophase_commit())
205-
return; /* do not proceed */
206-
break;
207-
case TRANS_STMT_PREPARE:
208-
case TRANS_STMT_COMMIT_PREPARED:
209-
case TRANS_STMT_ROLLBACK_PREPARED:
210-
break;
211-
default:
212-
break;
199+
TransactionStmt *stmt = (TransactionStmt *) parsetree;
200+
switch (stmt->kind)
201+
{
202+
case TRANS_STMT_COMMIT:
203+
if (test_decoding_twophase_commit())
204+
return; /* do not proceed */
205+
break;
206+
default:
207+
break;
208+
}
213209
}
214-
}
210+
break;
211+
212+
/* cannot PREPARE a transaction that has executed LISTEN, UNLISTEN, or NOTIFY */
213+
case T_NotifyStmt:
214+
case T_ListenStmt:
215+
case T_UnlistenStmt:
216+
CurrentTxNonpreparable = true;
217+
break;
218+
219+
/* create/reindex/drop concurrently can not be execuled in prepared tx */
215220
case T_ReindexStmt:
216221
{
217222
ReindexStmt *stmt = (ReindexStmt *) parsetree;
@@ -220,7 +225,6 @@ test_decoding_process_utility(PlannedStmt *pstmt,
220225
case REINDEX_OBJECT_SCHEMA:
221226
case REINDEX_OBJECT_SYSTEM:
222227
case REINDEX_OBJECT_DATABASE:
223-
LogLogicalMessage("C", queryString, strlen(queryString) + 1, false);
224228
CurrentTxNonpreparable = true;
225229
default:
226230
break;
@@ -231,18 +235,36 @@ test_decoding_process_utility(PlannedStmt *pstmt,
231235
{
232236
IndexStmt *indexStmt = (IndexStmt *) parsetree;
233237
if (indexStmt->concurrent)
234-
{
235-
LogLogicalMessage("C", queryString, strlen(queryString) + 1, false);
236238
CurrentTxNonpreparable = true;
237-
}
238239
}
239240
break;
241+
case T_DropStmt:
242+
{
243+
DropStmt *stmt = (DropStmt *) parsetree;
244+
if (stmt->removeType == OBJECT_INDEX && stmt->concurrent)
245+
CurrentTxNonpreparable = true;
246+
}
247+
break;
248+
249+
/* cannot PREPARE a transaction that has created a cursor WITH HOLD */
250+
case T_DeclareCursorStmt:
251+
{
252+
DeclareCursorStmt *stmt = (DeclareCursorStmt *) parsetree;
253+
if (stmt->options & CURSOR_OPT_HOLD)
254+
CurrentTxNonpreparable = true;
255+
}
256+
break;
257+
240258
default:
241259
LogLogicalMessage("D", queryString, strlen(queryString) + 1, true);
242260
CurrentTxContainsDDL = true;
243261
break;
244262
}
245263

264+
/* Send non-transactional message then */
265+
if (CurrentTxNonpreparable)
266+
LogLogicalMessage("C", queryString, strlen(queryString) + 1, false);
267+
246268
if (PreviousProcessUtilityHook != NULL)
247269
{
248270
PreviousProcessUtilityHook(pstmt, queryString, context,

runtest.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ sleep 3
2424

2525
cd src/test/regress
2626

27-
# ./pg_regress --inputdir=. --bindir='../../../tmp_install/bin' --dlpath=. --schedule=./parallel_schedule --use-existing
27+
./pg_regress --inputdir=. --bindir='../../../tmp_install/bin' --dlpath=. --schedule=./parallel_schedule --use-existing
2828

29-
./pg_regress --inputdir=. --bindir='../../../tmp_install/bin' --dlpath=. --schedule=./serial_schedule --use-existing
29+
# ./pg_regress --inputdir=. --bindir='../../../tmp_install/bin' --dlpath=. --schedule=./serial_schedule --use-existing
3030

3131
cd ../../..
3232

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy