aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-core/src
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2018-02-13 20:18:49 +0100
committerSimon Brandhof <simon.brandhof@sonarsource.com>2018-02-22 09:44:52 +0100
commit0b2bd218c88655f24bc541086dfee18d3364a9e1 (patch)
tree31528458dc23d762d79f2ca6b526982b0db2eae5 /server/sonar-db-core/src
parente353cd6f2bd37ea143d5806e9ee85323cddd1f97 (diff)
downloadsonarqube-0b2bd218c88655f24bc541086dfee18d3364a9e1.tar.gz
sonarqube-0b2bd218c88655f24bc541086dfee18d3364a9e1.zip
SONAR-10356 Oracle error on some WS involving more than 1000 projects
Diffstat (limited to 'server/sonar-db-core/src')
-rw-r--r--server/sonar-db-core/src/main/java/org/sonar/db/DatabaseUtils.java11
-rw-r--r--server/sonar-db-core/src/test/java/org/sonar/db/DatabaseUtilsTest.java16
2 files changed, 27 insertions, 0 deletions
diff --git a/server/sonar-db-core/src/main/java/org/sonar/db/DatabaseUtils.java b/server/sonar-db-core/src/main/java/org/sonar/db/DatabaseUtils.java
index 243436a84a3..9b850e40f65 100644
--- a/server/sonar-db-core/src/main/java/org/sonar/db/DatabaseUtils.java
+++ b/server/sonar-db-core/src/main/java/org/sonar/db/DatabaseUtils.java
@@ -47,6 +47,7 @@ import javax.annotation.Nullable;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
+import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.Lists.newArrayList;
import static java.lang.String.format;
@@ -338,4 +339,14 @@ public class DatabaseUtils {
}
};
}
+
+ /**
+ * @throws IllegalArgumentException if the collection is not null and has strictly more
+ * than {@link #PARTITION_SIZE_FOR_ORACLE} values.
+ */
+ public static void checkThatNotTooManyConditions(@Nullable Collection<?> values, String message) {
+ if (values != null) {
+ checkArgument(values.size() <= PARTITION_SIZE_FOR_ORACLE, message);
+ }
+ }
}
diff --git a/server/sonar-db-core/src/test/java/org/sonar/db/DatabaseUtilsTest.java b/server/sonar-db-core/src/test/java/org/sonar/db/DatabaseUtilsTest.java
index 98c6d1e4661..b32852e37e6 100644
--- a/server/sonar-db-core/src/test/java/org/sonar/db/DatabaseUtilsTest.java
+++ b/server/sonar-db-core/src/test/java/org/sonar/db/DatabaseUtilsTest.java
@@ -332,4 +332,20 @@ public class DatabaseUtilsTest {
assertThat(DatabaseUtils.tableExists("foo", connection)).isFalse();
}
}
+
+ @Test
+ public void checkThatNotTooManyConditions_does_not_fail_if_less_than_1000_conditions() {
+ DatabaseUtils.checkThatNotTooManyConditions(null, "unused");
+ DatabaseUtils.checkThatNotTooManyConditions(Collections.emptySet(), "unused");
+ DatabaseUtils.checkThatNotTooManyConditions(Collections.nCopies(10, "foo"), "unused");
+ DatabaseUtils.checkThatNotTooManyConditions(Collections.nCopies(1_000, "foo"), "unused");
+ }
+
+ @Test
+ public void checkThatNotTooManyConditions_throws_IAE_if_strictly_more_than_1000_conditions() {
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("the message");
+
+ DatabaseUtils.checkThatNotTooManyConditions(Collections.nCopies(1_001, "foo"), "the message");
+ }
}