<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -142,6 +142,14 @@ module ::JdbcSpec
       &quot;[#{name}]&quot;
     end
 
+    def quoted_true
+      quote true
+    end
+
+    def quoted_false
+      quote false
+    end
+
     def change_order_direction(order)
       order.split(&quot;,&quot;).collect {|fragment|
         case fragment</diff>
      <filename>lib/jdbc_adapter/jdbc_mssql.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 module JdbcAdapter
   module Version
-    VERSION = &quot;0.9.1&quot;
+    VERSION = &quot;0.9.2&quot;
   end
 end</diff>
      <filename>lib/jdbc_adapter/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ public class RubyJdbcConnection extends RubyObject {
     private static final String[] TABLE_TYPE = new String[]{&quot;TABLE&quot;};
 
     private static RubyObjectAdapter rubyApi;
-    
+
     protected RubyJdbcConnection(Ruby runtime, RubyClass metaClass) {
         super(runtime, metaClass);
     }
@@ -103,13 +103,13 @@ public class RubyJdbcConnection extends RubyObject {
 
     @JRubyMethod(name = &quot;begin&quot;)
     public IRubyObject begin(ThreadContext context) throws SQLException {
-        try {
+        final Ruby runtime = context.getRuntime();
+        return (IRubyObject) withConnectionAndRetry(context, new SQLBlock() {
+          public Object call(Connection c) throws SQLException {
             getConnection(true).setAutoCommit(false);
-        } catch (Exception e) {
-            throw wrap(context, e);
-        }
-
-        return context.getRuntime().getNil();
+            return runtime.getNil();
+          }
+        });
     }
 
     @JRubyMethod(name = {&quot;columns&quot;, &quot;columns_internal&quot;}, required = 1, optional = 2)
@@ -300,7 +300,7 @@ public class RubyJdbcConnection extends RubyObject {
                 DatabaseMetaData metadata = c.getMetaData();
                 String tableName = caseConvertIdentifierForJdbc(metadata, tableNameArg);
                 String schemaName = caseConvertIdentifierForJdbc(metadata, schemaNameArg);
-                
+
                 ResultSet resultSet = null;
                 List indexes = new ArrayList();
                 try {
@@ -387,13 +387,13 @@ public class RubyJdbcConnection extends RubyObject {
     public IRubyObject native_database_types() {
         return getInstanceVariable(&quot;@native_database_types&quot;);
     }
-    
+
 
     @JRubyMethod(name = &quot;primary_keys&quot;, required = 1)
     public IRubyObject primary_keys(ThreadContext context, IRubyObject tableName) throws SQLException {
         return context.getRuntime().newArray(primaryKeys(context, tableName.toString()));
     }
-    
+
     protected List primaryKeys(final ThreadContext context, final String tableNameArg) {
         return (List) withConnectionAndRetry(context, new SQLBlock() {
             public Object call(Connection c) throws SQLException {
@@ -423,11 +423,14 @@ public class RubyJdbcConnection extends RubyObject {
         return setConnection(getConnectionFactory().newConnection());
     }
 
+
     @JRubyMethod(name = &quot;rollback&quot;)
     public IRubyObject rollback(ThreadContext context) throws SQLException {
-        try {
+        final Ruby runtime = context.getRuntime();
+        return (IRubyObject) withConnectionAndRetry(context, new SQLBlock() {
+          public Object call(Connection c) throws SQLException {
             Connection connection = getConnection(true);
-    
+
             if (!connection.getAutoCommit()) {
                 try {
                     connection.rollback();
@@ -435,18 +438,17 @@ public class RubyJdbcConnection extends RubyObject {
                     connection.setAutoCommit(true);
                 }
             }
-    
-            return context.getRuntime().getNil();
-        } catch (Exception e) {
-            throw wrap(context, e);
-        }
+
+            return runtime.getNil();
+          }
+        });
     }
 
     @JRubyMethod(name = &quot;select?&quot;, required = 1, meta = true, frame = false)
     public static IRubyObject select_p(ThreadContext context, IRubyObject recv, IRubyObject _sql) {
         ByteList sql = rubyApi.convertToRubyString(_sql).getByteList();
 
-        return context.getRuntime().newBoolean(startsWithNoCaseCmp(sql, SELECT) || 
+        return context.getRuntime().newBoolean(startsWithNoCaseCmp(sql, SELECT) ||
                 startsWithNoCaseCmp(sql, SHOW) || startsWithNoCaseCmp(sql, CALL));
     }
 
@@ -461,7 +463,7 @@ public class RubyJdbcConnection extends RubyObject {
 
         return runtime.getNil();
     }
-    
+
     @JRubyMethod(name = &quot;tables&quot;)
     public IRubyObject tables(ThreadContext context) {
         return tables(context, null, null, null, TABLE_TYPE);
@@ -569,7 +571,7 @@ public class RubyJdbcConnection extends RubyObject {
     public static String caseConvertIdentifierForRails(DatabaseMetaData metadata, String value)
             throws SQLException {
         if (value == null) return null;
-        
+
         return metadata.storesUpperCaseIdentifiers() ? value.toLowerCase() : value;
     }
 
@@ -578,10 +580,10 @@ public class RubyJdbcConnection extends RubyObject {
      * storage case.  Methods like DatabaseMetaData.getPrimaryKeys() needs the table name to match
      * the internal storage name.  Arbtrary queries and the like DO NOT need to do this.
      */
-    public static String caseConvertIdentifierForJdbc(DatabaseMetaData metadata, String value) 
+    public static String caseConvertIdentifierForJdbc(DatabaseMetaData metadata, String value)
             throws SQLException {
         if (value == null) return null;
-        
+
         if (metadata.storesUpperCaseIdentifiers()) {
             return value.toUpperCase();
         } else if (metadata.storesLowerCaseIdentifiers()) {
@@ -632,7 +634,7 @@ public class RubyJdbcConnection extends RubyObject {
 
         return runtime.newFloat(floatValue);
     }
-    
+
     protected Connection getConnection() {
         return getConnection(false);
     }
@@ -721,7 +723,7 @@ public class RubyJdbcConnection extends RubyObject {
             } else {
                 return !c.isClosed();
             }
-        } catch (SQLException sx) {
+        } catch (Exception sx) {
             return true;
         }
     }
@@ -901,7 +903,7 @@ public class RubyJdbcConnection extends RubyObject {
 
                     String realschema = schemapat;
                     String realtablepat = tablepat;
-                    
+
                     if (realtablepat != null) realtablepat = caseConvertIdentifierForJdbc(metadata, realtablepat);
                     if (realschema != null) realschema = caseConvertIdentifierForJdbc(metadata, realschema);
 
@@ -909,7 +911,7 @@ public class RubyJdbcConnection extends RubyObject {
                     List arr = new ArrayList();
                     while (rs.next()) {
                         String name;
-                        
+
                         if (downCase) {
                             name = rs.getString(TABLE_NAME).toLowerCase();
                         } else {
@@ -970,14 +972,14 @@ public class RubyJdbcConnection extends RubyObject {
         // valid precision 1 decimal also.  Seems sketchy to me...
         if (numberAsBoolean &amp;&amp; precision != 1 &amp;&amp;
             resultSet.getInt(DATA_TYPE) == java.sql.Types.DECIMAL) precision = -1;
-        
+
         String type = resultSet.getString(TYPE_NAME);
         if (precision &gt; 0) {
             type += &quot;(&quot; + precision;
             if(scale &gt; 0) type += &quot;,&quot; + scale;
             type += &quot;)&quot;;
         }
-        
+
         return type;
     }
 
@@ -1003,7 +1005,7 @@ public class RubyJdbcConnection extends RubyObject {
                 IRubyObject column = jdbcCol.callMethod(context, &quot;new&quot;,
                         new IRubyObject[] {
                             getInstanceVariable(&quot;@config&quot;),
-                            RubyString.newUnicodeString(runtime, 
+                            RubyString.newUnicodeString(runtime,
                                     caseConvertIdentifierForRails(metadata, rs.getString(COLUMN_NAME))),
                             defaultValueFromResultSet(runtime, rs),
                             RubyString.newUnicodeString(runtime, typeFromResultSet(rs, isOracle)),
@@ -1110,7 +1112,7 @@ public class RubyJdbcConnection extends RubyObject {
 
         return end;
     }
-    
+
     private static byte[] CALL = new byte[]{'c', 'a', 'l', 'l'};
     private static byte[] INSERT = new byte[] {'i', 'n', 's', 'e', 'r', 't'};
     private static byte[] SELECT = new byte[] {'s', 'e', 'l', 'e', 'c', 't'};</diff>
      <filename>src/java/jdbc_adapter/RubyJdbcConnection.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f71fcb67fa3b4e4ee75b318d4b12781ebaa9adcf</id>
    </parent>
    <parent>
      <id>8f2cf7c7fa280c8df686592c88006121a09f5f89</id>
    </parent>
  </parents>
  <author>
    <name>David Kellum</name>
    <email>dek-oss@gravitext.com</email>
  </author>
  <url>http://github.com/nicksieger/activerecord-jdbc-adapter/commit/e0a354d77f7005c118c958727634ad8736acd742</url>
  <id>e0a354d77f7005c118c958727634ad8736acd742</id>
  <committed-date>2009-05-09T09:43:59-07:00</committed-date>
  <authored-date>2009-05-09T09:43:59-07:00</authored-date>
  <message>Merge branch 'master' of git://github.com/nicksieger/activerecord-jdbc-adapter</message>
  <tree>81630c1a1768d1aeb553006deed9ab337e4445e7</tree>
  <committer>
    <name>David Kellum</name>
    <email>dek-oss@gravitext.com</email>
  </committer>
</commit>
