You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/12/15 17:16:41 UTC
svn commit: r890858 - in /labs/magma/trunk/foundation-database/src:
main/java/org/apache/magma/database/QueryByExampleBuilder.java
test/java/org/apache/magma/database/TestQbe.java
Author: simoneg
Date: Tue Dec 15 16:16:40 2009
New Revision: 890858
URL: http://svn.apache.org/viewvc?rev=890858&view=rev
Log:
Use ranges in dates, trying to guess the significant part
Modified:
labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/QueryByExampleBuilder.java
labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestQbe.java
Modified: labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/QueryByExampleBuilder.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/QueryByExampleBuilder.java?rev=890858&r1=890857&r2=890858&view=diff
==============================================================================
--- labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/QueryByExampleBuilder.java (original)
+++ labs/magma/trunk/foundation-database/src/main/java/org/apache/magma/database/QueryByExampleBuilder.java Tue Dec 15 16:16:40 2009
@@ -6,6 +6,7 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -100,7 +101,32 @@
if (!settings.getConsiderZero() && val.intValue() == 0) continue;
clause = "x." + name;
clause += "=?" + (params.size() + 1);
- params.add(val);
+ params.add(val);
+ } else if (Date.class.isAssignableFrom(type)) {
+ // Try to create a range around meaningful part of a date.
+ Date val = (Date) rm.invoke(qbe);
+ if (val == null) continue;
+ GregorianCalendar calendar = new GregorianCalendar();
+ calendar.setTime(val);
+ for (int calele : new int[] {
+ GregorianCalendar.MILLISECOND,
+ GregorianCalendar.SECOND,
+ GregorianCalendar.MINUTE,
+ GregorianCalendar.HOUR_OF_DAY,
+ GregorianCalendar.DAY_OF_MONTH,
+ GregorianCalendar.MONTH
+ }) {
+ if (calendar.get(calele) == calendar.getActualMinimum(calele)) {
+ calendar.set(calele, calendar.getActualMaximum(calele));
+ }
+ }
+ clause = "(x." + name + ">=";
+ clause += "?" + (params.size() + 1);
+ params.add(val);
+ clause += " AND x." + name + "<=";
+ clause += "?" + (params.size() + 1) + ")";
+ params.add(calendar.getTime());
+
} else {
Object val = rm.invoke(qbe);
if (val == null) continue;
Modified: labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestQbe.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestQbe.java?rev=890858&r1=890857&r2=890858&view=diff
==============================================================================
--- labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestQbe.java (original)
+++ labs/magma/trunk/foundation-database/src/test/java/org/apache/magma/database/TestQbe.java Tue Dec 15 16:16:40 2009
@@ -5,6 +5,7 @@
import static org.hamcrest.CoreMatchers.*;
import java.util.Date;
+import java.util.GregorianCalendar;
import org.apache.magma.database.QueryByExampleBuilder.Query;
import static org.apache.magma.testing.AssertStringStructure.assertStructure;
@@ -84,6 +85,29 @@
System.out.println(query.query);
assertThat(query.params.length, equalTo(2));
assertStructure(query.query, "WHERE", "?1", "OR", "?2", "$$");
+
+
+ sb = new SimpleBean();
+ GregorianCalendar cal = new GregorianCalendar();
+ cal.set(GregorianCalendar.YEAR, 1979);
+ cal.set(GregorianCalendar.MONTH, GregorianCalendar.MARCH);
+ cal.set(GregorianCalendar.DAY_OF_MONTH, 5);
+ cal.set(GregorianCalendar.HOUR_OF_DAY, 0);
+ cal.set(GregorianCalendar.MINUTE, 0);
+ cal.set(GregorianCalendar.SECOND, 0);
+ cal.set(GregorianCalendar.MILLISECOND, 0);
+ sb.setBirthday(cal.getTime());
+ qbe.setUseOr(false);
+ query = qbe.generateQuery(sb);
+ System.out.println(query.query);
+ assertThat(query.params.length, equalTo(2));
+ assertStructure(query.query, "WHERE", "x.birthday", ">=", "?1", "AND", "x.birthday", "<=", "?2", ")", "$$");
+ assertThat((Date)query.params[0], equalTo(cal.getTime()));
+ cal.setTime((Date) query.params[1]);
+ assertThat(cal.get(GregorianCalendar.HOUR_OF_DAY), equalTo(23));
+ assertThat(cal.get(GregorianCalendar.MINUTE), equalTo(59));
+ assertThat(cal.get(GregorianCalendar.SECOND), equalTo(59));
+ assertThat(cal.get(GregorianCalendar.MILLISECOND), equalTo(999));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org