[ 
https://issues.apache.org/jira/browse/CALCITE-6433?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Iurii Gerzhedovich updated CALCITE-6433:
----------------------------------------
    Description: 
SUBSTRING function for cases when 3rd parameter (length) more than
Integer.MAX_VALUE can return empty result due to code do clamp
 that value and after that it can't be more than Integer.MAX_VALUE.
Simple way to reproduce :
append into *SqlOperatorTest* smth like:
{noformat}
    f.checkScalar(
        String.format("{fn SUBSTRING('abcdef', %d, %d)}", Integer.MIN_VALUE, 
10L + Integer.MAX_VALUE),
        "abcdef",
        "VARCHAR(6) NOT NULL");

{noformat}
it`s all due to check after clamping
{noformat}
public static String substring(String c, int s, int l) {
  ....
  long e = (long) s + (long) l; -- here we can got incorrect length 
  .....
  if (s > lc || e < 1L) {
    return "";
  }
.....{noformat}
 

 

  was:
SUBSTRING function for cases when 3rd parameter (length) more than
Integer.MAX_VALUE can return empty result due to code do clamp
 that value and after that it can't be more than Integer.MAX_VALUE.
Simple way to reproduce :
append into *SqlOperatorTest* smth like:
{noformat}
    f.checkScalar(
        String.format("{fn SUBSTRING('abcdef', %d, %d)}", Integer.MIN_VALUE, 
10L + Integer.MAX_VALUE),
        "abcdef",
        "VARCHAR(6) NOT NULL");

{noformat}
it`s all due to check after clamping
{noformat}
public static String substring(String c, int s, int l) {
  ....
  long e = (long) s + (long) l; -- here we can got incorrect length 
  .....
  
  if (s > lc || e < 1L) {
    return "";
  }
.....{noformat}
 

 


> SUBSTRING can return incorrect empty result for some parameters
> ---------------------------------------------------------------
>
>                 Key: CALCITE-6433
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6433
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.37.0
>            Reporter: Iurii Gerzhedovich
>            Priority: Major
>
> SUBSTRING function for cases when 3rd parameter (length) more than
> Integer.MAX_VALUE can return empty result due to code do clamp
>  that value and after that it can't be more than Integer.MAX_VALUE.
> Simple way to reproduce :
> append into *SqlOperatorTest* smth like:
> {noformat}
>     f.checkScalar(
>         String.format("{fn SUBSTRING('abcdef', %d, %d)}", Integer.MIN_VALUE, 
> 10L + Integer.MAX_VALUE),
>         "abcdef",
>         "VARCHAR(6) NOT NULL");
> {noformat}
> it`s all due to check after clamping
> {noformat}
> public static String substring(String c, int s, int l) {
>   ....
>   long e = (long) s + (long) l; -- here we can got incorrect length 
>   .....
>   if (s > lc || e < 1L) {
>     return "";
>   }
> .....{noformat}
>  
>  



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

Reply via email to