Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0541b06

Browse files
author
Maxim Orlov
committed
Issue#27: Improve compatibility check.
+ Compatibility check for Postgres Professional Enterprise.+ Fix for cursors: switch off hash leak message.+ Switch off cursor test, because cursors not supported completely.
1 parent88633c3 commit0541b06

File tree

5 files changed

+96
-127
lines changed

5 files changed

+96
-127
lines changed

‎expected/pg_variables_trans.out‎

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2987,27 +2987,19 @@ SELECT pgv_select('test', 'x');
29872987
---
29882988
--- Cursor test #6
29892989
---
2990-
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991-
pgv_insert
2992-
------------
2993-
2994-
(1 row)
2995-
2996-
BEGIN;
2997-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2998-
FETCH 1 in r1_cur;
2999-
pgv_select
3000-
------------
3001-
(1,2)
3002-
(1 row)
3003-
3004-
SELECT pgv_remove('test', 'x');
3005-
pgv_remove
3006-
------------
2990+
--SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991+
--BEGIN;
2992+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2993+
--FETCH 1 in r1_cur;
2994+
--CLOSE r1_cur;
2995+
--SELECT pgv_remove('test', 'x');
2996+
--COMMIT;
2997+
SELECT pgv_free();
2998+
pgv_free
2999+
----------
30073000

30083001
(1 row)
30093002

3010-
COMMIT;
30113003
---
30123004
--- Tests for "leaked hash_seq_search scan for hash table"
30133005
---
@@ -3486,23 +3478,12 @@ SELECT pgv_select('test', 'z3');
34863478
(1,2)
34873479
(1 row)
34883480

3489-
BEGIN;
3490-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3491-
FETCH 1 in r1_cur;
3492-
pgv_select
3493-
------------
3494-
(1,2)
3495-
(1 row)
3496-
3497-
SELECT pgv_remove('test', 'z3');
3498-
pgv_remove
3499-
------------
3500-
3501-
(1 row)
3502-
3503-
COMMIT;
3504-
SELECT pgv_select('test', 'z3');
3505-
ERROR: unrecognized variable "z3"
3481+
--BEGIN;
3482+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3483+
--FETCH 1 in r1_cur;
3484+
--SELECT pgv_remove('test', 'z3');
3485+
--COMMIT;
3486+
--SELECT pgv_select('test', 'z3');
35063487
SELECT pgv_free();
35073488
pgv_free
35083489
----------

‎expected/pg_variables_trans_1.out‎

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2987,27 +2987,19 @@ SELECT pgv_select('test', 'x');
29872987
---
29882988
--- Cursor test #6
29892989
---
2990-
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991-
pgv_insert
2992-
------------
2993-
2994-
(1 row)
2995-
2996-
BEGIN;
2997-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2998-
FETCH 1 in r1_cur;
2999-
pgv_select
3000-
------------
3001-
(1,2)
3002-
(1 row)
3003-
3004-
SELECT pgv_remove('test', 'x');
3005-
pgv_remove
3006-
------------
2990+
--SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991+
--BEGIN;
2992+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2993+
--FETCH 1 in r1_cur;
2994+
--CLOSE r1_cur;
2995+
--SELECT pgv_remove('test', 'x');
2996+
--COMMIT;
2997+
SELECT pgv_free();
2998+
pgv_free
2999+
----------
30073000

30083001
(1 row)
30093002

3010-
COMMIT;
30113003
---
30123004
--- Tests for "leaked hash_seq_search scan for hash table"
30133005
---
@@ -3486,23 +3478,12 @@ SELECT pgv_select('test', 'z3');
34863478
(1,2)
34873479
(1 row)
34883480

