Netflix / iceberg

Iceberg is a table format for large, slow-moving tabular data
Apache License 2.0
478 stars 60 forks source link

Replace Literals with Stateless Functions #98

Open omervk opened 5 years ago

omervk commented 5 years ago

Literals are currently only used for two purposes:

  1. Type-safe casts
  2. Type-safe comparators

They are not usually needed together and whenever one is needed, a new Literal is instantiated. In a tight loop, this isn't optimal.

These could be replaced by a couple of functions (mock code):

static <From, To> Function<From, To> convert(from: Class<From>, to: Class<To>)
static <T> Comparator<T> convert(clazz: Class<T>)

These functions could be cached and lookup could be via a hashtable at O(1).

This would also have another benefit of removing a type from the domain model, simplifying UnboundPredicate and BoundPredicate's signatures.