public static Class<?> getEntityClass(Query<? extends Entity> query) { Class<?> entityClass = query.getEntityClass(); if (StaticReference.class.equals(entityClass)) { return ((StaticReferenceQuery) query).getEnumConstType(); } return entityClass; }
@Override public SqlStatement prepareCountStatement(Query<? extends Entity> query) throws UnifyException { SqlEntityInfo sqlEntityInfo = getSqlEntityInfo(query); List<SqlParameter> parameterInfoList = new ArrayList<SqlParameter>(); StringBuilder countSql = new StringBuilder(sqlCacheFactory.get(query.getEntityClass()).getCountSql()); appendWhereClause(countSql, parameterInfoList, sqlEntityInfo, query, false); return new SqlStatement(sqlEntityInfo, SqlStatementType.COUNT, countSql.toString(), parameterInfoList); }
@Override public <T extends Entity> List<T> findAll(Query<T> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(query)); } 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)); return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new ArrayList<T>(); }
@SuppressWarnings({ "unchecked", "rawtypes" }) @Override public int count(Query<? extends Entity> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeSingleObjectResultQuery(connection, int.class, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareCountStatement(query), true); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<? extends Entity> countQuery = new Query(query.getEntityClass(), query.isApplyAppQueryLimit()); countQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeSingleObjectResultQuery(connection, int.class, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareCountStatement(countQuery), true); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return 0; }
@Override public <T, U extends Entity> Map<T, List<U>> findAllListMap(Class<T> keyClass, String keyName, Query<U> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordListResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<U> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleRecordListResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new HashMap<T, List<U>>(); }
@Override public <T, U extends Entity> Map<T, U> findAllMap(Class<T> keyClass, String keyName, Query<U> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<U> findQuery = query.copyNoCriteria(); findQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleRecordResultQuery(connection, keyClass, keyName, sqlDataSourceDialect.prepareFindStatement(findQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return new HashMap<T, U>(); }
@Override public List<Aggregate<?>> aggregate(AggregateType aggregateType, Query<? extends Entity> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields())) { return getSqlStatementExecutor().executeMultipleAggregateResultQuery(connection, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareAggregateStatement(aggregateType, query)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<? extends Entity> aggregateQuery = query.copyNoCriteria(); aggregateQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeMultipleAggregateResultQuery(connection, sqlDataSourceDialect.getSqlTypePolicy(int.class), sqlDataSourceDialect.prepareAggregateStatement(aggregateType, aggregateQuery)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return Collections.emptyList(); }
@Override public int updateAll(Query<? extends Entity> query, Update update) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlDataSourceDialect.isQueryOffsetOrLimit(query) || (sqlEntityInfo.testTrueFieldNamesOnly(query.getFields()))) { return getSqlStatementExecutor().executeUpdate(connection, sqlDataSourceDialect.prepareUpdateStatement(query, update)); } SqlFieldInfo idFieldInfo = sqlEntityInfo.getIdFieldInfo(); List<?> idList = valueList(idFieldInfo.getFieldType(), idFieldInfo.getName(), query); if (!idList.isEmpty()) { Query<? extends Entity> updateQuery = query.copyNoAll(); updateQuery.add(new Amongst(idFieldInfo.getName(), idList)); return getSqlStatementExecutor().executeUpdate(connection, sqlDataSourceDialect.prepareUpdateStatement(updateQuery, update)); } } catch (UnifyException e) { throw e; } catch (Exception e) { throw new UnifyException(e, UnifyCoreErrorConstants.COMPONENT_OPERATION_ERROR, getClass().getSimpleName()); } return 0; }
@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> 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> 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); } }
public int deleteAll(Query<? extends Entity> query) throws UnifyException { try { SqlEntityInfo sqlEntityInfo = sqlDataSourceDialect.getSqlEntityInfo(query.getEntityClass()); if (sqlDataSourceDialect.isQueryOffsetOrLimit(query) || (!sqlEntityInfo.isChildList() && sqlEntityInfo.testTrueFieldNamesOnly(query.getFields()))) {
@Override public void process(Report report) throws UnifyException { DataSourceDialect dialect = getDataSource(report).getDialect(); Query<? extends Entity> query = ReflectUtils.newInstance(queryClass); Map<String, String> fieldToColumnMap = dialect.getFieldToNativeColumnMap(query.getEntityClass()); ReportColumn[] reportColumns = getReportColumns(report.getCode()); for (ReportColumn rc : reportColumns) { report.addColumn(rc); query.select(rc.getName()); if (rc.isGroup() || rc.getOrder() != null) { query.order(rc.getName()); } // Convert property names to native column name rc.setName(fieldToColumnMap.get(rc.getName())); } populate(query, report.getReportParameters()); String nativeQuery = dialect.generateNativeQuery(query); report.setQuery(nativeQuery); }