From: <sc...@hy...> - 2010-01-22 23:22:24
|
Author: scottmf Date: 2010-01-22 15:22:15 -0800 (Fri, 22 Jan 2010) New Revision: 14223 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14223 Modified: trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java Log: [HHQ-3689] fixed the 1000 limit in oracle Modified: trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java 2010-01-22 20:56:31 UTC (rev 14222) +++ trunk/src/org/hyperic/hq/measurement/server/session/AvailabilityDataDAO.java 2010-01-22 23:22:15 UTC (rev 14223) @@ -349,12 +349,23 @@ .append(" m.interval, m.dsn,m.resource,") .append(" rle.endtime") .append(" ORDER BY rle.endtime").toString(); - return getSession() - .createQuery(sql) - .setLong("startime", start) - .setLong("endtime", end) - .setParameterList("mids", mids, new IntegerType()) - .list(); + final List measIds = Arrays.asList(mids); + final int size = measIds.size(); + final HQDialect dialect = Util.getHQDialect(); + final int batchSize = dialect.getMaxExpressions() < 0 ? + Integer.MAX_VALUE : dialect.getMaxExpressions(); + final List rtn = new ArrayList(size); + for (int i=0; i<size; i+=batchSize) { + final int last = Math.min(i+batchSize, size); + final List sublist = measIds.subList(i, last); + rtn.addAll(getSession() + .createQuery(sql) + .setLong("startime", start) + .setLong("endtime", end) + .setParameterList("mids", sublist, new IntegerType()) + .list()); + } + return rtn; } /** |