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

Dag H. Wanvik commented on DERBY-5525:
--------------------------------------

Yes, my point was exactly that the metadata type is for the resultset. not the 
column. So, in order not to get truncation, one would have to write something 
like:
 
values cast(upper('Straße') as varchar(7));

This also displays correctly:

ij> values upper('Straße') , '1234567';
1      
-------
STRASSE
1234567

So, we should this issue as invalid. Do we generate a truncation warning, 
though?

> I don't see much value in adding a truncation warning for the case where 
> upper() can be evaluated at compilation-time:
>
> select ... where col1 = upper( 'Straße' )

I think we should. The semantics for the case according to the standard should 
be the same. Since we *do* generate a result set which shows the truncation, I 
believe we should generate the warning as well.

As for lcase and ucase in JDBC, aren't these supposed to map to underlying 
functions if they are available? If so, why should they have different 
semantics? Sounds confusing to me..

                
> Precision for UPPER function is wrong if the returned value is longer than 
> the literal argument
> -----------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5525
>                 URL: https://issues.apache.org/jira/browse/DERBY-5525
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.8.2.2
>            Reporter: Knut Anders Hatlen
>
> Seen in ij in a database with territory based collation and German locale:
> ==vv= COPIED FROM IJ CONSOLE =vv==
> ij> VALUES UCASE('Straßenbahn');
> 1
> -----------
> STRASSENBA&
> 1 Zeile ausgewählt
> ==================================
> And with JDBC calls:
>     Connection c = DriverManager.getConnection(
>             "jdbc:derby:memory:db;create=true;territory=de_DE;" +
>             "collation=TERRITORY_BASED");
>     Statement s = c.createStatement();
>     ResultSet rs = s.executeQuery("values upper('Straße')");
>     System.out.println(rs.getMetaData().getPrecision(1));
>     rs.next();
>     System.out.println(rs.getString(1));
> This prints
> 6
> STRASSE
> The precision is wrong, since the returned value is 7 characters long.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to