Translator(DruidTable druidTable, RelDataType rowType, String timeZone) { this.druidTable = druidTable; this.rowType = rowType; for (RelDataTypeField f : rowType.getFieldList()) { final String fieldName = f.getName(); if (druidTable.isMetric(fieldName)) { metrics.add(fieldName); } else if (!druidTable.timestampFieldName.equals(fieldName) && !DruidTable.DEFAULT_TIMESTAMP_COLUMN.equals(fieldName)) { dimensions.add(fieldName); } } this.timeZone = timeZone; this.dateFormatter = new SimpleDateFormat(TimeExtractionFunction.ISO_TIME_FORMAT, Locale.ROOT); if (timeZone != null) { this.dateFormatter.setTimeZone(TimeZone.getTimeZone(timeZone)); } }
/** Checks whether any of the references leads to a metric column. */ private static boolean checkAggregateOnMetric(ImmutableBitSet set, RelNode topProject, DruidQuery query) { if (topProject instanceof Project) { ImmutableBitSet.Builder newSet = ImmutableBitSet.builder(); final Project project = (Project) topProject; for (int index : set) { RexNode node = project.getProjects().get(index); ImmutableBitSet setOfBits = RelOptUtil.InputFinder.bits(node); newSet.addAll(setOfBits); } set = newSet.build(); } for (int index : set) { if (query.druidTable.isMetric(query.getTopNode().getRowType().getFieldNames().get(index))) { return true; } } return false; }