]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5605 enable mysql client cursor in mybatis
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 31 Oct 2014 06:48:45 +0000 (07:48 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 31 Oct 2014 06:48:45 +0000 (07:48 +0100)
sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
sonar-core/src/main/java/org/sonar/core/persistence/dialect/AbstractDialect.java
sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java
sonar-core/src/main/java/org/sonar/core/persistence/dialect/MySql.java
sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml
sonar-core/src/test/java/org/sonar/core/persistence/dialect/H2Test.java
sonar-core/src/test/java/org/sonar/core/persistence/dialect/MySqlTest.java
sonar-core/src/test/java/org/sonar/core/persistence/dialect/OracleTest.java
sonar-core/src/test/java/org/sonar/core/persistence/dialect/PostgreSqlTest.java

index ad721c7bf0b65a1c67db8f6321ab2d4eefe41b2d..2d0c0d97428b31ec2efb42315e37b93a3e4a5f51 100644 (file)
@@ -55,6 +55,7 @@ import org.sonar.core.measure.db.*;
 import org.sonar.core.notification.db.NotificationQueueDto;
 import org.sonar.core.notification.db.NotificationQueueMapper;
 import org.sonar.core.permission.*;
+import org.sonar.core.persistence.dialect.Dialect;
 import org.sonar.core.persistence.migration.v44.Migration44Mapper;
 import org.sonar.core.persistence.migration.v45.Migration45Mapper;
 import org.sonar.core.persistence.migration.v50.Migration50Mapper;
@@ -100,12 +101,14 @@ public class MyBatis implements BatchComponent, ServerComponent {
 
     Configuration conf = new Configuration();
     conf.setEnvironment(new Environment("production", createTransactionFactory(), database.getDataSource()));
-    conf.setDatabaseId(database.getDialect().getId());
     conf.setUseGeneratedKeys(true);
     conf.setLazyLoadingEnabled(false);
     conf.setJdbcTypeForNull(JdbcType.NULL);
-    conf.getVariables().setProperty("_true", database.getDialect().getTrueSqlValue());
-    conf.getVariables().setProperty("_false", database.getDialect().getFalseSqlValue());
+    Dialect dialect = database.getDialect();
+    conf.setDatabaseId(dialect.getId());
+    conf.getVariables().setProperty("_true", dialect.getTrueSqlValue());
+    conf.getVariables().setProperty("_false", dialect.getFalseSqlValue());
+    conf.getVariables().setProperty("_scrollFetchSize", String.valueOf(dialect.getScrollDefaultFetchSize()));
 
     loadAlias(conf, "ActiveDashboard", ActiveDashboardDto.class);
     loadAlias(conf, "Author", AuthorDto.class);
index a490947d80c12ab9287d64d8cc58dc24c069af50..0ba44347446e4725578351df986f8e3a8a850fdc 100644 (file)
@@ -77,4 +77,9 @@ abstract class AbstractDialect implements Dialect {
   public List<String> getConnectionInitStatements() {
     return Collections.emptyList();
   }
+
+  @Override
+  public int getScrollDefaultFetchSize() {
+    return 200;
+  }
 }
index 0effec959deb9fc44b34e25a86dc615ee6603ba4..e0061b20bf9ae73d455b5939c709b13ee41c4e86 100644 (file)
@@ -72,4 +72,6 @@ public interface Dialect {
    * @since 3.2
    */
   String getValidationQuery();
+
+  int getScrollDefaultFetchSize();
 }
index 2c6e0c5a135d64d85a476ec699d93b1a410949a9..ec740155b9f99455cf045d48d5731ee35d25af23 100644 (file)
@@ -55,4 +55,9 @@ public class MySql extends AbstractDialect {
       registerColumnType(Types.BLOB, "blob");
     }
   }
+
+  @Override
+  public int getScrollDefaultFetchSize() {
+    return Integer.MIN_VALUE;
+  }
 }
