[ 
https://issues.apache.org/jira/browse/CALCITE-2481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16592732#comment-16592732
 ] 

Julian Hyde commented on CALCITE-2481:
--------------------------------------

[~vladimirsitnikov] I like your solution where you store Strings and use a 
custom Comparator. However, I am out of time. Especially as this is not a very 
important problem for the real world. My solution is a bit less elegant but it 
works. I would like to commit it, if you don't mind.

Your comment about ImmutableMaps. Was that regarding your code or my code? If 
you are returning a collection to a client, it makes sense for it to at least 
be unmodifiable, so the client cannot possibly cause bugs in your code. If you 
need to make a copy (e.g. to remove elements) before you return it, then it 
makes sense to use an immutable collection, because these are often simpler 
than mutable collections. (E.g. ImmutableSortedSet is backed by an array, 
whereas a mutable sorted set such as TreeSet has many more objects behind it.) 

> NameSet assumes lowercase characters have greater codes which does not hold 
> for certain characters
> --------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-2481
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2481
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.17.0
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>            Priority: Major
>
> {code:java}  @Test public void lowerCaseWithLowerCode() {
>     for (int i = 0; i < 0xffff; i++) {
>       char c = (char) i;
>       if (!Character.isLetter(c)) {
>         continue;
>       }
>       char lc = Character.toLowerCase(c);
>       char uc = Character.toUpperCase(c);
>       if (lc < uc) {
>         System.out.println(c + ": (" + ((int) lc) + ") " + lc + " < " + uc + 
> " (" + ((int) uc) + ")");
>       }
>     }
>   }
> {code}
> {noformat}
> µ: (181) µ < Μ (924)
> ÿ: (255) ÿ < Ÿ (376)
> İ: (105) i < İ (304)
> Ÿ: (255) ÿ < Ÿ (376)
> ƀ: (384) ƀ < Ƀ (579)
> ƕ: (405) ƕ < Ƕ (502)
> ƚ: (410) ƚ < Ƚ (573)
> ƞ: (414) ƞ < Ƞ (544)
> ƿ: (447) ƿ < Ƿ (503)
> Ƕ: (405) ƕ < Ƕ (502)
> Ƿ: (447) ƿ < Ƿ (503)
> Ƞ: (414) ƞ < Ƞ (544)
> Ƚ: (410) ƚ < Ƚ (573)
> ȿ: (575) ȿ < Ȿ (11390)
> ɀ: (576) ɀ < Ɀ (11391)
> Ƀ: (384) ƀ < Ƀ (579)
> ɐ: (592) ɐ < Ɐ (11375)
> ɑ: (593) ɑ < Ɑ (11373)
> ɒ: (594) ɒ < Ɒ (11376)
> ɜ: (604) ɜ < Ɜ (42923)
> ɡ: (609) ɡ < Ɡ (42924)
> ɥ: (613) ɥ < Ɥ (42893)
> ɦ: (614) ɦ < Ɦ (42922)
> ɪ: (618) ɪ < Ɪ (42926)
> ɫ: (619) ɫ < Ɫ (11362)
> ɬ: (620) ɬ < Ɬ (42925)
> ɱ: (625) ɱ < Ɱ (11374)
> ɽ: (637) ɽ < Ɽ (11364)
> ʇ: (647) ʇ < Ʇ (42929)
> ʝ: (669) ʝ < Ʝ (42930)
> ʞ: (670) ʞ < Ʞ (42928)
> ͻ: (891) ͻ < Ͻ (1021)
> ͼ: (892) ͼ < Ͼ (1022)
> ͽ: (893) ͽ < Ͽ (1023)
> ϲ: (1010) ϲ < Ϲ (1017)
> ϴ: (952) θ < ϴ (1012)
> Ϲ: (1010) ϲ < Ϲ (1017)
> Ͻ: (891) ͻ < Ͻ (1021)
> Ͼ: (892) ͼ < Ͼ (1022)
> Ͽ: (893) ͽ < Ͽ (1023)
> ᲈ: (7304) ᲈ < Ꙋ (42570)
> ᵹ: (7545) ᵹ < Ᵹ (42877)
> ᵽ: (7549) ᵽ < Ᵽ (11363)
> ẞ: (223) ß < ẞ (7838)
> ἀ: (7936) ἀ < Ἀ (7944)
> ἁ: (7937) ἁ < Ἁ (7945)
> ἂ: (7938) ἂ < Ἂ (7946)
> ἃ: (7939) ἃ < Ἃ (7947)
> ἄ: (7940) ἄ < Ἄ (7948)
> ἅ: (7941) ἅ < Ἅ (7949)
> ἆ: (7942) ἆ < Ἆ (7950)
> ἇ: (7943) ἇ < Ἇ (7951)
> Ἀ: (7936) ἀ < Ἀ (7944)
> Ἁ: (7937) ἁ < Ἁ (7945)
> Ἂ: (7938) ἂ < Ἂ (7946)
> Ἃ: (7939) ἃ < Ἃ (7947)
> Ἄ: (7940) ἄ < Ἄ (7948)
> Ἅ: (7941) ἅ < Ἅ (7949)
> Ἆ: (7942) ἆ < Ἆ (7950)
> Ἇ: (7943) ἇ < Ἇ (7951)
> ἐ: (7952) ἐ < Ἐ (7960)
> ἑ: (7953) ἑ < Ἑ (7961)
> ἒ: (7954) ἒ < Ἒ (7962)
> ἓ: (7955) ἓ < Ἓ (7963)
> ἔ: (7956) ἔ < Ἔ (7964)
> ἕ: (7957) ἕ < Ἕ (7965)
> Ἐ: (7952) ἐ < Ἐ (7960)
> Ἑ: (7953) ἑ < Ἑ (7961)
> Ἒ: (7954) ἒ < Ἒ (7962)
> Ἓ: (7955) ἓ < Ἓ (7963)
> Ἔ: (7956) ἔ < Ἔ (7964)
> Ἕ: (7957) ἕ < Ἕ (7965)
> ἠ: (7968) ἠ < Ἠ (7976)
> ἡ: (7969) ἡ < Ἡ (7977)
> ἢ: (7970) ἢ < Ἢ (7978)
> ἣ: (7971) ἣ < Ἣ (7979)
> ἤ: (7972) ἤ < Ἤ (7980)
> ἥ: (7973) ἥ < Ἥ (7981)
> ἦ: (7974) ἦ < Ἦ (7982)
> ἧ: (7975) ἧ < Ἧ (7983)
> Ἠ: (7968) ἠ < Ἠ (7976)
> Ἡ: (7969) ἡ < Ἡ (7977)
> Ἢ: (7970) ἢ < Ἢ (7978)
> Ἣ: (7971) ἣ < Ἣ (7979)
> Ἤ: (7972) ἤ < Ἤ (7980)
> Ἥ: (7973) ἥ < Ἥ (7981)
> Ἦ: (7974) ἦ < Ἦ (7982)
> Ἧ: (7975) ἧ < Ἧ (7983)
> ἰ: (7984) ἰ < Ἰ (7992)
> ἱ: (7985) ἱ < Ἱ (7993)
> ἲ: (7986) ἲ < Ἲ (7994)
> ἳ: (7987) ἳ < Ἳ (7995)
> ἴ: (7988) ἴ < Ἴ (7996)
> ἵ: (7989) ἵ < Ἵ (7997)
> ἶ: (7990) ἶ < Ἶ (7998)
> ἷ: (7991) ἷ < Ἷ (7999)
> Ἰ: (7984) ἰ < Ἰ (7992)
> Ἱ: (7985) ἱ < Ἱ (7993)
> Ἲ: (7986) ἲ < Ἲ (7994)
> Ἳ: (7987) ἳ < Ἳ (7995)
> Ἴ: (7988) ἴ < Ἴ (7996)
> Ἵ: (7989) ἵ < Ἵ (7997)
> Ἶ: (7990) ἶ < Ἶ (7998)
> Ἷ: (7991) ἷ < Ἷ (7999)
> ὀ: (8000) ὀ < Ὀ (8008)
> ὁ: (8001) ὁ < Ὁ (8009)
> ὂ: (8002) ὂ < Ὂ (8010)
> ὃ: (8003) ὃ < Ὃ (8011)
> ὄ: (8004) ὄ < Ὄ (8012)
> ὅ: (8005) ὅ < Ὅ (8013)
> Ὀ: (8000) ὀ < Ὀ (8008)
> Ὁ: (8001) ὁ < Ὁ (8009)
> Ὂ: (8002) ὂ < Ὂ (8010)
> Ὃ: (8003) ὃ < Ὃ (8011)
> Ὄ: (8004) ὄ < Ὄ (8012)
> Ὅ: (8005) ὅ < Ὅ (8013)
> ὑ: (8017) ὑ < Ὑ (8025)
> ὓ: (8019) ὓ < Ὓ (8027)
> ὕ: (8021) ὕ < Ὕ (8029)
> ὗ: (8023) ὗ < Ὗ (8031)
> Ὑ: (8017) ὑ < Ὑ (8025)
> Ὓ: (8019) ὓ < Ὓ (8027)
> Ὕ: (8021) ὕ < Ὕ (8029)
> Ὗ: (8023) ὗ < Ὗ (8031)
> ὠ: (8032) ὠ < Ὠ (8040)
> ὡ: (8033) ὡ < Ὡ (8041)
> ὢ: (8034) ὢ < Ὢ (8042)
> ὣ: (8035) ὣ < Ὣ (8043)
> ὤ: (8036) ὤ < Ὤ (8044)
> ὥ: (8037) ὥ < Ὥ (8045)
> ὦ: (8038) ὦ < Ὦ (8046)
> ὧ: (8039) ὧ < Ὧ (8047)
> Ὠ: (8032) ὠ < Ὠ (8040)
> Ὡ: (8033) ὡ < Ὡ (8041)
> Ὢ: (8034) ὢ < Ὢ (8042)
> Ὣ: (8035) ὣ < Ὣ (8043)
> Ὤ: (8036) ὤ < Ὤ (8044)
> Ὥ: (8037) ὥ < Ὥ (8045)
> Ὦ: (8038) ὦ < Ὦ (8046)
> Ὧ: (8039) ὧ < Ὧ (8047)
> ὰ: (8048) ὰ < Ὰ (8122)
> ά: (8049) ά < Ά (8123)
> ὲ: (8050) ὲ < Ὲ (8136)
> έ: (8051) έ < Έ (8137)
> ὴ: (8052) ὴ < Ὴ (8138)
> ή: (8053) ή < Ή (8139)
> ὶ: (8054) ὶ < Ὶ (8154)
> ί: (8055) ί < Ί (8155)
> ὸ: (8056) ὸ < Ὸ (8184)
> ό: (8057) ό < Ό (8185)
> ὺ: (8058) ὺ < Ὺ (8170)
> ύ: (8059) ύ < Ύ (8171)
> ὼ: (8060) ὼ < Ὼ (8186)
> ώ: (8061) ώ < Ώ (8187)
> ᾀ: (8064) ᾀ < ᾈ (8072)
> ᾁ: (8065) ᾁ < ᾉ (8073)
> ᾂ: (8066) ᾂ < ᾊ (8074)
> ᾃ: (8067) ᾃ < ᾋ (8075)
> ᾄ: (8068) ᾄ < ᾌ (8076)
> ᾅ: (8069) ᾅ < ᾍ (8077)
> ᾆ: (8070) ᾆ < ᾎ (8078)
> ᾇ: (8071) ᾇ < ᾏ (8079)
> ᾈ: (8064) ᾀ < ᾈ (8072)
> ᾉ: (8065) ᾁ < ᾉ (8073)
> ᾊ: (8066) ᾂ < ᾊ (8074)
> ᾋ: (8067) ᾃ < ᾋ (8075)
> ᾌ: (8068) ᾄ < ᾌ (8076)
> ᾍ: (8069) ᾅ < ᾍ (8077)
> ᾎ: (8070) ᾆ < ᾎ (8078)
> ᾏ: (8071) ᾇ < ᾏ (8079)
> ᾐ: (8080) ᾐ < ᾘ (8088)
> ᾑ: (8081) ᾑ < ᾙ (8089)
> ᾒ: (8082) ᾒ < ᾚ (8090)
> ᾓ: (8083) ᾓ < ᾛ (8091)
> ᾔ: (8084) ᾔ < ᾜ (8092)
> ᾕ: (8085) ᾕ < ᾝ (8093)
> ᾖ: (8086) ᾖ < ᾞ (8094)
> ᾗ: (8087) ᾗ < ᾟ (8095)
> ᾘ: (8080) ᾐ < ᾘ (8088)
> ᾙ: (8081) ᾑ < ᾙ (8089)
> ᾚ: (8082) ᾒ < ᾚ (8090)
> ᾛ: (8083) ᾓ < ᾛ (8091)
> ᾜ: (8084) ᾔ < ᾜ (8092)
> ᾝ: (8085) ᾕ < ᾝ (8093)
> ᾞ: (8086) ᾖ < ᾞ (8094)
> ᾟ: (8087) ᾗ < ᾟ (8095)
> ᾠ: (8096) ᾠ < ᾨ (8104)
> ᾡ: (8097) ᾡ < ᾩ (8105)
> ᾢ: (8098) ᾢ < ᾪ (8106)
> ᾣ: (8099) ᾣ < ᾫ (8107)
> ᾤ: (8100) ᾤ < ᾬ (8108)
> ᾥ: (8101) ᾥ < ᾭ (8109)
> ᾦ: (8102) ᾦ < ᾮ (8110)
> ᾧ: (8103) ᾧ < ᾯ (8111)
> ᾨ: (8096) ᾠ < ᾨ (8104)
> ᾩ: (8097) ᾡ < ᾩ (8105)
> ᾪ: (8098) ᾢ < ᾪ (8106)
> ᾫ: (8099) ᾣ < ᾫ (8107)
> ᾬ: (8100) ᾤ < ᾬ (8108)
> ᾭ: (8101) ᾥ < ᾭ (8109)
> ᾮ: (8102) ᾦ < ᾮ (8110)
> ᾯ: (8103) ᾧ < ᾯ (8111)
> ᾰ: (8112) ᾰ < Ᾰ (8120)
> ᾱ: (8113) ᾱ < Ᾱ (8121)
> ᾳ: (8115) ᾳ < ᾼ (8124)
> Ᾰ: (8112) ᾰ < Ᾰ (8120)
> Ᾱ: (8113) ᾱ < Ᾱ (8121)
> Ὰ: (8048) ὰ < Ὰ (8122)
> Ά: (8049) ά < Ά (8123)
> ᾼ: (8115) ᾳ < ᾼ (8124)
> ῃ: (8131) ῃ < ῌ (8140)
> Ὲ: (8050) ὲ < Ὲ (8136)
> Έ: (8051) έ < Έ (8137)
> Ὴ: (8052) ὴ < Ὴ (8138)
> Ή: (8053) ή < Ή (8139)
> ῌ: (8131) ῃ < ῌ (8140)
> ῐ: (8144) ῐ < Ῐ (8152)
> ῑ: (8145) ῑ < Ῑ (8153)
> Ῐ: (8144) ῐ < Ῐ (8152)
> Ῑ: (8145) ῑ < Ῑ (8153)
> Ὶ: (8054) ὶ < Ὶ (8154)
> Ί: (8055) ί < Ί (8155)
> ῠ: (8160) ῠ < Ῠ (8168)
> ῡ: (8161) ῡ < Ῡ (8169)
> ῥ: (8165) ῥ < Ῥ (8172)
> Ῠ: (8160) ῠ < Ῠ (8168)
> Ῡ: (8161) ῡ < Ῡ (8169)
> Ὺ: (8058) ὺ < Ὺ (8170)
> Ύ: (8059) ύ < Ύ (8171)
> Ῥ: (8165) ῥ < Ῥ (8172)
> ῳ: (8179) ῳ < ῼ (8188)
> Ὸ: (8056) ὸ < Ὸ (8184)
> Ό: (8057) ό < Ό (8185)
> Ὼ: (8060) ὼ < Ὼ (8186)
> Ώ: (8061) ώ < Ώ (8187)
> ῼ: (8179) ῳ < ῼ (8188)
> Ω: (969) ω < Ω (8486)
> K: (107) k < K (8490)
> Å: (229) å < Å (8491)
> Ɫ: (619) ɫ < Ɫ (11362)
> Ᵽ: (7549) ᵽ < Ᵽ (11363)
> Ɽ: (637) ɽ < Ɽ (11364)
> Ɑ: (593) ɑ < Ɑ (11373)
> Ɱ: (625) ɱ < Ɱ (11374)
> Ɐ: (592) ɐ < Ɐ (11375)
> Ɒ: (594) ɒ < Ɒ (11376)
> Ȿ: (575) ȿ < Ȿ (11390)
> Ɀ: (576) ɀ < Ɀ (11391)
> Ᵹ: (7545) ᵹ < Ᵹ (42877)
> Ɥ: (613) ɥ < Ɥ (42893)
> Ɦ: (614) ɦ < Ɦ (42922)
> Ɜ: (604) ɜ < Ɜ (42923)
> Ɡ: (609) ɡ < Ɡ (42924)
> Ɬ: (620) ɬ < Ɬ (42925)
> Ɪ: (618) ɪ < Ɪ (42926)
> Ʞ: (670) ʞ < Ʞ (42928)
> Ʇ: (647) ʇ < Ʇ (42929)
> Ʝ: (669) ʝ < Ʝ (42930)
> {noformat}
> Sample usage:
> {code:sql}  @Test public void nameSetRange() {
>     final NameSet names = new NameSet();
>     names.range("ͼ", false);
>   }{code}
> {noformat}java.lang.IllegalArgumentException: fromKey > toKey
>       at java.base/java.util.TreeMap$NavigableSubMap.<init>(TreeMap.java:1365)
>       at java.base/java.util.TreeMap$AscendingSubMap.<init>(TreeMap.java:1852)
>       at java.base/java.util.TreeMap.subMap(TreeMap.java:910)
>       at java.base/java.util.TreeSet.subSet(TreeSet.java:325)
>       at org.apache.calcite.util.NameSet.range(NameSet.java:92)
>       at org.apache.calcite.util.UtilTest.nameSetRange(UtilTest.java:2111)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43){noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to