From 7b894856bfa17b31e18548e35f48d19d9fef7437 Mon Sep 17 00:00:00 2001 From: miker Date: Thu, 27 Mar 2008 04:17:10 +0000 Subject: [PATCH] escape regexp-special characters git-svn-id: svn://svn.open-ils.org/ILS/trunk@9144 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/sql/Pg/300.schema.staged_search.sql | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/sql/Pg/300.schema.staged_search.sql b/Open-ILS/src/sql/Pg/300.schema.staged_search.sql index 5dd9ad1ac5..39e52e7dfd 100644 --- a/Open-ILS/src/sql/Pg/300.schema.staged_search.sql +++ b/Open-ILS/src/sql/Pg/300.schema.staged_search.sql @@ -211,7 +211,16 @@ BEGIN WHERE term_type = 'phrase' AND table_alias = query_part.table_alias LOOP - inner_where_clause := inner_where_clause || ' AND ' || 'value ~* ' || quote_literal( E'(^|\\W+)' || regexp_replace(phrase_query_part.term, E'\\s+',E'\\\\s+','g') || E'(\\W+|\$)' ); + tmp_text := replace( phrase_query_part.term, '*', E'\\*' ); + tmp_text := replace( tmp_text, '?', E'\\?' ); + tmp_text := replace( tmp_text, '+', E'\\+' ); + tmp_text := replace( tmp_text, '|', E'\\|' ); + tmp_text := replace( tmp_text, '(', E'\\(' ); + tmp_text := replace( tmp_text, ')', E'\\)' ); + tmp_text := replace( tmp_text, '[', E'\\[' ); + tmp_text := replace( tmp_text, ']', E'\\]' ); + + inner_where_clause := inner_where_clause || ' AND ' || 'value ILIKE ' || quote_literal( E'(^|\\W+)' || regexp_replace(tmp_text, E'\\s+',E'\\\\s+','g') || E'(\\W+|\$)' ); END LOOP; -- 2.43.2