Skip to content

Commit 9982e51

Browse files
authored
Test improvement for OID cast index scan optimization (#4873)
This PR addresses review feedback from the OID cast index scan optimization PR that was merged earlier: Include ordering: Adjusted as per alphabetical position Volatile function test: Added a test case verifying that the contain_volatile_functions guard correctly prevents index optimization when the comparison value is volatile (e.g., random()). The test disables sequential scan to prove the hook definitively blocks the index path rather than the planner simply preferring a different plan on cost. Task: BABEL-6814 Authored-by: Rucha Kulkarni ruchask@amazon.com
1 parent 32d4688 commit 9982e51

4 files changed

Lines changed: 74 additions & 16 deletions

File tree

contrib/babelfishpg_tsql/src/hooks.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
#include "access/genam.h"
66
#include "access/heapam.h"
77
#include "access/htup.h"
8+
#include "access/relation.h"
9+
#include "access/reloptions.h"
10+
#include "access/stratnum.h"
811
#include "access/table.h"
912
#include "access/transam.h"
10-
#include "catalog/heap.h"
11-
#include "utils/pg_locale.h"
1213
#include "access/xact.h"
13-
#include "access/relation.h"
14-
#include "access/reloptions.h"
1514
#include "catalog/catalog.h"
1615
#include "catalog/dependency.h"
16+
#include "catalog/heap.h"
1717
#include "catalog/namespace.h"
1818
#include "catalog/objectaccess.h"
1919
#include "catalog/pg_aggregate.h"
@@ -25,16 +25,16 @@
2525
#include "catalog/pg_db_role_setting.h"
2626
#include "catalog/pg_depend.h" /* Required in handle_bbf_view_binding_on_object_drop to access pg_rewrite dependencies */
2727
#include "catalog/pg_namespace.h"
28+
#include "catalog/pg_operator.h"
2829
#include "catalog/pg_proc.h"
30+
#include "catalog/pg_rewrite.h"
31+
#include "catalog/pg_sequence.h"
32+
#include "catalog/pg_tablespace.h"
2933
#include "catalog/pg_trigger.h"
3034
#include "catalog/pg_trigger_d.h"
3135
#include "catalog/pg_type.h"
32-
#include "catalog/pg_rewrite.h"
33-
#include "catalog/pg_operator.h"
34-
#include "catalog/pg_tablespace.h"
35-
#include "catalog/pg_sequence.h"
36-
#include "commands/copy.h"
3736
#include "commands/comment.h"
37+
#include "commands/copy.h"
3838
#include "commands/dbcommands.h"
3939
#include "commands/explain.h"
4040
#include "commands/extension.h"
@@ -44,6 +44,7 @@
4444
#include "commands/view.h"
4545
#include "common/logging.h"
4646
#include "executor/execExpr.h"
47+
#include "executor/nodeFunctionscan.h"
4748
#include "executor/spi.h"
4849
#include "executor/spi_priv.h"
4950
#include "funcapi.h"
@@ -56,18 +57,17 @@
5657
#include "optimizer/paths.h"
5758
#include "optimizer/planner.h"
5859
#include "optimizer/restrictinfo.h"
59-
#include "access/stratnum.h"
6060
#include "parser/analyze.h"
6161
#include "parser/parse_clause.h"
6262
#include "parser/parse_coerce.h"
6363
#include "parser/parse_expr.h"
6464
#include "parser/parse_func.h"
65+
#include "parser/parse_oper.h"
6566
#include "parser/parse_param.h"
6667
#include "parser/parse_relation.h"
67-
#include "parser/parse_utilcmd.h"
6868
#include "parser/parse_target.h"
6969
#include "parser/parse_type.h"
70-
#include "parser/parse_oper.h"
70+
#include "parser/parse_utilcmd.h"
7171
#include "parser/parser.h"
7272
#include "parser/scanner.h"
7373
#include "parser/scansup.h"
@@ -81,16 +81,17 @@
8181
#include "utils/fmgroids.h"
8282
#include "utils/inval.h"
8383
#include "utils/lsyscache.h"
84+
#include "utils/numeric.h"
85+
#include "utils/pg_locale.h"
86+
#include "utils/queryenvironment.h"
8487
#include "utils/rel.h"
8588
#include "utils/relcache.h"
8689
#include "utils/ruleutils.h"
8790
#include "utils/snapmgr.h"
8891
#include "utils/syscache.h"
89-
#include "utils/numeric.h"
90-
#include "utils/queryenvironment.h"
92+
#include "utils/xml.h"
9193
#include <math.h>
9294
#include "pgstat.h"
93-
#include "executor/nodeFunctionscan.h"
9495
#include "backend_parser/scanner.h"
9596
#include "hooks.h"
9697
#include "pltsql.h"
@@ -107,7 +108,6 @@
107108
#include "table_variable_mvcc.h"
108109
#include "bbf_parallel_query.h"
109110
#include "extendedproperty.h"
110-
#include "utils/xml.h"
111111

112112
#ifdef USE_LIBXML
113113
#include <libxml/tree.h>

test/JDBC/expected/BABEL-6814-vu-verify.out

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,5 +277,30 @@ Index Scan using pg_class_oid_index on pg_class
277277
~~END~~
278278

279279

280+
-- Test 23: EXPLAIN volatile function with seqscan disabled
281+
SELECT set_config('enable_seqscan', 'off', false);
282+
GO
283+
~~START~~
284+
text
285+
off
286+
~~END~~
287+
288+
EXPLAIN (COSTS OFF) SELECT * FROM pg_class WHERE (oid)::int4 = random()::int;
289+
GO
290+
~~START~~
291+
text
292+
Seq Scan on pg_class
293+
Disabled: true
294+
Filter: ((oid)::integer = (random())::integer)
295+
~~END~~
296+
297+
SELECT set_config('enable_seqscan', 'on', false);
298+
GO
299+
~~START~~
300+
text
301+
on
302+
~~END~~
303+
304+
280305
RESET babelfishpg_tsql.sql_dialect;
281306
GO

test/JDBC/expected/parallel_query/BABEL-6814-vu-verify.out

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,5 +294,30 @@ Gather
294294
~~END~~
295295

296296

297+
-- Test 23: EXPLAIN volatile function with seqscan disabled
298+
SELECT set_config('enable_seqscan', 'off', false);
299+
GO
300+
~~START~~
301+
text
302+
off
303+
~~END~~
304+
305+
EXPLAIN (COSTS OFF) SELECT * FROM pg_class WHERE (oid)::int4 = random()::int;
306+
GO
307+
~~START~~
308+
text
309+
Seq Scan on pg_class
310+
Disabled: true
311+
Filter: ((oid)::integer = (random())::integer)
312+
~~END~~
313+
314+
SELECT set_config('enable_seqscan', 'on', false);
315+
GO
316+
~~START~~
317+
text
318+
on
319+
~~END~~
320+
321+
297322
RESET babelfishpg_tsql.sql_dialect;
298323
GO

test/JDBC/input/BABEL-6814-vu-verify.mix

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,5 +139,13 @@ GO
139139
EXPLAIN (COSTS OFF) SELECT * FROM pg_class WHERE (oid)::int4 = 99999999;
140140
GO
141141

142+
-- Test 23: EXPLAIN volatile function with seqscan disabled
143+
SELECT set_config('enable_seqscan', 'off', false);
144+
GO
145+
EXPLAIN (COSTS OFF) SELECT * FROM pg_class WHERE (oid)::int4 = random()::int;
146+
GO
147+
SELECT set_config('enable_seqscan', 'on', false);
148+
GO
149+
142150
RESET babelfishpg_tsql.sql_dialect;
143151
GO

0 commit comments

Comments
 (0)