From 41aa4fb74ab5a2ec6521f067fe82472986dfdbd3 Mon Sep 17 00:00:00 2001 From: vlad Date: Tue, 26 Sep 2017 13:29:20 -0700 Subject: Make number filter parsing attempt first, because number parsers are more specific. Otherwise fails for: https://records-processing.stable.sand.driver.network/rep-api/v1/document?filters=recordId+EQ+1&pageNumber=1&pageSize=9999 with: ERROR: operator does not exist: bigint = character varying Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. Position: 782 --- src/main/scala/xyz/driver/pdsuicommon/db/QueryBuilder.scala | 4 ++-- .../scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala | 2 +- src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala | 4 ++++ 3 files changed, 7 insertions(+), 3 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..3238ebc 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala @@ -93,8 +93,8 @@ object SearchFilterParser { private val binaryAtomParser: Parser[SearchFilterExpr.Atom.Binary] = P( dimensionParser ~ whitespaceParser ~ ( + (numericOperatorParser.! ~/ whitespaceParser ~/ numberParser.!) | (commonOperatorParser.! ~/ whitespaceParser ~/ AnyChar.rep(min = 1).!) - | (numericOperatorParser.! ~/ whitespaceParser ~/ numberParser.!) ) ~ End ).map { case BinaryAtomFromTuple(atom) => atom diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala index 1f73184..839fead 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala @@ -14,6 +14,8 @@ import xyz.driver.pdsuicommon.validation.Validators import xyz.driver.pdsuicommon.validation.Validators.Validator import xyz.driver.pdsuidomain.entities.Document.Meta +import scalaz.Equal + final case class ProviderType(id: LongId[ProviderType], name: String) object ProviderType { @@ -124,6 +126,8 @@ object DocumentType { } } + implicit def equal: Equal[DocumentType] = Equal.equal[DocumentType](_ == _) + implicit def toPhiString(x: DocumentType): PhiString = { import x._ phi"DocumentType(id=$id, name=${Unsafe(name)})" -- cgit v1.2.3 From cd1e685b22db2c69ad3d418b6b24b65fd63472fa Mon Sep 17 00:00:00 2001 From: vlad Date: Tue, 26 Sep 2017 13:36:16 -0700 Subject: Make number filter parsing attempt first, because number parsers are more specific. Otherwise fails for: https://records-processing.stable.sand.driver.network/rep-api/v1/document?filters=recordId+EQ+1&pageNumber=1&pageSize=9999 with: ERROR: operator does not exist: bigint = character varying Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. Position: 782 --- src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala index 3238ebc..7e86eae 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/parsers/SearchFilterParser.scala @@ -94,7 +94,7 @@ object SearchFilterParser { private val binaryAtomParser: Parser[SearchFilterExpr.Atom.Binary] = P( dimensionParser ~ whitespaceParser ~ ( (numericOperatorParser.! ~/ whitespaceParser ~/ numberParser.!) | - (commonOperatorParser.! ~/ whitespaceParser ~/ AnyChar.rep(min = 1).!) + (commonOperatorParser.! ~/ whitespaceParser ~/ AnyChar.rep(min = 1).!) ) ~ End ).map { case BinaryAtomFromTuple(atom) => atom -- cgit v1.2.3