public List<TblColRef> getColRefs() { if (allColRefsIncludingNexts == null) { List<TblColRef> all = new ArrayList<>(2); ParameterDesc p = this; while (p != null) { if (p.isColumnType()) all.add(p.getColRef()); p = p.nextParameter; } allColRefsIncludingNexts = all; } return allColRefsIncludingNexts; }
static Set<PlainParameter> createFromParameterDesc(ParameterDesc parameterDesc) { Set<PlainParameter> result = Sets.newHashSet(); ParameterDesc local = parameterDesc; while (local != null) { if (local.isColumnType()) { result.add(createSingleColumnParameter(local)); } else { result.add(createSingleValueParameter(local)); } local = local.nextParameter; } return result; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ParameterDesc that = (ParameterDesc) o; if (type != null ? !type.equals(that.type) : that.type != null) return false; ParameterDesc p = this, q = that; for (; p != null && q != null; p = p.nextParameter, q = q.nextParameter) { if (p.isColumnType()) { if (q.isColumnType() == false) return false; if (q.getColRef().equals(p.getColRef()) == false) return false; } else { if (q.isColumnType() == true) return false; if (p.value.equals(q.value) == false) return false; } } return p == null && q == null; }
private List<TblColRef> getTopNLiteralColumn(FunctionDesc functionDesc) { List<TblColRef> allColumns = functionDesc.getParameter().getColRefs(); if (functionDesc.getParameter().isColumnType() == false) { return allColumns; } return allColumns.subList(1, allColumns.size()); }
@Override public String toString() { String thisStr = isColumnType() ? colRef.toString() : value; return nextParameter == null ? thisStr : thisStr + "," + nextParameter.toString(); }
@Override public List<TblColRef> getColumnsNeedDictionary(FunctionDesc functionDesc) { List<TblColRef> columnsNeedDict = Lists.newArrayList(); List<TblColRef> allCols = functionDesc.getParameter().getColRefs(); int start = (functionDesc.getParameter().isColumnType() == true) ? 1 : 0; for (int i = start; i < allCols.size(); i++) { TblColRef tblColRef = allCols.get(i); String encoding = getEncoding(functionDesc, tblColRef).getFirst(); if (StringUtils.isEmpty(encoding) || DictionaryDimEnc.ENCODING_NAME.equals(encoding)) { columnsNeedDict.add(tblColRef); } } return columnsNeedDict; }
private TblColRef getTopNNumericColumn(FunctionDesc functionDesc) { if (functionDesc.getParameter().isColumnType() == true) { return functionDesc.getParameter().getColRefs().get(0); } return null; }
public void init(DataModelDesc model) { expression = expression.toUpperCase(Locale.ROOT); if (expression.equals(PercentileMeasureType.FUNC_PERCENTILE)) { expression = PercentileMeasureType.FUNC_PERCENTILE_APPROX; // for backward compatibility } returnDataType = DataType.getType(returnType); for (ParameterDesc p = parameter; p != null; p = p.getNextParameter()) { if (p.isColumnType()) { TblColRef colRef = model.findColumn(p.getValue()); p.setValue(colRef.getIdentity()); p.setColRef(colRef); } } }
public String[] buildValueOf(int idxOfMeasure, String[] row) { MeasureDesc measure = cubeDesc.getMeasures().get(idxOfMeasure); FunctionDesc function = measure.getFunction(); int[] colIdxOnFlatTable = flatDesc.getMeasureColumnIndexes()[idxOfMeasure]; int paramCount = function.getParameterCount(); List<String> inputToMeasure = Lists.newArrayListWithExpectedSize(paramCount); // pick up parameter values ParameterDesc param = function.getParameter(); int colParamIdx = 0; // index among parameters of column type for (int i = 0; i < paramCount; i++, param = param.getNextParameter()) { String value; if (function.isCount()) { value = "1"; } else if (param.isColumnType()) { value = getCell(colIdxOnFlatTable[colParamIdx++], row); } else { value = param.getValue(); } inputToMeasure.add(value); } return inputToMeasure.toArray(new String[inputToMeasure.size()]); } }
public DataType getRewriteFieldType() { if (getMeasureType() instanceof BasicMeasureType) { if (isMax() || isMin()) { return parameter.getColRefs().get(0).getType(); } else if (isSum()) { return parameter.isColumnType() ? DataType.getType(returnType) : DataType.getType("bigint"); } else if (isCount()) { return DataType.getType("bigint"); } else { throw new IllegalArgumentException("unknown measure type " + getMeasureType()); } } else { return DataType.ANY; } }
public void normalizeColumnValue() { if (isColumnType()) { String values[] = value.split("\\s*,\\s*"); for (int i = 0; i < values.length; i++) values[i] = values[i].toUpperCase(); Arrays.sort(values); value = StringUtils.join(",", values); } }
p.normalizeColumnValue(); if (p.isColumnType()) { ArrayList<TblColRef> colRefs = Lists.newArrayList(); for (String cName : p.getValue().split("\\s*,\\s*")) {
private void initMeasureColumns(Map<String, TableDesc> tables) { if (measures == null || measures.isEmpty()) { return; } TableDesc factTable = tables.get(getFactTable()); for (MeasureDesc m : measures) { m.setName(m.getName().toUpperCase()); if (m.getDependentMeasureRef() != null) { m.setDependentMeasureRef(m.getDependentMeasureRef().toUpperCase()); } FunctionDesc f = m.getFunction(); f.setExpression(f.getExpression().toUpperCase()); f.setReturnDataType(DataType.getInstance(f.getReturnType())); ParameterDesc p = f.getParameter(); p.normalizeColumnValue(); if (p.isColumnType()) { ArrayList<TblColRef> colRefs = Lists.newArrayList(); for (String cName : p.getValue().split("\\s*,\\s*")) { ColumnDesc sourceColumn = factTable.findColumnByName(cName); TblColRef colRef = new TblColRef(sourceColumn); colRefs.add(colRef); allColumns.add(colRef); } if (colRefs.isEmpty() == false) p.setColRefs(colRefs); } } }
public List<TblColRef> getColRefs() { if (allColRefsIncludingNexts == null) { List<TblColRef> all = new ArrayList<>(2); ParameterDesc p = this; while (p != null) { if (p.isColumnType()) all.add(p.getColRef()); p = p.nextParameter; } allColRefsIncludingNexts = all; } return allColRefsIncludingNexts; }
static Set<PlainParameter> createFromParameterDesc(ParameterDesc parameterDesc) { Set<PlainParameter> result = Sets.newHashSet(); ParameterDesc local = parameterDesc; while (local != null) { if (local.isColumnType()) { result.add(createSingleColumnParameter(local)); } else { result.add(createSingleValueParameter(local)); } local = local.nextParameter; } return result; }
private List<TblColRef> getTopNLiteralColumn(FunctionDesc functionDesc) { List<TblColRef> allColumns = functionDesc.getParameter().getColRefs(); if (functionDesc.getParameter().isColumnType() == false) { return allColumns; } return allColumns.subList(1, allColumns.size()); }
@Override public String toString() { String thisStr = isColumnType() ? colRef.toString() : value; return nextParameter == null ? thisStr : thisStr + "," + nextParameter.toString(); }
private TblColRef getTopNNumericColumn(FunctionDesc functionDesc) { if (functionDesc.getParameter().isColumnType() == true) { return functionDesc.getParameter().getColRefs().get(0); } return null; }
public void init(DataModelDesc model) { expression = expression.toUpperCase(Locale.ROOT); if (expression.equals(PercentileMeasureType.FUNC_PERCENTILE)) { expression = PercentileMeasureType.FUNC_PERCENTILE_APPROX; // for backward compatibility } returnDataType = DataType.getType(returnType); for (ParameterDesc p = parameter; p != null; p = p.getNextParameter()) { if (p.isColumnType()) { TblColRef colRef = model.findColumn(p.getValue()); p.setValue(colRef.getIdentity()); p.setColRef(colRef); } } }
public DataType getRewriteFieldType() { if (getMeasureType() instanceof BasicMeasureType) { if (isMax() || isMin()) { return parameter.getColRefs().get(0).getType(); } else if (isSum()) { return parameter.isColumnType() ? parameter.getColRefs().get(0).getType() : DataType.getType("bigint"); } else if (isCount()) { return DataType.getType("bigint"); } else { throw new IllegalArgumentException("unknown measure type " + getMeasureType()); } } else { return DataType.ANY; } }