aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuicommon
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuicommon')
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala17
2 files changed, 14 insertions, 7 deletions
diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala b/src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala
index aa32166..0bf1ed6 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala
@@ -57,10 +57,10 @@ sealed trait QueryBuilderParameters {
def toSql(countQuery: Boolean, fields: Set[String], namingStrategy: NamingStrategy): (String, QueryBuilder.Binder) = {
val escapedTableName = namingStrategy.table(tableData.tableName)
val fieldsSql: String = if (countQuery) {
- val suffix: String = (tableData.lastUpdateFieldName match {
+ val suffix: String = tableData.lastUpdateFieldName match {
case Some(lastUpdateField) => s", max($escapedTableName.${namingStrategy.column(lastUpdateField)})"
case None => ""
- })
+ }
"count(*)" + suffix
} else {
if (fields == QueryBuilderParameters.AllFields) {
diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
index 8aff397..e0adeb8 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala
@@ -13,10 +13,15 @@ import scala.util.Try
object SearchFilterParser {
private object BinaryAtomFromTuple {
- def unapply(input: (SearchFilterExpr.Dimension, (String, String))): Option[SearchFilterExpr.Atom.Binary] = {
+ def unapply(input: (SearchFilterExpr.Dimension, (String, Any))): Option[SearchFilterExpr.Atom.Binary] = {
val (dimensionName, (strOperation, value)) = input
+ val updatedValue = value match {
+ case s: String => s.safeTrim
+ case a => a
+ }
+
parseOperation(strOperation.toLowerCase).map { op =>
- SearchFilterExpr.Atom.Binary(dimensionName, op, value.safeTrim)
+ SearchFilterExpr.Atom.Binary(dimensionName, op, updatedValue.asInstanceOf[AnyRef])
}
}
}
@@ -68,7 +73,7 @@ object SearchFilterParser {
}
private val numericOperatorParser: Parser[String] = {
- P((IgnoreCase("gt") | IgnoreCase("lt")) ~ IgnoreCase("eq").?).!
+ P(IgnoreCase("eq") | ((IgnoreCase("gt") | IgnoreCase("lt")) ~ IgnoreCase("eq").?)).!
}
private val naryOperatorParser: Parser[String] = P(IgnoreCase("in")).!
@@ -91,10 +96,12 @@ object SearchFilterParser {
private val nAryValueParser: Parser[String] = P(CharPred(_ != ',').rep(min = 1).!)
+ private val longParser: Parser[Long] = P(CharIn('0' to '9').rep(1).!.map(_.toLong))
+
private val binaryAtomParser: Parser[SearchFilterExpr.Atom.Binary] = P(
dimensionParser ~ whitespaceParser ~ (
- (commonOperatorParser.! ~/ whitespaceParser ~/ AnyChar.rep(min = 1).!)
- | (numericOperatorParser.! ~/ whitespaceParser ~/ numberParser.!)
+ (numericOperatorParser.! ~ whitespaceParser ~ (longParser | numberParser.!)) |
+ (commonOperatorParser.! ~ whitespaceParser ~ AnyChar.rep(min = 1).!)
) ~ End
).map {
case BinaryAtomFromTuple(atom) => atom