@SuppressWarnings({ "unchecked", "rawtypes" })
private <T> CollectionExpressionBase<?,T> union(Operator<Object> op, List<? extends SubQueryExpression<?>> sq) {
Expression<?> rv = sq.get(0);
if (sq.size() == 1 && !CollectionExpression.class.isInstance(rv)) {
return new ListSubQuery(rv.getType(), sq.get(0).getMetadata());
} else {
Class<?> elementType = sq.get(0).getType();
if (rv instanceof CollectionExpression) {
elementType = ((CollectionExpression)rv).getParameter(0);
}