@@ -4616,6 +4616,10 @@ func TestOrderBy(t *testing.T) {
46164616 directions : []int {1 , - 1 },
46174617 positionalRefs : []int {4 , 5 },
46184618 },
4619+ {
4620+ exps : []string {"weight/(height*height)" },
4621+ directions : []int {1 },
4622+ },
46194623 }
46204624
46214625 runTest := func (t * testing.T , test * test , expectedTempFiles int ) []* Row {
@@ -9552,6 +9556,40 @@ func TestFunctions(t *testing.T) {
95529556 })
95539557}
95549558
9559+ func TestTableResolver (t * testing.T ) {
9560+ st , err := store .Open (t .TempDir (), store .DefaultOptions ().WithMultiIndexing (true ))
9561+ require .NoError (t , err )
9562+ defer closeStore (t , st )
9563+
9564+ r := & mockTableResolver {
9565+ name : "my_table" ,
9566+ cols : []ColDescriptor {
9567+ {Column : "varchar_col" , Type : VarcharType },
9568+ {Column : "int_col" , Type : IntegerType },
9569+ {Column : "bool_col" , Type : BooleanType },
9570+ },
9571+ values : [][]ValueExp {{NewVarchar ("test" ), NewInteger (1 ), NewBool (true )}},
9572+ }
9573+
9574+ engine , err := NewEngine (
9575+ st ,
9576+ DefaultOptions ().
9577+ WithPrefix (sqlPrefix ).
9578+ WithTableResolvers (r ),
9579+ )
9580+ require .NoError (t , err )
9581+
9582+ assertQueryShouldProduceResults (
9583+ t ,
9584+ engine ,
9585+ "SELECT int_col, varchar_col, bool_col FROM my_table" ,
9586+ `SELECT * FROM (
9587+ VALUES
9588+ (1, 'test', true)
9589+ )` ,
9590+ )
9591+ }
9592+
95559593func assertQueryShouldProduceResults (t * testing.T , e * Engine , query , resultQuery string ) {
95569594 queryReader , err := e .Query (context .Background (), nil , query , nil )
95579595 require .NoError (t , err )
@@ -9572,3 +9610,24 @@ func assertQueryShouldProduceResults(t *testing.T, e *Engine, query, resultQuery
95729610 require .Equal (t , expectedRow .ValuesByPosition , actualRow .ValuesByPosition )
95739611 }
95749612}
9613+
9614+ type mockTableResolver struct {
9615+ name string
9616+ cols []ColDescriptor
9617+ values [][]ValueExp
9618+ }
9619+
9620+ func (r * mockTableResolver ) Table () string {
9621+ return r .name
9622+ }
9623+
9624+ func (r * mockTableResolver ) Resolve (ctx context.Context , tx * SQLTx , alias string ) (RowReader , error ) {
9625+ return NewValuesRowReader (
9626+ tx ,
9627+ nil ,
9628+ r .cols ,
9629+ false ,
9630+ r .name ,
9631+ r .values ,
9632+ )
9633+ }
0 commit comments