[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2997) LikeExpression case sensitive not working properly

Albert Fried (JIRA) noreply at atlassian.com
Thu Apr 30 08:19:19 EDT 2009


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=33056#action_33056 ] 

Albert Fried commented on HHH-2997:
-----------------------------------

The problem is IMHO in the class org.hibernate.criterion.LikeExpression (see the comments):

	public String toSqlString(
			Criteria criteria,
			CriteriaQuery criteriaQuery) throws HibernateException {
		Dialect dialect = criteriaQuery.getFactory().getDialect();
		String[] columns = criteriaQuery.getColumnsUsingProjection( criteria, propertyName );
		if ( columns.length != 1 ) {
			throw new HibernateException( "Like may only be used with single-column properties" );
		}
		// THIS IS OK:
		String lhs = ignoreCase
				? dialect.getLowercaseFunction() + '(' + columns[0] + ')'
	            : columns[0];
		return lhs + " like ?" + ( escapeChar == null ? "" : " escape \'" + escapeChar + "\'" );

	}

	public TypedValue[] getTypedValues(
			Criteria criteria,
			CriteriaQuery criteriaQuery) throws HibernateException {
		// THIS IS NOT OK BECAUSE ALWAYS .toLowerCase():
		return new TypedValue[] {                            
				criteriaQuery.getTypedValue( criteria, propertyName, value.toString().toLowerCase() )
		// THIS COULD BE OK:
		// return new TypedValue[] {                            
		//        criteriaQuery.getTypedValue( criteria, propertyName, 
		//                ignoreCase ? value.toString().toLowerCase() : value.toString() )
		};
	}


> LikeExpression case sensitive not working properly
> --------------------------------------------------
>
>                 Key: HHH-2997
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2997
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: query-criteria
>    Affects Versions: 3.2.5
>         Environment: Hibernate 3.2.5
>            Reporter: Adam Czysciak
>            Priority: Minor
>         Attachments: hibernate2997test.zip, LikeExpression.patch, LikeExpression.patch
>
>
> LikeExpression doesn't handle ignoreCase flag properly when it's set to false. Uses it to build correct sql "property like ?", but doesn't use the flag inside getTypedValues - produces always lowercase value to bind.
> Attached a patch for 3.2.5

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list