} finally { for (VectorExpression ve : children) { ocm.freeOutputColumn(ve.getOutputColumn());
ocm.freeOutputColumn(ve.getOutputColumnNum());
} finally { for (VectorExpression ve : children) { ocm.freeOutputColumn(ve.getOutputColumn());
private VectorExpression getCastToBoolean(List<ExprNodeDesc> childExpr) throws HiveException { ExprNodeDesc child = childExpr.get(0); String inputType = childExpr.get(0).getTypeString(); if (child instanceof ExprNodeConstantDesc) { if (null == ((ExprNodeConstantDesc)child).getValue()) { return getConstantVectorExpression(null, TypeInfoFactory.booleanTypeInfo, Mode.PROJECTION); } // Don't do constant folding here. Wait until the optimizer is changed to do it. // Family of related JIRAs: HIVE-7421, HIVE-7422, and HIVE-7424. return null; } // Long and double are handled using descriptors, string needs to be specially handled. if (isStringFamily(inputType)) { // string casts to false if it is 0 characters long, otherwise true VectorExpression lenExpr = createVectorExpression(StringLength.class, childExpr, Mode.PROJECTION, null); int outputCol = ocm.allocateOutputColumn("Long"); VectorExpression lenToBoolExpr = new CastLongToBooleanViaLongToLong(lenExpr.getOutputColumn(), outputCol); lenToBoolExpr.setChildExpressions(new VectorExpression[] {lenExpr}); ocm.freeOutputColumn(lenExpr.getOutputColumn()); return lenToBoolExpr; } // cast(booleanExpr as boolean) case is omitted because planner removes it as a no-op return null; }
private VectorExpression getCoalesceExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType) throws HiveException { int[] inputColumns = new int[childExpr.size()]; VectorExpression[] vectorChildren = null; try { vectorChildren = getVectorExpressions(childExpr, Mode.PROJECTION); int i = 0; for (VectorExpression ve : vectorChildren) { inputColumns[i++] = ve.getOutputColumn(); } int outColumn = ocm.allocateOutputColumn(returnType.getTypeName()); VectorCoalesce vectorCoalesce = new VectorCoalesce(inputColumns, outColumn); vectorCoalesce.setOutputType(returnType.getTypeName()); vectorCoalesce.setChildExpressions(vectorChildren); return vectorCoalesce; } finally { // Free the output columns of the child expressions. if (vectorChildren != null) { for (VectorExpression v : vectorChildren) { ocm.freeOutputColumn(v.getOutputColumn()); } } } }
private VectorExpression getEltExpression(List<ExprNodeDesc> childExpr, TypeInfo returnType) throws HiveException { int[] inputColumns = new int[childExpr.size()]; VectorExpression[] vectorChildren = null; try { vectorChildren = getVectorExpressions(childExpr, Mode.PROJECTION); int i = 0; for (VectorExpression ve : vectorChildren) { inputColumns[i++] = ve.getOutputColumn(); } int outColumn = ocm.allocateOutputColumn(returnType.getTypeName()); VectorElt vectorElt = new VectorElt(inputColumns, outColumn); vectorElt.setOutputType(returnType.getTypeName()); vectorElt.setChildExpressions(vectorChildren); return vectorElt; } finally { // Free the output columns of the child expressions. if (vectorChildren != null) { for (VectorExpression v : vectorChildren) { ocm.freeOutputColumn(v.getOutputColumn()); } } } }
private VectorExpression getCastToBoolean(List<ExprNodeDesc> childExpr) throws HiveException { ExprNodeDesc child = childExpr.get(0); String inputType = childExpr.get(0).getTypeString(); if (child instanceof ExprNodeConstantDesc) { if (null == ((ExprNodeConstantDesc)child).getValue()) { return getConstantVectorExpression(null, TypeInfoFactory.booleanTypeInfo, VectorExpressionDescriptor.Mode.PROJECTION); } // Don't do constant folding here. Wait until the optimizer is changed to do it. // Family of related JIRAs: HIVE-7421, HIVE-7422, and HIVE-7424. return null; } // Long and double are handled using descriptors, string needs to be specially handled. if (isStringFamily(inputType)) { // string casts to false if it is 0 characters long, otherwise true VectorExpression lenExpr = createVectorExpression(StringLength.class, childExpr, VectorExpressionDescriptor.Mode.PROJECTION, null); int outputCol = ocm.allocateOutputColumn(TypeInfoFactory.longTypeInfo); VectorExpression lenToBoolExpr = new CastLongToBooleanViaLongToLong(lenExpr.getOutputColumn(), outputCol); lenToBoolExpr.setChildExpressions(new VectorExpression[] {lenExpr}); ocm.freeOutputColumn(lenExpr.getOutputColumn()); return lenToBoolExpr; } return null; }
private void freeNonColumns(VectorExpression[] vectorChildren) { if (vectorChildren == null) { return; } for (VectorExpression v : vectorChildren) { if (!(v instanceof IdentityExpression)) { ocm.freeOutputColumn(v.getOutputColumn()); } } }
private void freeNonColumns(VectorExpression[] vectorChildren) { if (vectorChildren == null) { return; } for (VectorExpression v : vectorChildren) { if (!(v instanceof IdentityExpression)) { ocm.freeOutputColumn(v.getOutputColumnNum()); } } }