/* * validate and setup SymbolInfo */ private void validateAndSetupSymbolInfo( MatchPath evaluator, List<PTFExpressionDef> args, int argsNum) throws SemanticException { int symbolArgsSz = argsNum - 2; if (symbolArgsSz % 2 != 0) { throwErrorWithSignature( "Symbol Name, Expression need to be specified in pairs: " + "there are odd number of symbol args"); } evaluator.symInfo = new SymbolsInfo(symbolArgsSz / 2); for (int i = 1; i <= symbolArgsSz; i += 2) { PTFExpressionDef symbolNameArg = args.get(i); ObjectInspector symbolNameArgOI = symbolNameArg.getOI(); if (!ObjectInspectorUtils.isConstantObjectInspector(symbolNameArgOI) || (symbolNameArgOI.getCategory() != ObjectInspector.Category.PRIMITIVE) || ((PrimitiveObjectInspector) symbolNameArgOI).getPrimitiveCategory() != PrimitiveObjectInspector.PrimitiveCategory.STRING) { throwErrorWithSignature( String.format( "Currently a Symbol Name(%s) must be a Constant String", symbolNameArg.getExpressionTreeString())); } String symbolName = ((ConstantObjectInspector) symbolNameArgOI).getWritableConstantValue().toString(); PTFExpressionDef symolExprArg = args.get(i + 1); ObjectInspector symolExprArgOI = symolExprArg.getOI(); if ((symolExprArgOI.getCategory() != ObjectInspector.Category.PRIMITIVE) || ((PrimitiveObjectInspector) symolExprArgOI).getPrimitiveCategory() != PrimitiveObjectInspector.PrimitiveCategory.BOOLEAN) { throwErrorWithSignature( String.format( "Currently a Symbol Expression(%s) " + "must be a boolean expression", symolExprArg.getExpressionTreeString())); } evaluator.symInfo.add(symbolName, symolExprArg); } }