193 lines
5.5 KiB
Go
193 lines
5.5 KiB
Go
package tdb
|
|
|
|
import (
|
|
"testing"
|
|
// "encoding/ascii85"
|
|
// "log"
|
|
// "reflect"
|
|
// "strconv"
|
|
// "git.keganmyers.com/terribleplan/tdb/stringy"
|
|
// bolt "go.etcd.io/bbolt"
|
|
// "github.com/golang/protobuf/proto"
|
|
)
|
|
|
|
func TestSimpleQuery(t *testing.T) {
|
|
setupTestDb()
|
|
defer cleanupTestDb()
|
|
|
|
guarantee := randomString(16)
|
|
id := tdb.TEST_Main.CreateOrPanic(&TEST_Main{Guarantee: guarantee})
|
|
|
|
items, err := tdb.TEST_Main.Query().
|
|
Where("Id", "=", id).
|
|
Run()
|
|
if assertNilEnd(t, err, "Unable to run query") {
|
|
return
|
|
}
|
|
|
|
if assertEqualEnd(t, len(items), 1, "Wrong number of results") {
|
|
return
|
|
}
|
|
|
|
tmi, ok := items[0].(*TEST_Main)
|
|
if assertOkEnd(t, ok, "Unable to cast returned to *TEST_Main") {
|
|
return
|
|
}
|
|
|
|
assertEqual(t, tmi.Guarantee, guarantee, "Mismatched guarantee strings")
|
|
}
|
|
|
|
func TestSimpleQueryAmongstMany(t *testing.T) {
|
|
setupTestDb()
|
|
defer cleanupTestDb()
|
|
|
|
guarantee := randomString(16)
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
// id: 6
|
|
id := tdb.TEST_Main.CreateOrPanic(&TEST_Main{Guarantee: guarantee})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
|
|
items, err := tdb.TEST_Main.Query().
|
|
Where("Id", "=", id).
|
|
Run()
|
|
if assertNilEnd(t, err, "Unable to run query") {
|
|
return
|
|
}
|
|
|
|
if assertEqualEnd(t, len(items), 1, "Wrong number of results") {
|
|
return
|
|
}
|
|
|
|
tmi, ok := items[0].(*TEST_Main)
|
|
if assertOkEnd(t, ok, "Unable to cast returned to *TEST_Main") {
|
|
return
|
|
}
|
|
|
|
assertEqual(t, tmi.Guarantee, guarantee, "Mismatched guarantee strings")
|
|
}
|
|
|
|
func TestForeignQuery(t *testing.T) {
|
|
setupTestDb()
|
|
defer cleanupTestDb()
|
|
|
|
mid1 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
mid2 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
id1 := tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
id3 := tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
|
|
q := tdb.TEST_OwnedBy.Query().
|
|
Where("MainId", "=", mid1)
|
|
|
|
items, err := q.Run()
|
|
if assertNilEnd(t, err, "Unable to run query") {
|
|
return
|
|
}
|
|
|
|
if assertEqualEnd(t, len(items), 2, "Wrong number of results") {
|
|
return
|
|
}
|
|
|
|
for _, item := range items {
|
|
tmi, ok := item.(*TEST_OwnedBy)
|
|
if assertOkEnd(t, ok, "Unable to cast returned item to *TEST_OwnedBy") {
|
|
continue
|
|
}
|
|
|
|
assertEqual(t, tmi.MainId, mid1, "Got result with bad MainId")
|
|
|
|
if tmi.Id != id1 && tmi.Id != id3 {
|
|
t.Errorf("Got result with bad Id: got %d, expected %d or %d", tmi.Id, id1, id3)
|
|
}
|
|
}
|
|
|
|
qd := q.(*queryData)
|
|
assertUint64Equal(t, qd.sr, 2, "Scanned incorrect number of records")
|
|
}
|
|
|
|
func EmptyIndexQuery(t *testing.T) {
|
|
setupTestDb()
|
|
defer cleanupTestDb()
|
|
|
|
mid1 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
mid2 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
|
|
q := tdb.TEST_OwnedBy.Query().
|
|
Where("MainId", "=", mid1)
|
|
|
|
items, err := q.Run()
|
|
if assertNilEnd(t, err, "Unable to run query") {
|
|
return
|
|
}
|
|
|
|
if assertEqualEnd(t, len(items), 0, "Wrong number of results") {
|
|
return
|
|
}
|
|
|
|
qd := q.(*queryData)
|
|
assertUint64Equal(t, qd.sr, 0, "Scanned incorrect number of records")
|
|
}
|
|
|
|
func TestComplexQueryAmongstMany(t *testing.T) {
|
|
setupTestDb()
|
|
defer cleanupTestDb()
|
|
|
|
guarantee := randomString(16)
|
|
mid1 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
mid2 := tdb.TEST_Main.CreateOrPanic(&TEST_Main{})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
id := tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2, Guarantee: guarantee})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid1})
|
|
tdb.TEST_OwnedBy.CreateOrPanic(&TEST_OwnedBy{MainId: mid2})
|
|
|
|
q := tdb.TEST_OwnedBy.Query().
|
|
Where("MainId", "=", mid2). // indexed, speeds query
|
|
Where("Guarantee", "=", guarantee) // non-indexed, filters during index scan
|
|
|
|
items, err := q.Run()
|
|
if assertNilEnd(t, err, "Unable to run query") {
|
|
return
|
|
}
|
|
|
|
if assertEqualEnd(t, len(items), 1, "Wrong number of results") {
|
|
return
|
|
}
|
|
|
|
tobi, ok := items[0].(*TEST_OwnedBy)
|
|
if assertOkEnd(t, ok, "Unable to cast returned to *TEST_OwnedBy") {
|
|
return
|
|
}
|
|
|
|
assertEqual(t, tobi.Id, id, "Mismatched IDs")
|
|
assertEqual(t, tobi.Guarantee, guarantee, "Mismatched guarantee strings")
|
|
|
|
qd := q.(*queryData)
|
|
assertUint64Equal(t, qd.sr, 6, "Scanned incorrect number of records")
|
|
}
|