mirror of
https://github.com/pocketbase/pocketbase.git
synced 2026-03-27 02:32:11 -04:00
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package search_test
|
|
|
|
import (
|
|
"bytes"
|
|
"database/sql"
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/tools/search"
|
|
)
|
|
|
|
func TestMultiMatchSubqueryBuild(t *testing.T) {
|
|
// create a dummy db
|
|
sqlDB, err := sql.Open("sqlite", "file::memory:?cache=shared")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
db := dbx.NewFromDB(sqlDB, "sqlite")
|
|
|
|
mm := search.MultiMatchSubquery{
|
|
TargetTableAlias: "test_TargetTableAlias",
|
|
FromTableName: "test_FromTableName",
|
|
FromTableAlias: "test_FromTableAlias",
|
|
ValueIdentifier: "({:mm},{:external})",
|
|
Joins: []*search.Join{
|
|
{TableName: "join_table1", TableAlias: "join_alias1"},
|
|
{TableName: "join_table2", TableAlias: "join_alias2", On: dbx.NewExp("123={:join}", dbx.Params{"join": "test_join"})},
|
|
},
|
|
Params: dbx.Params{"mm": "test_mm"},
|
|
}
|
|
|
|
params := dbx.Params{"external": "test_external"}
|
|
|
|
result := mm.Build(db, params)
|
|
|
|
expectedResult := "SELECT ({:mm},{:external}) as [[multiMatchValue]] FROM `test_FromTableName` `test_FromTableAlias` LEFT JOIN `join_table1` `join_alias1` LEFT JOIN `join_table2` `join_alias2` ON 123={:join} WHERE `test_FromTableAlias`.`id` = `test_TargetTableAlias`.`id`"
|
|
if expectedResult != result {
|
|
t.Fatalf("Expected build result\n%v\ngot\n%v", expectedResult, result)
|
|
}
|
|
|
|
// the params from all expressions should be merged in the root
|
|
rawParams, err := json.Marshal(params)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectedParams := []byte(`{"external":"test_external","join":"test_join","mm":"test_mm"}`)
|
|
if !bytes.Equal(rawParams, expectedParams) {
|
|
t.Fatalf("Expected final params\n%s\ngot\n%s", expectedParams, rawParams)
|
|
}
|
|
}
|