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();
   }
}
}


Reply via email to