@Override public IScalarEvaluatorFactory[] next() { IScalarEvaluatorFactory[] scalarEvaluatorFactories = new IScalarEvaluatorFactory[argSize]; for (int j = 0; j < argSize; ++j) { int base = (int) Math.pow(ATypeTag.values().length, j); // Enumerates through all possible type tags. byte serializedTypeTag = (byte) ((index / base) % ATypeTag.values().length); scalarEvaluatorFactories[j] = new ConstantEvalFactory(new byte[] { serializedTypeTag }); } ++index; return scalarEvaluatorFactories; }
private Iterator<IScalarEvaluatorFactory[]> getArgCombinations(final int inputArity) { final int argSize = inputArity >= 0 ? inputArity : 3; final int numCombinations = (int) Math.pow(ATypeTag.values().length, argSize); return new Iterator<IScalarEvaluatorFactory[]>() { private int index = 0; @Override public boolean hasNext() { return index < numCombinations; } @Override public IScalarEvaluatorFactory[] next() { IScalarEvaluatorFactory[] scalarEvaluatorFactories = new IScalarEvaluatorFactory[argSize]; for (int j = 0; j < argSize; ++j) { int base = (int) Math.pow(ATypeTag.values().length, j); // Enumerates through all possible type tags. byte serializedTypeTag = (byte) ((index / base) % ATypeTag.values().length); scalarEvaluatorFactories[j] = new ConstantEvalFactory(new byte[] { serializedTypeTag }); } ++index; return scalarEvaluatorFactories; } }; }
@Override public void readFromFuncArgs(List<Mutable<ILogicalExpression>> funcArgs) { super.readFromFuncArgs(funcArgs); int index = super.getNumParams(); // Read search modifier type. int searchModifierOrdinal = AccessMethodUtils.getInt32Constant(funcArgs.get(index + SEARCH_MODIFIER_INDEX)); searchModifierType = SearchModifierType.values()[searchModifierOrdinal]; // Read similarity threshold. Concrete type depends on search modifier. similarityThreshold = ((ConstantExpression) funcArgs.get(index + SIM_THRESHOLD_INDEX).getValue()).getValue(); // Read type of search key. int typeTagOrdinal = AccessMethodUtils.getInt32Constant(funcArgs.get(index + SEARCH_KEY_TYPE_INDEX)); searchKeyType = ATypeTag.values()[typeTagOrdinal]; // Read full-text search information. isFullTextSearchQuery = AccessMethodUtils.getBooleanConstant(funcArgs.get(index + IS_FULLTEXT_SEARCH_INDEX)); // Read key var list. keyVarList = new ArrayList<>(); readVarList(funcArgs, index + KEY_VAR_INDEX, keyVarList); // TODO: We could possibly simplify things if we did read the non-key var list here. // We don't need to read the non-key var list. nonKeyVarList = null; }