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)) {
>