Skip to content

Commit d5c8d70

Browse files
committed
rename MathScript to DateMathScript, add SQLNull type
1 parent 072c619 commit d5c8d70

File tree

9 files changed

+48
-22
lines changed

9 files changed

+48
-22
lines changed

es6/sql-bridge/src/main/scala/app/softnetwork/elastic/sql/bridge/package.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package app.softnetwork.elastic.sql
22

3-
import app.softnetwork.elastic.sql.`type`.{SQLBigInt, SQLDouble}
3+
import app.softnetwork.elastic.sql.`type`.{SQLBigInt, SQLDouble, SQLTemporal, SQLVarchar}
44
import app.softnetwork.elastic.sql.function.aggregate.COUNT
55
import app.softnetwork.elastic.sql.function.geo.{Distance, Meters}
66
import app.softnetwork.elastic.sql.operator._
@@ -468,17 +468,24 @@ package object bridge {
468468
case _ =>
469469
}
470470
val r =
471-
out match {
471+
fromTo.out match {
472472
case _: SQLDouble =>
473473
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Double] lte fromTo.to.value
474474
.asInstanceOf[Double]
475475
case _: SQLBigInt =>
476476
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Long] lte fromTo.to.value
477477
.asInstanceOf[Long]
478-
case _ =>
478+
case _: SQLVarchar =>
479479
rangeQuery(identifier.name) gte String.valueOf(fromTo.from.value) lte String.valueOf(
480480
fromTo.to.value
481481
)
482+
case _: SQLTemporal =>
483+
// TODO
484+
throw new IllegalArgumentException(
485+
"Range queries on temporal values are not supported yet"
486+
)
487+
case other =>
488+
throw new IllegalArgumentException(s"Unsupported type for range query: $other")
482489
}
483490
maybeNot match {
484491
case Some(_) => not(r)

sql/bridge/src/main/scala/app/softnetwork/elastic/sql/bridge/package.scala

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package app.softnetwork.elastic.sql
22

3-
import app.softnetwork.elastic.sql.`type`.{SQLBigInt, SQLDouble}
3+
import app.softnetwork.elastic.sql.`type`.{SQLBigInt, SQLDouble, SQLTemporal, SQLVarchar}
44
import app.softnetwork.elastic.sql.function.aggregate.COUNT
55
import app.softnetwork.elastic.sql.function.geo.{Distance, Meters}
66
import app.softnetwork.elastic.sql.operator._
@@ -468,13 +468,22 @@ package object bridge {
468468
case _ =>
469469
}
470470
val r =
471-
out match {
471+
fromTo.out match {
472472
case _: SQLDouble =>
473-
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Double] lte fromTo.to.value.asInstanceOf[Double]
473+
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Double] lte fromTo.to.value
474+
.asInstanceOf[Double]
474475
case _: SQLBigInt =>
475-
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Long] lte fromTo.to.value.asInstanceOf[Long]
476-
case _ =>
477-
rangeQuery(identifier.name) gte String.valueOf(fromTo.from.value) lte String.valueOf(fromTo.to.value)
476+
rangeQuery(identifier.name) gte fromTo.from.value.asInstanceOf[Long] lte fromTo.to.value
477+
.asInstanceOf[Long]
478+
case _: SQLVarchar =>
479+
rangeQuery(identifier.name) gte String.valueOf(fromTo.from.value) lte String.valueOf(
480+
fromTo.to.value
481+
)
482+
case _: SQLTemporal =>
483+
// TODO
484+
throw new IllegalArgumentException("Range queries on temporal values are not supported yet")
485+
case other =>
486+
throw new IllegalArgumentException(s"Unsupported type for range query: $other")
478487
}
479488
maybeNot match {
480489
case Some(_) => not(r)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ package object function {
6363
def toScript: Option[String] = {
6464
val orderedFunctions = FunctionUtils.transformFunctions(this).reverse
6565
orderedFunctions.foldLeft(Option("")) {
66-
case (expr, f: MathScript) if expr.isDefined => Option(s"${expr.get}${f.script}")
67-
case (_, _) => None // ignore non math scripts
66+
case (expr, f: DateMathScript) if expr.isDefined => Option(s"${expr.get}${f.script}")
67+
case (_, _) => None // ignore non math scripts
6868
} match {
6969
case Some(s) if s.nonEmpty =>
7070
out match {
@@ -75,6 +75,8 @@ package object function {
7575
}
7676
}
7777

78+
override def dateMathScript: Boolean = toScript.isDefined
79+
7880
override def system: Boolean = functions.lastOption.exists(_.system)
7981

8082
def applyTo(expr: Token): Unit = {

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package app.softnetwork.elastic.sql.function
22

3-
import app.softnetwork.elastic.sql.{Expr, Identifier, MathScript, PainlessScript, TokenRegex}
3+
import app.softnetwork.elastic.sql.{DateMathScript, Expr, Identifier, PainlessScript, TokenRegex}
44
import app.softnetwork.elastic.sql.operator.time._
55
import app.softnetwork.elastic.sql.`type`.{
66
SQLDate,
@@ -18,7 +18,7 @@ package object time {
1818

1919
sealed trait IntervalFunction[IO <: SQLTemporal]
2020
extends TransformFunction[IO, IO]
21-
with MathScript {
21+
with DateMathScript {
2222
def operator: IntervalOperator
2323

2424
override def fun: Option[IntervalOperator] = Some(operator)
@@ -93,13 +93,13 @@ package object time {
9393
sealed trait CurrentDateTimeFunction
9494
extends DateTimeFunction
9595
with CurrentFunction
96-
with MathScript {
96+
with DateMathScript {
9797
override def painless: String =
9898
SQLTypeUtils.coerce(now, this.baseType, this.out, nullable = false)
9999
override def script: String = "now"
100100
}
101101

102-
sealed trait CurrentDateFunction extends DateFunction with CurrentFunction with MathScript {
102+
sealed trait CurrentDateFunction extends DateFunction with CurrentFunction with DateMathScript {
103103
override def painless: String =
104104
SQLTypeUtils.coerce(s"$now.toLocalDate()", this.baseType, this.out, nullable = false)
105105
override def script: String = "now"
@@ -315,6 +315,7 @@ package object time {
315315
override def toSQL(base: String): String = {
316316
s"$sql($base, ${interval.sql})"
317317
}
318+
override def dateMathScript: Boolean = identifier.dateMathScript
318319
}
319320

320321
case object DateSub extends Expr("DATE_SUB") with TokenRegex {
@@ -332,6 +333,7 @@ package object time {
332333
override def toSQL(base: String): String = {
333334
s"$sql($base, ${interval.sql})"
334335
}
336+
override def dateMathScript: Boolean = identifier.dateMathScript
335337
}
336338

337339
sealed trait FunctionWithDateTimeFormat {
@@ -452,6 +454,7 @@ package object time {
452454
override def toSQL(base: String): String = {
453455
s"$sql($base, ${interval.sql})"
454456
}
457+
override def dateMathScript: Boolean = identifier.dateMathScript
455458
}
456459

457460
case object DateTimeSub extends Expr("DATETIME_SUB") with TokenRegex {
@@ -469,6 +472,7 @@ package object time {
469472
override def toSQL(base: String): String = {
470473
s"$sql($base, ${interval.sql})"
471474
}
475+
override def dateMathScript: Boolean = identifier.dateMathScript
472476
}
473477

474478
case object DateTimeParse extends Expr("DATETIME_PARSE") with TokenRegex with PainlessScript {

sql/src/main/scala/app/softnetwork/elastic/sql/operator/time/package.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package app.softnetwork.elastic.sql.operator
22

3-
import app.softnetwork.elastic.sql.{Expr, MathScript}
3+
import app.softnetwork.elastic.sql.{DateMathScript, Expr}
44

55
package object time {
66

7-
sealed trait IntervalOperator extends Operator with BinaryOperator with MathScript {
7+
sealed trait IntervalOperator extends Operator with BinaryOperator with DateMathScript {
88
override def script: String = sql
99
override def toString: String = s" $sql "
1010
override def painless: String = this match {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ package object sql {
4242
}
4343
def system: Boolean = false
4444
def nullable: Boolean = !system
45+
def dateMathScript: Boolean = false
4546
}
4647

4748
trait PainlessScript extends Token {
@@ -53,8 +54,9 @@ package object sql {
5354
def params: Map[String, Any]
5455
}
5556

56-
trait MathScript extends Token {
57+
trait DateMathScript extends Token {
5758
def script: String
59+
override def dateMathScript: Boolean = true
5860
}
5961

6062
trait Updateable extends Token {

sql/src/main/scala/app/softnetwork/elastic/sql/time/package.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ package object time {
7777

7878
}
7979

80-
sealed trait TimeUnit extends PainlessScript with MathScript {
80+
sealed trait TimeUnit extends PainlessScript with DateMathScript {
8181
lazy val regex: Regex = s"\\b(?i)$sql(s)?\\b".r
8282

8383
def timeUnit: String = sql.toUpperCase() + "S"
@@ -124,7 +124,7 @@ package object time {
124124

125125
case object Interval extends Expr("INTERVAL") with TokenRegex
126126

127-
sealed trait TimeInterval extends PainlessScript with MathScript {
127+
sealed trait TimeInterval extends PainlessScript with DateMathScript {
128128
def value: Int
129129
def unit: TimeUnit
130130
override def sql: String = s"$Interval $value ${unit.sql}"
@@ -148,7 +148,7 @@ package object time {
148148
case _ => Left(s"Invalid interval unit $unit for TIME")
149149
}
150150
case SQLTypes.DateTime =>
151-
Right(SQLTypes.Timestamp)
151+
Right(SQLTypes.DateTime)
152152
case SQLTypes.Timestamp =>
153153
Right(SQLTypes.Timestamp)
154154
case SQLTypes.Temporal =>

sql/src/main/scala/app/softnetwork/elastic/sql/type/SQLType.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ sealed trait SQLType {
77

88
trait SQLAny extends SQLType
99

10+
trait SQLNull extends SQLType
11+
1012
trait SQLTemporal extends SQLType
1113

1214
trait SQLDate extends SQLTemporal

sql/src/main/scala/app/softnetwork/elastic/sql/type/SQLTypes.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package app.softnetwork.elastic.sql.`type`
33
object SQLTypes {
44
case object Any extends SQLAny { val typeId = "ANY" }
55

6-
case object Null extends SQLAny { val typeId = "NULL" }
6+
case object Null extends SQLNull { val typeId = "NULL" }
77

88
case object Temporal extends SQLTemporal { val typeId = "TEMPORAL" }
99

0 commit comments

Comments
 (0)