You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-dev@jackrabbit.apache.org by Julian Reschke <ju...@gmx.de> on 2012/08/20 11:02:26 UTC
equalsIgnoreCase
I just stumbled upon equalsIgnoreCase being used without a specified
locale (see below). As far as I understand, this is going to cause
trouble for some locales (see
http://www.i18nguy.com/unicode/turkish-i18n.html#problem).
We probably should fix those to hardwire an english locale.
Best regards, Julian
-- snip --
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:233:
if ("ISSAMENODE".equalsIgnoreCase(name)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:243:
} else if ("ISCHILDNODE".equalsIgnoreCase(name)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:247:
} else if ("ISDESCENDANTNODE".equalsIgnoreCase(name)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:391:
if ("CONTAINS".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:430:
} else if ("ISSAMENODE".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:437:
} else if ("ISCHILDNODE".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:444:
} else if ("ISDESCENDANTNODE".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:482:
if ("LENGTH".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:484:
} else if ("NAME".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:490:
} else if ("LOCALNAME".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:496:
} else if ("SCORE".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:502:
} else if ("LOWER".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:504:
} else if ("UPPER".equalsIgnoreCase(functionName)) {
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:732:
boolean result = token.equalsIgnoreCase(currentToken) &&
!currentTokenQuoted;
oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:741:
if (!expected.equalsIgnoreCase(currentToken) ||
currentTokenQuoted) {
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/OakRepositoryFactory.java:39:
if (uri.getScheme().equalsIgnoreCase("jcr-oak")) {
oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.java:171:
if ("chunked".equalsIgnoreCase(encoding)) {
oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.java:192:
if ("close".equalsIgnoreCase(connectionState)) {
oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/Request.java:255:
if ("chunked".equalsIgnoreCase(encoding)) {
Re: equalsIgnoreCase
Posted by Alex Parvulescu <al...@gmail.com>.
yup, it was JCR-3270
alex
https://issues.apache.org/jira/browse/JCR-3270
On Mon, Aug 20, 2012 at 11:20 AM, Michael Dürig <md...@apache.org> wrote:
>
>
> On 20.8.12 11:02, Julian Reschke wrote:
>
>> I just stumbled upon equalsIgnoreCase being used without a specified
>> locale (see below). As far as I understand, this is going to cause
>> trouble for some locales (see
>> http://www.i18nguy.com/**unicode/turkish-i18n.html#**problem<http://www.i18nguy.com/unicode/turkish-i18n.html#problem>
>> ).
>>
>
> I remember there was something related with JR2. Let's create an issue to
> track this and use the same mechanism to resolve it like we used in JR2.
>
> Michael
>
>
>
>> We probably should fix those to hardwire an english locale.
>>
>> Best regards, Julian
>>
>> -- snip --
>>
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:233:
>> if ("ISSAMENODE".**equalsIgnoreCase(name)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:243:
>> } else if ("ISCHILDNODE".**equalsIgnoreCase(name)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:247:
>> } else if ("ISDESCENDANTNODE".**equalsIgnoreCase(name)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:391:
>> if ("CONTAINS".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:430:
>> } else if ("ISSAMENODE".**equalsIgnoreCase(functionName)**) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:437:
>> } else if ("ISCHILDNODE".**equalsIgnoreCase(functionName)**) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:444:
>> } else if ("ISDESCENDANTNODE".**equalsIgnoreCase(functionName)**)
>> {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:482:
>> if ("LENGTH".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:484:
>> } else if ("NAME".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:490:
>> } else if ("LOCALNAME".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:496:
>> } else if ("SCORE".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:502:
>> } else if ("LOWER".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:504:
>> } else if ("UPPER".equalsIgnoreCase(**functionName)) {
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:732:
>> boolean result = token.equalsIgnoreCase(**currentToken) &&
>> !currentTokenQuoted;
>> oak-core/src/main/java/org/**apache/jackrabbit/oak/query/**
>> SQL2Parser.java:741:
>> if (!expected.equalsIgnoreCase(**currentToken) ||
>> currentTokenQuoted) {
>> oak-jcr/src/main/java/org/**apache/jackrabbit/oak/jcr/**
>> OakRepositoryFactory.java:39:
>> if (uri.getScheme().**equalsIgnoreCase("jcr-oak")) {
>> oak-mk-remote/src/main/java/**org/apache/jackrabbit/mk/**
>> client/HttpExecutor.java:171:
>> if ("chunked".equalsIgnoreCase(**encoding)) {
>> oak-mk-remote/src/main/java/**org/apache/jackrabbit/mk/**
>> client/HttpExecutor.java:192:
>> if ("close".equalsIgnoreCase(**connectionState)) {
>> oak-mk-remote/src/main/java/**org/apache/jackrabbit/mk/**
>> server/Request.java:255:
>> if ("chunked".equalsIgnoreCase(**encoding)) {
>>
>>
Re: equalsIgnoreCase
Posted by Michael Dürig <md...@apache.org>.
On 20.8.12 11:02, Julian Reschke wrote:
> I just stumbled upon equalsIgnoreCase being used without a specified
> locale (see below). As far as I understand, this is going to cause
> trouble for some locales (see
> http://www.i18nguy.com/unicode/turkish-i18n.html#problem).
I remember there was something related with JR2. Let's create an issue
to track this and use the same mechanism to resolve it like we used in JR2.
Michael
>
> We probably should fix those to hardwire an english locale.
>
> Best regards, Julian
>
> -- snip --
>
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:233:
> if ("ISSAMENODE".equalsIgnoreCase(name)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:243:
> } else if ("ISCHILDNODE".equalsIgnoreCase(name)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:247:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(name)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:391:
> if ("CONTAINS".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:430:
> } else if ("ISSAMENODE".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:437:
> } else if ("ISCHILDNODE".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:444:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:482:
> if ("LENGTH".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:484:
> } else if ("NAME".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:490:
> } else if ("LOCALNAME".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:496:
> } else if ("SCORE".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:502:
> } else if ("LOWER".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:504:
> } else if ("UPPER".equalsIgnoreCase(functionName)) {
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:732:
> boolean result = token.equalsIgnoreCase(currentToken) &&
> !currentTokenQuoted;
> oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:741:
> if (!expected.equalsIgnoreCase(currentToken) ||
> currentTokenQuoted) {
> oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/OakRepositoryFactory.java:39:
> if (uri.getScheme().equalsIgnoreCase("jcr-oak")) {
> oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.java:171:
> if ("chunked".equalsIgnoreCase(encoding)) {
> oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.java:192:
> if ("close".equalsIgnoreCase(connectionState)) {
> oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/Request.java:255:
> if ("chunked".equalsIgnoreCase(encoding)) {
>
Re: equalsIgnoreCase
Posted by Thomas Mueller <mu...@adobe.com>.
Hi,
True, we need to fix that. I guess we also need to fix it in Jackrabbit
2.x. To find all Turkish locale bugs, would it make sense to run automated
tests (additionally) with the Turkish locale?
Regards,
Thomas
On 8/20/12 11:02 AM, "julian.reschke@gmx.de" <ju...@gmx.de> wrote:
>I just stumbled upon equalsIgnoreCase being used without a specified
>locale (see below). As far as I understand, this is going to cause
>trouble for some locales (see
>http://www.i18nguy.com/unicode/turkish-i18n.html#problem).
>
>We probably should fix those to hardwire an english locale.
>
>Best regards, Julian
>
>-- snip --
>
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:233
>:
> if ("ISSAMENODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:243
>:
> } else if ("ISCHILDNODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:247
>:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:391
>:
> if ("CONTAINS".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:430
>:
> } else if ("ISSAMENODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:437
>:
> } else if ("ISCHILDNODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:444
>:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:482
>:
> if ("LENGTH".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:484
>:
> } else if ("NAME".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:490
>:
> } else if ("LOCALNAME".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:496
>:
> } else if ("SCORE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:502
>:
> } else if ("LOWER".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:504
>:
> } else if ("UPPER".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:732
>:
> boolean result = token.equalsIgnoreCase(currentToken) &&
>!currentTokenQuoted;
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:741
>:
> if (!expected.equalsIgnoreCase(currentToken) ||
>currentTokenQuoted) {
>oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/OakRepositoryFactory.j
>ava:39:
> if (uri.getScheme().equalsIgnoreCase("jcr-oak")) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.j
>ava:171:
> if ("chunked".equalsIgnoreCase(encoding)) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.j
>ava:192:
> if ("close".equalsIgnoreCase(connectionState)) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/Request.java:2
>55:
> if ("chunked".equalsIgnoreCase(encoding)) {
>
Re: equalsIgnoreCase
Posted by Thomas Mueller <mu...@adobe.com>.
Hi,
Actually, equalsIgnoreCase isn't a problem. The problem is just
String.toLower() and String.toUpper(). See also:
http://mattryall.net/blog/2009/02/the-infamous-turkish-locale-bug
So this returns true, as required:
Locale.setDefault(new Locale("tr"));
System.out.println("Ii".equalsIgnoreCase("iI"));
(compare upper+lower i with lower+upper i).
Regards,
Thomas
On 8/20/12 11:02 AM, "julian.reschke@gmx.de" <ju...@gmx.de> wrote:
>I just stumbled upon equalsIgnoreCase being used without a specified
>locale (see below). As far as I understand, this is going to cause
>trouble for some locales (see
>http://www.i18nguy.com/unicode/turkish-i18n.html#problem).
>
>We probably should fix those to hardwire an english locale.
>
>Best regards, Julian
>
>-- snip --
>
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:233
>:
> if ("ISSAMENODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:243
>:
> } else if ("ISCHILDNODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:247
>:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(name)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:391
>:
> if ("CONTAINS".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:430
>:
> } else if ("ISSAMENODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:437
>:
> } else if ("ISCHILDNODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:444
>:
> } else if ("ISDESCENDANTNODE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:482
>:
> if ("LENGTH".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:484
>:
> } else if ("NAME".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:490
>:
> } else if ("LOCALNAME".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:496
>:
> } else if ("SCORE".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:502
>:
> } else if ("LOWER".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:504
>:
> } else if ("UPPER".equalsIgnoreCase(functionName)) {
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:732
>:
> boolean result = token.equalsIgnoreCase(currentToken) &&
>!currentTokenQuoted;
>oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java:741
>:
> if (!expected.equalsIgnoreCase(currentToken) ||
>currentTokenQuoted) {
>oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/OakRepositoryFactory.j
>ava:39:
> if (uri.getScheme().equalsIgnoreCase("jcr-oak")) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.j
>ava:171:
> if ("chunked".equalsIgnoreCase(encoding)) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/HttpExecutor.j
>ava:192:
> if ("close".equalsIgnoreCase(connectionState)) {
>oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/Request.java:2
>55:
> if ("chunked".equalsIgnoreCase(encoding)) {
>