[hibernate-commits] Hibernate SVN: r18482 - in core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria: expression and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sat Jan 9 11:45:00 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-01-09 11:44:59 -0500 (Sat, 09 Jan 2010)
New Revision: 18482

Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/ValueHandlerFactory.java
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/expression/LiteralExpression.java
Log:
HHH-4774 - Do not handle literals using parameters in JPA criteria select 


Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/ValueHandlerFactory.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/ValueHandlerFactory.java	2010-01-09 16:24:44 UTC (rev 18481)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/ValueHandlerFactory.java	2010-01-09 16:44:59 UTC (rev 18482)
@@ -54,6 +54,18 @@
 		}
 	}
 
+	public static boolean isCharacter(Class type) {
+		return String.class.isAssignableFrom( type )
+				|| Character.class.isAssignableFrom( type )
+				|| Character.TYPE.equals( type );
+	}
+
+	public static boolean isCharacter(Object value) {
+		return String.class.isInstance( value )
+				|| Character.class.isInstance( value )
+				|| Character.TYPE.isInstance( value );
+	}
+
 	public static boolean isNumeric(Class type) {
 		return Number.class.isAssignableFrom( type )
 				|| Byte.TYPE.equals( type )

Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/expression/LiteralExpression.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/expression/LiteralExpression.java	2010-01-09 16:24:44 UTC (rev 18481)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/expression/LiteralExpression.java	2010-01-09 16:44:59 UTC (rev 18482)
@@ -88,8 +88,17 @@
 		return ':' + parameterName;
 	}
 
+	@SuppressWarnings({ "unchecked" })
 	public String renderProjection(CriteriaQueryCompiler.RenderingContext renderingContext) {
-		return render( renderingContext );
+		// some drivers/servers do not like parameters in the select clause
+		final ValueHandlerFactory.ValueHandler handler =
+				ValueHandlerFactory.determineAppropriateHandler( literal.getClass() );
+		if ( ! ValueHandlerFactory.isCharacter( literal ) ) {
+			return '\'' + handler.render( literal ) + '\'';
+		}
+		else {
+			return handler.render( literal );
+		}
 	}
 
 	@Override



More information about the hibernate-commits mailing list