From 6e0ab587c083f4061a85a448472d0ca258d73018 Mon Sep 17 00:00:00 2001
From: Timur Magomedov <t.magomedov@postgrespro.ru>
Date: Wed, 17 Sep 2025 17:59:05 +0300
Subject: [PATCH 2/2] Reproducer of invalid cast to VciScanState

---
 contrib/vci/sql/bugs.sql | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/contrib/vci/sql/bugs.sql b/contrib/vci/sql/bugs.sql
index 3b6b7303acb..49597abcf99 100644
--- a/contrib/vci/sql/bugs.sql
+++ b/contrib/vci/sql/bugs.sql
@@ -57,3 +57,23 @@ INSERT INTO t6 SELECT id, 'info' || id FROM generate_series(1, 500) id;
 ANALYZE t6;
 EXPLAIN (ANALYZE, COSTS FALSE, BUFFERS FALSE, TIMING FALSE, SUMMARY FALSE) SELECT max(id) FROM t6;
 DROP TABLE t6;
+
+CREATE TABLE main (id BIGSERIAL PRIMARY KEY);
+CREATE TABLE secondary (id BIGSERIAL PRIMARY KEY, main_id BIGINT REFERENCES main (id), val INTEGER);
+
+CREATE INDEX main_vci ON main USING vci (id);
+CREATE INDEX sec_vci ON secondary USING vci (id, main_id, val);
+
+EXPLAIN (ANALYZE, COSTS FALSE, BUFFERS FALSE, TIMING FALSE, SUMMARY FALSE)
+SELECT *
+  FROM main m
+  JOIN secondary s
+	ON m.id = s.main_id
+ WHERE s.val in (
+		SELECT MAX(val)
+		  FROM secondary s2
+		 WHERE s2.main_id = m.id)
+ ORDER BY s.val;
+
+DROP TABLE secondary;
+DROP TABLE main;
-- 
2.43.0

