You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Konstantin Orlov (Jira)" <ji...@apache.org> on 2022/10/27 12:18:00 UTC

[jira] [Commented] (IGNITE-17997) Whitespaces at the end are ignored during string comparison

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

Konstantin Orlov commented on IGNITE-17997:
-------------------------------------------

Hi [~akhitrin]! According to SQL Standard (in standard 1999 it's chapter 8.2 `<comparison predicate>`, p 3.b of general rules): 

{code:java}
If the length in characters of X is not equal to the length in characters of Y, then the shorter string is effectively replaced, for the purposes of comparison, with a copy of itself that has been extended to the length of the longer string by concatenation on the right of one or more pad characters, where the pad character is chosen based on CS. If CS has the NO PAD characteristic, then the pad character is an implementation-dependent character different from any character in the character set of X and Y that collates less than any string under CS. Otherwise, the pad character is a <space>. {code}
 

Type inference for literal is working in a way to find the most restrictive type. In your example, these will be CHAR(1) and CHAR(4) accordingly. With that said, I consider the result of your example rather valid.

> Whitespaces at the end are ignored during string comparison
> -----------------------------------------------------------
>
>                 Key: IGNITE-17997
>                 URL: https://issues.apache.org/jira/browse/IGNITE-17997
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 3.0.0-beta1
>            Reporter: Andrey Khitrin
>            Priority: Major
>
> In 3.0.0-Beta-1:
> {code:java}
> sql-cli> select 'a' = 'a' as t1, 'a' = 'b' as t2, 'a' = 'a   ' as t3, 'a' = '   a' as t4;
> ╔══════╤═══════╤══════╤═══════╗
> ║ T1   │ T2    │ T3   │ T4    ║
> ╠══════╪═══════╪══════╪═══════╣
> ║ true │ false │ true │ false ║
> ╚══════╧═══════╧══════╧═══════╝
> {code}
> Tests T1, T2, and T4 show correct behavior. But in test T2 we see that string 'a' is considered being equal to string 'a   '  (same string but with arbitrary amount of whitespaces at the end). This is incorrect behavior.
> This issue may have the same nature as IGNITE-17996, but it's just a hypothesis.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)