Skip to content

Commit 5854469

Browse files
committed
feat: do not assume a "_tokens" column suffix in searchNgrams
In the previously introduced "searchNgrams" filter function, it was only possible to specify Spanner column names which had a suffix of "_tokens". While this may be a best practice it is not mandatory and technically the column can be given any name so we make no assumptions on the column name and allow the user to pass the actual tokenized column name.
1 parent 05d7ea0 commit 5854469

2 files changed

Lines changed: 12 additions & 16 deletions

File tree

spanfiltering/transpile_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ func TestTranspileFilter(t *testing.T) {
163163

164164
{
165165
name: "searchNgrams: 2-arg basic",
166-
filter: `searchNgrams(display_name, "abc")`,
166+
filter: `searchNgrams(display_name_tokens, "abc")`,
167167
declarations: []filtering.DeclarationOption{
168168
filtering.DeclareStandardFunctions(),
169-
filtering.DeclareIdent("display_name", filtering.TypeString),
169+
filtering.DeclareIdent("display_name_tokens", filtering.TypeString),
170170
DeclareSearchNgramsFunction(),
171171
},
172172
expectedSQL: `(SEARCH_NGRAMS(display_name_tokens, @param_0))`,
@@ -177,10 +177,10 @@ func TestTranspileFilter(t *testing.T) {
177177

178178
{
179179
name: "searchNgrams: 5-arg all set",
180-
filter: `searchNgrams(display_name, "abc", "en", 3, 0.8)`,
180+
filter: `searchNgrams(display_name_tokens, "abc", "en", 3, 0.8)`,
181181
declarations: []filtering.DeclarationOption{
182182
filtering.DeclareStandardFunctions(),
183-
filtering.DeclareIdent("display_name", filtering.TypeString),
183+
filtering.DeclareIdent("display_name_tokens", filtering.TypeString),
184184
DeclareSearchNgramsFunction(),
185185
},
186186
expectedSQL: `(SEARCH_NGRAMS(display_name_tokens, @param_0, ` +
@@ -196,10 +196,10 @@ func TestTranspileFilter(t *testing.T) {
196196

197197
{
198198
name: "searchNgrams: 5-arg skip language_tag",
199-
filter: `searchNgrams(display_name, "abc", "", 3, 0.0)`,
199+
filter: `searchNgrams(display_name_tokens, "abc", "", 3, 0.0)`,
200200
declarations: []filtering.DeclarationOption{
201201
filtering.DeclareStandardFunctions(),
202-
filtering.DeclareIdent("display_name", filtering.TypeString),
202+
filtering.DeclareIdent("display_name_tokens", filtering.TypeString),
203203
DeclareSearchNgramsFunction(),
204204
},
205205
expectedSQL: `(SEARCH_NGRAMS(display_name_tokens, @param_0, min_ngrams => @param_1))`,
@@ -211,10 +211,10 @@ func TestTranspileFilter(t *testing.T) {
211211

212212
{
213213
name: "searchNgrams: 5-arg skip all optional",
214-
filter: `searchNgrams(display_name, "abc", "", 0, 0.0)`,
214+
filter: `searchNgrams(display_name_tokens, "abc", "", 0, 0.0)`,
215215
declarations: []filtering.DeclarationOption{
216216
filtering.DeclareStandardFunctions(),
217-
filtering.DeclareIdent("display_name", filtering.TypeString),
217+
filtering.DeclareIdent("display_name_tokens", filtering.TypeString),
218218
DeclareSearchNgramsFunction(),
219219
},
220220
expectedSQL: `(SEARCH_NGRAMS(display_name_tokens, @param_0))`,
@@ -225,10 +225,10 @@ func TestTranspileFilter(t *testing.T) {
225225

226226
{
227227
name: "searchNgrams: combined with AND",
228-
filter: `searchNgrams(display_name, "abc") AND author = "Karin Boye"`,
228+
filter: `searchNgrams(display_name_tokens, "abc") AND author = "Karin Boye"`,
229229
declarations: []filtering.DeclarationOption{
230230
filtering.DeclareStandardFunctions(),
231-
filtering.DeclareIdent("display_name", filtering.TypeString),
231+
filtering.DeclareIdent("display_name_tokens", filtering.TypeString),
232232
filtering.DeclareIdent("author", filtering.TypeString),
233233
DeclareSearchNgramsFunction(),
234234
},

spanfiltering/transpiler.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ import (
1616
// FunctionSearchNgrams is the function name for SEARCH_NGRAMS in filter expressions.
1717
const FunctionSearchNgrams = "searchNgrams"
1818

19-
const (
20-
tokenColumnSuffix = "_tokens"
21-
)
22-
2319
// DeclareSearchNgramsFunction declares the searchNgrams function for use in filter expressions.
2420
// It declares two overloads:
2521
// - 2-arg: searchNgrams(column, query) — required params only
@@ -400,12 +396,12 @@ func (t *Transpiler) transpileSearchNgramsCallExpr(e *expr.Expr) (spansql.BoolEx
400396
callExpr.GetFunction(), len(args),
401397
)
402398
}
403-
// Arg 0: column identifier → append _tokens suffix.
399+
// Arg 0: column identifier
404400
identExpr := args[0].GetIdentExpr()
405401
if identExpr == nil {
406402
return nil, fmt.Errorf("first argument to %s must be an identifier", callExpr.GetFunction())
407403
}
408-
tokenColumn := spansql.ID(identExpr.GetName() + tokenColumnSuffix)
404+
tokenColumn := spansql.ID(identExpr.GetName())
409405
// Arg 1: ngrams_query string, must be at least 2 characters.
410406
queryConst := args[1].GetConstExpr()
411407
if queryConst == nil {

0 commit comments

Comments
 (0)