@Override public <RT> RT uniqueResult(Expression<RT> expr) { if (getMetadata().getModifiers().getLimit() == null && !expr.toString().contains("count(")) { limit(2); } CloseableIterator<RT> iterator = iterate(expr); return uniqueResult(iterator); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ public <RT> Union<RT> union(SubQueryExpression<RT>... sq) { return innerUnion(sq); }
protected SQLSerializer serialize(boolean forCountRow) { SQLSerializer serializer = createSerializer(); if (union != null) { if (queryMixin.getMetadata().getProjection().isEmpty() || expandProjection(queryMixin.getMetadata().getProjection()).equals( expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); } else { QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); Set<Path<?>> paths = getRootPaths(expandProjection(mixin2.getMetadata().getProjection())); if (paths.isEmpty()) { mixin2.from(ExpressionUtils.as((Expression) union, defaultQueryAlias)); } else if (paths.size() == 1) { mixin2.from(ExpressionUtils.as((Expression) union, paths.iterator().next())); } else { throw new IllegalStateException("Unable to create serialize union"); } serializer.serialize(mixin2.getMetadata(), forCountRow); } } else { serializer.serialize(queryMixin.getMetadata(), forCountRow); } return serializer; }
/** * Get the query as an SQL query string and bindings * * @param exprs * @return */ public SQLBindings getSQL(Expression<?>... exprs) { queryMixin.addProjection(exprs); SQLSerializer serializer = serialize(false); ImmutableList.Builder<Object> args = ImmutableList.builder(); Map<ParamExpression<?>, Object> params = getMetadata().getParams(); for (Object o : serializer.getConstants()) { if (o instanceof ParamExpression) { if (!params.containsKey(o)) { throw new ParamNotSetException((ParamExpression<?>) o); } o = queryMixin.getMetadata().getParams().get(o); } args.add(o); } return new SQLBindings(serializer.toString(), args.build()); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public <RT> Q unionAll(Path<?> alias, ListSubQuery<RT>... sq) { return from(UnionUtils.union(sq, alias, true)); }
@Override protected void clone(Q query) { super.clone(query); this.useLiterals = query.useLiterals; this.listeners = new SQLListeners(query.listeners); }
/** * Add the given String literal as a join flag to the last added join with the position * BEFORE_TARGET * * @param flag * @return */ @Override @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addJoinFlag(String flag) { return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); }
@Override public CloseableIterator<Tuple> iterate(Expression<?>... args) { return iterate(queryMixin.createProjection(args)); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public <RT> Q union(Path<?> alias, ListSubQuery<RT>... sq) { return from(UnionUtils.union(sq, alias, false)); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ public <RT> Union<RT> unionAll(SubQueryExpression<RT>... sq) { unionAll = true; return innerUnion(sq); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public <RT> Q unionAll(Path<?> alias, SubQueryExpression<RT>... sq) { return from(UnionUtils.union(sq, alias, true)); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ public <RT> Union<RT> union(ListSubQuery<RT>... sq) { return innerUnion(sq); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public <RT> Q union(Path<?> alias, SubQueryExpression<RT>... sq) { return from(UnionUtils.union(sq, alias, false)); }
/** * Creates an union expression for the given subqueries * * @param <RT> * @param sq * @return */ public <RT> Union<RT> unionAll(ListSubQuery<RT>... sq) { unionAll = true; return innerUnion(sq); }