Skip to content

Commit 2bbc83e

Browse files
committed
add diff (!=) operator
1 parent 522faa0 commit 2bbc83e

File tree

8 files changed

+68
-67
lines changed

8 files changed

+68
-67
lines changed

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

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ package object bridge {
146146
value match {
147147
case n: SQLNumeric[_] if !aggregation =>
148148
operator match {
149-
case _: Ge.type =>
149+
case Ge =>
150150
maybeNot match {
151151
case Some(_) =>
152152
applyNumericOp(n)(
@@ -159,7 +159,7 @@ package object bridge {
159159
d => rangeQuery(identifier.name) gte d
160160
)
161161
}
162-
case _: Gt.type =>
162+
case Gt =>
163163
maybeNot match {
164164
case Some(_) =>
165165
applyNumericOp(n)(
@@ -172,7 +172,7 @@ package object bridge {
172172
d => rangeQuery(identifier.name) gt d
173173
)
174174
}
175-
case _: Le.type =>
175+
case Le =>
176176
maybeNot match {
177177
case Some(_) =>
178178
applyNumericOp(n)(
@@ -185,7 +185,7 @@ package object bridge {
185185
d => rangeQuery(identifier.name) lte d
186186
)
187187
}
188-
case _: Lt.type =>
188+
case Lt =>
189189
maybeNot match {
190190
case Some(_) =>
191191
applyNumericOp(n)(
@@ -198,7 +198,7 @@ package object bridge {
198198
d => rangeQuery(identifier.name) lt d
199199
)
200200
}
201-
case _: Eq.type =>
201+
case Eq =>
202202
maybeNot match {
203203
case Some(_) =>
204204
applyNumericOp(n)(
@@ -211,7 +211,7 @@ package object bridge {
211211
d => termQuery(identifier.name, d)
212212
)
213213
}
214-
case _: Ne.type =>
214+
case Ne | Diff =>
215215
maybeNot match {
216216
case Some(_) =>
217217
applyNumericOp(n)(
@@ -228,49 +228,49 @@ package object bridge {
228228
}
229229
case l: SQLLiteral if !aggregation =>
230230
operator match {
231-
case _: Like.type =>
231+
case Like =>
232232
maybeNot match {
233233
case Some(_) =>
234234
not(regexQuery(identifier.name, toRegex(l.value)))
235235
case _ =>
236236
regexQuery(identifier.name, toRegex(l.value))
237237
}
238-
case _: Ge.type =>
238+
case Ge =>
239239
maybeNot match {
240240
case Some(_) =>
241241
rangeQuery(identifier.name) lt l.value
242242
case _ =>
243243
rangeQuery(identifier.name) gte l.value
244244
}
245-
case _: Gt.type =>
245+
case Gt =>
246246
maybeNot match {
247247
case Some(_) =>
248248
rangeQuery(identifier.name) lte l.value
249249
case _ =>
250250
rangeQuery(identifier.name) gt l.value
251251
}
252-
case _: Le.type =>
252+
case Le =>
253253
maybeNot match {
254254
case Some(_) =>
255255
rangeQuery(identifier.name) gt l.value
256256
case _ =>
257257
rangeQuery(identifier.name) lte l.value
258258
}
259-
case _: Lt.type =>
259+
case Lt =>
260260
maybeNot match {
261261
case Some(_) =>
262262
rangeQuery(identifier.name) gte l.value
263263
case _ =>
264264
rangeQuery(identifier.name) lt l.value
265265
}
266-
case _: Eq.type =>
266+
case Eq =>
267267
maybeNot match {
268268
case Some(_) =>
269269
not(termQuery(identifier.name, l.value))
270270
case _ =>
271271
termQuery(identifier.name, l.value)
272272
}
273-
case _: Ne.type =>
273+
case Ne | Diff =>
274274
maybeNot match {
275275
case Some(_) =>
276276
termQuery(identifier.name, l.value)
@@ -281,14 +281,14 @@ package object bridge {
281281
}
282282
case b: SQLBoolean if !aggregation =>
283283
operator match {
284-
case _: Eq.type =>
284+
case Eq =>
285285
maybeNot match {
286286
case Some(_) =>
287287
not(termQuery(identifier.name, b.value))
288288
case _ =>
289289
termQuery(identifier.name, b.value)
290290
}
291-
case _: Ne.type =>
291+
case Ne | Diff =>
292292
maybeNot match {
293293
case Some(_) =>
294294
termQuery(identifier.name, b.value)
@@ -311,12 +311,12 @@ package object bridge {
311311
case _ =>
312312
val op = if (maybeNot.isDefined) operator.not else operator
313313
op match {
314-
case Gt => rangeQuery(identifier.name) gt script
315-
case Ge => rangeQuery(identifier.name) gte script
316-
case Lt => rangeQuery(identifier.name) lt script
317-
case Le => rangeQuery(identifier.name) lte script
318-
case Eq => rangeQuery(identifier.name) gte script lte script
319-
case Ne => not(rangeQuery(identifier.name) gte script lte script)
314+
case Gt => rangeQuery(identifier.name) gt script
315+
case Ge => rangeQuery(identifier.name) gte script
316+
case Lt => rangeQuery(identifier.name) lt script
317+
case Le => rangeQuery(identifier.name) lte script
318+
case Eq => rangeQuery(identifier.name) gte script lte script
319+
case Ne | Diff => not(rangeQuery(identifier.name) gte script lte script)
320320
}
321321
}
322322
}

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ package object bridge {
147147
value match {
148148
case n: SQLNumeric[_] if !aggregation =>
149149
operator match {
150-
case _: Ge.type =>
150+
case Ge =>
151151
maybeNot match {
152152
case Some(_) =>
153153
applyNumericOp(n)(
@@ -160,7 +160,7 @@ package object bridge {
160160
d => rangeQuery(identifier.name) gte d
161161
)
162162
}
163-
case _: Gt.type =>
163+
case Gt =>
164164
maybeNot match {
165165
case Some(_) =>
166166
applyNumericOp(n)(
@@ -173,7 +173,7 @@ package object bridge {
173173
d => rangeQuery(identifier.name) gt d
174174
)
175175
}
176-
case _: Le.type =>
176+
case Le =>
177177
maybeNot match {
178178
case Some(_) =>
179179
applyNumericOp(n)(
@@ -186,7 +186,7 @@ package object bridge {
186186
d => rangeQuery(identifier.name) lte d
187187
)
188188
}
189-
case _: Lt.type =>
189+
case Lt =>
190190
maybeNot match {
191191
case Some(_) =>
192192
applyNumericOp(n)(
@@ -199,7 +199,7 @@ package object bridge {
199199
d => rangeQuery(identifier.name) lt d
200200
)
201201
}
202-
case _: Eq.type =>
202+
case Eq =>
203203
maybeNot match {
204204
case Some(_) =>
205205
applyNumericOp(n)(
@@ -212,7 +212,7 @@ package object bridge {
212212
d => termQuery(identifier.name, d)
213213
)
214214
}
215-
case _: Ne.type =>
215+
case Ne | Diff =>
216216
maybeNot match {
217217
case Some(_) =>
218218
applyNumericOp(n)(
@@ -229,49 +229,49 @@ package object bridge {
229229
}
230230
case l: SQLLiteral if !aggregation =>
231231
operator match {
232-
case _: Like.type =>
232+
case Like =>
233233
maybeNot match {
234234
case Some(_) =>
235235
not(regexQuery(identifier.name, toRegex(l.value)))
236236
case _ =>
237237
regexQuery(identifier.name, toRegex(l.value))
238238
}
239-
case _: Ge.type =>
239+
case Ge =>
240240
maybeNot match {
241241
case Some(_) =>
242242
rangeQuery(identifier.name) lt l.value
243243
case _ =>
244244
rangeQuery(identifier.name) gte l.value
245245
}
246-
case _: Gt.type =>
246+
case Gt =>
247247
maybeNot match {
248248
case Some(_) =>
249249
rangeQuery(identifier.name) lte l.value
250250
case _ =>
251251
rangeQuery(identifier.name) gt l.value
252252
}
253-
case _: Le.type =>
253+
case Le =>
254254
maybeNot match {
255255
case Some(_) =>
256256
rangeQuery(identifier.name) gt l.value
257257
case _ =>
258258
rangeQuery(identifier.name) lte l.value
259259
}
260-
case _: Lt.type =>
260+
case Lt =>
261261
maybeNot match {
262262
case Some(_) =>
263263
rangeQuery(identifier.name) gte l.value
264264
case _ =>
265265
rangeQuery(identifier.name) lt l.value
266266
}
267-
case _: Eq.type =>
267+
case Eq =>
268268
maybeNot match {
269269
case Some(_) =>
270270
not(termQuery(identifier.name, l.value))
271271
case _ =>
272272
termQuery(identifier.name, l.value)
273273
}
274-
case _: Ne.type =>
274+
case Ne | Diff =>
275275
maybeNot match {
276276
case Some(_) =>
277277
termQuery(identifier.name, l.value)
@@ -282,14 +282,14 @@ package object bridge {
282282
}
283283
case b: SQLBoolean if !aggregation =>
284284
operator match {
285-
case _: Eq.type =>
285+
case Eq =>
286286
maybeNot match {
287287
case Some(_) =>
288288
not(termQuery(identifier.name, b.value))
289289
case _ =>
290290
termQuery(identifier.name, b.value)
291291
}
292-
case _: Ne.type =>
292+
case Ne | Diff =>
293293
maybeNot match {
294294
case Some(_) =>
295295
termQuery(identifier.name, b.value)
@@ -317,7 +317,7 @@ package object bridge {
317317
case Lt => rangeQuery(identifier.name) lt script
318318
case Le => rangeQuery(identifier.name) lte script
319319
case Eq => rangeQuery(identifier.name) gte script lte script
320-
case Ne => not(rangeQuery(identifier.name) gte script lte script)
320+
case Ne | Diff => not(rangeQuery(identifier.name) gte script lte script)
321321
}
322322
}
323323
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ sealed trait SQLFunction extends SQLRegex {
99
trait SQLTypedFunction[In <: SQLType, Out <: SQLType] extends SQLFunction {
1010
def inputType: In
1111
def outputType: Out
12-
def in(other: SQLTypedFunction[_, _]): Boolean =
12+
def from(other: SQLTypedFunction[_, _]): Boolean =
1313
inputType.typeId == other.outputType.asInstanceOf[SQLType].typeId ||
1414
(inputType.typeId == "temporal" && Set("date", "datetime").contains(
1515
other.outputType.asInstanceOf[SQLType].typeId
1616
))
17-
def out(other: SQLTypedFunction[_, _]): Boolean =
17+
def to(other: SQLTypedFunction[_, _]): Boolean =
1818
outputType.typeId == other.inputType.asInstanceOf[SQLType].typeId ||
1919
(outputType.typeId == "temporal" && Set("date", "datetime").contains(
2020
other.inputType.asInstanceOf[SQLType].typeId
@@ -154,8 +154,6 @@ case object Now extends SQLExpr("now") with CurrentDateTimeFunction
154154

155155
case object NowWithParens extends SQLExpr("now()") with CurrentDateTimeFunction
156156

157-
// case class DateDiff(interval: TimeInterval) extends SQLExpr("date_diff") with DateTimeFunction
158-
159157
case class DateTrunc(unit: TimeUnit)
160158
extends SQLExpr("date_trunc")
161159
with DateTimeFunction

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@ sealed trait SQLComparisonOperator extends SQLExpressionOperator with PainlessSc
2121
}
2222

2323
def not: SQLComparisonOperator = this match {
24-
case Eq => Ne
25-
case Ne => Eq
26-
case Ge => Lt
27-
case Gt => Le
28-
case Le => Gt
29-
case Lt => Ge
24+
case Eq => Ne
25+
case Ne | Diff => Eq
26+
case Ge => Lt
27+
case Gt => Le
28+
case Le => Gt
29+
case Lt => Ge
3030
}
3131
}
3232

3333
case object Eq extends SQLExpr("=") with SQLComparisonOperator
3434
case object Ne extends SQLExpr("<>") with SQLComparisonOperator
35+
case object Diff extends SQLExpr("!=") with SQLComparisonOperator
3536
case object Ge extends SQLExpr(">=") with SQLComparisonOperator
3637
case object Gt extends SQLExpr(">") with SQLComparisonOperator
3738
case object Le extends SQLExpr("<=") with SQLComparisonOperator

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,10 @@ trait SQLWhereParser {
320320

321321
private def ne: PackratParser[SQLComparisonOperator] = Ne.sql ^^ (_ => Ne)
322322

323+
private def diff: PackratParser[SQLComparisonOperator] = Diff.sql ^^ (_ => Diff)
324+
323325
private def equality: PackratParser[SQLExpression] =
324-
not.? ~ (identifierWithFunction | identifier) ~ (eq | ne) ~ (boolean | literal | double | long) ^^ {
326+
not.? ~ (identifierWithFunction | identifier) ~ (eq | ne | diff) ~ (boolean | literal | double | long) ^^ {
325327
case n ~ i ~ o ~ v => SQLExpression(i, o, v, n)
326328
}
327329

@@ -408,7 +410,7 @@ trait SQLWhereParser {
408410
}
409411

410412
private def dateTimeComparison: PackratParser[SQLComparisonDateMath] =
411-
not.? ~ (identifierWithFunction | identifier) ~ (eq | ne | ge | gt | le | lt) ~ (current_date | current_time | current_timestamp | now) ~ arithmeticOperator.? ~ interval.? ^^ {
413+
not.? ~ (identifierWithFunction | identifier) ~ (eq | ne | diff | ge | gt | le | lt) ~ (current_date | current_time | current_timestamp | now) ~ arithmeticOperator.? ~ interval.? ^^ {
412414
case n ~ i ~ o ~ dt ~ ao ~ it => SQLComparisonDateMath(i, o, dt, ao, it, n)
413415
}
414416

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ object SQLValidator {
88
.sliding(2)
99
.foreach {
1010
case Seq(f1, f2) =>
11-
if (!f1.in(f2)) {
11+
if (!f1.from(f2)) {
1212
return Left(s"Type mismatch: ${f2.outputType} -> ${f1.inputType}")
1313
}
1414
case _ => // ok

0 commit comments

Comments
 (0)