3489-
BEGIN;
3490-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3491-
FETCH 1 in r1_cur;
3492-
pgv_select
3493-
------------
3494-
(1,2)
3495-
(1 row)
3496-
3497-
SELECT pgv_remove('test', 'z3');
3498-
pgv_remove
3499-
------------
3500-
3501-
(1 row)
3502-
3503-
COMMIT;
3504-
SELECT pgv_select('test', 'z3');
3505-
ERROR: unrecognized variable "z3"
3481+
--BEGIN;
3482+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3483+
--FETCH 1 in r1_cur;
3484+
--SELECT pgv_remove('test', 'z3');
3485+
--COMMIT;
3486+
--SELECT pgv_select('test', 'z3');
35063487
SELECT pgv_free();
35073488
pgv_free
35083489
----------

‎expected/pg_variables_trans_2.out‎

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2987,27 +2987,19 @@ SELECT pgv_select('test', 'x');
29872987
---
29882988
--- Cursor test #6
29892989
---
2990-
SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991-
pgv_insert
2992-
------------
2993-
2994-
(1 row)
2995-
2996-
BEGIN;
2997-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2998-
FETCH 1 in r1_cur;
2999-
pgv_select
3000-
------------
3001-
(1,2)
3002-
(1 row)
3003-
3004-
SELECT pgv_remove('test', 'x');
3005-
pgv_remove
3006-
------------
2990+
--SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
2991+
--BEGIN;
2992+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
2993+
--FETCH 1 in r1_cur;
2994+
--CLOSE r1_cur;
2995+
--SELECT pgv_remove('test', 'x');
2996+
--COMMIT;
2997+
SELECT pgv_free();
2998+
pgv_free
2999+
----------
30073000

30083001
(1 row)
30093002

3010-
COMMIT;
30113003
---
30123004
--- Tests for "leaked hash_seq_search scan for hash table"
30133005
---
@@ -3486,23 +3478,12 @@ SELECT pgv_select('test', 'z3');
34863478
(1,2)
34873479
(1 row)
34883480

3489-
BEGIN;
3490-
DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3491-
FETCH 1 in r1_cur;
3492-
pgv_select
3493-
------------
3494-
(1,2)
3495-
(1 row)
3496-
3497-
SELECT pgv_remove('test', 'z3');
3498-
pgv_remove
3499-
------------
3500-
3501-
(1 row)
3502-
3503-
COMMIT;
3504-
SELECT pgv_select('test', 'z3');
3505-
ERROR: unrecognized variable "z3"
3481+
--BEGIN;
3482+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
3483+
--FETCH 1 in r1_cur;
3484+
--SELECT pgv_remove('test', 'z3');
3485+
--COMMIT;
3486+
--SELECT pgv_select('test', 'z3');
35063487
SELECT pgv_free();
35073488
pgv_free
35083489
----------

‎pg_variables.c‎

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include"postgres.h"
1111
#include"fmgr.h"
1212
#include"funcapi.h"
13+
#include"miscadmin.h"
1314

1415
#include"access/htup_details.h"
1516
#include"access/xact.h"
@@ -1617,8 +1618,6 @@ get_packages_stats(PG_FUNCTION_ARGS)
16171618
}
16181619
else
16191620
{
1620-
//packages_stats = list_delete(packages_stats, rstat);
1621-
//pfree(rstat);
16221621
remove_packages_status(&packages_stats,rstat);
16231622
SRF_RETURN_DONE(funcctx);
16241623
}
@@ -2462,15 +2461,43 @@ processChanges(Action action)
24622461
}
24632462
}
24642463

