Skip to content

Commit a591979

Browse files
committed
fix: fix case-insensitive property name comparison in auto-mapper.
1 parent 5cb0c29 commit a591979

2 files changed

Lines changed: 42 additions & 39 deletions

File tree

core/src/main/kotlin/net/samyn/kapper/internal/KotlinDataClassMapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class KotlinDataClassMapper<T : Any>(
3030
)
3131
} else if (columns.size < properties.size) {
3232
val all = columns.map { it.name.lowercase() }
33-
val missing = properties.filter { !it.value.isOptional && !all.contains(it.value.name) }
33+
val missing = properties.filter { !it.value.isOptional && !all.contains(it.key) }
3434
if (missing.isNotEmpty()) {
3535
throw KapperMappingException("The following properties are non-optional and missing: ${missing.keys}")
3636
}

core/src/main/kotlin/net/samyn/kapper/internal/SQLTypesConverter.kt

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -158,47 +158,50 @@ fun convertDate(
158158
resultSet: ResultSet,
159159
fieldIndex: Int,
160160
dbFlavour: DbFlavour,
161-
): Date? {
161+
): Date? =
162162
when (dbFlavour) {
163163
DbFlavour.SQLITE -> {
164164
val date = resultSet.getObject(fieldIndex) ?: return null
165-
if (date is Long) {
166-
return Date(date)
165+
when (date) {
166+
is Long -> Date(date)
167+
is String -> convertSQliteDate(date)
168+
else -> throw KapperUnsupportedOperationException("Conversion from type ${date.javaClass} to Date is not supported")
167169
}
168-
if (date is String) {
169-
// https://sqlite.org/lang_datefunc.html#tmval
170-
if (date[2] == ':') {
171-
// time formats
172-
when (date.length) {
173-
5 -> return formatters["HH:mm"]!!.parse(date)
174-
6 -> return formatters["HH:mm'Z'"]!!.parse(date)
175-
8 -> return formatters["HH:mm:ss"]!!.parse(date)
176-
9 -> return formatters["HH:mm:ss'Z'"]!!.parse(date)
177-
12 -> return formatters["HH:mm:ss.SSS"]!!.parse(date)
178-
13 -> return formatters["HH:mm:ss.SSS'Z'"]!!.parse(date)
179-
}
180-
} else if (date.length > 10 && date[10] == 'T') {
181-
when (date.length) {
182-
16 -> return formatters["yyyy-MM-dd'T'HH:mm"]!!.parse(date)
183-
17 -> return formatters["yyyy-MM-dd'T'HH:mm'Z'"]!!.parse(date)
184-
19 -> return formatters["yyyy-MM-dd'T'HH:mm:ss"]!!.parse(date)
185-
20 -> return formatters["yyyy-MM-dd'T'HH:mm:ss'Z'"]!!.parse(date)
186-
23 -> return formatters["yyyy-MM-dd'T'HH:mm:ss.SSS"]!!.parse(date)
187-
24 -> return formatters["yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]!!.parse(date)
188-
}
189-
}
190-
when (date.length) {
191-
10 -> return formatters["yyyy-MM-dd"]!!.parse(date)
192-
16 -> return formatters["yyyy-MM-dd HH:mm"]!!.parse(date)
193-
17 -> return formatters["yyyy-MM-dd HH:mm'Z'"]!!.parse(date)
194-
19 -> return formatters["yyyy-MM-dd HH:mm:ss"]!!.parse(date)
195-
20 -> return formatters["yyyy-MM-dd HH:mm:ss'Z'"]!!.parse(date)
196-
23 -> return formatters["yyyy-MM-dd HH:mm:ss.SSS"]!!.parse(date)
197-
24 -> return formatters["yyyy-MM-dd HH:mm:ss.SSS'Z'"]!!.parse(date)
198-
}
199-
}
200-
throw KapperUnsupportedOperationException("Conversion from type ${date.javaClass} to Date is not supported")
201170
}
202-
else -> return resultSet.getDate(fieldIndex)?.let { Date(it.time) }
171+
else -> resultSet.getDate(fieldIndex)?.let { Date(it.time) }
203172
}
204-
}
173+
174+
private fun convertSQliteDate(date: String): Date? =
175+
when {
176+
date[2] == ':' ->
177+
when (date.length) {
178+
5 -> formatters["HH:mm"]!!.parse(date)
179+
6 -> formatters["HH:mm'Z'"]!!.parse(date)
180+
8 -> formatters["HH:mm:ss"]!!.parse(date)
181+
9 -> formatters["HH:mm:ss'Z'"]!!.parse(date)
182+
12 -> formatters["HH:mm:ss.SSS"]!!.parse(date)
183+
13 -> formatters["HH:mm:ss.SSS'Z'"]!!.parse(date)
184+
else -> null
185+
}
186+
date.length > 10 && date[10] == 'T' ->
187+
when (date.length) {
188+
16 -> formatters["yyyy-MM-dd'T'HH:mm"]!!.parse(date)
189+
17 -> formatters["yyyy-MM-dd'T'HH:mm'Z'"]!!.parse(date)
190+
19 -> formatters["yyyy-MM-dd'T'HH:mm:ss"]!!.parse(date)
191+
20 -> formatters["yyyy-MM-dd'T'HH:mm:ss'Z'"]!!.parse(date)
192+
23 -> formatters["yyyy-MM-dd'T'HH:mm:ss.SSS"]!!.parse(date)
193+
24 -> formatters["yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]!!.parse(date)
194+
else -> null
195+
}
196+
else ->
197+
when (date.length) {
198+
10 -> formatters["yyyy-MM-dd"]!!.parse(date)
199+
16 -> formatters["yyyy-MM-dd HH:mm"]!!.parse(date)
200+
17 -> formatters["yyyy-MM-dd HH:mm'Z'"]!!.parse(date)
201+
19 -> formatters["yyyy-MM-dd HH:mm:ss"]!!.parse(date)
202+
20 -> formatters["yyyy-MM-dd HH:mm:ss'Z'"]!!.parse(date)
203+
23 -> formatters["yyyy-MM-dd HH:mm:ss.SSS"]!!.parse(date)
204+
24 -> formatters["yyyy-MM-dd HH:mm:ss.SSS'Z'"]!!.parse(date)
205+
else -> null
206+
}
207+
} ?: throw KapperUnsupportedOperationException("Cannot convert $date to Date")

0 commit comments

Comments
 (0)