@Override public <T> CriteriaQuery<T> createCriteriaQuery(Dao dao, EntityMapping em, Class<T> targetType) { return new DefaultCriteriaQuery<T>(dao, em, targetType); }
protected String[] columns(String[] fields) { String[] columns = new String[fields.length]; for (int i = 0; i < fields.length; i++) { columns[i] = column(fields[i]); } return columns; }
@Override public CriteriaQuery<T> select(String... selection) { this.selects = selection; if (null == selection || selection.length == 0) { builder.columns = null; } else { builder.columns = columns(this.selects); } return this; }
protected SqlStatement createUpdateStatement(QueryContext qc, String sql) { SqlClause clause = context.getQueryFactory().createQueryClause(dao, sql); Object updateParams; Object[] args = args(); if (null == args) { updateParams = params(); } else { updateParams = new MapArrayParams(paramsMap(), args); } return clause.createUpdateStatement(qc, updateParams); }
@Override public CriteriaQuery<T> join(Class<?> targetEntityClass, String alias) { return join(targetEntityClass, null, alias); }
@Override public CriteriaQuery<T> joinById(String targetEntityName, String localRelation, String alias, Object id) { EntityMapping em = context.getMetadata().getEntityMapping(targetEntityName); return joinById(em, localRelation, alias, JoinType.INNER, id); }
Map<String, Object> params = paramsMap(); return createUpdateStatement(this, primarySql).executeUpdate(); return createUpdateStatement(this, secondarySql).executeUpdate(); String sql = builder.buildUpdateSql(fields, paramsMap()); if (null == sql) { throw new IllegalStateException("No update fields"); return createUpdateStatement(this, sql).executeUpdate();
protected SqlStatement createCountStatement(QueryContext qc, String sql) { return createQueryStatement(qc, sql, true); }
@Override protected Scalar executeQueryForScalar(QueryContext context) throws TooManyRecordsException { return buildQueryStatement(context).executeQuery(SimpleScalarReader.DEFAULT_INSTANCE); }
@Override public CriteriaWhere<T> where() { return new DefaultCriteriaWhere<T>(getOrmContext(), this); }
@Override public int delete() { if (em.hasSecondaryTable()) { String secondarySql = builder.buildSecondaryDeleteSql(true); String primarySql = builder.buildSecondaryDeleteSql(false); return dao.doTransaction((s) -> { createUpdateStatement(this, secondarySql).executeUpdate(); return createUpdateStatement(this, primarySql).executeUpdate(); }); } else { return createUpdateStatement(this, builder.buildDeleteSql()).executeUpdate(); } }
protected SqlStatement createQueryStatement(QueryContext qc, String sql, boolean count) { SqlClause clause = context.getQueryFactory().createQueryClause(dao, sql); Object queryParams; Object[] args = args(); if (null == args) { queryParams = params(); } else { queryParams = new MapArrayParams(paramsMap(), args); } if (count) { //Count query don't add the order by. String tmpOrderBy = this.orderBy; this.orderBy = null; SqlStatement statement = clause.createQueryStatement(qc, queryParams); this.orderBy = tmpOrderBy; return statement; } else { return clause.createQueryStatement(qc, queryParams); } }
@Override public CriteriaQuery<T> leftJoin(Class<?> targetEntityClass, String alias) { return join(targetEntityClass, null, alias); }
@Override public CriteriaQuery<T> LeftJoinById(Class<?> targetEntityClass, String localRelation, String alias, Object id) { EntityMapping em = context.getMetadata().getEntityMapping(targetEntityClass); return joinById(em, localRelation, alias, JoinType.LEFT, id); }
protected SqlStatement createQueryStatement(QueryContext qc, String sql) { return createQueryStatement(qc, sql, false); }
@Override protected Scalars executeQueryForScalars(QueryContext context) throws TooManyRecordsException { return buildQueryStatement(context).executeQuery(SimpleScalarsReader.DEFAULT_INSTANCE); }
@Override public CriteriaQuery<T> join(String targetEntityName, String alias) { return join(targetEntityName, null, alias); }
@Override public CriteriaQuery<T> joinById(Class<?> targetEntityClass, String alias, Object id) { EntityMapping em = context.getMetadata().getEntityMapping(targetEntityClass); return joinById(em, null, alias, JoinType.INNER, id); }
protected SqlStatement buildQueryStatement(QueryContext qc) { return createQueryStatement(qc, builder.buildSelectSql(), false); }
protected CriteriaQuery<T> join(EntityMapping target, String relation, String alias, JoinType type) { return join(target, relation, alias, type, null, null); }