@Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter || child instanceof BuiltInFunctionTupleFilter) { columnContainerFilter = child; colPosition = methodParams.size(); methodParams.add(null); } else if (child instanceof ConstantTupleFilter) { this.constantTupleFilter = (ConstantTupleFilter) child; Serializable constVal = (Serializable) child.getValues().iterator().next(); try { constantPosition = methodParams.size(); Class<?> clazz = Primitives.wrap(method.getParameterTypes()[methodParams.size()]); if (!Primitives.isWrapperType(clazz)) methodParams.add(constVal); else methodParams.add((Serializable) clazz .cast(clazz.getDeclaredMethod("valueOf", String.class).invoke(null, constVal))); } catch (Exception e) { logger.warn("Reflection failed for methodParams. ", e); isValidFunc = false; } } super.addChild(child); }
@Override public boolean isEvaluable() { return (column != null || (function != null && function.isEvaluable())) // && (!conditionValues.isEmpty() || operator == FilterOperatorEnum.ISNOTNULL || operator == FilterOperatorEnum.ISNULL) // && secondColumn == null; }
public Object invokeFunction(Object input) throws InvocationTargetException, IllegalAccessException { if (columnContainerFilter instanceof ColumnTupleFilter) methodParams.set(colPosition, input); else if (columnContainerFilter instanceof FunctionTupleFilter) methodParams.set(colPosition, ((FunctionTupleFilter) columnContainerFilter).invokeFunction(input)); return method.invoke(null, (Object[]) (methodParams.toArray())); }
public TblColRef getColumn() { if (columnContainerFilter == null) return null; if (columnContainerFilter instanceof ColumnTupleFilter) return ((ColumnTupleFilter) columnContainerFilter).getColumn(); else if (columnContainerFilter instanceof FunctionTupleFilter) return ((FunctionTupleFilter) columnContainerFilter).getColumn(); throw new UnsupportedOperationException("Wrong type TupleFilter in FunctionTupleFilter."); }
@Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter) { super.addChild(child); ColumnTupleFilter columnFilter = (ColumnTupleFilter) child; if (this.column != null) { throw new IllegalStateException("Duplicate columns! old is " + column.getName() + " and new is " + columnFilter.getColumn().getName()); } this.column = columnFilter.getColumn(); } else if (child instanceof ConstantTupleFilter) { // super.addChild(child) is omitted because the filter table name is useless at storage side, // we'll extract the useful filterTableResourceIdentifier,filterTableType etc and save it at the MassInTupleFilter itself if (filterTableName == null) { filterTableName = (String) child.getValues().iterator().next(); ExternalFilterDesc externalFilterDesc = TableMetadataManager.getInstance(KylinConfig.getInstanceFromEnv()).getExtFilterDesc(filterTableName); if (externalFilterDesc == null) { throw new IllegalArgumentException("External filter named " + filterTableName + " is not found"); } filterTableType = externalFilterDesc.getFilterTableType(); filterTableResourceIdentifier = externalFilterDesc.getFilterResourceIdentifier(); } } else { throw new IllegalStateException("MassInTupleFilter only has two children: one ColumnTupleFilter and one ConstantTupleFilter"); } }
@Override public boolean isEvaluable() { return (column != null || (function != null && function.isEvaluable())) // && (!conditionValues.isEmpty() || operator == FilterOperatorEnum.ISNOTNULL || operator == FilterOperatorEnum.ISNULL) // && secondColumn == null; }
@Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter || child instanceof BuiltInFunctionTupleFilter) { columnContainerFilter = child; colPosition = methodParams.size(); methodParams.add(null); } else if (child instanceof ConstantTupleFilter) { this.constantTupleFilter = (ConstantTupleFilter) child; Serializable constVal = (Serializable) child.getValues().iterator().next(); try { constantPosition = methodParams.size(); Class<?> clazz = Primitives.wrap(method.getParameterTypes()[methodParams.size()]); if (!Primitives.isWrapperType(clazz)) methodParams.add(constVal); else methodParams.add((Serializable) clazz .cast(clazz.getDeclaredMethod("valueOf", String.class).invoke(null, constVal))); } catch (Exception e) { logger.warn("Reflection failed for methodParams. ", e); isValidFunc = false; } } super.addChild(child); }
@Override public void addChild(TupleFilter child) { if (child instanceof ColumnTupleFilter) { super.addChild(child); ColumnTupleFilter columnFilter = (ColumnTupleFilter) child; if (this.column != null) { throw new IllegalStateException("Duplicate columns! old is " + column.getName() + " and new is " + columnFilter.getColumn().getName()); } this.column = columnFilter.getColumn(); } else if (child instanceof ConstantTupleFilter) { // super.addChild(child) is omitted because the filter table name is useless at storage side, // we'll extract the useful filterTableResourceIdentifier,filterTableType etc and save it at the MassInTupleFilter itself if (filterTableName == null) { filterTableName = (String) child.getValues().iterator().next(); ExternalFilterDesc externalFilterDesc = TableMetadataManager.getInstance(KylinConfig.getInstanceFromEnv()).getExtFilterDesc(filterTableName); if (externalFilterDesc == null) { throw new IllegalArgumentException("External filter named " + filterTableName + " is not found"); } filterTableType = externalFilterDesc.getFilterTableType(); filterTableResourceIdentifier = externalFilterDesc.getFilterResourceIdentifier(); } } else { throw new IllegalStateException("MassInTupleFilter only has two children: one ColumnTupleFilter and one ConstantTupleFilter"); } }