2727#include < arrow/array.h>
2828#include < arrow/util/config.h>
2929#include < gandiva/selection_vector.h>
30+ #include < array>
3031#include < cassert>
3132#include < fmt/format.h>
3233#include < gsl/span>
@@ -282,17 +283,17 @@ consteval auto filterForKey()
282283 };
283284
284285// / Compile-time function to extract version from table signature string "DESC/#"
285- static inline constexpr int version (const char * const str)
286+ static inline constexpr uint32_t version (const char * const str)
286287{
287288 if (str[0 ] == ' \0 ' ) {
288289 return 0 ;
289290 }
290291 size_t len = 0 ;
291- int res = 0 ;
292- while (len < 16 && str[len] != ' / ' ) {
292+ uint32_t res = 0 ;
293+ while (str[ len] != ' / ' && str[len] != ' \0 ' ) {
293294 ++len;
294295 }
295- if (len > 16 ) {
296+ if (str[ len - 1 ] == ' \0 ' ) {
296297 return -1 ;
297298 }
298299 for (auto i = len + 1 ; str[i] != ' \0 ' ; ++i) {
@@ -1656,6 +1657,20 @@ consteval auto getColumns()
16561657 return typename aod::MetadataTrait<o2::aod::Hash<ref.desc_hash >>::metadata::columns{};
16571658}
16581659
1660+ template <TableRef ref, typename ... Ts>
1661+ requires ((sizeof ...(Ts) == 0 ) || (o2::soa::is_column<Ts> && ...))
1662+ consteval auto computeOriginals ()
1663+ {
1664+ return std::array<TableRef, 1 >{ref};
1665+ }
1666+
1667+ template <TableRef ref, typename ... Ts>
1668+ requires ((sizeof ...(Ts) > 0 ) && (!o2::soa::is_column<Ts> || ...))
1669+ consteval auto computeOriginals ()
1670+ {
1671+ return o2::soa::mergeOriginals<Ts...>();
1672+ }
1673+
16591674// / A Table class which observes an arrow::Table and provides
16601675// / It is templated on a set of Column / DynamicColumn types.
16611676template <aod::is_aod_hash L, aod::is_aod_hash D, aod::is_origin_hash O, typename ... Ts>
@@ -1666,14 +1681,7 @@ class Table
16661681 using self_t = Table<L, D, O, Ts...>;
16671682 using table_t = self_t ;
16681683
1669- static constexpr const auto originals = framework::overloaded{
1670- []<typename ... TTs>
1671- requires ((sizeof ...(TTs) == 0 ) || (o2::soa::is_column<TTs> && ...))
1672- (framework::pack<TTs...>) { return std::array<TableRef, 1 >{ref}; },
1673- []<typename ... TTs>
1674- requires ((sizeof ...(TTs) > 0 ) && (!o2::soa::is_column<TTs> || ...))
1675- (framework::pack<TTs...>) { return o2::soa::mergeOriginals<TTs...>(); }}
1676- .operator ()(framework::pack<Ts...>{});
1684+ static constexpr const auto originals = computeOriginals<ref, Ts...>();
16771685
16781686 template <size_t N, std::array<TableRef, N> bindings>
16791687 requires (ref.origin_hash == " CONC" _h)
0 commit comments