@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;
}