Skip to content

Commit a9b7569

Browse files
committed
feat: support auto detect datetime format
1 parent e11163a commit a9b7569

File tree

5 files changed

+30
-11
lines changed

5 files changed

+30
-11
lines changed

src/main/kotlin/team/yi/rsql/querydsl/RsqlConfig.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package team.yi.rsql.querydsl
22

33
import cz.jirutka.rsql.parser.ast.ComparisonNode
4+
import javax.persistence.EntityManager
45
import team.yi.rsql.querydsl.exception.RsqlException
56
import team.yi.rsql.querydsl.exception.TypeNotSupportedException
67
import team.yi.rsql.querydsl.handler.*
78
import team.yi.rsql.querydsl.operator.RsqlOperator
8-
import javax.persistence.EntityManager
99

1010
class RsqlConfig<E> private constructor(builder: Builder<E>) {
1111
private val fieldTypeHandlers: MutableList<Class<out FieldTypeHandler<*>>>
@@ -33,14 +33,11 @@ class RsqlConfig<E> private constructor(builder: Builder<E>) {
3333
DefaultSortFieldTypeHandler::class.java,
3434
)
3535

36-
val entityManager: EntityManager
37-
var operators: List<RsqlOperator>
38-
var dateFormat: String
36+
val entityManager: EntityManager = builder.entityManager
37+
var operators: List<RsqlOperator> = builder.operators.orEmpty()
38+
var dateFormat: String? = builder.dateFormat
3939

4040
init {
41-
entityManager = builder.entityManager
42-
operators = builder.operators.orEmpty()
43-
dateFormat = builder.dateFormat.orEmpty()
4441
fieldTypeHandlers = defaultFieldTypeHandlers.toMutableList()
4542
sortFieldTypeHandlers = defaultSortFieldTypeHandlers.toMutableList()
4643

src/main/kotlin/team/yi/rsql/querydsl/handler/DateTimeFieldTypeHandler.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ class DateTimeFieldTypeHandler<E : Comparable<E>>(
3737
override fun toComparable(value: String?): Comparable<E>? {
3838
if (value.isNullOrBlank()) return null
3939

40-
return DateUtil.parse(value, rsqlConfig.dateFormat) as? Comparable<E>?
40+
val dateFormat = rsqlConfig.dateFormat
41+
42+
return if (dateFormat.isNullOrEmpty()) {
43+
DateUtil.parse(value)
44+
} else {
45+
DateUtil.parse(value, dateFormat)
46+
} as? Comparable<E>?
4147
}
4248
}

src/main/kotlin/team/yi/rsql/querydsl/util/DateUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ object DateUtil {
5252
}
5353

5454
fun parse(dateString: String, dateFormat: String): Date? {
55-
val format = if (dateFormat.isBlank()) return null else dateFormat
55+
val format = dateFormat.ifBlank { return null }
5656

5757
return try {
5858
val sdf = SimpleDateFormat(format)

src/test/kotlin/team/yi/rsql/querydsl/test/kotlintest/CarNameFieldTypeHandlerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class CarNameFieldTypeHandlerTest : BaseRsqlTest() {
1515
private lateinit var entityManager: EntityManager
1616

1717
@Test
18-
fun shouldReadRsqlConfigxWithFieldTypeHandler() {
18+
fun shouldReadRsqlConfigWithFieldTypeHandler() {
1919
val config = RsqlConfig.Builder<Car>(entityManager)
2020
.fieldTypeHandler(CarNameFieldTypeHandler::class.java)
2121
.build()

src/test/kotlin/team/yi/rsql/querydsl/test/kotlintest/QuerydslRsqlTest.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package team.yi.rsql.querydsl.test.kotlintest
33
import com.querydsl.core.Tuple
44
import com.querydsl.core.types.Ops
55
import com.querydsl.core.types.dsl.Expressions
6+
import javax.persistence.EntityManager
67
import org.junit.jupiter.api.Assertions.*
78
import org.junit.jupiter.api.Test
89
import org.springframework.beans.factory.annotation.Autowired
910
import team.yi.rsql.querydsl.QuerydslRsql
1011
import team.yi.rsql.querydsl.RsqlConfig
1112
import team.yi.rsql.querydsl.model.Car
1213
import team.yi.rsql.querydsl.test.BaseRsqlTest
13-
import javax.persistence.EntityManager
1414

1515
@Suppress("SpellCheckingInspection", "UNCHECKED_CAST")
1616
class QuerydslRsqlTest : BaseRsqlTest() {
@@ -111,6 +111,22 @@ class QuerydslRsqlTest : BaseRsqlTest() {
111111
}
112112
}
113113

114+
@Test
115+
fun shouldHandleDateRange() {
116+
val rsql = QuerydslRsql.Builder<Car>(entityManager)
117+
.from("Car")
118+
.where("mfgdt>='2000-01-01 00:01:02' and mfgdt<='6666-12-31 23:59:59'")
119+
.build()
120+
val cars = rsql.fetch()
121+
122+
assertNotNull(cars, "result is null")
123+
124+
cars?.let {
125+
assertFalse(cars.isEmpty(), "Can't handle `notnull` operator for Date type")
126+
assertEquals(50, cars.size, "Can't handle `notnull` operator for Date type correctly")
127+
}
128+
}
129+
114130
@Test
115131
fun shouldHandleNumberIn() {
116132
val rsql = QuerydslRsql.Builder<Car>(entityManager)

0 commit comments

Comments
 (0)