Index: kernel/kernel-storage-util/src/main/java/org/sakaiproject/util/BaseDbDoubleStorage.java =================================================================== --- kernel/kernel-storage-util/src/main/java/org/sakaiproject/util/BaseDbDoubleStorage.java (revision 120291) +++ kernel/kernel-storage-util/src/main/java/org/sakaiproject/util/BaseDbDoubleStorage.java (working copy) @@ -24,6 +24,8 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Hashtable; import java.util.Iterator; import java.util.List; @@ -933,6 +935,26 @@ return null; } + + /** + * Get all Resources. + * + * @param container + * The container for this resource. + * @param softFilter + * an optional software filter + * @param sqlFilter + * an optional conditional for select statement + * @param asc + * true means ascending + * @param pager + * an optional range of elements to return inclusive + * @return The list (Resource) of all Resources. + */ + public List getAllResources(Entity container, Filter softFilter, String sqlFilter, boolean asc, PagingPosition pager) { + return getAllResources(container, softFilter, sqlFilter, asc, pager, null); + } + /** * Get all Resources. * @@ -946,9 +968,11 @@ * true means ascending * @param pager * an optional range of elements to return inclusive + * @param bindVariables + * an optional list of bind variables * @return The list (Resource) of all Resources. */ - public List getAllResources(Entity container, Filter softFilter, String sqlFilter, boolean asc, PagingPosition pager) + public List getAllResources(Entity container, Filter softFilter, String sqlFilter, boolean asc, PagingPosition pager, List bindVariables) { pager = fixPagingPosition(softFilter, pager); @@ -1014,6 +1038,17 @@ fields[0] = container.getReference(); for ( int i=0; i < searchFieldCount; i++) fields[i+1] = "%" + searchString + "%"; + if(bindVariables != null && bindVariables.size() > 0) { + List fieldsArray = new ArrayList(); + if(fields != null && fields.length > 0) { + fieldsArray.addAll(Arrays.asList(fields)); + } + for(Object bindVariable : bindVariables) { + fieldsArray.add(bindVariable); + } + fields = fieldsArray.toArray(); + } + // System.out.println("getAllResources="+sql); // If we are paged in SQL - then do not pass in the pager Index: calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/DbCalendarService.java =================================================================== --- calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/DbCalendarService.java (revision 120291) +++ calendar/calendar-impl/impl/src/java/org/sakaiproject/calendar/impl/DbCalendarService.java (working copy) @@ -22,6 +22,7 @@ package org.sakaiproject.calendar.impl; import java.sql.Date; +import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; @@ -226,29 +227,26 @@ // get to the end of the GMT day endDate = endDate + (oneDay-(endDate%oneDay)); // this will work untill 9 Oct 246953 07:00:00 - int startDateHours = (int)(startDate/oneHour); - int endDateHours = (int)(endDate/oneHour); + Integer startDateHours = (int)(startDate/oneHour); + Integer endDateHours = (int)(endDate/oneHour); - if ( M_log.isErrorEnabled() ) { + if ( M_log.isDebugEnabled() ) { M_log.debug("Selecting Range from "+(new Date(startDate)).toGMTString()+" to "+(new Date(endDate)).toGMTString()); } - StringBuilder filter = new StringBuilder("("); - filter.append(" (RANGE_START > "); - filter.append( startDateHours ); - filter.append( " and RANGE_START < "); - filter.append( endDateHours ); - filter.append( " ) or ( "); - filter.append(" RANGE_END > "); - filter.append( startDateHours ); - filter.append( " and RANGE_END < "); - filter.append( endDateHours ); - filter.append( " ) or ( "); - filter.append(" RANGE_START < "); - filter.append( startDateHours ); - filter.append( " and RANGE_END > "); - filter.append( endDateHours ); - filter.append( " )) "); - return super.getAllResources(calendar, filter.toString()); + + String filter = "((RANGE_START > ? and RANGE_START < ? ) " + + "or ( RANGE_END > ? and RANGE_END < ? ) " + + "or ( RANGE_START < ? and RANGE_END > ? ))"; + + List rangeValues = new ArrayList(); + rangeValues.add(startDateHours.toString()); + rangeValues.add(endDateHours.toString()); + rangeValues.add(startDateHours.toString()); + rangeValues.add(endDateHours.toString()); + rangeValues.add(startDateHours.toString()); + rangeValues.add(endDateHours.toString()); + + return super.getAllResources(calendar, null, filter, true, null, rangeValues); } public CalendarEventEdit putEvent(Calendar calendar,String id)