Skip to content

Commit da9d6f1

Browse files
committed
fix painless script for temporal comparison
1 parent aa0d475 commit da9d6f1

File tree

6 files changed

+135
-56
lines changed

6 files changed

+135
-56
lines changed

es6/sql-bridge/src/test/scala/app/softnetwork/elastic/sql/SQLQuerySpec.scala

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,7 +1207,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
12071207
| "field": "createdAt",
12081208
| "script": {
12091209
| "lang": "painless",
1210-
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); (param1 == null) ? null : LocalDate.parse(param1, DateTimeFormatter.ofPattern('yyyy-MM-dd'))"
1210+
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); (param1 == null) ? null : LocalDate.parse(param1, DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"))"
12111211
| }
12121212
| }
12131213
| }
@@ -1258,49 +1258,49 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
12581258
| "y": {
12591259
| "script": {
12601260
| "lang": "painless",
1261-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfYear(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1261+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfYear(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12621262
| }
12631263
| },
12641264
| "q": {
12651265
| "script": {
12661266
| "lang": "painless",
1267-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = param1 != null ? param1.withMonth((((param1.getMonthValue() - 1) / 3) * 3) + 1).withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS) : null; def param3 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param3.format(param2)"
1267+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = param1 != null ? param1.withMonth((((param1.getMonthValue() - 1) / 3) * 3) + 1).withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS) : null; def param3 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param3.format(param2)"
12681268
| }
12691269
| },
12701270
| "m": {
12711271
| "script": {
12721272
| "lang": "painless",
1273-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1273+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12741274
| }
12751275
| },
12761276
| "w": {
12771277
| "script": {
12781278
| "lang": "painless",
1279-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.with(DayOfWeek.SUNDAY).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1279+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.with(DayOfWeek.SUNDAY).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12801280
| }
12811281
| },
12821282
| "d": {
12831283
| "script": {
12841284
| "lang": "painless",
1285-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1285+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12861286
| }
12871287
| },
12881288
| "h": {
12891289
| "script": {
12901290
| "lang": "painless",
1291-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.HOURS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1291+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.HOURS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12921292
| }
12931293
| },
12941294
| "m2": {
12951295
| "script": {
12961296
| "lang": "painless",
1297-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.MINUTES)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1297+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.MINUTES)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
12981298
| }
12991299
| },
13001300
| "lastSeen": {
13011301
| "script": {
13021302
| "lang": "painless",
1303-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.SECONDS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd'); (param1 == null) ? null : param2.format(param1)"
1303+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.truncatedTo(ChronoUnit.SECONDS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); (param1 == null) ? null : param2.format(param1)"
13041304
| }
13051305
| }
13061306
| },
@@ -1374,7 +1374,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
13741374
| "field": "createdAt",
13751375
| "script": {
13761376
| "lang": "painless",
1377-
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); (param1 == null) ? null : ZonedDateTime.parse(param1, DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss.SSS XXX')).truncatedTo(ChronoUnit.MINUTES).get(ChronoField.YEAR)"
1377+
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); (param1 == null) ? null : ZonedDateTime.parse(param1, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss.SSS XXX\")).truncatedTo(ChronoUnit.MINUTES).get(ChronoField.YEAR)"
13781378
| }
13791379
| }
13801380
| }
@@ -1426,7 +1426,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
14261426
| "lastSeen": {
14271427
| "script": {
14281428
| "lang": "painless",
1429-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss XXX'); (param1 == null) ? null : param2.format(param1)"
1429+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.withDayOfMonth(1).truncatedTo(ChronoUnit.DAYS)); def param2 = DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss XXX\"); (param1 == null) ? null : param2.format(param1)"
14301430
| }
14311431
| }
14321432
| },
@@ -1522,7 +1522,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
15221522
| "max": {
15231523
| "script": {
15241524
| "lang": "painless",
1525-
| "source": "def param1 = (!doc.containsKey('updatedAt') || doc['updatedAt'].empty ? null : doc['updatedAt'].value); def param2 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); def param3 = (param2 == null) ? null : ZonedDateTime.parse(param2, DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ss.SSS XXX')); (param1 == null || param2 == null) ? null : ChronoUnit.DAYS.between(param1, param3)"
1525+
| "source": "def param1 = (!doc.containsKey('updatedAt') || doc['updatedAt'].empty ? null : doc['updatedAt'].value); def param2 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); def param3 = (param2 == null) ? null : ZonedDateTime.parse(param2, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss.SSS XXX\")); (param1 == null || param2 == null) ? null : ChronoUnit.DAYS.between(param1, param3)"
15261526
| }
15271527
| }
15281528
| }
@@ -1958,7 +1958,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
19581958
| "c": {
19591959
| "script": {
19601960
| "lang": "painless",
1961-
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern('yyyy-MM-dd')).minus(2, ChronoUnit.DAYS); def param3 = param1 == param2 ? null : param1; def param4 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate(); param3 != null ? param3 : param4"
1961+
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")).minus(2, ChronoUnit.DAYS); def param3 = param1 == param2 ? null : param1; def param4 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate(); param3 != null ? param3 : param4"
19621962
| }
19631963
| }
19641964
| },
@@ -2016,7 +2016,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
20162016
| "c": {
20172017
| "script": {
20182018
| "lang": "painless",
2019-
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern('yyyy-MM-dd')); def param3 = param1 == param2 ? null : param1; def param4 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(2, ChronoUnit.HOURS); try { param3 != null ? param3 : param4 } catch (Exception e) { return null; }"
2019+
| "source": "def param1 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")); def param3 = param1 == param2 ? null : param1; def param4 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(2, ChronoUnit.HOURS); try { param3 != null ? param3 : param4 } catch (Exception e) { return null; }"
20202020
| }
20212021
| },
20222022
| "c2": {
@@ -2040,7 +2040,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
20402040
| "c5": {
20412041
| "script": {
20422042
| "lang": "painless",
2043-
| "source": "def param1 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern('yyyy-MM-dd')); param1"
2043+
| "source": "def param1 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")); param1"
20442044
| }
20452045
| }
20462046
| },
@@ -2086,7 +2086,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
20862086
.replaceAll("} catch", " } catch")
20872087
}
20882088

2089-
it should "handle case function as script field" in {
2089+
it should "handle case function as script field" in { // 40
20902090
val select: ElasticSearchRequest =
20912091
SQLQuery(caseWhen)
20922092
val query = select.query
@@ -2100,7 +2100,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
21002100
| "c": {
21012101
| "script": {
21022102
| "lang": "painless",
2103-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = ZonedDateTime.now(ZoneId.of('Z')).minus(7, ChronoUnit.DAYS); def param3 = param1 == null ? false : (param1 > param2); def param4 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.plus(2, ChronoUnit.DAYS)); def param5 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); param3 ? param1 : param4 != null ? param4 : param5"
2103+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = ZonedDateTime.now(ZoneId.of('Z')).minus(7, ChronoUnit.DAYS); def param3 = param1 == null ? false : (param1.isAfter(param2)); def param4 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.plus(2, ChronoUnit.DAYS)); def param5 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value); param3 ? param1 : param4 != null ? param4 : param5"
21042104
| }
21052105
| }
21062106
| },
@@ -2577,7 +2577,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
25772577
.replaceAll("\\(double\\)(\\d)", "(double) $1")
25782578
}
25792579

2580-
it should "handle string function as script field and condition" in {
2580+
it should "handle string function as script field and condition" in { // 45
25812581
val select: ElasticSearchRequest =
25822582
SQLQuery(string)
25832583
val query = select.query
@@ -3183,7 +3183,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
31833183
.replaceAll("lat,arg", "lat, arg")
31843184
}
31853185

3186-
it should "handle between with temporal" in {
3186+
it should "handle between with temporal" in { // 50
31873187
val select: ElasticSearchRequest =
31883188
SQLQuery(betweenTemporal)
31893189
val query = select.query
@@ -3208,7 +3208,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
32083208
| "script": {
32093209
| "script": {
32103210
| "lang": "painless",
3211-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern('yyyy-MM-dd')); param1 == null ? false : (param1 >= param2.withDayOfMonth(param2.lengthOfMonth()))"
3211+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-11\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")); param1 == null ? false : (param1.isBefore(param2.withDayOfMonth(param2.lengthOfMonth())) == false)"
32123212
| }
32133213
| }
32143214
| },
@@ -3298,7 +3298,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
32983298
| "script": {
32993299
| "script": {
33003300
| "lang": "painless",
3301-
| "source": "def param1 = (!doc.containsKey('comments.replies.lastUpdated') || doc['comments.replies.lastUpdated'].empty ? null : doc['comments.replies.lastUpdated'].value); def param2 = LocalDate.parse(\"2025-09-10\", DateTimeFormatter.ofPattern('yyyy-MM-dd')); param1 == null ? false : (param1 < param2.withDayOfMonth(param2.lengthOfMonth()))"
3301+
| "source": "def param1 = (!doc.containsKey('comments.replies.lastUpdated') || doc['comments.replies.lastUpdated'].empty ? null : doc['comments.replies.lastUpdated'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-10\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")); param1 == null ? false : (param1.isBefore(param2.withDayOfMonth(param2.lengthOfMonth())))"
33023302
| }
33033303
| }
33043304
| }
@@ -3396,7 +3396,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
33963396
| "script": {
33973397
| "script": {
33983398
| "lang": "painless",
3399-
| "source": "def param1 = (!doc.containsKey('replies.lastUpdated') || doc['replies.lastUpdated'].empty ? null : doc['replies.lastUpdated'].value); def param2 = LocalDate.parse(\"2025-09-10\", DateTimeFormatter.ofPattern('yyyy-MM-dd')); param1 == null ? false : (param1 < param2.withDayOfMonth(param2.lengthOfMonth()))"
3399+
| "source": "def param1 = (!doc.containsKey('replies.lastUpdated') || doc['replies.lastUpdated'].empty ? null : doc['replies.lastUpdated'].value.toLocalDate()); def param2 = LocalDate.parse(\"2025-09-10\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd\")); param1 == null ? false : (param1.isBefore(param2.withDayOfMonth(param2.lengthOfMonth())))"
34003400
| }
34013401
| }
34023402
| },
@@ -3503,7 +3503,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
35033503
| "script": {
35043504
| "script": {
35053505
| "lang": "painless",
3506-
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate(); param1 == null ? false : (param1 < param2)"
3506+
| "source": "def param1 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value); def param2 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate(); param1 == null ? false : (param1.isBefore(param2))"
35073507
| }
35083508
| }
35093509
| }

0 commit comments

Comments
 (0)