Issue Details (XML | Word | Printable)

Key: DERBY-3315
Type: Task Task
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Mamta A. Satoor
Reporter: Mamta A. Satoor
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Derby

Should UCS_BASIC character types have to look at collation elements when dealing with escape character in the LIKE clause?

Created: 11/Jan/08 06:09 AM   Updated: 16/Jan/08 09:48 PM
Return to search
Component/s: JDBC
Affects Version/s: 10.3.1.4, 10.3.2.1, 10.4.1.3
Fix Version/s: 10.3.3.0, 10.4.1.3

Time Tracking:
Not Specified

Resolution Date: 16/Jan/08 09:48 PM


 Description  « Hide
Code in SQLChar.like(dvd, dvd) method at line number 1767 is executed for non-national/non-collation sensitive character types ie for UCS_BASIC character types and the code looks as follows
  // Make sure we fail for both varchar an nvarchar
  // for multiple collation characters.
  SQLChar escapeSQLChar = (SQLChar) escape;
  int[] escapeIntArray = escapeSQLChar.getIntArray();
  if (escapeIntArray != null && (escapeIntArray.length != 1))
  {
  throw StandardException.newException(SQLState.LANG_INVALID_ESCAPE_CHARACTER,new String (escapeSQLChar.getCharArray()));
   }

It appears that we are trying to see if number of collation elements associated with escape character is more than 1 and if yes, then we throw exception. Seems like a code like above should be done for collation sensitive character types and not for UCS_BASIC character types. Interestingly, nothing like this is getting checked for national character datatypes.

This behavior was detected while working on DERBY-3302

 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #612525 Wed Jan 16 17:29:02 UTC 2008 mamta DERBY-2720 and DERBY-3315
Removing the disabled national character related code. This will make it easy to maintain
the territory based code.
Files Changed
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/Util.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataValueFactoryImpl.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DTSClassInfo.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataValueFactory.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ColumnDefinitionNode.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BaseTypeCompiler.java
DEL /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/SQLNationalLongvarchar.java
DEL /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/SQLNationalChar.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/TypeCompiler.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/C_NodeTypes.java
DEL /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/SQLNationalVarchar.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/Types.java
DEL /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/SQLNClob.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypesImplInstanceGetter.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/Like.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/PreparedStatement.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TernaryOperatorNode.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/SQLChar.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CLOBTypeCompiler.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ModifyColumnNode.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/RegisteredFormatIds.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CharTypeCompiler.java
MODIFY /db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/io/StoredFormatIds.java

Repository Revision Date User Message
ASF #612576 Wed Jan 16 21:46:54 UTC 2008 mamta Merging changes (revision 612525) from trunk into 10.3 codeline. Had to undo the changes
to TypeDescriptorImpl becase trunk has a method isStringType in TypeDescriptorImpl but
10.3 codeline does not have it. Other than that, the merge from trunk into 10.3 worked
fine. The tests on 10.3 codeline ran fine on Windows XP machine with Sun's jdk14.

The commit comments for trunk were as follows
DERBY-2720 and DERBY-3315
Removing the disabled national character related code. This will make it easy to maintain
the territory based code.
Files Changed
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/TernaryOperatorNode.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/CLOBTypeCompiler.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/SQLChar.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/ModifyColumnNode.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/BinaryComparisonOperatorNode.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/CharTypeCompiler.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/services/io/RegisteredFormatIds.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/services/io/StoredFormatIds.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/ColumnDefinitionNode.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/DataValueFactoryImpl.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/jdbc/Util.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/DTSClassInfo.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/DataValueFactory.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/BaseTypeCompiler.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java
DEL /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/SQLNationalLongvarchar.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/compile/TypeCompiler.java
DEL /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/SQLNationalChar.java
DEL /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/SQLNationalVarchar.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/Types.java
DEL /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/SQLNClob.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/compile/C_NodeTypes.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/catalog/types/TypesImplInstanceGetter.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/Like.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/PreparedStatement.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/compile/LikeEscapeOperatorNode.java
MODIFY /db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/types/TypeId.java