diff --git a/pkg/sql/logictest/testdata/logic_test/trigram_indexes b/pkg/sql/logictest/testdata/logic_test/trigram_indexes index 668c214e4b14..528b75335696 100644 --- a/pkg/sql/logictest/testdata/logic_test/trigram_indexes +++ b/pkg/sql/logictest/testdata/logic_test/trigram_indexes @@ -358,3 +358,29 @@ FROM AS tab (col1_1, col1_2) ON (tab2.col1) = (tab.col1_1) AND (tab2.col2) = (tab.col1_2); + +subtest trigram_similarity_zero_threshold_inverted_index + +statement ok +SET pg_trgm.similarity_threshold = 0; + +statement ok +CREATE TABLE trigram_similarity_zero_threshold_inverted_index_a ( + a INT PRIMARY KEY, + b STRING, + INVERTED INDEX c (b gin_trgm_ops) +); + +statement ok +SET optimizer_use_trigram_similarity_optimization = false; + +statement error pq: index "c" is inverted and cannot be used for this query +SELECT * FROM trigram_similarity_zero_threshold_inverted_index_a@c WHERE b % 'foo'; + +statement ok +SET optimizer_use_trigram_similarity_optimization = true; + +statement error pq: index "c" is inverted and cannot be used for this query +SELECT * FROM trigram_similarity_zero_threshold_inverted_index_a@c WHERE b % 'foo'; + +subtest end diff --git a/pkg/sql/opt/invertedidx/trigram.go b/pkg/sql/opt/invertedidx/trigram.go index 4511931a2347..86561913adfd 100644 --- a/pkg/sql/opt/invertedidx/trigram.go +++ b/pkg/sql/opt/invertedidx/trigram.go @@ -72,6 +72,12 @@ func (t *trigramFilterPlanner) extractInvertedFilterConditionFromLeaf( if evalCtx.SessionData().OptimizerUseTrigramSimilarityOptimization { return inverted.NonInvertedColExpression{}, expr, nil } + + // Do not plan inverted index scans when the trigram similarity threshold is 0 + // because all strings will be matched. + if evalCtx.SessionData().TrigramSimilarityThreshold == 0 { + return inverted.NonInvertedColExpression{}, expr, nil + } // If we're doing a % expression (similarity threshold), we need to // construct an OR out of the spans: we need to find results that match any // of the trigrams in the constant datum, and we'll filter the results diff --git a/pkg/sql/opt/invertedidx/trigram_test.go b/pkg/sql/opt/invertedidx/trigram_test.go index b3c9d37b6b6e..598a623d23f6 100644 --- a/pkg/sql/opt/invertedidx/trigram_test.go +++ b/pkg/sql/opt/invertedidx/trigram_test.go @@ -23,6 +23,7 @@ func TestTryFilterTrigram(t *testing.T) { semaCtx := tree.MakeSemaContext(nil /* resolver */) st := cluster.MakeTestingClusterSettings() evalCtx := eval.NewTestingEvalContext(st) + evalCtx.SessionData().TrigramSimilarityThreshold = 0.3 tc := testcat.New() if _, err := tc.ExecuteDDL(