@@ -808,34 +808,35 @@ substrait::Rel *DuckDBToSubstrait::TransformTopN(LogicalOperator &dop) {
808
808
}
809
809
810
810
substrait::Rel *DuckDBToSubstrait::TransformLimit (LogicalOperator &dop) {
811
- auto &dlimit = (LogicalLimit &)dop;
812
- auto res = new substrait::Rel ();
813
- auto stopn = res->mutable_fetch ();
814
- stopn->set_allocated_input (TransformOp (*dop.children [0 ]));
815
-
816
- idx_t limit_val;
817
- idx_t offset_val;
818
-
811
+ auto &dlimit = dop.Cast <LogicalLimit>();
812
+ // figure out limit and offset of this node
813
+ int32_t limit_val;
814
+ int32_t offset_val;
819
815
switch (dlimit.limit_val .Type ()) {
820
816
case LimitNodeType::CONSTANT_VALUE:
821
- limit_val = dlimit.limit_val .GetConstantValue ();
817
+ limit_val = static_cast < int32_t >( dlimit.limit_val .GetConstantValue () );
822
818
break ;
823
819
case LimitNodeType::UNSET:
824
- limit_val = 2ULL << 62ULL ;
820
+ limit_val = - 1 ;
825
821
break ;
826
822
default :
827
823
throw InternalException (" Unsupported limit value type" );
828
824
}
829
825
switch (dlimit.offset_val .Type ()) {
830
826
case LimitNodeType::CONSTANT_VALUE:
831
- offset_val = dlimit.offset_val .GetConstantValue ();
827
+ offset_val = static_cast < int32_t >( dlimit.offset_val .GetConstantValue () );
832
828
break ;
833
829
case LimitNodeType::UNSET:
834
830
offset_val = 0 ;
835
831
break ;
836
832
default :
837
833
throw InternalException (" Unsupported offset value type" );
838
834
}
835
+
836
+ auto res = new substrait::Rel ();
837
+ auto stopn = res->mutable_fetch ();
838
+ stopn->set_allocated_input (TransformOp (*dop.children [0 ]));
839
+
839
840
stopn->set_offset (offset_val);
840
841
stopn->set_count (limit_val);
841
842
return res;
@@ -1190,7 +1191,7 @@ substrait::Rel *DuckDBToSubstrait::TransformDummyScan() {
1190
1191
1191
1192
substrait::Rel *DuckDBToSubstrait::TransformGet (LogicalOperator &dop) {
1192
1193
auto get_rel = new substrait::Rel ();
1193
- auto &dget = ( LogicalGet &)dop ;
1194
+ auto &dget = dop. Cast < LogicalGet>() ;
1194
1195
1195
1196
if (!dget.function .get_bind_info ) {
1196
1197
throw NotImplementedException (" This Scanner Type can't be used in substrait because a get bind info "
@@ -1205,8 +1206,8 @@ substrait::Rel *DuckDBToSubstrait::TransformGet(LogicalOperator &dop) {
1205
1206
CreateConjunction (dget.table_filters .filters , [&](std::pair<const idx_t , unique_ptr<TableFilter>> &in) {
1206
1207
auto col_idx = in.first ;
1207
1208
auto return_type = dget.returned_types [col_idx];
1208
- auto &filter = *in.second ;
1209
- return TransformFilter (col_idx, return_type, filter , return_type);
1209
+ auto &inside_filter = *in.second ;
1210
+ return TransformFilter (col_idx, return_type, inside_filter , return_type);
1210
1211
});
1211
1212
sget->set_allocated_filter (filter);
1212
1213
}
0 commit comments