Skip to content

Commit

Permalink
Fix alter error (#107)
Browse files Browse the repository at this point in the history
  • Loading branch information
koxudaxi authored Mar 18, 2021
1 parent 108a720 commit e93498d
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ fun Application.module(testing: Boolean = false) {
)
val executeStatementResponse = try {
val statement = if (request.parameters == null) {
resource.connection.prepareStatement(request.sql, Statement.RETURN_GENERATED_KEYS)
resource.connection.prepareStatementWithReturnGeneratedKeys(request.sql)
} else {
val parameters = Parameters.parse(request.sql)
val statement =
resource.connection.prepareStatement(parameters.sql, Statement.RETURN_GENERATED_KEYS)
resource.connection.prepareStatementWithReturnGeneratedKeys(parameters.sql)
parameters.apply(statement, request.parameters.map { Pair(it.name, it.castValue) }.toMap())
statement
}
Expand Down Expand Up @@ -151,7 +151,7 @@ fun Application.module(testing: Boolean = false) {
val batchExecuteStatementResponse = try {
val parameters = Parameters.parse(request.sql)
val statement =
resource.connection.prepareStatement(parameters.sql, Statement.RETURN_GENERATED_KEYS)
resource.connection.prepareStatementWithReturnGeneratedKeys(parameters.sql)

request.parameterSets.forEach { parameterSet ->
parameters.apply(statement, parameterSet.map { Pair(it.name, it.castValue) }.toMap())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.koxudaxi.localDataApi

import java.sql.ResultSet
import java.sql.Statement
import java.sql.Types
import java.sql.*
import java.util.*

val LONG = listOf(Types.INTEGER, Types.TINYINT, Types.SMALLINT, Types.BIGINT)
Expand Down Expand Up @@ -58,6 +56,19 @@ val Statement.records: List<List<Field>>
return records.toList()
}

fun isReturnGeneratedKeysType(sql: String): Boolean {
val match = Regex("^[^a-zA-Z]*([a-zA-Z]+)").find(sql) ?: return false
return match.destructured.component1().toUpperCase() in listOf("INSERT", "UPDATE", "DELETE")
}

fun Connection.prepareStatementWithReturnGeneratedKeys(sql: String): PreparedStatement {
return if (isReturnGeneratedKeysType(sql)) {
this.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
} else {
this.prepareStatement(sql)
}
}

fun createColumnMetadata(resultSet: ResultSet): List<ColumnMetadata> {
return resultSet.metaData.let {
IntRange(1, resultSet.metaData.columnCount).map { index ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@ class LocalDataApiTest {
assertEquals(listOf(Types.TIMESTAMP, Types.TIMESTAMP_WITH_TIMEZONE), DATETIME)
}

@Test
fun testIsReturnGeneratedKeysType() {
assertEquals( false, isReturnGeneratedKeysType("selEct 1"))
assertEquals( false, isReturnGeneratedKeysType(" selEct 1"))
assertEquals( true, isReturnGeneratedKeysType(" insert 1"))
assertEquals( true, isReturnGeneratedKeysType(" Update 1"))
assertEquals( true, isReturnGeneratedKeysType(" DELETE 1"))
assertEquals( false, isReturnGeneratedKeysType(" CREATE 1"))
assertEquals( false, isReturnGeneratedKeysType(" ;"))
assertEquals( false, isReturnGeneratedKeysType(""))
}

@Test
fun testMySQL() {
mockkStatic(System::class)
Expand Down

0 comments on commit e93498d

Please sign in to comment.