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, <[EMAIL PROTECTED]> 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); > } > > /** > > >
