@@ -42,11 +42,11 @@ class Table;
4242class Array ;
4343} // namespace arrow
4444
45- template < typename T>
46- struct BulkInfo {
47- const T ptr ;
48- size_t size ;
49- } ;
45+ extern template class arrow ::NumericBuilder<arrow::UInt8Type>;
46+ extern template class arrow ::NumericBuilder<arrow::UInt32Type>;
47+ extern template class arrow ::NumericBuilder<arrow::FloatType> ;
48+ extern template class arrow ::NumericBuilder<arrow::Int32Type> ;
49+ extern template class arrow ::NumericBuilder<arrow::Int8Type> ;
5050
5151extern template class arrow ::NumericBuilder<arrow::UInt8Type>;
5252extern template class arrow ::NumericBuilder<arrow::UInt32Type>;
@@ -200,34 +200,6 @@ struct BuilderUtils {
200200 }
201201 }
202202
203- template <typename HolderType, typename PTR>
204- static arrow::Status bulkAppend (HolderType& holder, size_t bulkSize, const PTR ptr)
205- {
206- return holder.builder ->AppendValues (ptr, bulkSize, nullptr );
207- }
208-
209- template <typename HolderType, typename PTR>
210- static arrow::Status bulkAppendChunked (HolderType& holder, BulkInfo<PTR> info)
211- {
212- // Appending nullptr is a no-op.
213- if (info.ptr == nullptr ) {
214- return arrow::Status::OK ();
215- }
216- if constexpr (std::is_same_v<decltype (holder.builder ), std::unique_ptr<arrow::FixedSizeListBuilder>>) {
217- if (appendToList<std::remove_pointer_t <decltype (info.ptr )>>(holder.builder , info.ptr , info.size ).ok () == false ) {
218- throw runtime_error (" Unable to append to column" );
219- } else {
220- return arrow::Status::OK ();
221- }
222- } else {
223- if (holder.builder ->AppendValues (info.ptr , info.size , nullptr ).ok () == false ) {
224- throw runtime_error (" Unable to append to column" );
225- } else {
226- return arrow::Status::OK ();
227- }
228- }
229- }
230-
231203 template <typename HolderType, typename ITERATOR>
232204 static arrow::Status append (HolderType& holder, std::pair<ITERATOR, ITERATOR> ip)
233205 {
@@ -518,14 +490,6 @@ struct TableBuilderHelpers {
518490 return {BuilderTraits<ARGS>::make_datatype ()...};
519491 }
520492
521- template <typename ... ARGS, size_t NCOLUMNS = sizeof ...(ARGS)>
522- static std::vector<std::shared_ptr<arrow::Field>> makeFields (std::array<char const *, NCOLUMNS> const & names)
523- {
524- char const * const * names_ptr = names.data ();
525- return {
526- std::make_shared<arrow::Field>(*names_ptr++, BuilderMaker<ARGS>::make_datatype (), true , nullptr )...};
527- }
528-
529493 // / Invokes the append method for each entry in the tuple
530494 template <typename ... Ts, typename VALUES>
531495 static bool append (std::tuple<Ts...>& holders, VALUES&& values)
@@ -542,19 +506,6 @@ struct TableBuilderHelpers {
542506 (BuilderUtils::unsafeAppend (std::get<Ts::index>(holders), std::get<Ts::index>(values)), ...);
543507 }
544508
545- template <typename ... Ts, typename PTRS>
546- static bool bulkAppend (std::tuple<Ts...>& holders, size_t bulkSize, PTRS ptrs)
547- {
548- return (BuilderUtils::bulkAppend (std::get<Ts::index>(holders), bulkSize, std::get<Ts::index>(ptrs)).ok () && ...);
549- }
550-
551- // / Return true if all columns are done.
552- template <typename ... Ts, typename INFOS>
553- static bool bulkAppendChunked (std::tuple<Ts...>& holders, INFOS infos)
554- {
555- return (BuilderUtils::bulkAppendChunked (std::get<Ts::index>(holders), std::get<Ts::index>(infos)).ok () && ...);
556- }
557-
558509 // / Invokes the append method for each entry in the tuple
559510 template <typename ... Ts>
560511 static bool finalize (std::vector<std::shared_ptr<arrow::Array>>& arrays, std::tuple<Ts...>& holders)
@@ -575,15 +526,9 @@ constexpr auto tuple_to_pack(std::tuple<ARGS...>&&)
575526 return framework::pack<ARGS...>{};
576527}
577528
578- template <typename T>
579- concept BulkInsertable = (std::integral<std::decay<T>> && !std::same_as<bool , std::decay_t <T>>);
580-
581529template <typename T>
582530struct InsertionTrait {
583- static consteval DirectInsertion<T> policy ()
584- requires(!BulkInsertable<T>);
585- static consteval CachedInsertion<T> policy ()
586- requires(BulkInsertable<T>);
531+ static consteval DirectInsertion<T> policy ();
587532 using Policy = decltype (policy());
588533};
589534
@@ -658,7 +603,9 @@ class TableBuilder
658603 template <typename ... ARGS, size_t I = sizeof ...(ARGS)>
659604 auto makeBuilders (std::array<char const *, I> const & columnNames, size_t nRows)
660605 {
661- mSchema = std::make_shared<arrow::Schema>(TableBuilderHelpers::makeFields<ARGS...>(columnNames));
606+ char const * const * names_ptr = columnNames.data ();
607+ mSchema = std::make_shared<arrow::Schema>(
608+ std::vector<std::shared_ptr<arrow::Field>>({std::make_shared<arrow::Field>(*names_ptr++, BuilderMaker<ARGS>::make_datatype (), true , nullptr )...}));
662609
663610 mHolders = makeHolders<ARGS...>(mMemoryPool , nRows);
664611 mFinalizer = [](std::vector<std::shared_ptr<arrow::Array>>& arrays, void * holders) -> bool {
@@ -768,45 +715,6 @@ class TableBuilder
768715 }(typename T::table_t ::persistent_columns_t {});
769716 }
770717
771- template <typename ... ARGS, size_t NCOLUMNS = sizeof ...(ARGS)>
772- auto preallocatedPersist (std::array<char const *, NCOLUMNS> const & columnNames, int nRows)
773- {
774- constexpr size_t nColumns = NCOLUMNS;
775- validate ();
776- mArrays .resize (nColumns);
777- makeBuilders<ARGS...>(columnNames, nRows);
778-
779- // Callback used to fill the builders
780- return [holders = mHolders ](unsigned int /* slot*/ , typename BuilderMaker<ARGS>::FillType... args) -> void {
781- TableBuilderHelpers::unsafeAppend (*(HoldersTupleIndexed<ARGS...>*)holders, std::forward_as_tuple (args...));
782- };
783- }
784-
785- template <typename ... ARGS, size_t NCOLUMNS = sizeof ...(ARGS)>
786- auto bulkPersist (std::array<char const *, NCOLUMNS> const & columnNames, size_t nRows)
787- {
788- validate ();
789- // Should not be called more than once
790- mArrays .resize (NCOLUMNS);
791- makeBuilders<ARGS...>(columnNames, nRows);
792-
793- return [holders = mHolders ](unsigned int /* slot*/ , size_t batchSize, typename BuilderMaker<ARGS>::FillType const *... args) -> void {
794- TableBuilderHelpers::bulkAppend (*(HoldersTupleIndexed<ARGS...>*)holders, batchSize, std::forward_as_tuple (args...));
795- };
796- }
797-
798- template <typename ... ARGS, size_t NCOLUMNS = sizeof ...(ARGS)>
799- auto bulkPersistChunked (std::array<char const *, NCOLUMNS> const & columnNames, size_t nRows)
800- {
801- validate ();
802- mArrays .resize (NCOLUMNS);
803- makeBuilders<ARGS...>(columnNames, nRows);
804-
805- return [holders = mHolders ](unsigned int /* slot*/ , BulkInfo<typename BuilderMaker<ARGS>::STLValueType const *>... args) -> bool {
806- return TableBuilderHelpers::bulkAppendChunked (*(HoldersTupleIndexed<ARGS...>*)holders, std::forward_as_tuple (args...));
807- };
808- }
809-
810718 // / Reserve method to expand the columns as needed.
811719 template <typename ... Ts>
812720 auto reserveArrays (std::tuple<Ts...>& holders, int s)
0 commit comments