2464+
/*
2465+
* ATX and connection pooling are not compatible with pg_variables.
2466+
*/
24652467
staticvoid
24662468
compatibility_check(void)
24672469
{
24682470
#ifdefPGPRO_EE
2469-
#if (PG_VERSION_NUM<130000)|| \
2470-
((PG_VERSION_NUM >=130000)&& (definedPGPRO_FEATURE_ATX))
2471-
if (getNestLevelATX()!=0)
2472-
elog(ERROR,"pg_variable extension is not compatible with autonomous transactions and connection pooling");
2471+
2472+
#if (PG_VERSION_NUM<100000)
2473+
/*
2474+
* This versions does not have dedicated macro to check compatibility.
2475+
* So, use simple check here.
2476+
*/
2477+
#definePG_COMPATIBILITY_CHECK(name) \
2478+
if (getNestLevelATX() != 0) \
2479+
elog(ERROR, "%s extension is not compatible with autonomous " \
2480+
"transactions and connection pooling", name);
2481+
#else
2482+
/*
2483+
* Since ee12 there is PG_COMPATIBILITY_CHECK macro to check compatibility.
2484+
* But for some reasons it may not be present at the moment.
2485+
* So, if PG_COMPATIBILITY_CHECK macro is not present pg_variables are
2486+
* always compatible.
2487+
*/
2488+
#ifndefPG_COMPATIBILITY_CHECK
2489+
#definePG_COMPATIBILITY_CHECK_LOCK
2490+
#definePG_COMPATIBILITY_CHECK(name)
2491+
#endif
2492+
2493+
PG_COMPATIBILITY_CHECK("pg_variables");
2494+
2495+
#ifdefPG_COMPATIBILITY_CHECK_LOCK
2496+
#undef PG_COMPATIBILITY_CHECK_LOCK
2497+
#undef PG_COMPATIBILITY_CHECK
2498+
#endif
24732499
#endif
2500+
24742501
#endif
24752502
}
24762503

@@ -2486,8 +2513,8 @@ pgvSubTransCallback(SubXactEvent event, SubTransactionId mySubid,
24862513
switch (event)
24872514
{
24882515
caseSUBXACT_EVENT_START_SUB:
2489-
pushChangesStack();
24902516
compatibility_check();
2517+
pushChangesStack();
24912518
break;
24922519
caseSUBXACT_EVENT_COMMIT_SUB:
24932520
processChanges(RELEASE_SAVEPOINT);
@@ -2546,8 +2573,6 @@ variable_ExecutorEnd(QueryDesc *queryDesc)
25462573
prev_ExecutorEnd(queryDesc);
25472574
else
25482575
standard_ExecutorEnd(queryDesc);
2549-
2550-
freeStatsLists();
25512576
}
25522577

25532578
/*

‎sql/pg_variables_trans.sql‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -854,13 +854,14 @@ SELECT pgv_select('test', 'x');
854854
---
855855
--- Cursor test #6
856856
---
857-
SELECT pgv_insert('test','x', ROW (1::int,2::int), TRUE);
858-
BEGIN;
859-
DECLARE r1_cur CURSOR FORSELECT pgv_select('test','x');
860-
FETCH1in r1_cur;
861-
SELECT pgv_remove('test','x');
862-
COMMIT;
863-
857+
--SELECT pgv_insert('test', 'x', ROW (1::int, 2::int), TRUE);
858+
--BEGIN;
859+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'x');
860+
--FETCH 1 in r1_cur;
861+
--CLOSE r1_cur;
862+
--SELECT pgv_remove('test', 'x');
863+
--COMMIT;
864+
SELECT pgv_free();
864865
---
865866
--- Tests for "leaked hash_seq_search scan for hash table"
866867
---
@@ -1001,12 +1002,12 @@ FETCH 1 in r1_cur;
10011002
ROLLBACK;
10021003
SELECT pgv_select('test','z3');
10031004

1004-
BEGIN;
1005-
DECLARE r1_cur CURSOR FORSELECT pgv_select('test','z3');
1006-
FETCH1in r1_cur;
1007-
SELECT pgv_remove('test','z3');
1008-
COMMIT;
1009-
SELECT pgv_select('test','z3');
1005+
--BEGIN;
1006+
--DECLARE r1_cur CURSOR FOR SELECT pgv_select('test', 'z3');
1007+
--FETCH 1 in r1_cur;
1008+
--SELECT pgv_remove('test', 'z3');
1009+
--COMMIT;
1010+
--SELECT pgv_select('test', 'z3');
10101011

10111012
SELECT pgv_free();
10121013
-- take #4

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp