Github user wgtmac commented on the issue:
https://github.com/apache/orc/pull/120
On Java side, ColumnStatistics and [Type]ColumnStatistics are very simple
interfaces with minimum getter functions. It is the duty of
ColumnStatisticsImpl class to define/implement most common interfaces and act
as the base class in most writer implementations. Other
[Type]ColumnStatisticsImpls just extend ColumnStatisticsImpl and implement
[Type]ColumnStatistics to add their own logic to remove duplicate code.
However, on C++ side, ColumnStatisticsImpl and [Type]ColumnStatisticsImpl have
no inheritance relation like Java side. We cannot simply make
[Type]ColumnStatisticsImpl inherit ColumnStatisticsImpl as it may introduce
virtual inheritance issue because they have a common base class. Templates do
not solve this issue as there is still no base class defining all common
interfaces. In this case, we can expect that we need to use dynamic_cast almost
everywhere if we want to use ColumnStatistcis abstraction; otherwise, we need
to bind each [Type]ColumnStatistics to [Type]ColumnWr
iter leading to another place with huge amount of duplicate code.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---