paimon::Predicate objects created in one shared library (e.g. libpaimon.so) can fail to dynamic_cast / dynamic_pointer_cast to their derived types (LeafPredicate, CompoundPredicate, PredicateFilter) when the cast is performed in a different DSO — for example inside a format plugin such as libpaimon_parquet_file_format.so / libpaimon_orc_file_format.so / third party plugins.
The cast returns nullptr even though the runtime type is correct, which silently breaks predicate handling (e.g. predicate pushdown in PredicateConverter)
paimon::Predicate objects created in one shared library (e.g. libpaimon.so) can fail to dynamic_cast / dynamic_pointer_cast to their derived types (LeafPredicate, CompoundPredicate, PredicateFilter) when the cast is performed in a different DSO — for example inside a format plugin such as libpaimon_parquet_file_format.so / libpaimon_orc_file_format.so / third party plugins.
The cast returns nullptr even though the runtime type is correct, which silently breaks predicate handling (e.g. predicate pushdown in PredicateConverter)