@Override public IVariableTypeEnvironment computeOutputTypeEnvironment(ITypingContext ctx) throws AlgebricksException { IVariableTypeEnvironment env = new NonPropagatingTypeEnvironment(ctx.getExpressionTypeComputer(), ctx.getMetadataProvider()); IVariableTypeEnvironment envLeft = ctx.getOutputTypeEnvironment(inputs.get(0).getValue()); IVariableTypeEnvironment envRight = ctx.getOutputTypeEnvironment(inputs.get(1).getValue()); if (envLeft == null) { throw new AlgebricksException("Left input types for union operator are not computed."); } for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> t : varMap) { Object typeFromLeft = getType(envLeft, t.first); Object typeFromRight = getType(envRight, t.second); if (typeFromLeft.equals(typeFromRight)) { env.setVarType(t.third, typeFromLeft); } else { env.setVarType(t.third, ctx.getConflictingTypeResolver().resolve(typeFromLeft, typeFromRight)); } } return env; }