5757import org .opensearch .sql .ast .expression .Alias ;
5858import org .opensearch .sql .ast .expression .Argument ;
5959import org .opensearch .sql .ast .expression .DataType ;
60+ import org .opensearch .sql .ast .expression .Field ;
6061import org .opensearch .sql .ast .expression .Literal ;
6162import org .opensearch .sql .ast .expression .RelevanceFieldList ;
6263import org .opensearch .sql .ast .expression .UnresolvedExpression ;
@@ -119,10 +120,10 @@ public void allow_query_with_select_fields_and_from() {
119120
120121 @ Test
121122 // select x
122- public void reject_query_without_from () {
123+ public void allow_query_without_from () {
123124 var plan = project (values (List .of (intLiteral (1 ))),
124125 alias ("1" , intLiteral (1 )));
125- assertFalse (plan .accept (visitor , null ));
126+ assertTrue (plan .accept (visitor , null ));
126127 }
127128
128129 @ Test
@@ -165,63 +166,63 @@ public List<? extends Node> getChild() {
165166 public void visitEqualTo () {
166167 var plan = project (values (List .of (intLiteral (1 ))),
167168 alias ("1" , equalTo (intLiteral (1 ), intLiteral (1 ))));
168- assertFalse (plan .accept (visitor , null ));
169+ assertTrue (plan .accept (visitor , null ));
169170 }
170171
171172 @ Test
172173 // select interval
173174 public void visitInterval () {
174175 var plan = project (values (List .of (intLiteral (1 ))),
175176 alias ("1" , intervalLiteral (intLiteral (1 ), DataType .INTEGER , "days" )));
176- assertFalse (plan .accept (visitor , null ));
177+ assertTrue (plan .accept (visitor , null ));
177178 }
178179
179180 @ Test
180181 // select a != b
181182 public void visitCompare () {
182183 var plan = project (values (List .of (intLiteral (1 ))),
183184 alias ("1" , compare ("!=" , intLiteral (1 ), intLiteral (1 ))));
184- assertFalse (plan .accept (visitor , null ));
185+ assertTrue (plan .accept (visitor , null ));
185186 }
186187
187188 @ Test
188189 // select NOT a
189190 public void visitNot () {
190191 var plan = project (values (List .of (intLiteral (1 ))),
191192 alias ("1" , not (booleanLiteral (true ))));
192- assertFalse (plan .accept (visitor , null ));
193+ assertTrue (plan .accept (visitor , null ));
193194 }
194195
195196 @ Test
196197 // select a OR b
197198 public void visitOr () {
198199 var plan = project (values (List .of (intLiteral (1 ))),
199200 alias ("1" , or (booleanLiteral (true ), booleanLiteral (false ))));
200- assertFalse (plan .accept (visitor , null ));
201+ assertTrue (plan .accept (visitor , null ));
201202 }
202203
203204 @ Test
204205 // select a AND b
205206 public void visitAnd () {
206207 var plan = project (values (List .of (intLiteral (1 ))),
207208 alias ("1" , and (booleanLiteral (true ), booleanLiteral (false ))));
208- assertFalse (plan .accept (visitor , null ));
209+ assertTrue (plan .accept (visitor , null ));
209210 }
210211
211212 @ Test
212213 // select a XOR b
213214 public void visitXor () {
214215 var plan = project (values (List .of (intLiteral (1 ))),
215216 alias ("1" , xor (booleanLiteral (true ), booleanLiteral (false ))));
216- assertFalse (plan .accept (visitor , null ));
217+ assertTrue (plan .accept (visitor , null ));
217218 }
218219
219220 @ Test
220221 // select f()
221222 public void visitFunction () {
222223 var plan = project (values (List .of (intLiteral (1 ))),
223224 function ("func" ));
224- assertFalse (plan .accept (visitor , null ));
225+ assertTrue (plan .accept (visitor , null ));
225226 }
226227
227228 @ Test
@@ -237,7 +238,7 @@ public void visitNested() {
237238 public void visitIn () {
238239 // test combinations of acceptable and not acceptable args for coverage
239240 assertAll (
240- () -> assertFalse (project (values (List .of (intLiteral (1 ))), alias ("1" , in (field ("a" ))))
241+ () -> assertTrue (project (values (List .of (intLiteral (1 ))), alias ("1" , in (field ("a" ))))
241242 .accept (visitor , null )),
242243 () -> assertFalse (project (values (List .of (intLiteral (1 ))),
243244 alias ("1" , in (field ("a" ), map ("1" , "2" ))))
@@ -253,23 +254,23 @@ public void visitIn() {
253254 public void visitBetween () {
254255 var plan = project (values (List .of (intLiteral (1 ))),
255256 alias ("1" , between (field ("a" ), intLiteral (1 ), intLiteral (2 ))));
256- assertFalse (plan .accept (visitor , null ));
257+ assertTrue (plan .accept (visitor , null ));
257258 }
258259
259260 @ Test
260261 // select a CASE 1 WHEN 2
261262 public void visitCase () {
262263 var plan = project (values (List .of (intLiteral (1 ))),
263264 alias ("1" , caseWhen (intLiteral (1 ), when (intLiteral (3 ), intLiteral (4 )))));
264- assertFalse (plan .accept (visitor , null ));
265+ assertTrue (plan .accept (visitor , null ));
265266 }
266267
267268 @ Test
268269 // select CAST(a as TYPE)
269270 public void visitCast () {
270271 // test combinations of acceptable and not acceptable args for coverage
271272 assertAll (
272- () -> assertFalse (project (values (List .of (intLiteral (1 ))),
273+ () -> assertTrue (project (values (List .of (intLiteral (1 ))),
273274 alias ("1" , cast (intLiteral (2 ), stringLiteral ("int" ))))
274275 .accept (visitor , null )),
275276 () -> assertFalse (project (values (List .of (intLiteral (1 ))),
@@ -323,8 +324,28 @@ public void accept_query_with_highlight_and_relevance_func() {
323324
324325 @ Test
325326 // select * from y limit z
326- public void reject_query_with_limit () {
327- var plan = project (limit (relation ("dummy" ), 1 , 2 ), allFields ());
327+ public void reject_query_with_limit_but_no_offset () {
328+ var plan = project (limit (relation ("dummy" ), 1 , 0 ), allFields ());
329+ assertFalse (plan .accept (visitor , null ));
330+ }
331+
332+ @ Test
333+ // select * from y limit z, n
334+ public void reject_query_with_offset () {
335+ var plan = project (limit (relation ("dummy" ), 0 , 1 ), allFields ());
336+ assertFalse (plan .accept (visitor , null ));
337+ }
338+
339+ // test added for coverage only
340+ @ Test
341+ public void visitLimit () {
342+ var visitor = new CanPaginateVisitor () {
343+ @ Override
344+ public Boolean visitRelation (Relation node , Object context ) {
345+ return Boolean .FALSE ;
346+ }
347+ };
348+ var plan = project (limit (relation ("dummy" ), 0 , 0 ), allFields ());
328349 assertFalse (plan .accept (visitor , null ));
329350 }
330351
@@ -338,12 +359,40 @@ public void allow_query_with_where() {
338359
339360 @ Test
340361 // select * from y order by z
341- public void reject_query_with_order_by () {
342- var plan = project (sort (relation ("dummy" ), field ("1" )),
362+ public void allow_query_with_order_by_with_column_references_only () {
363+ var plan = project (sort (relation ("dummy" ), field ("1" )), allFields ());
364+ assertTrue (plan .accept (visitor , null ));
365+ }
366+
367+ @ Test
368+ // select * from y order by func(z)
369+ public void reject_query_with_order_by_with_an_expression () {
370+ var plan = project (sort (relation ("dummy" ), field (function ("func" ))),
343371 allFields ());
344372 assertFalse (plan .accept (visitor , null ));
345373 }
346374
375+ // test added for coverage only
376+ @ Test
377+ public void visitSort () {
378+ CanPaginateVisitor visitor = new CanPaginateVisitor () {
379+ @ Override
380+ public Boolean visitRelation (Relation node , Object context ) {
381+ return Boolean .FALSE ;
382+ }
383+ };
384+ var plan = project (sort (relation ("dummy" ), field ("1" )), allFields ());
385+ assertFalse (plan .accept (visitor , null ));
386+ visitor = new CanPaginateVisitor () {
387+ @ Override
388+ public Boolean visitField (Field node , Object context ) {
389+ return Boolean .FALSE ;
390+ }
391+ };
392+ plan = project (sort (relation ("dummy" ), field ("1" )), allFields ());
393+ assertFalse (plan .accept (visitor , null ));
394+ }
395+
347396 @ Test
348397 // select * from y group by z
349398 public void reject_query_with_group_by () {
@@ -396,22 +445,6 @@ public void reject_project_when_relation_has_child() {
396445 assertFalse (visitor .visitProject ((Project ) plan , null ));
397446 }
398447
399- @ Test
400- // test combinations of acceptable and not acceptable args for coverage
401- public void canPaginate () {
402- assertAll (
403- () -> assertFalse (project (values (List .of (intLiteral (1 ))),
404- function ("func" , intLiteral (1 ), intLiteral (1 )))
405- .accept (visitor , null )),
406- () -> assertFalse (project (values (List .of (intLiteral (1 ))),
407- function ("func" , intLiteral (1 ), map ("1" , "2" )))
408- .accept (visitor , null )),
409- () -> assertFalse (project (values (List .of (intLiteral (1 ))),
410- function ("func" , map ("1" , "2" ), intLiteral (1 )))
411- .accept (visitor , null ))
412- );
413- }
414-
415448 @ Test
416449 // test combinations of acceptable and not acceptable args for coverage
417450 public void visitFilter () {
0 commit comments