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