@@ -49,24 +49,35 @@ class OtherBuilder : public VctrBuilder {
49
49
50
50
ArrowErrorCode PushNext (SEXP array_shelter, const ArrowArray* array,
51
51
ArrowError* error) override {
52
- // Fill this in
52
+ SEXP schema_borrowed_xptr = PROTECT (
53
+ R_MakeExternalPtr (const_cast <ArrowSchema*>(schema_), R_NilValue, R_NilValue));
54
+ Rf_setAttrib (schema_borrowed_xptr, R_ClassSymbol, nanoarrow_cls_schema);
55
+
56
+ SEXP array_borrowed_xptr = PROTECT (R_MakeExternalPtr (
57
+ const_cast <ArrowArray*>(array), schema_borrowed_xptr, array_shelter));
58
+ Rf_setAttrib (array_borrowed_xptr, R_ClassSymbol, nanoarrow_cls_array);
59
+
60
+ SEXP fun = PROTECT (Rf_install (" convert_fallback_other" ));
61
+ SEXP call =
62
+ PROTECT (Rf_lang5 (fun, array_borrowed_xptr, R_NilValue, R_NilValue, ptype_sexp_));
63
+ SEXP chunk_sexp = PROTECT (Rf_eval (call, nanoarrow_ns_pkg));
64
+ Append (chunk_sexp);
65
+ UNPROTECT (5 );
66
+
53
67
return NANOARROW_OK;
54
68
}
55
69
56
70
ArrowErrorCode Finish (ArrowError* error) override {
57
71
if (chunks_tail_ == chunks_sexp_) {
58
- Rprintf (" zero chunks\n " );
59
72
// Zero chunks (return the ptype)
60
73
// Probably need to ensure the ptype has zero elements
61
- SetValue (GetPtype () );
74
+ SetValue (ptype_sexp_ );
62
75
63
76
} else if (chunks_tail_ == CDR (chunks_sexp_)) {
64
- Rprintf (" one chunk\n " );
65
77
// One chunk (return the chunk)
66
78
SetValue (CAR (chunks_tail_));
67
79
68
80
} else {
69
- Rprintf (" many chunks\n " );
70
81
// Many chunks (concatenate or rbind)
71
82
SEXP fun;
72
83
if (Rf_inherits (ptype_sexp_, " data.frame" )) {
0 commit comments