if (target.isMarkedContainsOR()) {
if (debug.val)
LOG.warn("Trying to use multi-column partitioning [" + catalog_col.fullName() + "] on query that contains an 'OR': " + target);
table_partitions.addAll(this.all_partitions);
} else {
MultiColumn mc = (MultiColumn) catalog_col;
PartitionSet mc_partitions[] = this.mcPartitionSetPool.borrowObject();
if (trace.val)
LOG.trace("Calculating columns for multi-partition colunmn: " + mc);
boolean is_valid = true;
for (int i = 0, mc_cnt = mc.size(); i < mc_cnt; i++) {
Column mc_column = mc.get(i);
// assert(cache_entry.get(mc_column_key) != null) :
// "Null CacheEntry: " + mc_column_key;
if (target.predicates.containsKey(mc_column)) {
this.calculatePartitions(mc_partitions[i],
params,
target.is_array,
target.predicates.get(mc_column),
mc_column);
}
// Unless we have partition values for both keys,
// then it has to be a broadcast
if (mc_partitions[i].isEmpty()) {
if (debug.val)
LOG.warn(String.format("No partitions for %s from %s. " +
"Cache entry %s must be broadcast to all partitions",
mc_column.fullName(), mc.fullName(), target));
table_partitions.addAll(this.all_partitions);
is_valid = false;
break;
}
if (trace.val)