index 57fb48e104c2fa3410c0454fbf4da9c1667b36fd..4c751b3e87704ab6f3f5824a2d86b79f2a10e488 100644 (file)
     where i.kee=#{kee}
   </select>
 
-  <select id="selectAfterDate" resultType="Issue" fetchSize="200" resultSetType="FORWARD_ONLY">
+  <select id="selectAfterDate" resultType="Issue"
+          fetchSize="${_scrollFetchSize}" resultSetType="FORWARD_ONLY">
     select
     <include refid="issueColumns"/>
     from issues i
index d717e1c4509578486626568b7546f7cb03f7e6d6..aa5d0df49955268c739f7ed7254527c495e25c77 100644 (file)
@@ -25,25 +25,30 @@ import static org.fest.assertions.Assertions.assertThat;
 
 public class H2Test {
 
-  private H2 h2 = new H2();
+  H2 dialect = new H2();
 
   @Test
   public void matchesJdbcURL() {
-    assertThat(h2.matchesJdbcURL("jdbc:h2:foo")).isTrue();
-    assertThat(h2.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
+    assertThat(dialect.matchesJdbcURL("jdbc:h2:foo")).isTrue();
+    assertThat(dialect.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
   }
 
   @Test
   public void testBooleanSqlValues() {
-    assertThat(h2.getTrueSqlValue()).isEqualTo("true");
-    assertThat(h2.getFalseSqlValue()).isEqualTo("false");
+    assertThat(dialect.getTrueSqlValue()).isEqualTo("true");
+    assertThat(dialect.getFalseSqlValue()).isEqualTo("false");
   }
 
   @Test
   public void should_configure() {
-    assertThat(h2.getId()).isEqualTo("h2");
-    assertThat(h2.getActiveRecordDialectCode()).isEqualTo(".h2.");
-    assertThat(h2.getDefaultDriverClassName()).isEqualTo("org.h2.Driver");
-    assertThat(h2.getValidationQuery()).isEqualTo("SELECT 1");
+    assertThat(dialect.getId()).isEqualTo("h2");
+    assertThat(dialect.getActiveRecordDialectCode()).isEqualTo(".h2.");
+    assertThat(dialect.getDefaultDriverClassName()).isEqualTo("org.h2.Driver");
+    assertThat(dialect.getValidationQuery()).isEqualTo("SELECT 1");
+  }
+
+  @Test
+  public void testFetchSizeForScrolling() throws Exception {
+    assertThat(dialect.getScrollDefaultFetchSize()).isEqualTo(200);
   }
 }
index c276889d8afe1beb8fcf13ba567fccac7fa202ed..eb144f1e7155515dba02c287d9eb35f548858b8c 100644 (file)
@@ -49,4 +49,9 @@ public class MySqlTest {
     assertThat(mySql.getDefaultDriverClassName()).isEqualTo("com.mysql.jdbc.Driver");
     assertThat(mySql.getValidationQuery()).isEqualTo("SELECT 1");
   }
+
+  @Test
+  public void testFetchSizeForScrolling() throws Exception {
+    assertThat(mySql.getScrollDefaultFetchSize()).isEqualTo(Integer.MIN_VALUE);
+  }
 }
index 9d32fabfb570cc22d259986f169c6c439b67c036..28d61afa1f86a87f4651f68c16e5e4d62db9105f 100644 (file)
@@ -25,25 +25,30 @@ import static org.fest.assertions.Assertions.assertThat;
 
 public class OracleTest {
 
-  private Oracle oracle = new Oracle();
+  Oracle dialect = new Oracle();
 
   @Test
   public void matchesJdbcURL() {
-    assertThat(oracle.matchesJdbcURL("jdbc:oracle:thin:@localhost/XE")).isTrue();
-    assertThat(oracle.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
+    assertThat(dialect.matchesJdbcURL("jdbc:oracle:thin:@localhost/XE")).isTrue();
+    assertThat(dialect.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
   }
 
   @Test
   public void testBooleanSqlValues() {
-    assertThat(oracle.getTrueSqlValue()).isEqualTo("1");
-    assertThat(oracle.getFalseSqlValue()).isEqualTo("0");
+    assertThat(dialect.getTrueSqlValue()).isEqualTo("1");
+    assertThat(dialect.getFalseSqlValue()).isEqualTo("0");
   }
 
   @Test
   public void should_configure() {
-    assertThat(oracle.getId()).isEqualTo("oracle");
-    assertThat(oracle.getActiveRecordDialectCode()).isEqualTo("oracle");
-    assertThat(oracle.getDefaultDriverClassName()).isEqualTo("oracle.jdbc.OracleDriver");
-    assertThat(oracle.getValidationQuery()).isEqualTo("SELECT 1 FROM DUAL");
+    assertThat(dialect.getId()).isEqualTo("oracle");
+    assertThat(dialect.getActiveRecordDialectCode()).isEqualTo("oracle");
+    assertThat(dialect.getDefaultDriverClassName()).isEqualTo("oracle.jdbc.OracleDriver");
+    assertThat(dialect.getValidationQuery()).isEqualTo("SELECT 1 FROM DUAL");
+  }
+
+  @Test
+  public void testFetchSizeForScrolling() throws Exception {
+    assertThat(dialect.getScrollDefaultFetchSize()).isEqualTo(200);
   }
 }
index 5504041ac9493ccc61dfd1ffef69283a548fe6cf..5b62d359d9f4c337cf09591fee8129c0830fae8c 100644 (file)
@@ -25,31 +25,36 @@ import static org.fest.assertions.Assertions.assertThat;
 
 public class PostgreSqlTest {
 
-  private PostgreSql postgreSql = new PostgreSql();
+  PostgreSql dialect = new PostgreSql();
 
   @Test
   public void matchesJdbcURL() {
-    assertThat(postgreSql.matchesJdbcURL("jdbc:postgresql://localhost/sonar")).isTrue();
-    assertThat(postgreSql.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
+    assertThat(dialect.matchesJdbcURL("jdbc:postgresql://localhost/sonar")).isTrue();
+    assertThat(dialect.matchesJdbcURL("jdbc:hsql:foo")).isFalse();
   }
 
   @Test
   public void should_set_connection_properties() {
-    assertThat(postgreSql.getConnectionInitStatements()).isEqualTo(PostgreSql.INIT_STATEMENTS);
+    assertThat(dialect.getConnectionInitStatements()).isEqualTo(PostgreSql.INIT_STATEMENTS);
   }
 
 
   @Test
   public void testBooleanSqlValues() {
-    assertThat(postgreSql.getTrueSqlValue()).isEqualTo("true");
-    assertThat(postgreSql.getFalseSqlValue()).isEqualTo("false");
+    assertThat(dialect.getTrueSqlValue()).isEqualTo("true");
+    assertThat(dialect.getFalseSqlValue()).isEqualTo("false");
   }
 
   @Test
   public void should_configure() {
-    assertThat(postgreSql.getId()).isEqualTo("postgresql");
-    assertThat(postgreSql.getActiveRecordDialectCode()).isEqualTo("postgre");
-    assertThat(postgreSql.getDefaultDriverClassName()).isEqualTo("org.postgresql.Driver");
-    assertThat(postgreSql.getValidationQuery()).isEqualTo("SELECT 1");
+    assertThat(dialect.getId()).isEqualTo("postgresql");
+    assertThat(dialect.getActiveRecordDialectCode()).isEqualTo("postgre");
+    assertThat(dialect.getDefaultDriverClassName()).isEqualTo("org.postgresql.Driver");
+    assertThat(dialect.getValidationQuery()).isEqualTo("SELECT 1");
+  }
+
+  @Test
+  public void testFetchSizeForScrolling() throws Exception {
+    assertThat(dialect.getScrollDefaultFetchSize()).isEqualTo(200);
   }
 }