Skip to content

Commit

Permalink
Merge branch 'main' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
ShreckYe committed Mar 15, 2024
2 parents abd1507 + cd18455 commit cf266f2
Show file tree
Hide file tree
Showing 21 changed files with 857 additions and 185 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

## Note

This project currently serves our own use and there are temporarily no guides or docs. See [DatabaseClient.kt](lib/src/main/kotlin/com/huanshankeji/exposedvertxsqlclient/DatabaseClient.kt) and [DatabaseClientSql.kt](lib/src/main/kotlin/com/huanshankeji/exposedvertxsqlclient/sql/DatabaseClientSql.kt) for the major APIs.

Only PostgreSQL with [Reactive PostgreSQL Client](https://vertx.io/docs/vertx-pg-client/java/) is currently supported.

## Maven coordinate
Expand Down
10 changes: 7 additions & 3 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
plugins {
`kotlin-dsl`
}

repositories {
mavenLocal()
gradlePluginPortal()
Expand All @@ -11,7 +15,7 @@ repositories {
}

dependencies {
implementation(kotlin("gradle-plugin", "1.8.10"))
implementation("com.huanshankeji:common-gradle-dependencies:0.3.2-20220728")
implementation("com.huanshankeji.team:gradle-plugins:0.4.1")
implementation(kotlin("gradle-plugin", "1.9.23"))
implementation("com.huanshankeji:common-gradle-dependencies:0.7.1-20240314")
implementation("com.huanshankeji.team:gradle-plugins:0.5.1")
}
13 changes: 13 additions & 0 deletions buildSrc/src/main/kotlin/VersionsAndDependencies.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import com.huanshankeji.CommonDependencies
import com.huanshankeji.CommonGradleClasspathDependencies
import com.huanshankeji.CommonVersions

val projectVersion = "0.3.0-SNAPSHOT"

val commonVersions = CommonVersions()
val commonDependencies = CommonDependencies(commonVersions)
val commonGradleClasspathDependencies = CommonGradleClasspathDependencies(commonVersions)

object DependencyVersions {
val exposedAdtMapping = "0.1.0"
}
26 changes: 26 additions & 0 deletions buildSrc/src/main/kotlin/conventions.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import com.huanshankeji.team.`Shreck Ye`
import com.huanshankeji.team.pomForTeamDefaultOpenSource
import com.huanshankeji.team.repositoriesAddTeamGithubPackagesMavenRegistry
import org.gradle.kotlin.dsl.repositories

plugins {
id("com.huanshankeji.team.with-group")
id("com.huanshankeji.kotlin-jvm-library-sonatype-ossrh-publish-conventions")
id("com.huanshankeji.team.default-github-packages-maven-publish")
}

repositories {
mavenLocal()
mavenCentral()
}
repositoriesAddTeamGithubPackagesMavenRegistry("kotlin-common")

kotlin.jvmToolchain(8)

version = projectVersion

publishing.publications.getByName<MavenPublication>("maven") {
pomForTeamDefaultOpenSource(project, "Exposed Vert.x SQL Client", "Exposed on top of Vert.x Reactive SQL Client") {
`Shreck Ye`()
}
}
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
29 changes: 17 additions & 12 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -133,26 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Expand Down
20 changes: 10 additions & 10 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

Expand All @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

Expand Down
41 changes: 13 additions & 28 deletions lib/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,31 +1,14 @@
import com.huanshankeji.CommonDependencies
import com.huanshankeji.CommonVersions
import com.huanshankeji.team.`Shreck Ye`
import com.huanshankeji.team.pomForTeamDefaultOpenSource
import com.huanshankeji.team.repositoriesAddTeamGithubPackagesMavenRegistry

plugins {
id("com.huanshankeji.team.with-group")
id("com.huanshankeji.kotlin-jvm-library-sonatype-ossrh-publish-conventions")
id("com.huanshankeji.team.default-github-packages-maven-publish")
}

repositories {
mavenLocal()
mavenCentral()
conventions
id("com.huanshankeji.benchmark.kotlinx-benchmark-jvm-conventions")
}
repositoriesAddTeamGithubPackagesMavenRegistry("kotlin-common")

val commonVersions = CommonVersions(kotlinCommon = "0.3.0")
val commonDependencies = CommonDependencies(commonVersions)

kotlin.jvmToolchain(8)

dependencies {
api(commonDependencies.exposed.core()) // TODO: use `implementation` when possible
// TODO: remove the Exposed JDBC dependency and the PostgresSQL dependency when there is no need to to generate SQLs with an Exposed transaction
runtimeOnly(commonDependencies.exposed.module("jdbc"))
api(commonDependencies.kotlinCommon.exposed())
implementation("com.huanshankeji:exposed-adt-mapping:${DependencyVersions.exposedAdtMapping}")

with(commonDependencies.vertx) {
implementation(platformStackDepchain())
Expand All @@ -41,18 +24,20 @@ dependencies {
implementation(commonDependencies.kotlinCommon.net())
}


// for PostgreSQL
dependencies {
runtimeOnly(commonDependencies.postgreSql())
implementation(commonDependencies.vertx.moduleWithoutVersion("pg-client"))
}

version = "0.2.0"

publishing.publications.getByName<MavenPublication>("maven") {
artifactId = rootProject.name + "-postgresql"

pomForTeamDefaultOpenSource(project, "Exposed Vert.x SQL Client", "Exposed on top of Vert.x Reactive SQL Client") {
`Shreck Ye`()
afterEvaluate {
// for the benchmarks
dependencies {
with(commonDependencies.testContainers) {
"benchmarksImplementation"(platformBom())
"benchmarksImplementation"(postgreSql)
}
"benchmarksImplementation"(commonDependencies.slf4j.simple())
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.huanshankeji.exposed.benchmark

import kotlinx.benchmark.Measurement
import kotlinx.benchmark.Scope
import kotlinx.benchmark.State
import kotlinx.benchmark.Warmup

@State(Scope.Benchmark)
@Warmup(time = 1, iterations = 2)
@Measurement(time = 1, iterations = 2)
abstract class AbstractBenchmark
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.huanshankeji.exposed.benchmark

import kotlinx.benchmark.Benchmark
import kotlinx.benchmark.Scope
import kotlinx.benchmark.State

@State(Scope.Benchmark)
class EmptyBenchmark : AbstractBenchmark() {
// for comparison
@Benchmark
fun empty() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.huanshankeji.exposed.benchmark

import com.huanshankeji.exposed.benchmark.table.VarcharTable
import com.huanshankeji.exposed.deleteAllStatement
import com.huanshankeji.exposed.deleteWhereStatement
import com.huanshankeji.exposed.insertStatement
import com.huanshankeji.exposed.updateStatement
import kotlinx.benchmark.*
import kotlinx.coroutines.*
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.statements.Statement
import org.jetbrains.exposed.sql.transactions.transaction

@State(Scope.Benchmark)
class PreparedSqlGenerationBenchmark : WithContainerizedDatabaseBenchmark() {
enum class StatementEnum(val statement: Statement<*>) {
SelectAll(VarcharTable.selectAll()),
SelectWhere(VarcharTable.select(VarcharTable.id eq 0L)),
Insert(VarcharTable.insertStatement { it[varcharColumn] = "string" }),
Update(VarcharTable.updateStatement({ VarcharTable.id eq 0L }) {
it[varcharColumn] = "string"
}),
DeleteAll(VarcharTable.deleteAllStatement()),
DeleteStatement(VarcharTable.deleteWhereStatement { VarcharTable.id eq 0L })
}

@Param("SelectAll", "SelectWhere", "Insert", "Update", "DeleteAll", "DeleteStatement")
lateinit var statementEnum: StatementEnum
val statement get() = statementEnum.statement

/*
var transaction: Transaction? = null
val releaseTransactionMutex = Mutex(true)
@OptIn(DelicateCoroutinesApi::class)
val context = newSingleThreadContext("keep transaction alive")
override fun setUp() {
// for debugging purposes
fun println(x:Int) = println("break point $x")
super.setUp()
println(1)
runBlocking {
println(2)
val setTransactionMutex = Mutex(true)
println(3)
CoroutineScope(context).launch {
// doesn't work because the transaction is stored into the current thread's `ThreadLocal` for `arguments()` to use
newSuspendedTransaction (db = database) {
println(4)
transaction = this
println(5)
setTransactionMutex.unlock()
println(6)
releaseTransactionMutex.lock()
println(7)
}
}
println(8)
setTransactionMutex.lock()
println(9)
}
println(10)
}
override fun tearDown() {
transaction = null
releaseTransactionMutex.unlock()
println("isActive: " + context.isActive)
context.cancel()
super.tearDown()
}
*/

companion object {
const val `1M` = 1000_000
}

@Benchmark
fun prepareSQL1M() {
transaction(database) {
repeat(`1M`) {
statement.prepareSQL(this)
}
}
}

@Benchmark
fun arguments1M() {
transaction(database) {
repeat(`1M`) {
statement.arguments()
}
}
}
}
Loading

0 comments on commit cf266f2

Please sign in to comment.