diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
new file mode 100644
index 000000000..aa3455c0a
--- /dev/null
+++ b/.github/workflows/benchmark.yml
@@ -0,0 +1,124 @@
+name: Benchmark
+
+on:
+ workflow_dispatch:
+ inputs:
+ clickhouse:
+ description: "ClickHouse version"
+ required: true
+ default: "latest"
+ java:
+ description: "Java version"
+ required: true
+ default: "8"
+ baseline:
+ description: "Baseline to compare"
+ required: true
+ default: "0.2.6"
+ driver:
+ description: "Driver version"
+ required: true
+ default: "0.3.0-SNAPSHOT"
+ options:
+ description: "Benchmark options"
+ required: true
+ default: "-prof gc 'Query|Insertion'"
+ pr:
+ description: "Pull request#"
+ required: false
+
+jobs:
+ benchmark:
+ runs-on: ubuntu-latest
+ name: Benchmark on demand
+ if: github.event_name == 'workflow_dispatch'
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v2
+ - name: Check out PR
+ run: |
+ git fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 \
+ origin pull/${{ github.event.inputs.pr }}/merge:merged-pr && git checkout merged-pr
+ if: github.event.inputs.pr != ''
+ - name: Set up JDK ${{ github.event.inputs.java }}
+ uses: actions/setup-java@v1
+ with:
+ java-version: ${{ github.event.inputs.java }}
+ continue-on-error: true
+ - name: Update version and group id
+ run: |
+ find . -type f -name "pom.xml" -exec sed -i -e 's|${revision}|${{ github.event.inputs.driver }}|g' \
+ -e 's|${parent.groupId}|tech.clickhouse|g' '{}' \;
+ sed -i -e 's|^\( \).*\(\)$|\1${{ github.event.inputs.driver }}\2|' pom.xml
+ continue-on-error: true
+ - name: Install driver as needed
+ run: mvn --batch-mode --update-snapshots -q -DskipTests install
+ if: endsWith(github.event.inputs.driver, '-SNAPSHOT')
+ continue-on-error: true
+ - name: Build project
+ run: |
+ cd clickhouse-benchmark
+ mvn --batch-mode --update-snapshots -Drevision=${{ github.event.inputs.driver }} \
+ -DclickhouseVersion=${{ github.event.inputs.clickhouse }} install
+ java -jar target/benchmarks.jar -rf json ${{ github.event.inputs.options }} > output.txt
+ echo "BENCHMARK_REPORT<> $GITHUB_ENV
+ tail -n +$(grep -n '^REMEMBER:' output.txt | tail -1 | awk -F: '{print $1+6}') output.txt | head -n -2 | grep -v ':ยท' >> $GITHUB_ENV
+ echo "EOF" >> $GITHUB_ENV
+ cd -
+ id: benchmark
+ continue-on-error: true
+ - name: Record benchmark results
+ run: |
+ mv -fv clickhouse-benchmark/jmh-result.json \
+ clickhouse-benchmark/docs/results/v${{ github.event.inputs.driver }}.json
+ if: github.event.inputs.pr == ''
+ continue-on-error: true
+ - name: Record pull request benchmark results
+ run: |
+ mv -fv clickhouse-benchmark/jmh-result.json \
+ clickhouse-benchmark/docs/results/pull-request_${{github.event.inputs.pr}}.json
+ if: github.event.inputs.pr != ''
+ continue-on-error: true
+ - name: Commit benchmark result
+ uses: zhicwu/add-and-commit@v7
+ with:
+ add: 'clickhouse-benchmark/docs/results/*.json'
+ author_name: zhicwu
+ author_email: 4270380+zhicwu@users.noreply.github.com
+ branch: develop
+ message: 'Record benchmark results'
+ push: true
+ continue-on-error: true
+ - name: Get commit hash
+ run: |
+ echo ::set-output name=hash::$(git log --pretty=format:'%H' -n 1)
+ id: commit
+ continue-on-error: true
+ - name: 'Comment PR'
+ uses: actions/github-script@v3
+ if: github.event.inputs.pr != ''
+ env:
+ PR_NO: ${{ github.event.inputs.pr }}
+ COMMIT_HASH: ${{ steps.commit.outputs.hash }}
+ COMPARE_TO: ${{ github.event.inputs.baseline }}
+ CLICKHOUSE_VRESION: ${{ github.event.inputs.clickhouse }}
+ DRIVER_VRESION: ${{ github.event.inputs.driver }}
+ JAVA_VERSION: ${{ github.event.inputs.java }}
+ PREV_STEP_RESULT: '${{ steps.benchmark.outcome }}'
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const issue_number = process.env.PR_NO;
+ const { repo: { owner, repo } } = context;
+ const result = process.env.PREV_STEP_RESULT;
+ const compareUrl = `http://jmh.morethan.io/?sources=https://raw.githubusercontent.com/${owner}/${repo}/develop/clickhouse-benchmark/docs/results/v${process.env.COMPARE_TO}.json,https://raw.githubusercontent.com/${owner}/${repo}/${process.env.COMMIT_HASH || 'develop'}/clickhouse-benchmark/docs/results/${issue_number ? 'pull-request_' + issue_number : 'v' + process.env.DRIVER_VERSION}.json`;
+ // const benchmarkUrl = `http://jmh.morethan.io/?source=https://raw.githubusercontent.com/${owner}/${repo}/${process.env.COMMIT_HASH || 'develop'}/clickhouse-benchmark/docs/results/${issue_number ? 'pull-request_' + issue_number : 'v' + process.env.DRIVER_VERSION}.json`;
+ const buildUrl = `https://github.com/${owner}/${repo}/actions/runs/${context.runId}`;
+ const flag = result === 'success'
+ ? ':green_circle:'
+ : (result === 'failure' ? ':red_circle:' : ':yellow_circle:');
+ const msg = `${flag} [benchmark](${compareUrl}) using JDK [${process.env.JAVA_VERSION}] and ClickHouse [${process.env.CLICKHOUSE_VRESION}]: [${result}](${buildUrl})`
+ + '\nExpand to see details...
\n\n```\n'
+ + process.env.BENCHMARK_REPORT || ''
+ + '\n```\n ';
+ github.issues.createComment({ issue_number, owner, repo, body: msg });
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 74f431ac3..bee23239a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,9 +5,11 @@ on:
branches:
- master
- develop
+ - 0.2.x
paths-ignore:
- - "CHANGELOG"
- "**.md"
+ - "docs/**"
+ - "**/CHANGELOG"
pull_request:
types:
@@ -15,17 +17,18 @@ on:
- synchronize
- reopened
paths-ignore:
- - "CHANGELOG"
- "**.md"
+ - "docs/**"
+ - "**/CHANGELOG"
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
- java: [8, 9, 11]
- # most recent LTS releases and latest stable build
- clickhouse: ["19.14", "20.3", "20.8", "latest"]
+ java: [8, 11]
+ # most recent LTS releases as well as latest stable builds
+ clickhouse: ["19.14", "20.3", "20.8", "20.10", "20.12", "21.2", "latest"]
name: Build using JDK ${{ matrix.java }} against ClickHouse ${{ matrix.clickhouse }}
steps:
- name: Check out Git repository
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d13b22284..1f158a1ad 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -6,7 +6,7 @@ on:
version:
description: "Release version"
required: true
- default: "0.2.6-SNAPSHOT"
+ default: "0.3.0-SNAPSHOT"
jobs:
release:
@@ -19,13 +19,14 @@ jobs:
- name: Install Java and Maven
uses: actions/setup-java@v1
with:
- java-version: 1.8
- - run: sed -i -e 's|^\( \).*\(\)$|\1${{ github.event.inputs.version }}\2|' pom.xml
+ java-version: 8
+ - run: find . -type f -name "pom.xml" -exec sed -i -e 's|${revision}|${{ github.event.inputs.version }}|g' -e 's|${parent.groupId}|tech.clickhouse|g' '{}' \;
+ - run: find . -type f -name "log4j.properties" -exec sed -i -e 's|DEBUG|WARN|g' '{}' \;
- name: Release Maven package
uses: samuelmeuli/action-maven-publish@v1
with:
maven_profiles: release
- maven_args: --batch-mode
+ maven_args: -q --batch-mode
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg_passphrase: ${{ secrets.GPG_PASSPHRASE }}
nexus_username: ${{ secrets.SONATYPE_USER }}
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 229a4aeee..f509ff779 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -14,23 +14,126 @@ on:
pr:
description: "Pull request#"
required: false
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ paths-ignore:
+ - "**.md"
+ - "docs/**"
+ - "**/CHANGELOG"
+ issue_comment:
+ types:
+ - created
+ - edited
jobs:
- verify:
+ verify-commented-pr:
runs-on: ubuntu-latest
- name: Verify branch/PR using JDK ${{ github.event.inputs.java }} against ClickHouse ${{ github.event.inputs.clickhouse }}
+ name: Verify commented PR
+ if: github.event_name == 'issue_comment' && github.event.issue.pull_request
steps:
+ - uses: zhicwu/pull-request-comment-trigger@master
+ id: check
+ with:
+ trigger: '@verify'
+ reaction: rocket
+ env:
+ GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
+ - name: Extra parameters from PR comment
+ if: steps.check.outputs.triggered == 'true'
+ uses: actions/github-script@v3
+ id: commented
+ env:
+ COMMENT_BODY: '${{ github.event.comment.body }}'
+ with:
+ script: |
+ const keyword = '@verify';
+ let buildArgs = process.env.COMMENT_BODY;
+ core.info(`Got commented body: ${buildArgs}`);
+ buildArgs = buildArgs.substring(buildArgs.lastIndexOf(keyword) + keyword.length);
+ const args = buildArgs.match(/[^\s]+/g);
+ core.info(`Got commented arguments: ${args}`);
+
+ return {
+ pr: context.issue.number,
+ clickhouse: args && args.length > 0 ? args[0] : "latest",
+ java: args && args.length > 1 ? args[1] : "8"
+ };
- name: Check out repository
uses: actions/checkout@v2
- if: github.event.inputs.pr == ''
- - name: Check out PR ${{ github.event.inputs.pr }}
+ - name: Check out commented PR
+ if: steps.check.outputs.triggered == 'true'
+ run: |
+ git fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin pull/${{ fromJSON(steps.commented.outputs.result).pr }}/merge:merged-pr && git checkout merged-pr
+ - name: Set up JDK
+ if: steps.check.outputs.triggered == 'true'
+ uses: actions/setup-java@v1
+ with:
+ java-version: ${{ fromJSON(steps.commented.outputs.result).java }}
+ continue-on-error: true
+ - name: Verify with Maven
+ if: steps.check.outputs.triggered == 'true'
+ run: mvn --batch-mode --update-snapshots -DclickhouseVersion=${{ fromJSON(steps.commented.outputs.result).clickhouse }} verify
+ id: maven
+ continue-on-error: true
+ - name: Comment PR
+ uses: actions/github-script@v3
+ if: steps.check.outputs.triggered == 'true'
+ env:
+ CLICKHOUSE_VRESION: ${{ fromJSON(steps.commented.outputs.result).clickhouse }}
+ JAVA_VERSION: ${{ fromJSON(steps.commented.outputs.result).java }}
+ PREV_STEP_RESULT: '${{ steps.maven.outcome }}'
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const { issue: { number: issue_number }, repo: { owner, repo } } = context;
+ const result = process.env.PREV_STEP_RESULT;
+ const buildUrl = `https://github.com/${owner}/${repo}/actions/runs/${context.runId}`;
+ const flag = result === 'success'
+ ? ':green_circle:'
+ : (result === 'failure' ? ':red_circle:' : ':yellow_circle:');
+ const msg = `${flag} verify using JDK [${process.env.JAVA_VERSION}] and ClickHouse [${process.env.CLICKHOUSE_VRESION}]: [${result}](${buildUrl})`;
+ github.issues.createComment({ issue_number, owner, repo, body: msg });
+
+ verify-on-demand:
+ runs-on: ubuntu-latest
+ name: Verify on demand
+ if: github.event_name == 'workflow_dispatch'
+ steps:
+ - name: Check out repository
uses: actions/checkout@v2
+ - name: Check out PR
+ run: |
+ git fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 origin pull/${{ github.event.inputs.pr }}/merge:merged-pr && git checkout merged-pr
if: github.event.inputs.pr != ''
- with:
- ref: refs/remotes/pull/${{ github.event.inputs.pr }}/merge
- name: Set up JDK ${{ github.event.inputs.java }}
uses: actions/setup-java@v1
with:
java-version: ${{ github.event.inputs.java }}
+ continue-on-error: true
- name: Verify with Maven
run: mvn --batch-mode --update-snapshots -DclickhouseVersion=${{ github.event.inputs.clickhouse }} verify
+ id: maven
+ continue-on-error: true
+ - name: 'Comment PR'
+ uses: actions/github-script@v3
+ if: github.event.inputs.pr != ''
+ env:
+ PR_NO: ${{ github.event.inputs.pr }}
+ CLICKHOUSE_VRESION: ${{ github.event.inputs.clickhouse }}
+ JAVA_VERSION: ${{ github.event.inputs.java }}
+ PREV_STEP_RESULT: '${{ steps.maven.outcome }}'
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const issue_number = process.env.PR_NO;
+ const { repo: { owner, repo } } = context;
+ const result = process.env.PREV_STEP_RESULT;
+ const buildUrl = `https://github.com/${owner}/${repo}/actions/runs/${context.runId}`;
+ const flag = result === 'success'
+ ? ':green_circle:'
+ : (result === 'failure' ? ':red_circle:' : ':yellow_circle:');
+ const msg = `${flag} verify using JDK [${process.env.JAVA_VERSION}] and ClickHouse [${process.env.CLICKHOUSE_VRESION}]: [${result}](${buildUrl})`;
+ github.issues.createComment({ issue_number, owner, repo, body: msg });
diff --git a/.gitignore b/.gitignore
index a3764496c..285aa2d41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
# VSCode
.vscode
+.factorypath
# Eclipse
.classpath
diff --git a/clickhouse-benchmark/docs/results/v0.2.4.json b/clickhouse-benchmark/docs/results/v0.2.4.json
new file mode 100644
index 000000000..e69de29bb
diff --git a/clickhouse-benchmark/docs/results/v0.2.5.json b/clickhouse-benchmark/docs/results/v0.2.5.json
new file mode 100644
index 000000000..e69de29bb
diff --git a/clickhouse-benchmark/docs/results/v0.2.6.json b/clickhouse-benchmark/docs/results/v0.2.6.json
new file mode 100644
index 000000000..e69de29bb
diff --git a/clickhouse-benchmark/pom.xml b/clickhouse-benchmark/pom.xml
new file mode 100644
index 000000000..c967c9eb6
--- /dev/null
+++ b/clickhouse-benchmark/pom.xml
@@ -0,0 +1,189 @@
+
+ 4.0.0
+
+ tech.clickhouse
+ clickhouse-benchmark
+ ${revision}
+ jar
+
+ clickhouse-benchmark
+
+
+ 0.3.0-SNAPSHOT
+ 1.4.4
+ 2.5.3
+ 2.7.2
+ 8.0.23
+ 2.5.3
+ 1.15.2
+ UTF-8
+ 1.27
+ 1.8
+ benchmarks
+
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+ provided
+
+
+
+
+ ru.yandex.clickhouse
+ clickhouse-jdbc
+ ${revision}
+ shaded
+
+
+ *
+ *
+
+
+
+
+ cc.blynk.clickhouse
+ clickhouse4j
+ ${clickhouse4j-driver.version}
+
+
+ *
+ *
+
+
+
+
+ org.mariadb.jdbc
+ mariadb-java-client
+ ${mariadb-driver.version}
+
+
+ *
+ *
+
+
+
+
+ mysql
+ mysql-connector-java
+ ${mysql-driver.version}
+
+
+ *
+ *
+
+
+
+
+ com.github.housepower
+ clickhouse-native-jdbc-shaded
+ ${native-driver.version}
+
+
+ *
+ *
+
+
+
+
+ org.testcontainers
+ testcontainers
+ ${testcontainers.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ ${javac.target}
+ ${javac.target}
+ ${javac.target}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.1
+
+
+ package
+
+ shade
+
+
+ ${shade.name}
+
+
+ org.openjdk.jmh.Main
+
+
+
+
+
+ *:*
+
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 2.5
+
+
+ maven-deploy-plugin
+ 2.8.1
+
+
+ maven-install-plugin
+ 2.5.1
+
+
+ maven-jar-plugin
+ 2.4
+
+
+ maven-javadoc-plugin
+ 2.9.1
+
+
+ maven-resources-plugin
+ 2.6
+
+
+ maven-site-plugin
+ 3.3
+
+
+ maven-source-plugin
+ 2.2.1
+
+
+ maven-surefire-plugin
+ 2.17
+
+
+
+
+
diff --git a/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Basic.java b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Basic.java
new file mode 100644
index 000000000..da543ee77
--- /dev/null
+++ b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Basic.java
@@ -0,0 +1,34 @@
+package tech.clickhouse.benchmark;
+
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.Collections;
+
+import org.openjdk.jmh.annotations.Benchmark;
+
+public class Basic extends JdbcBenchmark {
+ @Benchmark
+ public int selectOneRandomNumber(ClientState state) throws Throwable {
+ final int num = (int) (Math.random() * 1000);
+
+ try (Statement stmt = executeQuery(state, "select ? as n", num)) {
+ ResultSet rs = stmt.getResultSet();
+
+ rs.next();
+
+ if (num != rs.getInt(1)) {
+ throw new IllegalStateException();
+ }
+
+ return num;
+ }
+ }
+
+ @Benchmark
+ public int insertOneRandomNumber(ClientState state) throws Throwable {
+ final int num = (int) (Math.random() * 1000);
+
+ return executeInsert(state, "insert into test_insert(i) values(?)",
+ Collections.enumeration(Collections.singletonList(new Object[] { num })));
+ }
+}
diff --git a/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/ClientState.java b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/ClientState.java
new file mode 100644
index 000000000..cc22324e7
--- /dev/null
+++ b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/ClientState.java
@@ -0,0 +1,61 @@
+package tech.clickhouse.benchmark;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import org.openjdk.jmh.annotations.Level;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+
+@State(Scope.Thread)
+public class ClientState {
+ @Param(value = { "clickhouse4j", Constants.CLICKHOUSE_DRIVER, "clickhouse-native-jdbc-shaded",
+ "mariadb-java-client", "mysql-connector-java" })
+ private String client;
+
+ @Param(value = { Constants.NORMAL_STATEMENT, Constants.PREPARED_STATEMENT })
+ private String statement;
+
+ private Connection conn;
+
+ @Setup(Level.Trial)
+ public void doSetup(ServerState serverState) throws Exception {
+ JdbcDriver driver = JdbcDriver.from(client);
+
+ try {
+ conn = ((java.sql.Driver) Class.forName(driver.getClassName()).getDeclaredConstructor().newInstance())
+ .connect(String.format(driver.getUrlTemplate(), serverState.getHost(),
+ serverState.getPort(driver.getDefaultPort()), serverState.getDatabase(),
+ serverState.getUser(), serverState.getPassword()), new Properties());
+
+ try (Statement s = conn.createStatement()) {
+ s.execute(
+ "create table if not exists test_insert(i Nullable(UInt64), s Nullable(String), t Nullable(DateTime))engine=Memory");
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+ @TearDown(Level.Trial)
+ public void doTearDown() throws SQLException {
+ try (Statement s = conn.createStatement()) {
+ s.execute("drop table if exists test_insert");
+ }
+ conn.close();
+ }
+
+ public Connection getConnection() {
+ return this.conn;
+ }
+
+ public boolean usePreparedStatement() {
+ return Constants.PREPARED_STATEMENT.equals(this.statement);
+ }
+}
diff --git a/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Constants.java b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Constants.java
new file mode 100644
index 000000000..e2873579b
--- /dev/null
+++ b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Constants.java
@@ -0,0 +1,18 @@
+package tech.clickhouse.benchmark;
+
+public interface Constants {
+ public static final String CLICKHOUSE_DRIVER = "clickhouse-jdbc";
+
+ public static final String DEFAULT_HOST = "127.0.0.1";
+ public static final String DEFAULT_DB = "system";
+ public static final String DEFAULT_USER = "default";
+ public static final String DEFAULT_PASSWD = "";
+
+ public static final int GRPC_PORT = 9100;
+ public static final int HTTP_PORT = 8123;
+ public static final int MYSQL_PORT = 3307;
+ public static final int NATIVE_PORT = 9000;
+
+ public static final String NORMAL_STATEMENT = "normal";
+ public static final String PREPARED_STATEMENT = "prepared";
+}
diff --git a/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Insertion.java b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Insertion.java
new file mode 100644
index 000000000..15fa43f49
--- /dev/null
+++ b/clickhouse-benchmark/src/main/java/tech/clickhouse/benchmark/Insertion.java
@@ -0,0 +1,76 @@
+package tech.clickhouse.benchmark;
+
+import java.sql.Timestamp;
+// import java.util.Collections;
+import java.util.Enumeration;
+
+import org.openjdk.jmh.annotations.Benchmark;
+
+public class Insertion extends JdbcBenchmark {
+ // @Benchmark
+ // public int insertOneNumber(ClientState state) throws Throwable {
+ // return executeInsert(state, "insert into test_insert(i) values(?)",
+ // Collections.enumeration(Collections.singletonList(new Object[] { (int)
+ // (Math.random() * 1000) })));
+ // }
+
+ @Benchmark
+ public int insert10kUInt64Rows(ClientState state) throws Throwable {
+ final int rows = 10000;
+ final int num = (int) (Math.random() * rows);
+
+ return executeInsert(state, "insert into test_insert(i) values(?)", new Enumeration