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

Knut Anders Hatlen commented on DERBY-3173:
-------------------------------------------

Thank you, Eranda. The patch looks fine to me, but I think there's a small 
problem with this change in SQLTime:

@@ -551,7 +526,6 @@
                 else if( hour > 12)
                     throw StandardException.newException( 
SQLState.LANG_DATE_RANGE_EXCEPTION);
             }
-            valueString = parser.checkEnd();
             encodedTime = computeEncodedTime( hour, minute, second);
         }
         else

The call to checkEnd() performs some extra input validation that we shouldn't 
remove. For example, the following query used to be rejected:

ij> values time('05 am pm');
ERROR 22007: The syntax of the string representation of a datetime value is 
incorrect.

With the patch, the query is now accepted:

ij> values time('05 am pm');
1       
--------
05:00:00

1 row selected

Instead of removing that line completely, I think we should keep the call to 
checkEnd() and just discard the return value.

> Removed cached String objects from SQLDate, SQLTime and SQLTimestamp
> --------------------------------------------------------------------
>
>                 Key: DERBY-3173
>                 URL: https://issues.apache.org/jira/browse/DERBY-3173
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Daniel John Debrunner
>            Assignee: Eranda Sooriyabandara
>            Priority: Minor
>         Attachments: Derby-3173.diff, Derby-3173.diff, sqldate.diff
>
>
> These type classes save a copy of the value when it is converted to a String 
> (e.g. through a ResultSet.getString()). This complicates the code & increases 
> memory use for little value, in most cases the cached value will never be 
> used. E.g. for any type of scan the String value will be discarded when 
> moving to the next row. In most cases applications do not call getString() 
> twice on a column.
> The code has some historical basis in the fact that these types used to be 
> represented by a java.sql.Time/Date/Timestamp object and its conversion to 
> String was slow. Now the conversion of all these types to a String is simple.
> In addition I think the getString() will sometimes return a non-normalized 
> form, if the value is set by a non-standard format then the cached String is 
> set to the non-standard format, not the standard format, I believe this is 
> incorrect.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to