mirror of
https://github.com/pikami/cosmium.git
synced 2026-06-10 06:18:09 +01:00
c3726a6633
* Fix ARRAY_CONTAINS panic when partial match arg is omitted The NoSQL parser always emits a third (nil) argument for the optional partial-match flag of ARRAY_CONTAINS. The executor checked only len(arguments) > 2 before type-asserting arguments[2] to parsers.SelectItem, which panicked on the nil value whenever the query omitted the partial-match argument (e.g. ARRAY_CONTAINS(c.arr, 2)). Guard the type assertion with a nil check and add an API test covering ARRAY_CONTAINS with and without the optional partial-match argument. Co-authored-by: Pijus Kamandulis <pikami@users.noreply.github.com> * Remove comments from ARRAY_CONTAINS API test Co-authored-by: Pijus Kamandulis <pikami@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package tests_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
|
|
)
|
|
|
|
func Test_Documents_ArrayContains(t *testing.T) {
|
|
presets := []testPreset{PresetJsonStore, PresetBadgerStore}
|
|
|
|
runTestsWithPresets(t, "Test_Documents_ArrayContains", presets, func(t *testing.T, ts *TestServer, client *azcosmos.Client) {
|
|
collectionClient := documents_InitializeDb(t, ts)
|
|
|
|
t.Run("Should execute ARRAY_CONTAINS() without partial match argument", func(t *testing.T) {
|
|
testCosmosQuery(t, collectionClient,
|
|
`SELECT VALUE ARRAY_CONTAINS(["apple", "banana", "cherry"], "banana") FROM c ORDER BY c.id`,
|
|
nil,
|
|
[]interface{}{true, true},
|
|
)
|
|
})
|
|
|
|
t.Run("Should execute ARRAY_CONTAINS() returning false for missing item", func(t *testing.T) {
|
|
testCosmosQuery(t, collectionClient,
|
|
`SELECT VALUE ARRAY_CONTAINS(["apple", "banana", "cherry"], "grape") FROM c ORDER BY c.id`,
|
|
nil,
|
|
[]interface{}{false, false},
|
|
)
|
|
})
|
|
|
|
t.Run("Should execute ARRAY_CONTAINS() with object full match", func(t *testing.T) {
|
|
testCosmosQuery(t, collectionClient,
|
|
`SELECT VALUE ARRAY_CONTAINS([{"name": "apple", "color": "red"}], {"name": "apple"}) FROM c ORDER BY c.id`,
|
|
nil,
|
|
[]interface{}{false, false},
|
|
)
|
|
})
|
|
|
|
t.Run("Should execute ARRAY_CONTAINS() with object partial match", func(t *testing.T) {
|
|
testCosmosQuery(t, collectionClient,
|
|
`SELECT VALUE ARRAY_CONTAINS([{"name": "apple", "color": "red"}], {"name": "apple"}, true) FROM c ORDER BY c.id`,
|
|
nil,
|
|
[]interface{}{true, true},
|
|
)
|
|
})
|
|
})
|
|
}
|