/** * Return the "natural" {@link StringComparator} for an extraction from this row signature. This will be a * lexicographic comparator for String types and a numeric comparator for Number types. * * @param simpleExtraction extraction from this kind of row * * @return natural comparator */ @Nonnull public StringComparator naturalStringComparator(final SimpleExtraction simpleExtraction) { Preconditions.checkNotNull(simpleExtraction, "simpleExtraction"); if (simpleExtraction.getExtractionFn() != null || getColumnType(simpleExtraction.getColumn()) == ValueType.STRING) { return StringComparators.LEXICOGRAPHIC; } else { return StringComparators.NUMERIC; } }
public static DruidExpression fromColumn(final String column) { return new DruidExpression(SimpleExtraction.of(column, null), StringUtils.format("\"%s\"", escape(column))); }
public static SimpleExtraction of(String column, ExtractionFn extractionFn) { return new SimpleExtraction(column, extractionFn); }
public String getDirectColumn() { return Preconditions.checkNotNull(simpleExtraction.getColumn()); }
public boolean isDirectColumnAccess() { return simpleExtraction != null && simpleExtraction.getExtractionFn() == null; }
simpleExtraction -> simpleExtraction.cascade(new SubstringDimExtractionFn(index, length < 0 ? null : length)), expression -> StringUtils.format( "substring(%s, %s, %s)",
public DimensionSpec toDimensionSpec() { if (expression.isSimpleExtraction()) { return expression.getSimpleExtraction().toDimensionSpec(outputName, outputType); } else { return new DefaultDimensionSpec(getVirtualColumnName(), getOutputName(), outputType); } }
public String getDirectColumn() { return Preconditions.checkNotNull(simpleExtraction.getColumn()); }
public boolean isDirectColumnAccess() { return simpleExtraction != null && simpleExtraction.getExtractionFn() == null; }
return arg.getSimpleExtraction().cascade( new RegexDimExtractionFn( (String) patternExpr.getLiteralValue(),
dimensionSpec = arg.getSimpleExtraction().toDimensionSpec(null, inputType); } else { final ExpressionVirtualColumn virtualColumn = arg.toVirtualColumn(
@Nullable @Override public DimFilter toDruidFilter( PlannerContext plannerContext, RowSignature rowSignature, RexNode rexNode ) { final List<RexNode> operands = ((RexCall) rexNode).getOperands(); final DruidExpression druidExpression = Expressions.toDruidExpression( plannerContext, rowSignature, operands.get(0) ); if (druidExpression == null || !druidExpression.isSimpleExtraction()) { return null; } return new LikeDimFilter( druidExpression.getSimpleExtraction().getColumn(), RexLiteral.stringValue(operands.get(1)), operands.size() > 2 ? RexLiteral.stringValue(operands.get(2)) : null, druidExpression.getSimpleExtraction().getExtractionFn() ); } }
selector, sourceRowSignature.naturalStringComparator( SimpleExtraction.of(selector.getDimension(), selector.getExtractionFn())
return arg.getSimpleExtraction().cascade( new RegisteredLookupExtractionFn( lookupReferencesManager,
public SimpleExtraction cascade(final ExtractionFn nextExtractionFn) { return new SimpleExtraction( column, ExtractionFns.cascade(extractionFn, Preconditions.checkNotNull(nextExtractionFn, "nextExtractionFn")) ); }
public DimensionSpec toDimensionSpec() { if (expression.isSimpleExtraction()) { return expression.getSimpleExtraction().toDimensionSpec(outputName, outputType); } else { return new DefaultDimensionSpec(getVirtualColumnName(), getOutputName(), outputType); } }
druidExpression.getSimpleExtraction().getColumn(), holder, druidExpression.getSimpleExtraction().getExtractionFn() ); } else {
@Override public DimFilter process(DimFilter filter) { if (filter instanceof BoundDimFilter) { final BoundDimFilter bound = (BoundDimFilter) filter; final StringComparator naturalStringComparator = sourceRowSignature.naturalStringComparator( SimpleExtraction.of(bound.getDimension(), bound.getExtractionFn()) ); if (bound.hasUpperBound() && bound.hasLowerBound() && bound.getUpper().equals(bound.getLower()) && !bound.isUpperStrict() && !bound.isLowerStrict() && bound.getOrdering().equals(naturalStringComparator)) { return new SelectorDimFilter( bound.getDimension(), bound.getUpper(), bound.getExtractionFn() ); } else { return filter; } } else { return filter; } } }
simpleExtraction -> simpleExtraction.cascade(new SubstringDimExtractionFn(index, length < 0 ? null : length)), expression -> StringUtils.format( "substring(%s, %s, %s)",
public static SimpleExtraction of(String column, ExtractionFn extractionFn) { return new SimpleExtraction(column, extractionFn); }