Thanks for the patch, Sylvain! I had a quick look at it and it looks good. I'll give it a try.
To your questions:
1) I wouldn't worry too much about the calls to getMetaData(). Both the client driver and the embedded driver cache the DatabaseMetaData object in the Connection object, and DatabaseMetaData caches the values returned by stores*CaseIdentifiers, so I think there would be little to gain by caching them ourselves in ij.
2) The ij7.sql test is run by the ToolScripts JUnit test. I see the same failure as you if I run it with the old style runner, o.a...functionTests.harness.RunTest, but not if I run it using the JUnit runner:
java junit.textui.TestRunner org.apache.derbyTesting.functionTests.tests.tools.ToolScripts
3) The English locale is used to prevent the JVM's default locale from influencing how the identifiers are handled. For instance, in Turkish locale, toUpper("insert") returns "İNSERT" (note the upper-case i with a dot), and toLower("INSERT") returns "ınsert" (dot-less lower-case i).