6
6
7
7
package org .opensearch .sql .analysis ;
8
8
9
+ import static org .opensearch .sql .analysis .DataSourceSchemaIdentifierNameResolver .DEFAULT_DATASOURCE_NAME ;
9
10
import static org .opensearch .sql .ast .tree .Sort .NullOrder .NULL_FIRST ;
10
11
import static org .opensearch .sql .ast .tree .Sort .NullOrder .NULL_LAST ;
11
12
import static org .opensearch .sql .ast .tree .Sort .SortOrder .ASC ;
42
43
import org .opensearch .sql .ast .expression .UnresolvedExpression ;
43
44
import org .opensearch .sql .ast .tree .AD ;
44
45
import org .opensearch .sql .ast .tree .Aggregation ;
46
+ import org .opensearch .sql .ast .tree .CloseCursor ;
45
47
import org .opensearch .sql .ast .tree .Dedupe ;
46
48
import org .opensearch .sql .ast .tree .Eval ;
49
+ import org .opensearch .sql .ast .tree .FetchCursor ;
47
50
import org .opensearch .sql .ast .tree .Filter ;
48
51
import org .opensearch .sql .ast .tree .Head ;
49
52
import org .opensearch .sql .ast .tree .Kmeans ;
50
53
import org .opensearch .sql .ast .tree .Limit ;
51
54
import org .opensearch .sql .ast .tree .ML ;
55
+ import org .opensearch .sql .ast .tree .Paginate ;
52
56
import org .opensearch .sql .ast .tree .Parse ;
53
57
import org .opensearch .sql .ast .tree .Project ;
54
58
import org .opensearch .sql .ast .tree .RareTopN ;
80
84
import org .opensearch .sql .expression .parse .ParseExpression ;
81
85
import org .opensearch .sql .planner .logical .LogicalAD ;
82
86
import org .opensearch .sql .planner .logical .LogicalAggregation ;
87
+ import org .opensearch .sql .planner .logical .LogicalCloseCursor ;
83
88
import org .opensearch .sql .planner .logical .LogicalDedupe ;
84
89
import org .opensearch .sql .planner .logical .LogicalEval ;
90
+ import org .opensearch .sql .planner .logical .LogicalFetchCursor ;
85
91
import org .opensearch .sql .planner .logical .LogicalFilter ;
86
92
import org .opensearch .sql .planner .logical .LogicalLimit ;
87
93
import org .opensearch .sql .planner .logical .LogicalML ;
88
94
import org .opensearch .sql .planner .logical .LogicalMLCommons ;
95
+ import org .opensearch .sql .planner .logical .LogicalPaginate ;
89
96
import org .opensearch .sql .planner .logical .LogicalPlan ;
90
97
import org .opensearch .sql .planner .logical .LogicalProject ;
91
98
import org .opensearch .sql .planner .logical .LogicalRareTopN ;
@@ -208,7 +215,6 @@ public LogicalPlan visitTableFunction(TableFunction node, AnalysisContext contex
208
215
tableFunctionImplementation .applyArguments ());
209
216
}
210
217
211
-
212
218
@ Override
213
219
public LogicalPlan visitLimit (Limit node , AnalysisContext context ) {
214
220
LogicalPlan child = node .getChild ().get (0 ).accept (this , context );
@@ -561,6 +567,23 @@ public LogicalPlan visitML(ML node, AnalysisContext context) {
561
567
return new LogicalML (child , node .getArguments ());
562
568
}
563
569
570
+ @ Override
571
+ public LogicalPlan visitPaginate (Paginate paginate , AnalysisContext context ) {
572
+ LogicalPlan child = paginate .getChild ().get (0 ).accept (this , context );
573
+ return new LogicalPaginate (paginate .getPageSize (), List .of (child ));
574
+ }
575
+
576
+ @ Override
577
+ public LogicalPlan visitFetchCursor (FetchCursor cursor , AnalysisContext context ) {
578
+ return new LogicalFetchCursor (cursor .getCursor (),
579
+ dataSourceService .getDataSource (DEFAULT_DATASOURCE_NAME ).getStorageEngine ());
580
+ }
581
+
582
+ @ Override
583
+ public LogicalPlan visitCloseCursor (CloseCursor closeCursor , AnalysisContext context ) {
584
+ return new LogicalCloseCursor (closeCursor .getChild ().get (0 ).accept (this , context ));
585
+ }
586
+
564
587
/**
565
588
* The first argument is always "asc", others are optional.
566
589
* Given nullFirst argument, use its value. Otherwise just use DEFAULT_ASC/DESC.
@@ -576,5 +599,4 @@ private SortOption analyzeSortOption(List<Argument> fieldArgs) {
576
599
}
577
600
return asc ? SortOption .DEFAULT_ASC : SortOption .DEFAULT_DESC ;
578
601
}
579
-
580
602
}
0 commit comments