@@ -36,7 +36,7 @@ func TestPushdownProjectionAndFilters(t *testing.T) {
3636
3737 node := plan .NewProject (
3838 []sql.Expression {
39- expression .NewGetFieldWithTable (0 , sql .Int32 , "mytable " , "i " , false ),
39+ expression .NewGetFieldWithTable (2 , sql .Text , "mytable2 " , "t2 " , false ),
4040 },
4141 plan .NewFilter (
4242 expression .NewAnd (
@@ -57,7 +57,7 @@ func TestPushdownProjectionAndFilters(t *testing.T) {
5757
5858 expected := plan .NewProject (
5959 []sql.Expression {
60- expression .NewGetFieldWithTable (0 , sql .Int32 , "mytable " , "i " , false ),
60+ expression .NewGetFieldWithTable (1 , sql .Text , "mytable2 " , "t2 " , false ),
6161 },
6262 plan .NewCrossJoin (
6363 plan .NewResolvedTable (
@@ -66,21 +66,71 @@ func TestPushdownProjectionAndFilters(t *testing.T) {
6666 expression .NewGetFieldWithTable (1 , sql .Float64 , "mytable" , "f" , false ),
6767 expression .NewLiteral (3.14 , sql .Float64 ),
6868 ),
69- }).(* memory.Table ).WithProjection ([]string {"i" , " f" }),
69+ }).(* memory.Table ).WithProjection ([]string {"f" }),
7070 ),
7171 plan .NewResolvedTable (
7272 table2 .WithFilters ([]sql.Expression {
7373 expression .NewIsNull (
7474 expression .NewGetFieldWithTable (0 , sql .Int32 , "mytable2" , "i2" , false ),
7575 ),
76- }).(* memory.Table ).WithProjection ([]string {"i2" }),
76+ }).(* memory.Table ).WithProjection ([]string {"t2" , " i2" }),
7777 ),
7878 ),
7979 )
8080
8181 result , err := f .Apply (sql .NewEmptyContext (), a , node )
8282 require .NoError (err )
8383 require .Equal (expected , result )
84+
85+ node = plan .NewProject (
86+ []sql.Expression {
87+ expression .NewGetFieldWithTable (2 , sql .Text , "mytable2" , "t2" , false ),
88+ },
89+ plan .NewFilter (
90+ expression .NewOr (
91+ expression .NewEquals (
92+ expression .NewGetFieldWithTable (1 , sql .Float64 , "mytable" , "f" , false ),
93+ expression .NewLiteral (3.14 , sql .Float64 ),
94+ ),
95+ expression .NewIsNull (
96+ expression .NewGetFieldWithTable (0 , sql .Int32 , "mytable2" , "i2" , false ),
97+ ),
98+ ),
99+ plan .NewCrossJoin (
100+ plan .NewResolvedTable (table ),
101+ plan .NewResolvedTable (table2 ),
102+ ),
103+ ),
104+ )
105+
106+ expected = plan .NewProject (
107+ []sql.Expression {
108+ expression .NewGetFieldWithTable (1 , sql .Text , "mytable2" , "t2" , false ),
109+ },
110+ plan .NewFilter (
111+ expression .NewOr (
112+ expression .NewEquals (
113+ expression .NewGetFieldWithTable (0 , sql .Float64 , "mytable" , "f" , false ),
114+ expression .NewLiteral (3.14 , sql .Float64 ),
115+ ),
116+ expression .NewIsNull (
117+ expression .NewGetFieldWithTable (2 , sql .Int32 , "mytable2" , "i2" , false ),
118+ ),
119+ ),
120+ plan .NewCrossJoin (
121+ plan .NewResolvedTable (
122+ table .WithProjection ([]string {"f" }),
123+ ),
124+ plan .NewResolvedTable (
125+ table2 .WithProjection ([]string {"t2" , "i2" }),
126+ ),
127+ ),
128+ ),
129+ )
130+
131+ result , err = f .Apply (sql .NewEmptyContext (), a , node )
132+ require .NoError (err )
133+ require .Equal (expected , result )
84134}
85135
86136func TestPushdownIndexable (t * testing.T ) {
0 commit comments