With TERRITORY_BASED collation '_' does not match the character
\uFA2D. It is the same for english or norwegian. FOR collation
UCS_BASIC it matches fine. Could you tell me if this is a bug?
Here is a program to reproduce.
Kathey
import java.sql.*;
public class HighCharacter {
public static void main(String args[]) throws Exception
{
System.out.println("\n Territory no_NO");
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection conn =
DriverManager.getConnection("jdbc:derby:nordb;create=true;territory=no_NO;collation=TERRITORY_BASED");
testLikeWithHighestValidCharacter(conn);
conn.close();
System.out.println("\n Territory en_US");
conn =
DriverManager.getConnection("jdbc:derby:endb;create=true;territory=en_US;collation=TERRITORY_BASED");
testLikeWithHighestValidCharacter(conn);
conn.close();
System.out.println("\n Collation USC_BASIC");
conn = DriverManager.getConnection("jdbc:derby:basicdb;create=true");
testLikeWithHighestValidCharacter(conn);
}
public static void testLikeWithHighestValidCharacter(Connection conn)
throws SQLException {
Statement stmt = conn.createStatement();
try {
stmt.executeUpdate("drop table t1");
}catch (SQLException se)
{// drop failure ok.
}
stmt.executeUpdate("create table t1(c11 int)");
stmt.executeUpdate("insert into t1 values 1");
// \uFA2D - the highest valid character according to
// Character.isDefined() of JDK 1.4;
PreparedStatement ps =
conn.prepareStatement("select 1 from t1 where '\uFA2D' like ?");
String[] match = { "%", "_", "\uFA2D" };
for (int i = 0; i < match.length; i++) {
System.out.println("select 1 from t1 where '\\uFA2D' like " + match[i]);
ps.setString(1, match[i]);
ResultSet rs = ps.executeQuery();
if( rs.next() && rs.getString(1).equals("1"))
System.out.println("PASS");
else
System.out.println("FAIL: no match");
rs.close();
}
}
}