Open cockroach-teamcity opened 2 years ago
This fails in 21.2.5 the same way as 22.1, removing release blocker labels.
Here's a reduced repro, guessing its a geo thing:
CREATE TABLE table2 (col2_0 TIMETZ, col2_3 REGPROC);
CREATE TABLE table5 (
col5_0 FLOAT8, col5_3 GEOGRAPHY, col5_4 DATE, col5_6 DECIMAL, col5_7 STRING,
INDEX (col5_7 DESC),
INVERTED INDEX (col5_3 ASC)
);
INSERT INTO table2 (col2_0, col2_3) VALUES ('00:00:00+15:59:00', 0);
INSERT
INTO table5 (col5_0, col5_3, col5_4, col5_6)
VALUES (
0,
'0104000020E610000008000000010100000054A4D87CD5AD4B40E8B73A825C8637C0010100000081A76E24086666C0AC4CF2E3AF584C4001010000001A7FC234D9FA4FC032A6F3C0BE1051C001010000004FCAE361214452C0B8C3171AA0E552400101000000035E7A43C0E352C030FDD4FB3E2B4840010100000021432579E97C65C0CC0DDAAFD6B23940010100000018DD72AEB8FE5E4037CB45DA4A7C47C001010000000CBA9522724E65406CF65B95512053C0',
'1995-04-22',
0
);
SELECT count(*) FROM defaultdb.public.table2 AS tab_54801 JOIN defaultdb.public.table5 AS tab_54802 ON true;
(SELECT count(*) FROM defaultdb.public.table2 AS tab_54801 JOIN defaultdb.public.table5 AS tab_54802 ON
st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, tab_54802.col5_3::GEOGRAPHY, 0.24216150138503956::FLOAT8, (NOT false)::BOOL)::BOOL)
UNION ALL
(SELECT count(*) FROM defaultdb.public.table2 AS tab_54801 JOIN defaultdb.public.table5 AS tab_54802 ON NOT (st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, tab_54802.col5_3::GEOGRAPHY, 0.24216150138503956::FLOAT8, (NOT false)::BOOL)::BOOL))
UNION ALL
(SELECT count(*) FROM defaultdb.public.table2 AS tab_54801 JOIN defaultdb.public.table5 AS tab_54802 ON (st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, tab_54802.col5_3::GEOGRAPHY, 0.24216150138503956::FLOAT8, (NOT false)::BOOL)::BOOL) IS NULL);
This outputs:
Time: 131ms
count
---------
1
(1 row)
Time: 2ms
count
---------
0
0
0
(3 rows)
with * instead of count:
col2_0 | col2_3 | col5_0 | col5_3 | col5_4 | col5_6 | col5_7
-----------------+--------+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+--------+---------
00:00:00+15:59 | 0 | 0 | 0104000020E610000008000000010100000054A4D87CD5AD4B40E8B73A825C8637C0010100000081A76E24086666C0AC4CF2E3AF584C4001010000001A7FC234D9FA4FC032A6F3C0BE1051C001010000004FCAE361214452C0B8C3171AA0E552400101000000035E7A43C0E352C030FDD4FB3E2B4840010100000021432579E97C65C0CC0DDAAFD6B23940010100000018DD72AEB8FE5E4037CB45DA4A7C47C001010000000CBA9522724E65406CF65B95512053C0 | 1995-04-22 | 0 | NULL
(1 row)
Time: 5ms
col2_0 | col2_3 | col5_0 | col5_3 | col5_4 | col5_6 | col5_7
---------+--------+--------+--------+--------+--------+---------
(0 rows)
Time: 5ms
Here's an even more reduced reproduction:
CREATE TABLE tab (
geo_col GEOGRAPHY,
INVERTED INDEX (geo_col ASC)
);
INSERT
INTO tab (geo_col)
VALUES ('0104000020E610000008000000010100000054A4D87CD5AD4B40E8B73A825C8637C0010100000081A76E24086666C0AC4CF2E3AF584C4001010000001A7FC234D9FA4FC032A6F3C0BE1051C001010000004FCAE361214452C0B8C3171AA0E552400101000000035E7A43C0E352C030FDD4FB3E2B4840010100000021432579E97C65C0CC0DDAAFD6B23940010100000018DD72AEB8FE5E4037CB45DA4A7C47C001010000000CBA9522724E65406CF65B95512053C0');
SELECT count(*) FROM tab@tab_geo_col_idx WHERE st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, geo_col, 0.24216150138503956, true);
SELECT count(*) FROM tab@tab_pkey WHERE st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, geo_col, 0.24216150138503956, true);
Notice the difference in the plans between these two queries:
demo@127.0.0.1:26257/defaultdb> explain SELECT count(*) FROM tab@tab_geo_col_idx WHERE st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, geo_col, 0.24216150138503956, true);
info
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
distribution: local
vectorized: true
• group (scalar)
│ estimated row count: 1
│
└── • filter
│ estimated row count: 0
│ filter: st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241', geo_col, 0.24216150138503956, true)
│
└── • index join
│ estimated row count: 0
│ table: tab@tab_pkey
│
└── • inverted filter
│ inverted column: geo_col_inverted_key
│ num spans: 54
│
└── • scan
estimated row count: 0 (<0.01% of the table; stats collected 13 seconds ago)
table: tab@tab_geo_col_idx
spans: 54 spans
(22 rows)
Time: 2ms total (execution 1ms / network 0ms)
demo@127.0.0.1:26257/defaultdb> explain SELECT count(*) FROM tab@tab_pkey WHERE st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, geo_col, 0.24216150138503956, true);
info
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
distribution: local
vectorized: true
• group (scalar)
│ estimated row count: 1
│
└── • filter
│ estimated row count: 0
│ filter: st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241', geo_col, 0.24216150138503956, true)
│
└── • scan
estimated row count: 1 (100% of the table; stats collected 18 seconds ago)
table: tab@tab_pkey
spans: FULL SCAN
(14 rows)
Time: 1ms total (execution 1ms / network 0ms)
Looks like the plan with the inverted index is producing incorrect results.
According to explain analyze, we're not reading any rows in the scan:
info
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
planning time: 681µs
execution time: 7ms
distribution: local
vectorized: true
cumulative time spent in KV: 6ms
maximum memory usage: 60 KiB
network usage: 0 B (0 messages)
• group (scalar)
│ nodes: n1
│ actual row count: 1
│
└── • filter
│ nodes: n1
│ actual row count: 0
│ filter: st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241', geo_col, 0.24216150138503956, true)
│
└── • index join
│ nodes: n1
│ actual row count: 0
│ KV time: 2µs
│ KV contention time: 0µs
│ KV rows read: 0
│ KV bytes read: 0 B
│ estimated max memory allocated: 0 B
│ estimated max sql temp disk usage: 0 B
│ table: tab@tab_pkey
│
└── • inverted filter
│ nodes: n1
│ actual row count: 0
│ estimated max memory allocated: 0 B
│ estimated max sql temp disk usage: 0 B
│ inverted column: geo_col_inverted_key
│ num spans: 54
│
└── • scan
nodes: n1
actual row count: 0
KV time: 6ms
KV contention time: 0µs
KV rows read: 0
KV bytes read: 0 B
estimated max memory allocated: 30 KiB
missing stats
table: tab@tab_geo_col_idx
spans: 54 spans
(47 rows)
These are the keys in the index:
B\xfd!\x9e-\x02\x0f\xa8+\xbd\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfdL\xdcI#\xe9u\xd4\xa1\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfdN9\xce\xd0\xebGta\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfdW~c\x82\x8fJ\xdc\x8b\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfd|\x8f\xec\x8c\xb1wou\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfd\xabm\xb8\xa0\xf0\x8a\x12;\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfd\xafz\xba\xe1\xaf\xe9\xc5;\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
B\xfd\xbbx,\xe1\x95\x1f\xaf\x05\x00?\xee\xea\xf3\xd5w8\xb2\xbf\xf5]=\x8f2P\x9b\xbf\xf1\xdcf\x14\xa2\x9d\xdc?\xf5\x1b\xad\xefw\xe4\xe1
These are the spans scanned:
/"B\xfd\f\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\f\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\r\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\r\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\r\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\r\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x10\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\x11\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x11\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\x11\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\x11\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd\x12\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd\x13\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd\x13\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x13\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\x13\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\x13\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd\x13\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd\x14\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd\x14\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x14\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\x14\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\x16\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd\x16\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\x18\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd\x18\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd\x18\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd\x19\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x19\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\x1c\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\x1c\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\"\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd#\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd#\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd#\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd#\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd#\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd$\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd$\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd$\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd%\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd%\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd%\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd%\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd%\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd,\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd,\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd/\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd/\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd/\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd0\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd0\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd0\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd0\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd0\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd0\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd1\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd1\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd1\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd4\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd4\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd7\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd7\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd7\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd7\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd7\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd8\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd8\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd@\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd@\x00\x00\x00\x00\x00\x00\x01"-/"B\xfdH\x00\x00\x00\x00\x00\x00\x00"
/"B\xfdH\x00\x00\x00\x00\x00\x00\x01"-/"B\xfdH\x80\x00\x00\x00\x00\x00\x00"
/"B\xfdH\x80\x00\x00\x00\x00\x00\x01"-/"B\xfdI\x00\x00\x00\x00\x00\x00\x00"
/"B\xfdI\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdI\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdL\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdL\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdO\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdO\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdO\x00\x00\x00\x00\x00\x00\x01"-/"B\xfdO\x80\x00\x00\x00\x00\x00\x00"
/"B\xfdO\x80\x00\x00\x00\x00\x00\x01"-/"B\xfdP\x00\x00\x00\x00\x00\x00\x00"
/"B\xfdP\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdP\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdP\x00\x00\x00\x00\x00\x00\x01"-/"B\xfdP\x80\x00\x00\x00\x00\x00\x00"
/"B\xfdQ\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdQ\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdT\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdT\x00\x00\x00\x00\x00\x00\x01"
/"B\xfdZ\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd[\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd[\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd[\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd[\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd[\x80\x00\x00\x00\x00\x00\x00"
/"B\xfd\\\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd\\\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd\\\x80\x00\x00\x00\x00\x00\x01"-/"B\xfd]\x00\x00\x00\x00\x00\x00\x00"
/"B\xfd]\x00\x00\x00\x00\x00\x00\x00"-/"B\xfd]\x00\x00\x00\x00\x00\x00\x01"
/"B\xfd]\x00\x00\x00\x00\x00\x00\x01"-/"B\xfd]\x80\x00\x00\x00\x00\x00\x00"
In the optimizer, these spans are represented differently:
info
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scalar-group-by
├── select
│ ├── index-join tab
│ │ └── inverted-filter
│ │ ├── inverted expression: /5
│ │ │ ├── tight: false, unique: false
│ │ │ └── union spans
│ │ │ ├── ["B\xfd\f\x00\x00\x00\x00\x00\x00\x00", "B\xfd\f\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\r\x00\x00\x00\x00\x00\x00\x00", "B\xfd\r\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\r\x00\x00\x00\x00\x00\x00\x01", "B\xfd\r\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x11\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x11\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x11\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x11\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x12\x80\x00\x00\x00\x00\x00\x01", "B\xfd\x13\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x13\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x13\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x13\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x13\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x13\x80\x00\x00\x00\x00\x00\x01", "B\xfd\x14\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x14\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x14\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x14\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x16\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x16\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x18\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x18\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x18\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x19\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x19\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x1c\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x1c\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\"\x80\x00\x00\x00\x00\x00\x01", "B\xfd#\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd#\x00\x00\x00\x00\x00\x00\x00", "B\xfd#\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd#\x00\x00\x00\x00\x00\x00\x01", "B\xfd#\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd$\x00\x00\x00\x00\x00\x00\x00", "B\xfd$\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd$\x80\x00\x00\x00\x00\x00\x01", "B\xfd%\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd%\x00\x00\x00\x00\x00\x00\x00", "B\xfd%\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd%\x00\x00\x00\x00\x00\x00\x01", "B\xfd%\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd,\x00\x00\x00\x00\x00\x00\x00", "B\xfd,\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd/\x00\x00\x00\x00\x00\x00\x00", "B\xfd/\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd/\x80\x00\x00\x00\x00\x00\x01", "B\xfd0\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd0\x00\x00\x00\x00\x00\x00\x00", "B\xfd0\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd0\x00\x00\x00\x00\x00\x00\x01", "B\xfd0\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd0\x80\x00\x00\x00\x00\x00\x01", "B\xfd1\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd1\x00\x00\x00\x00\x00\x00\x00", "B\xfd1\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd4\x00\x00\x00\x00\x00\x00\x00", "B\xfd4\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd7\x00\x00\x00\x00\x00\x00\x00", "B\xfd7\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd7\x00\x00\x00\x00\x00\x00\x01", "B\xfd7\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd7\x80\x00\x00\x00\x00\x00\x01", "B\xfd8\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd8\x00\x00\x00\x00\x00\x00\x01", "B\xfd@\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd@\x00\x00\x00\x00\x00\x00\x01", "B\xfdH\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdH\x00\x00\x00\x00\x00\x00\x01", "B\xfdH\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdH\x80\x00\x00\x00\x00\x00\x01", "B\xfdI\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdI\x00\x00\x00\x00\x00\x00\x00", "B\xfdI\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdL\x00\x00\x00\x00\x00\x00\x00", "B\xfdL\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdO\x00\x00\x00\x00\x00\x00\x00", "B\xfdO\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdO\x00\x00\x00\x00\x00\x00\x01", "B\xfdO\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdO\x80\x00\x00\x00\x00\x00\x01", "B\xfdP\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdP\x00\x00\x00\x00\x00\x00\x00", "B\xfdP\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdP\x00\x00\x00\x00\x00\x00\x01", "B\xfdP\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdQ\x00\x00\x00\x00\x00\x00\x00", "B\xfdQ\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdT\x00\x00\x00\x00\x00\x00\x00", "B\xfdT\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdZ\x80\x00\x00\x00\x00\x00\x01", "B\xfd[\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd[\x00\x00\x00\x00\x00\x00\x00", "B\xfd[\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd[\x00\x00\x00\x00\x00\x00\x01", "B\xfd[\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\\\x00\x00\x00\x00\x00\x00\x00", "B\xfd\\\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\\\x80\x00\x00\x00\x00\x00\x01", "B\xfd]\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd]\x00\x00\x00\x00\x00\x00\x00", "B\xfd]\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ └── ["B\xfd]\x00\x00\x00\x00\x00\x00\x01", "B\xfd]\x80\x00\x00\x00\x00\x00\x00")
│ │ ├── pre-filterer expression
│ │ │ └── st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241', geo_col, 0.24216150138503956)
│ │ └── scan tab@tab_geo_col_idx
│ │ ├── inverted constraint: /5/2
│ │ │ └── spans
│ │ │ ├── ["B\xfd\f\x00\x00\x00\x00\x00\x00\x00", "B\xfd\f\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\r\x00\x00\x00\x00\x00\x00\x00", "B\xfd\r\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\r\x00\x00\x00\x00\x00\x00\x01", "B\xfd\r\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x10\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x10\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x11\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x11\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x11\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x11\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x12\x80\x00\x00\x00\x00\x00\x01", "B\xfd\x13\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x13\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x13\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x13\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x13\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x13\x80\x00\x00\x00\x00\x00\x01", "B\xfd\x14\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x14\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x14\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x14\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x16\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x16\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x18\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x18\x00\x00\x00\x00\x00\x00\x01", "B\xfd\x18\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\x19\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x19\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\x1c\x00\x00\x00\x00\x00\x00\x00", "B\xfd\x1c\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\"\x80\x00\x00\x00\x00\x00\x01", "B\xfd#\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd#\x00\x00\x00\x00\x00\x00\x00", "B\xfd#\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd#\x00\x00\x00\x00\x00\x00\x01", "B\xfd#\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd$\x00\x00\x00\x00\x00\x00\x00", "B\xfd$\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd$\x80\x00\x00\x00\x00\x00\x01", "B\xfd%\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd%\x00\x00\x00\x00\x00\x00\x00", "B\xfd%\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd%\x00\x00\x00\x00\x00\x00\x01", "B\xfd%\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd,\x00\x00\x00\x00\x00\x00\x00", "B\xfd,\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd/\x00\x00\x00\x00\x00\x00\x00", "B\xfd/\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd/\x80\x00\x00\x00\x00\x00\x01", "B\xfd0\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd0\x00\x00\x00\x00\x00\x00\x00", "B\xfd0\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd0\x00\x00\x00\x00\x00\x00\x01", "B\xfd0\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd0\x80\x00\x00\x00\x00\x00\x01", "B\xfd1\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd1\x00\x00\x00\x00\x00\x00\x00", "B\xfd1\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd4\x00\x00\x00\x00\x00\x00\x00", "B\xfd4\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd7\x00\x00\x00\x00\x00\x00\x00", "B\xfd7\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd7\x00\x00\x00\x00\x00\x00\x01", "B\xfd7\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd7\x80\x00\x00\x00\x00\x00\x01", "B\xfd8\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd8\x00\x00\x00\x00\x00\x00\x01", "B\xfd@\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd@\x00\x00\x00\x00\x00\x00\x01", "B\xfdH\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdH\x00\x00\x00\x00\x00\x00\x01", "B\xfdH\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdH\x80\x00\x00\x00\x00\x00\x01", "B\xfdI\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdI\x00\x00\x00\x00\x00\x00\x00", "B\xfdI\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdL\x00\x00\x00\x00\x00\x00\x00", "B\xfdL\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdO\x00\x00\x00\x00\x00\x00\x00", "B\xfdO\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdO\x00\x00\x00\x00\x00\x00\x01", "B\xfdO\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdO\x80\x00\x00\x00\x00\x00\x01", "B\xfdP\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdP\x00\x00\x00\x00\x00\x00\x00", "B\xfdP\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdP\x00\x00\x00\x00\x00\x00\x01", "B\xfdP\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfdQ\x00\x00\x00\x00\x00\x00\x00", "B\xfdQ\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdT\x00\x00\x00\x00\x00\x00\x00", "B\xfdT\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfdZ\x80\x00\x00\x00\x00\x00\x01", "B\xfd[\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd[\x00\x00\x00\x00\x00\x00\x00", "B\xfd[\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd[\x00\x00\x00\x00\x00\x00\x01", "B\xfd[\x80\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd\\\x00\x00\x00\x00\x00\x00\x00", "B\xfd\\\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ ├── ["B\xfd\\\x80\x00\x00\x00\x00\x00\x01", "B\xfd]\x00\x00\x00\x00\x00\x00\x00")
│ │ │ ├── ["B\xfd]\x00\x00\x00\x00\x00\x00\x00", "B\xfd]\x00\x00\x00\x00\x00\x00\x00"]
│ │ │ └── ["B\xfd]\x00\x00\x00\x00\x00\x00\x01", "B\xfd]\x80\x00\x00\x00\x00\x00\x00")
│ │ └── flags: force-index=tab_geo_col_idx
│ └── filters
│ └── st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241', geo_col, 0.24216150138503956)
└── aggregations
└── count-rows
(125 rows)
I wonder if this has something to do with the conversion of the equality spans to open-ended spans. e.g.,
["B\xfdL\x00\x00\x00\x00\x00\x00\x00", "B\xfdL\x00\x00\x00\x00\x00\x00\x00"]
becomes
/"B\xfdL\x00\x00\x00\x00\x00\x00\x00"-/"B\xfdL\x00\x00\x00\x00\x00\x00\x01"
I'm going to take a break from this for now. I think debugging this further is going to require a deeper dive into how the spans are generated. The relevant code is here: https://github.com/cockroachdb/cockroach/blob/928f605c3e84efb30cab213b47b2f4a66b816701/pkg/sql/opt/invertedidx/geo.go#L123-L127
cc @sumeerbhola in case you have time to take a peek at this and/or have any insight into what might be happening
These shapes are intersecting based on
root@:26257/defaultdb> SELECT count(*) FROM tab@tab_geo_col_idx WHERE st_intersects('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD9
count
---------
0
(1 row)
root@:26257/defaultdb> SELECT count(*) FROM tab@tab_pkey WHERE st_intersects('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911D
count
---------
1
But I have to bump up the ST_DWithin distance to 717,000 meters before the index returns true
root@:26257/defaultdb> SELECT count(*) FROM tab@tab_geo_col_idx WHERE st_dwithin('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::GEOGRAPHY, geo_col, 717000, true);
count
---------
1
(1 row)
The following steps may help to narrow this down:
intersectsUsingCovering
which will produce UnionKeySpans
here https://github.com/cockroachdb/cockroach/blob/master/pkg/geo/geoindex/geoindex.go#L530-L540.CoveringGeography
https://github.com/cockroachdb/cockroach/blob/master/pkg/geo/geoindex/s2_geography_index.go#L219-L222 called by st_s2covering to get that.I tried the second step (I won't get a chance to look at this more for the next couple of days). The cells are non-intersecting. The viz will probably tell us something.
There are 8 cells in the covering (the latter 3 are longer in terms of an extra digit):
2422423136447769533
5538382060348363937
5636763805326734433
6304585940766219403
8975652671389658997
12352732354316997179
12644624382277829947
13508596429678948101
ST_Intersects produces the following cellid ranges (the numbers have the same number of digits as the first 5 above, but no overlap):
[
1441151880758558721,
1585267068834414591
]
[
1585267068834414593,
1621295865853378559
]
[
4035225266123964417,
4611686018427387903
]
[
4611686018427387905,
5188146770730811391
]
There are also 5 ancestors which also don't match.
(I should have used fixed-width hex in these logs, since this requires some unnecessary squinting)
Use @otan's visualizer on these 2 shapes, and on the output of st_s2covering, just to see if anything obvious pops out.
sorry i forgot to reply to this -- use https://geojson.io/ instead of my tool (convert using st_asgeojson(...)
).
using
SELECT json_build_object(
'type', 'FeatureCollection',
'features', json_agg(ST_AsGeoJSON(t.*)::json)
)
FROM ( VALUES (1, 'original shape', '01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::geography),
(2, 'two', st_s2covering('01060000E0E61000000100000001030000C001000000040000002410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241280A013B1F235340F8BF387C28115640D42C81DD911DF7C15068D6DBDEE7CCC10CA4E8AB08844D40125A0D02ADB35440F86FC12B1966DD4104A5183738C5FF412410B7E16B9D4440F80C9162CE5C2140459E64E4C1D0F2C1A82FC5D8CCBDF241'::geography))
) as t(id, name, geom);
into https://geojson.io/, and clicking on one shape and changing the colouring, you can see the S2 covering doesn't quite match the shape...
{
"type": "FeatureCollection",
"features": [
{
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
41.229854788,
8.681262093,
-5050736198.28864
],
[
76.548781158,
88.268096023,
-6205021656.073444
],
[
59.031514634,
82.807434571,
1972921519.022459
],
[
41.229854788,
8.681262093,
-5050736198.28864
]
]
]
]
},
"properties": {
"stroke": "#555555",
"stroke-width": 2,
"stroke-opacity": 1,
"fill": "#f45252",
"fill-opacity": 0.5,
"id": 1,
"name": "original shape"
},
"type": "Feature"
},
{
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
22.619864948,
21.037511025
],
[
45,
16.416440374
],
[
45,
35.264389683
],
[
22.619864948,
42.709389957
],
[
22.619864948,
21.037511025
]
]
],
[
[
[
34.508522988,
8.783194988
],
[
45,
7.55237228
],
[
45,
16.416440374
],
[
34.508522988,
18.949950004
],
[
34.508522988,
8.783194988
]
]
],
[
[
[
45,
0
],
[
90,
0
],
[
90,
45
],
[
45,
35.264389683
],
[
45,
0
]
]
],
[
[
[
45,
35.264389683
],
[
90,
45
],
[
-180,
90
],
[
0,
45
],
[
45,
35.264389683
]
]
]
]
},
"properties": {
"id": 2,
"name": "two"
},
"type": "Feature"
}
]
}
i do wonder whether the original shape "is valid" -- it's valid for st_isvalid
for geometry but not geography
Thanks, @otan. I'm going to assign you, @sumeerbhola, since it looks like this is either a bug in s2 or our geoindex code, but either way, you probably have the most context.
I've verified this is still an issue.
@sumeerbhola any chance you'll have some cycles to look into this in the next couple weeks?
roachtest.tlp failed with artifacts on release-22.1.0 @ b80486467afdcf9b7c3d1a2739e890722eae6cd8:
Help
See: [roachtest README](https://github.com/cockroachdb/cockroach/blob/master/pkg/cmd/roachtest/README.md) See: [How To Investigate \(internal\)](https://cockroachlabs.atlassian.net/l/c/SSSBr8c7)
Same failure on other branches
- #80047 roachtest: tlp failed [C-test-failure O-roachtest O-robot T-sql-queries branch-release-22.1]
/cc @cockroachdb/sql-queries
This test on roachdash | Improve this report!
Jira issue: CRDB-15742