fun getArrayColumnType()

in exposed-core/src/main/kotlin/org/jetbrains/exposed/v1/core/statements/api/PreparedStatementApi.kt [63:96]


    fun getArrayColumnType(type: String): ArrayColumnType<*, *> {
        if (type == "CHAR") {
            return ArrayColumnType<Char, List<Char>>(CharacterColumnType())
        }

        if (type.startsWith("DECIMAL")) {
            val specs = type.substringAfter("DECIMAL").trim('(', ')')
                .takeUnless { it.isEmpty() }
                ?.split(", ")
                ?.map { it.toIntOrNull() }
            // same default values used in exposed-core DecimalColumnType()
            val precision = specs?.firstOrNull() ?: MathContext.DECIMAL64.precision
            val scale = specs?.lastOrNull() ?: 20
            return ArrayColumnType<BigDecimal, List<BigDecimal>>(DecimalColumnType(precision, scale))
        }

        val dialect = org.jetbrains.exposed.v1.core.vendors.currentDialect
        return when (type) {
            dialect.dataTypeProvider.byteType() -> ArrayColumnType<Byte, List<Byte>>(ByteColumnType())
            dialect.dataTypeProvider.ubyteType() -> ArrayColumnType<UByte, List<UByte>>(UByteColumnType())
            dialect.dataTypeProvider.shortType() -> ArrayColumnType<Short, List<Short>>(ShortColumnType())
            dialect.dataTypeProvider.ushortType() -> ArrayColumnType<UShort, List<UShort>>(UShortColumnType())
            dialect.dataTypeProvider.integerType() -> ArrayColumnType<Int, List<Int>>(IntegerColumnType())
            dialect.dataTypeProvider.uintegerType() -> ArrayColumnType<UInt, List<UInt>>(UIntegerColumnType())
            dialect.dataTypeProvider.longType() -> ArrayColumnType<Long, List<Long>>(LongColumnType())
            dialect.dataTypeProvider.ulongType() -> ArrayColumnType<ULong, List<ULong>>(ULongColumnType())
            dialect.dataTypeProvider.floatType() -> ArrayColumnType<Float, List<Float>>(FloatColumnType())
            dialect.dataTypeProvider.doubleType() -> ArrayColumnType<Double, List<Double>>(DoubleColumnType())
            dialect.dataTypeProvider.binaryType() -> ArrayColumnType<ByteArray, List<ByteArray>>(BasicBinaryColumnType())
            dialect.dataTypeProvider.booleanType() -> ArrayColumnType<Boolean, List<Boolean>>(BooleanColumnType())
            dialect.dataTypeProvider.uuidType() -> ArrayColumnType<UUID, List<UUID>>(UUIDColumnType())
            else -> ArrayColumnType<String, List<String>>(VarCharColumnType())
        }
    }