Add size property on ColumnMetadata class (#747)

* test getting column metadata correctly
* add size property on ColumnMetadata
This commit is contained in:
kenta.koyama
2020-01-07 21:08:50 +09:00
committed by Andrey.Tarashevskiy
parent 3af66148d7
commit c435a2bc8d
3 changed files with 36 additions and 2 deletions

View File

@@ -219,7 +219,7 @@ abstract class FunctionProvider {
* type:
* @see java.sql.Types
*/
data class ColumnMetadata(val name: String, val type: Int, val nullable: Boolean)
data class ColumnMetadata(val name: String, val type: Int, val nullable: Boolean, val size: Int?)
interface DatabaseDialect {
val name: String

View File

@@ -42,7 +42,9 @@ class JdbcDatabaseMetadataImpl(database: String, val metadata: DatabaseMetaData)
override fun columns(vararg tables: Table): Map<Table, List<ColumnMetadata>> {
val rs = metadata.getColumns(databaseName, oracleSchema, "%", "%")
val result = rs.extractColumns(tables) {
it.getString("TABLE_NAME") to ColumnMetadata(it.getString("COLUMN_NAME")/*.quoteIdentifierWhenWrongCaseOrNecessary(tr)*/, it.getInt("DATA_TYPE"), it.getBoolean("NULLABLE"))
//@see java.sql.DatabaseMetaData.getColumns
val columnMetadata = ColumnMetadata(it.getString("COLUMN_NAME")/*.quoteIdentifierWhenWrongCaseOrNecessary(tr)*/, it.getInt("DATA_TYPE"), it.getBoolean("NULLABLE"), it.getInt("COLUMN_SIZE").takeIf { it != 0 })
it.getString("TABLE_NAME") to columnMetadata
}
rs.close()
return result

View File

@@ -0,0 +1,32 @@
package org.jetbrains.exposed.sql.tests.shared
import org.jetbrains.exposed.dao.id.LongIdTable
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.tests.DatabaseTestsBase
import org.jetbrains.exposed.sql.tests.TestDB
import org.jetbrains.exposed.sql.vendors.ColumnMetadata
import org.junit.Test
import java.sql.Types
class ConnectionTests : DatabaseTestsBase() {
object People : LongIdTable() {
val name = varchar("name", 80).nullable()
}
@Test
fun testGettingColumnMetadata() {
withDb (TestDB.H2){
SchemaUtils.create(People)
val columnMetadata = connection.metadata {
requireNotNull(columns(People)[People])
}.toSet()
val expected = setOf(
ColumnMetadata("ID", Types.BIGINT, false, 19),
ColumnMetadata("NAME", Types.VARCHAR, true, 80)
)
assertEquals(expected, columnMetadata)
}
}
}