harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Beyer" <ndbe...@apache.org>
Subject Re: svn commit: r689001 - in /harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql: Date.java Time.java Timestamp.java
Date Wed, 27 Aug 2008 21:33:43 GMT
Are there any associated test cases with this change? On a quick
cursory look, I didn't see any existing tests. Did I miss them? If
not, we need to start requiring some test cases for "simple
improvements" like this to continue functional correctness.

-Nathan

On Tue, Aug 26, 2008 at 3:59 AM,  <qiuxx@apache.org> wrote:
> Author: qiuxx
> Date: Tue Aug 26 01:59:50 2008
> New Revision: 689001
>
> URL: http://svn.apache.org/viewvc?rev=689001&view=rev
> Log:
> Apply for HARMONY-5958,([classlib][sql][performance] - improve performance of java.sql.Date/Time/Timestamp.toString())
>
> Modified:
>    harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java
>    harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java
>    harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java
>
> Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java?rev=689001&r1=689000&r2=689001&view=diff
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java (original)
> +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Date.java Tue
Aug 26 01:59:50 2008
> @@ -17,8 +17,6 @@
>
>  package java.sql;
>
> -import java.text.SimpleDateFormat;
> -
>  /**
>  * A Date class which can consume and produce dates in SQL Date format.
>  * <p>
> @@ -175,8 +173,28 @@
>      */
>     @Override
>     public String toString() {
> -        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$
> -        return dateFormat.format(this);
> +        StringBuilder sb = new StringBuilder(10);
> +
> +        format((getYear() + 1900), 4, sb);
> +        sb.append('-');
> +        format((getMonth() + 1), 2, sb);
> +        sb.append('-');
> +        format(getDate(), 2, sb);
> +
> +        return sb.toString();
> +    }
> +
> +    private static final String PADDING = "0000";  //$NON-NLS-1$
> +
> +    /*
> +    * Private method to format the time
> +    */
> +    private void format(int date, int digits, StringBuilder sb) {
> +        String str = String.valueOf(date);
> +        if (digits - str.length() > 0) {
> +            sb.append(PADDING.substring(0, digits - str.length()));
> +        }
> +        sb.append(str);
>     }
>
>     /**
>
> Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java?rev=689001&r1=689000&r2=689001&view=diff
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java (original)
> +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Time.java Tue
Aug 26 01:59:50 2008
> @@ -17,7 +17,6 @@
>
>  package java.sql;
>
> -import java.text.SimpleDateFormat;
>  import java.util.Date;
>
>  /**
> @@ -180,8 +179,28 @@
>      */
>     @Override
>     public String toString() {
> -        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$
> -        return dateFormat.format(this);
> +        StringBuilder sb = new StringBuilder(8);
> +
> +        format(getHours(), 2, sb);
> +        sb.append(':');
> +        format(getMinutes(), 2, sb);
> +        sb.append(':');
> +        format(getSeconds(), 2, sb);
> +
> +        return sb.toString();
> +    }
> +
> +    private static final String PADDING = "00";  //$NON-NLS-1$
> +
> +    /*
> +    * Private method to format the time
> +    */
> +    private void format(int date, int digits, StringBuilder sb) {
> +        String str = String.valueOf(date);
> +        if (digits - str.length() > 0) {
> +            sb.append(PADDING.substring(0, digits - str.length()));
> +        }
> +        sb.append(str);
>     }
>
>     /**
>
> Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java
> URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java?rev=689001&r1=689000&r2=689001&view=diff
> ==============================================================================
> --- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java
(original)
> +++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/java/sql/Timestamp.java
Tue Aug 26 01:59:50 2008
> @@ -309,62 +309,43 @@
>     @SuppressWarnings("deprecation")
>     @Override
>     public String toString() {
> -        /*
> -         * Use a DecimalFormat to lay out the nanosecond value as a simple
> -         * string of 9 integers, with leading Zeros
> -         */
> -        DecimalFormat decimalFormat = new DecimalFormat("0"); //$NON-NLS-1$
> -        decimalFormat.setMinimumIntegerDigits(9);
> -        decimalFormat.setMaximumIntegerDigits(9);
> -        String theNanos = decimalFormat.format(nanos);
> -        theNanos = stripTrailingZeros(theNanos);
> -
> -        String year = format((getYear() + 1900), 4);
> -        String month = format((getMonth() + 1), 2);
> -        String date = format(getDate(), 2);
> -        String hours = format(getHours(), 2);
> -        String minutes = format(getMinutes(), 2);
> -        String seconds = format(getSeconds(), 2);
> -
> -        return year + '-' + month + '-' + date + ' ' + hours + ':' + minutes
> -                + ':' + seconds + '.' + theNanos;
> -    }
> +        StringBuilder sb = new StringBuilder(29);
>
> -    /*
> -     * Private method to format the time
> -     */
> -    private String format(int date, int digits) {
> -        StringBuilder dateStringBuffer = new StringBuilder(String.valueOf(date));
> -        while (dateStringBuffer.length() < digits) {
> -            dateStringBuffer = dateStringBuffer.insert(0, '0');
> +        format((getYear() + 1900), 4, sb);
> +        sb.append('-');
> +        format((getMonth() + 1), 2, sb);
> +        sb.append('-');
> +        format(getDate(), 2, sb);
> +        sb.append(' ');
> +        format(getHours(), 2, sb);
> +        sb.append(':');
> +        format(getMinutes(), 2, sb);
> +        sb.append(':');
> +        format(getSeconds(), 2, sb);
> +        sb.append('.');
> +        if (nanos == 0) {
> +            sb.append('0');
> +        } else {
> +            format(nanos, 9, sb);
> +            while (sb.charAt(sb.length() - 1) == '0') {
> +                sb.setLength(sb.length() - 1);
> +            }
>         }
> -        return dateStringBuffer.toString();
> +
> +        return sb.toString();
>     }
>
> -    /*
> -     * Private method to strip trailing '0' characters from a string. @param
> -     * inputString the starting string @return a string with the trailing zeros
> -     * stripped - will leave a single 0 at the beginning of the string
> -     */
> -    private String stripTrailingZeros(String inputString) {
> -        String finalString;
> +    private static final String PADDING = "000000000";  //$NON-NLS-1$
>
> -        int i;
> -        for (i = inputString.length(); i > 0; i--) {
> -            if (inputString.charAt(i - 1) != '0') {
> -                break;
> -            }
> -            /*
> -             * If the string has a 0 as its first character, return a string
> -             * with a single '0'
> -             */
> -            if (i == 1) {
> -                return "0"; //$NON-NLS-1$
> -            }
> +    /*
> +    * Private method to format the time
> +    */
> +    private void format(int date, int digits, StringBuilder sb) {
> +        String str = String.valueOf(date);
> +        if (digits - str.length() > 0) {
> +            sb.append(PADDING.substring(0, digits - str.length()));
>         }
> -
> -        finalString = inputString.substring(0, i);
> -        return finalString;
> +        sb.append(str);
>     }
>
>     /**
>
>
>

Mime
View raw message