Skip to content

Commit

Permalink
ORA-00972: identifier is too long. Oracle 11g #654
Browse files Browse the repository at this point in the history
  • Loading branch information
Tapac committed Oct 12, 2019
1 parent dbded9e commit 188aca0
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions exposed/src/main/kotlin/org/jetbrains/exposed/sql/Database.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.jetbrains.exposed.sql

import org.jetbrains.exposed.sql.transactions.*
import org.jetbrains.exposed.sql.transactions.DEFAULT_ISOLATION_LEVEL
import org.jetbrains.exposed.sql.transactions.DEFAULT_REPETITION_ATTEMPTS
import org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager
import org.jetbrains.exposed.sql.transactions.TransactionManager
import org.jetbrains.exposed.sql.vendors.*
import java.math.BigDecimal
import java.sql.Connection
Expand Down Expand Up @@ -59,13 +62,21 @@ class Database private constructor(val connector: () -> Connection) {
private val supportsQuotedMixedId = metadata.supportsMixedCaseQuotedIdentifiers()
val keywords = ANSI_SQL_2003_KEYWORDS + VENDORS_KEYWORDS[currentDialect.name].orEmpty() + metadata.sqlKeywords.split(',')
private val extraNameCharacters = metadata.extraNameCharacters!!
private val isOracle = metadata.databaseProductName == "Oracle"
private val identifierLengthLimit = run {
if (isOracle)
128
else
metadata.maxColumnNameLength.takeIf { it > 0 } ?: Int.MAX_VALUE
private val oracleVersion : OracleVersion = when {
metadata.databaseProductName != "Oracle" -> OracleVersion.NonOracle
metadata.databaseMajorVersion <= 11 -> OracleVersion.Oracle11g
else -> OracleVersion.`Oracle12+`
}
private enum class OracleVersion { Oracle11g, `Oracle12+`, NonOracle }

private val identifierLengthLimit by lazy {
when(oracleVersion) {
OracleVersion.Oracle11g -> 30
OracleVersion.`Oracle12+` -> 128
else -> metadata.maxColumnNameLength.takeIf { it > 0 } ?: Int.MAX_VALUE
}
}


val checkedIdentities = object : LinkedHashMap<String, Boolean> (100) {
override fun removeEldestEntry(eldest: MutableMap.MutableEntry<String, Boolean>?): Boolean = size >= 1000
Expand All @@ -91,7 +102,7 @@ class Database private constructor(val connector: () -> Connection) {
supportsMixedId -> false
alreadyLower && isLowerCaseIdentifiers -> false
alreadyUpper && isUpperCaseIdentifiers -> false
isOracle -> false
oracleVersion != OracleVersion.NonOracle -> false
supportsQuotedMixedId && (!alreadyLower && !alreadyUpper) -> true
else -> false
}
Expand All @@ -104,7 +115,7 @@ class Database private constructor(val connector: () -> Connection) {
alreadyQuoted && isUpperCaseQuotedIdentifiers -> identity.toUpperCase()
alreadyQuoted && isLowerCaseQuotedIdentifiers -> identity.toLowerCase()
supportsMixedIdentifiers -> identity
isOracle -> identity.toUpperCase()
oracleVersion != OracleVersion.NonOracle -> identity.toUpperCase()
isUpperCaseIdentifiers -> identity.toUpperCase()
isLowerCaseIdentifiers -> identity.toLowerCase()
else -> identity
Expand Down

0 comments on commit 188aca0

Please sign in to comment.