Commit abb9c63b authored by Peter Eisentraut's avatar Peter Eisentraut

Unbreak index optimization for LIKE on bytea

The same code is used to handle both text and bytea, but bytea is not
collation-aware, so we shouldn't call get_collation_isdeterministic()
in that case, since that will error out with an invalid collation.
Reported-by: default avatarJeevan Chalke <jeevan.chalke@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/CAM2%2B6%3DWaf3qJ1%3DyVTUH8_yG-SC0xcBMY%2BSFLhvKKNnWNXSUDBw%40mail.gmail.com
parent c34677fd
......@@ -267,8 +267,10 @@ match_pattern_prefix(Node *leftop,
* precise error messages.) (It should be possible to support at least
* Pattern_Prefix_Exact, but no point as along as the actual
* pattern-matching implementations don't support it.)
*
* expr_coll is not set for a non-collation-aware data type such as bytea.
*/
if (!get_collation_isdeterministic(expr_coll))
if (expr_coll && !get_collation_isdeterministic(expr_coll))
return NIL;
/*
......
......@@ -1101,6 +1101,22 @@ SELECT 'jack' LIKE '%____%' AS t;
t
(1 row)
--
-- basic tests of LIKE with indexes
--
CREATE TABLE texttest (a text PRIMARY KEY, b int);
SELECT * FROM texttest WHERE a LIKE '%1%';
a | b
---+---
(0 rows)
CREATE TABLE byteatest (a bytea PRIMARY KEY, b int);
SELECT * FROM byteatest WHERE a LIKE '%1%';
a | b
---+---
(0 rows)
DROP TABLE texttest, byteatest;
--
-- test implicit type conversion
--
......
......@@ -323,6 +323,19 @@ SELECT 'foo' LIKE '%__' as t, 'foo' LIKE '%___' as t, 'foo' LIKE '%____' as f;
SELECT 'jack' LIKE '%____%' AS t;
--
-- basic tests of LIKE with indexes
--
CREATE TABLE texttest (a text PRIMARY KEY, b int);
SELECT * FROM texttest WHERE a LIKE '%1%';
CREATE TABLE byteatest (a bytea PRIMARY KEY, b int);
SELECT * FROM byteatest WHERE a LIKE '%1%';
DROP TABLE texttest, byteatest;
--
-- test implicit type conversion
--
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment