Skip to content

Commit 1f1a9e2

Browse files
committed
fix painless script for case function with temporal
1 parent 918dc7c commit 1f1a9e2

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2153,7 +2153,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
21532153
| "c": {
21542154
| "script": {
21552155
| "lang": "painless",
2156-
| "source": "def param1 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(7, ChronoUnit.DAYS); def param2 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.toLocalDate().minus(3, ChronoUnit.DAYS)); def param3 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.toLocalDate().plus(2, ChronoUnit.DAYS)); def param4 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); param1 == param2 ? param2 : param1 == param3 ? param3 : param4"
2156+
| "source": "def param1 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(7, ChronoUnit.DAYS); def param2 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.toLocalDate().minus(3, ChronoUnit.DAYS)); def param3 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.toLocalDate().plus(2, ChronoUnit.DAYS)); def param4 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); param1 != null && param1.isEqual(param2) ? param2 : param1 != null && param1.isEqual(param3) ? param3 : param4"
21572157
| }
21582158
| }
21592159
| },

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2157,7 +2157,7 @@ class SQLQuerySpec extends AnyFlatSpec with Matchers {
21572157
| "c": {
21582158
| "script": {
21592159
| "lang": "painless",
2160-
| "source": "def param1 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(7, ChronoUnit.DAYS); def param2 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.toLocalDate().minus(3, ChronoUnit.DAYS)); def param3 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.toLocalDate().plus(2, ChronoUnit.DAYS)); def param4 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); param1 == param2 ? param2 : param1 == param3 ? param3 : param4"
2160+
| "source": "def param1 = ZonedDateTime.now(ZoneId.of('Z')).toLocalDate().minus(7, ChronoUnit.DAYS); def param2 = (!doc.containsKey('lastUpdated') || doc['lastUpdated'].empty ? null : doc['lastUpdated'].value.toLocalDate().minus(3, ChronoUnit.DAYS)); def param3 = (!doc.containsKey('lastSeen') || doc['lastSeen'].empty ? null : doc['lastSeen'].value.toLocalDate().plus(2, ChronoUnit.DAYS)); def param4 = (!doc.containsKey('createdAt') || doc['createdAt'].empty ? null : doc['createdAt'].value.toLocalDate()); param1 != null && param1.isEqual(param2) ? param2 : param1 != null && param1.isEqual(param3) ? param3 : param4"
21612161
| }
21622162
| }
21632163
| },

sql/src/main/scala/app/softnetwork/elastic/sql/function/cond/package.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,16 @@ package object cond {
239239
else Right(())
240240
}
241241

242+
private[this] def checkCase(e: String, c: String, v: String): String = {
243+
out match {
244+
case SQLTypes.Varchar =>
245+
s"$e != null && $e.compareTo($c) == 0 ? $v"
246+
case _: SQLTemporal =>
247+
s"$e != null && $e.isEqual($c) ? $v"
248+
case _ => s"$e == $c ? $v"
249+
}
250+
}
251+
242252
override def painless(context: Option[PainlessContext] = None): String = {
243253
context match {
244254
case Some(ctx) =>
@@ -278,14 +288,14 @@ package object cond {
278288
case Some(e) =>
279289
if (cond.nullable) {
280290
ctx.addParam(LiteralParam(c)) match {
281-
case Some(c) => s"$e == $c ? $r"
282-
case _ => s"$e == $c ? $r"
291+
case Some(c) => checkCase(e, c, r)
292+
case _ => checkCase(e, c, r)
283293
}
284294
} else {
285-
s"$e == $c ? $r"
295+
checkCase(e, c, r)
286296
}
287297
case _ =>
288-
s"$e == $c ? $r"
298+
checkCase(e, c, r)
289299
}
290300
}
291301
.mkString(" : ")

0 commit comments

Comments
 (0)