Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ inThisBuild(List(
)
))

val scala_2_12 = "2.12.7"
val scala_2_13 = "2.13.6"
val scala_2_12 = "2.12.20"
val scala_2_13 = "2.13.16"

scalaVersion := scala_2_13

Expand All @@ -41,7 +41,11 @@ libraryDependencies ++= Seq(
"com.softwaremill.sttp.tapir" %% "tapir-core" % "1.2.7"
)

testOptions in Test ++= Seq(Tests.Argument("-oF"))
Test / testOptions ++= Seq(Tests.Argument("-oF"))
Test / fork := true
Test / javaOptions ++= Seq(
"--add-opens=java.base/java.lang=ALL-UNNAMED"
)

scalacOptions ++= Seq(
"-deprecation",
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.8.2
sbt.version=1.11.2
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,18 @@ package org.virtuslab.beholder.filters

import org.virtuslab.beholder.views.BaseViewComponent
import org.virtuslab.unicorn.UnicornWrapper
import play.api.libs.json.Json
import play.api.libs.json.{ Json, OFormat, Reads, Writes }
import slick.ast.Ordering
import slick.lifted.{ ColumnOrdered, Ordered }

import scala.concurrent.ExecutionContext
import sttp.tapir._
import play.api.libs.json.Format
import play.api.libs.json.Reads
import play.api.libs.json.Writes

case class Order(column: String, asc: Boolean)

object Order {
implicit val format = Json.format[Order]
implicit val schema = Schema.derived[Order]
implicit val format: OFormat[Order] = Json.format[Order]
implicit val schema: Schema[Order] = Schema.derived[Order]
}

/**
Expand All @@ -39,7 +36,7 @@ object FilterRange {
import sttp.tapir.Schema
import play.api.libs.functional.syntax._
import play.api.libs.json._
def schema[T: Schema](tname: String) = Schema.derived[FilterRange[T]].name(Schema.SName(s"FilterRange_$tname"))
def schema[T: Schema](tname: String): Schema[FilterRange[T]] = Schema.derived[FilterRange[T]].name(Schema.SName(s"FilterRange_$tname"))
implicit def rangeFormat[T: Format]: Format[FilterRange[T]] =
((__ \ "from").formatNullable[T] and
(__ \ "to").formatNullable[T])(FilterRange.apply, unlift(FilterRange.unapply))
Expand Down Expand Up @@ -139,7 +136,7 @@ trait BaseFilterComponent extends BaseViewComponent with FilterFieldComponent {

//ordering
private def order(data: FilterDefinition)(table: FilterTable): Option[(Rep[_], Boolean)] =
data.orderBy.map { case order => (table.columnByName(order.column), order.asc) }
data.orderBy.map(order => (table.columnByName(order.column), order.asc))
}

trait TableFilterAPI[Entity, Formatter, QueryBase] extends FilterAPI[Entity, Formatter] {
Expand Down Expand Up @@ -220,10 +217,7 @@ trait BaseFilterComponent extends BaseViewComponent with FilterFieldComponent {
}

case class FilterResult[T](data: Seq[T], total: Int) {

def this(data: Seq[T]) {
this(data, data.size)
}
def this(data: Seq[T]) = this(data, data.size)
}

object FilterResult {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package org.virtuslab.beholder.filters
import org.virtuslab.beholder.views.FilterableViewsGenerateCodeComponent
import org.virtuslab.unicorn.UnicornWrapper

import scala.language.higherKinds
import slick.ast.TypedType
/**
* Generated code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import slick.ast.{ BaseTypedType, TypedType }
trait FromFilterFieldsComponent extends FilterFieldComponent with SeqParametersHelperComponent {
self: UnicornWrapper[Long] =>

import unicorn._
import unicorn.profile.api._

abstract class FormFilterField[A: TypedType, B](mapping: Mapping[B]) extends MappedFilterField[A, B] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import org.virtuslab.beholder.filters._
import org.virtuslab.beholder.utils.ILikeExtension._
import org.virtuslab.beholder.utils.SeqParametersHelperComponent
import org.virtuslab.unicorn.UnicornWrapper
import play.api.libs.functional.syntax._
import play.api.libs.json._
import slick.ast.{ BaseTypedType, TypedType }
import sttp.tapir._
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ trait JsonFormatterComponent extends JsonFilterFieldsComponent with BaseFilterCo

override def reads(json: JsValue): JsResult[Seq[Option[Any]]] = json match {
case jsObject: JsObject =>
jsObject.keys -- fieldFormatters.flatMap(_.filterColumnNames) match {
jsObject.keys.toSet -- fieldFormatters.flatMap(_.filterColumnNames) match {
case badFields if badFields.nonEmpty =>
JsError((JsPath(Nil), JsonValidationError("No such fields in filter: " + badFields)))
case _ =>
Expand Down
12 changes: 6 additions & 6 deletions src/main/scala/org/virtuslab/beholder/utils/ILikeExtension.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,26 @@ object ILikeExtension {
* escape underscores, percent signs and backslashes as they have special meaning in PostgreSQL's LIKE function
* @see https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-LIKE
*/
def escape(text: String) = text
def escape(text: String): String = text
.replace(raw"""\""", raw"\\")
.replace("%", raw"\%")
.replace("_", raw"\_")

implicit def iLikeExtension(c: Rep[String]) = new ILikeExtension(c)
implicit def iLikeExtension(c: Rep[String]): ILikeExtension[String] = new ILikeExtension(c)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could setup scalafix for these things to be automatic

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the idea, I'll look into it.


implicit def iLikeMappedExtension(c: Rep[MappedTo[String]]) = new ILikeExtension(c)
implicit def iLikeMappedExtension(c: Rep[MappedTo[String]]): ILikeExtension[MappedTo[String]] = new ILikeExtension(c)

implicit def iLikeOptionExtension(c: Rep[Option[String]]) = new ILikeExtension(c)
implicit def iLikeOptionExtension(c: Rep[Option[String]]): ILikeExtension[Option[String]] = new ILikeExtension(c)

implicit def seq2Ordered[T <% Ordered](t: IndexedSeq[T]) = new Ordered(t.flatMap(_.columns))
implicit def seq2Ordered[T](t: IndexedSeq[T])(implicit ev: T => Ordered): Ordered = new Ordered(t.flatMap(_.columns))
}

/**
* Adds ilike operator to slick.
*/
class ILikeExtension[B](val c: Rep[B]) extends AnyVal with ExtensionMethods[String, B] {

def ilike[R](e: String)(implicit om: o#arg[String, B]#to[Boolean, R]) =
def ilike[R](e: String)(implicit om: o#arg[String, B]#to[Boolean, R]): Rep[R] =
om.column(ILikeExtension.ILIKE, n, LiteralNode(e))

override protected[this] implicit def b1Type: TypedType[String] = ???
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package org.virtuslab.beholder.views
import org.virtuslab.unicorn.UnicornWrapper
import slick.ast.TypedType

import scala.language.existentials

trait BaseViewComponent {
self: UnicornWrapper[Long] =>

Expand All @@ -25,7 +23,7 @@ trait BaseViewComponent {
protected val columns: Seq[(String, this.type => Rep[_])]
private lazy val columnsMap: Map[String, this.type => Rep[_]] = columns.toMap

final def columnsNames = columns.map(_._1)
final def columnsNames: Seq[String] = columns.map(_._1)

/**
* find column by name
Expand All @@ -48,7 +46,7 @@ trait BaseViewComponent {
object BaseView {

implicit class WithViewDDL(val query: TableQuery[_ <: BaseView[_, _]]) {
def viewDDL = ViewDDL(query.shaped.value)
def viewDDL: ViewDDL = ViewDDL(query.shaped.value)
}

case class ViewDDL(table: BaseView[_, _]) extends DDL {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ trait FilterableViewsComponent extends FilterableViewsGenerateCodeComponent {

implicit val tupleShape = new TupleShape(s1, s2).asInstanceOf[Shape[_ <: slick.lifted.FlatShapeLevel, (slick.lifted.Rep[A], slick.lifted.Rep[B]), (A, B), _]]

def * = (c1, c2) <> (apply.tupled, unapply)
def * = (c1, c2).<>(apply.tupled, unapply)
}
// }

Expand Down
Loading