@Override public <T extends Entity> T list(Query<T> query) throws UnifyException { T record = getSqlStatementExecutor().executeSingleRecordResultQuery(connection, sqlDataSourceDialect.prepareListStatement(query), false); fetchChildRecords(record, query.getSelect(), true); return record; }
@Override public String generateNativeQuery(Query<? extends Entity> query) throws UnifyException { Class<?> entityClass = SqlUtils.getEntityClass(query); SqlEntityInfo sqlEntityInfo = getSqlEntityInfo(entityClass); StringBuilder listSql = new StringBuilder(); Select select = query.getSelect(); if (select == null || select.isEmpty()) { listSql.append(sqlCacheFactory.get(entityClass).getListSql()); } else { listSql.append("SELECT "); if (select.isDistinct()) { listSql.append(" DISTINCT "); } appendLimitOffsetInfixClause(listSql, query); StringBuilder fieldsSql = new StringBuilder(); for (String name : select.values()) { SqlFieldInfo sqlFieldInfo = sqlEntityInfo.getListFieldInfo(name); if (fieldsSql.length() > 0) { fieldsSql.append(", "); } fieldsSql.append(sqlFieldInfo.getColumn()); } listSql.append(fieldsSql).append(" FROM ").append(sqlEntityInfo.getView()); } appendWhereClause(listSql, sqlEntityInfo, query); return listSql.toString(); }
@Override public <T, U, V extends Entity> Map<T, List<U>> valueListMap(Class<T> keyClass, String keyName, Class<U> valueClass, String valueName, Query<V> query) throws UnifyException { Select select = query.getSelect(); try { query.setSelect(new Select(keyName, valueName)); return getSqlStatementExecutor().executeMultipleObjectListMapResultQuery(connection, keyClass, keyName, valueClass, valueName, sqlDataSourceDialect.prepareListStatement(query)); } finally { query.setSelect(select); } }
@Override public <T, U, V extends Entity> Map<T, U> valueMap(Class<T> keyClass, String keyName, Class<U> valueClass, String valueName, Query<V> query) throws UnifyException { Select select = query.getSelect(); try { query.setSelect(new Select(keyName, valueName)); return getSqlStatementExecutor().executeMultipleObjectMapResultQuery(connection, keyClass, keyName, valueClass, valueName, sqlDataSourceDialect.prepareListStatement(query)); } finally { query.setSelect(select); } }
List<SqlParameter> parameterInfoList = new ArrayList<SqlParameter>(); List<SqlFieldInfo> returnFieldInfoList = null; Select select = query.getSelect(); if (select.isEmpty()) { throw new UnifyException(UnifyCoreErrorConstants.RECORD_NO_SELECT_FOR_AGGREGATE,
List<SqlFieldInfo> returnFieldInfoList = null; StringBuilder listSql = new StringBuilder(); Select select = query.getSelect();
List<SqlFieldInfo> returnFieldInfoList = null; StringBuilder findSql = new StringBuilder(); Select select = query.getSelect();
@Override public <T, U extends Entity> List<T> valueList(Class<T> fieldClass, String fieldName, final Query<U> query) throws UnifyException { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); Select select = query.getSelect(); try { query.setSelect(new Select(fieldName)); return getSqlStatementExecutor().executeMultipleObjectListResultQuery(connection, fieldClass, sqlDataSourceDialect.getSqlTypePolicy(sqlEntityInfo.getListFieldInfo(fieldName).getColumnType()), sqlDataSourceDialect.prepareListStatement(query)); } finally { query.setSelect(select); } }
@Override public <T, U extends Entity> Set<T> valueSet(Class<T> fieldClass, String fieldName, Query<U> query) throws UnifyException { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); Select select = query.getSelect(); try { query.setSelect(new Select(fieldName)); return getSqlStatementExecutor().executeMultipleObjectSetResultQuery(connection, fieldClass, sqlDataSourceDialect.getSqlTypePolicy(sqlEntityInfo.getListFieldInfo(fieldName).getColumnType()), sqlDataSourceDialect.prepareListStatement(query)); } finally { query.setSelect(select); } }
@Override public <T, U extends Entity> T value(Class<T> fieldClass, String fieldName, Query<U> query) throws UnifyException { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); Select select = query.getSelect(); try { query.setSelect(new Select(fieldName)); return getSqlStatementExecutor().executeSingleObjectResultQuery(connection, fieldClass, sqlDataSourceDialect.getSqlTypePolicy(sqlEntityInfo.getListFieldInfo(fieldName).getColumnType()), sqlDataSourceDialect.prepareListStatement(query), query.isMustMatch()); } finally { query.setSelect(select); } }
@Override public <T extends Entity> T find(Query<T> query) throws UnifyException { T record = null; try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(SqlUtils.getEntityClass(query)); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { record = getSqlStatementExecutor().executeSingleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(query), false); } else { SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<T> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); record = getSqlStatementExecutor().executeSingleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(findQuery), false); } } fetchChildRecords(record, query.getSelect(), false); } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return record; }