Title: [919] trunk/activerecord-jdbc/src/java/jdbc_adapter/JdbcMySQLSpec.java:
JRUBY-2205: Fix N^2 allocation of bytelists for mysql quoting (taw)
- Revision
- 919
- Author
- nicksieger
- Date
- 2008-02-29 16:33:56 -0500 (Fri, 29 Feb 2008)
Log Message
JRUBY-2205: Fix N^2 allocation of bytelists for mysql quoting (taw)
Modified Paths
Diff
Modified: trunk/activerecord-jdbc/src/java/jdbc_adapter/JdbcMySQLSpec.java (918 => 919)
--- trunk/activerecord-jdbc/src/java/jdbc_adapter/JdbcMySQLSpec.java 2008-02-28 01:13:28 UTC (rev 918)
+++ trunk/activerecord-jdbc/src/java/jdbc_adapter/JdbcMySQLSpec.java 2008-02-29 21:33:56 UTC (rev 919)
@@ -49,8 +49,9 @@
private final static ByteList ESCAPE = new ByteList(new byte[]{'\\','\\'});
public static IRubyObject quote_string(IRubyObject recv, IRubyObject string) {
- boolean replacementFound = false;
ByteList bl = ((RubyString) string).getByteList();
+ ByteList blNew = new ByteList();
+ int startOfExtend = bl.begin;
for(int i = bl.begin; i < bl.begin + bl.realSize; i++) {
ByteList rep = null;
@@ -64,23 +65,18 @@
case '\\': rep = ESCAPE; break;
default: continue;
}
-
- // On first replacement allocate a different bytelist so we don't manip original
- if(!replacementFound) {
- i-= bl.begin;
- bl = new ByteList(bl);
- replacementFound = true;
- }
-
- bl.replace(i, 1, rep);
- i+=1;
+ if(i > startOfExtend)
+ blNew.append(bl, startOfExtend, i-startOfExtend);
+ blNew.append(rep, 0, 2);
+ startOfExtend = i+1;
}
-
- if(!replacementFound) {
- return string;
+ // Nothing changed, can return original
+ if (startOfExtend == bl.begin) {
+ return string;
}
+ if (bl.begin + bl.realSize > startOfExtend)
+ blNew.append(bl, startOfExtend, bl.begin + bl.realSize - startOfExtend);
-
- return recv.getRuntime().newStringShared(bl);
+ return recv.getRuntime().newStringShared(blNew);
}
}
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel