mirror of
https://github.com/neilotoole/sq.git
synced 2024-12-24 00:22:57 +03:00
111 lines
2.5 KiB
Go
111 lines
2.5 KiB
Go
package libsq_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/neilotoole/sq/libsq/core/sqlz"
|
|
"github.com/neilotoole/sq/libsq/source"
|
|
"github.com/neilotoole/sq/testh"
|
|
"github.com/neilotoole/sq/testh/sakila"
|
|
)
|
|
|
|
// TestQuerySQL_Smoke is a smoke test of testh.QuerySQL.
|
|
func TestQuerySQL_Smoke(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
wantActorFieldTypes := []reflect.Type{
|
|
sqlz.RTypeInt64P,
|
|
sqlz.RTypeStringP,
|
|
sqlz.RTypeStringP,
|
|
sqlz.RTypeTimeP,
|
|
}
|
|
|
|
testCases := []struct {
|
|
handle string
|
|
fieldTypes []reflect.Type
|
|
}{
|
|
{
|
|
handle: sakila.SL3,
|
|
fieldTypes: wantActorFieldTypes,
|
|
},
|
|
{
|
|
handle: sakila.My,
|
|
fieldTypes: wantActorFieldTypes,
|
|
},
|
|
{
|
|
handle: sakila.Pg,
|
|
fieldTypes: wantActorFieldTypes,
|
|
},
|
|
{
|
|
handle: sakila.MS,
|
|
fieldTypes: wantActorFieldTypes,
|
|
},
|
|
{
|
|
handle: sakila.CSVActor,
|
|
fieldTypes: []reflect.Type{
|
|
// FIXME: change to wantActorFieldTypes when CSV driver detects field types automagically
|
|
sqlz.RTypeInt64P,
|
|
sqlz.RTypeStringP,
|
|
sqlz.RTypeStringP,
|
|
sqlz.RTypeStringP,
|
|
},
|
|
},
|
|
{
|
|
handle: sakila.XLSX,
|
|
fieldTypes: wantActorFieldTypes,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
tc := tc
|
|
t.Run(tc.handle, func(t *testing.T) {
|
|
testh.SkipShort(t, tc.handle == sakila.XLSX)
|
|
t.Parallel()
|
|
|
|
th := testh.New(t)
|
|
src := th.Source(tc.handle)
|
|
|
|
tblName := sakila.TblActor
|
|
if th.IsMonotable(src) {
|
|
tblName = source.MonotableName
|
|
}
|
|
|
|
sink, err := th.QuerySQL(src, "SELECT * FROM "+tblName)
|
|
require.NoError(t, err)
|
|
require.Equal(t, sakila.TblActorCount, len(sink.Recs))
|
|
require.Equal(t, len(tc.fieldTypes), len(sink.Recs[0]))
|
|
for i := range sink.Recs[0] {
|
|
require.Equal(t, tc.fieldTypes[i], reflect.TypeOf(sink.Recs[0][i]),
|
|
"expected field[%d] to have type %s but got %s", i, tc.fieldTypes[i], reflect.TypeOf(sink.Recs[0][i]))
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestQuerySQL_Count(t *testing.T) {
|
|
testCases := sakila.SQLAll()
|
|
for _, handle := range testCases {
|
|
handle := handle
|
|
|
|
t.Run(handle, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
th := testh.New(t)
|
|
src := th.Source(handle)
|
|
|
|
sink, err := th.QuerySQL(src, "SELECT * FROM "+sakila.TblActor)
|
|
require.NoError(t, err)
|
|
require.Equal(t, sakila.TblActorCount, len(sink.Recs))
|
|
|
|
sink, err = th.QuerySQL(src, "SELECT COUNT(*) FROM "+sakila.TblActor)
|
|
require.NoError(t, err)
|
|
count, ok := sink.Recs[0][0].(*int64)
|
|
require.True(t, ok)
|
|
require.Equal(t, int64(sakila.TblActorCount), *count)
|
|
})
|
|
}
|
|
}
|