Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 08:18
  • 08:18
    yurique starred getquill/quill
  • Jul 27 19:43
    deusaquilus opened #2218
  • Jul 27 19:42

    deusaquilus on fix-onconflict-stuff

    Fixing on-conflict case with qu… (compare)

  • Jul 27 18:25
    scala-steward opened #2217
  • Jul 27 17:35

    deusaquilus on fix-onconflict-stuff

    Working on on-conflict stuff (compare)

  • Jul 27 11:18
    xeppaka starred getquill/quill
  • Jul 26 16:48
    scala-steward closed #2208
  • Jul 26 16:48
    scala-steward commented #2208
  • Jul 26 16:48
    scala-steward opened #2216
  • Jul 26 11:39
    dev590t commented #2214
  • Jul 25 16:03
    dev590t edited #2214
  • Jul 25 15:38
    dev590t commented #2214
  • Jul 25 15:22
    dev590t commented #2214
  • Jul 25 15:20
    dev590t commented #2214
  • Jul 25 14:58
    TheDIM47 opened #2215
  • Jul 25 13:55
    dev590t edited #2214
  • Jul 25 13:48
    dev590t edited #2214
  • Jul 25 13:46
    dev590t commented #2214
  • Jul 25 13:45
    dev590t commented #2214
Remi Guittaut
@remiguittaut
Hi guys. I was wondering about the interest of using zio-quill, it just removes the need of using zio interop cats isn't it?
redk0m
@redk0m_twitter
case class Person(lastVisit: String)
java.lang.UnsupportedOperationException: Can't read LocalDateValue [value=2000-07-23] as String
but in database this column is Date type, what type i must use or how convert it to String?
Quafadas
@Quafadas

Hi, I'm trying to learn quill (3.7.0) out of a postgres database.


val ctx = new PostgresJdbcContext(LowerCase, new HikariDataSource(config))
import ctx._ 
val check = ctx.quote(query[City]
    .sortBy(_.population)(Ord.descNullsLast).take(5))

ctx.run(check)

val mexCity = 
    ctx.quote(query[City])
    .filter(c => c.name like "%mex%" )

ctx.run(mexCity)

The first of these queries works well. The second fails at runtime with the following message.

Found the following free variables: IdentName(mexCity).
Quotations can't reference values outside their scope directly.
In order to bind runtime values to a quotation, please use the method `lift`.
Example: `def byName(n: String) = quote(query[Person].filter(_.name == lift(n)))`

As far as I tell,it is consistent with the docs...
https://getquill.io/#quotation-sql-specific-operations-like
Anyone have ideas on what I might be doing wrong here?

Urgh. Foolishness...

val mexCity = 
    ctx.quote(query[City]
    .filter(c => c.name like "%mex%" ))

The error message was in fact a good one, telling me I had the brackets in the wrong place. Sorry for spam.

Janghwan Lee
@janghwan

hi I would like to chain filter clauses like

query[Person].filter(p => 
  map.collect({
    case ("name", names)  => liftQuery(names).contains(p.name)
    case ("city", cities) => liftQuery(cities).contains(p.city)
  }).foldLeft(lift(false))(_ || _)
)

but this causes Tree 'map.collect ... ' can't be parsed to 'Ast'
is there any other way to combine filter clauses dynimically?

Luis Gustavo
@lgos44

Hi all!
I need to implement a sortBy with dynamic runtime parameters. Currently Im using:

val query = dSchema.sortBy(item => {
      orderBy.flatMap(_.headOption.map(_.columnName)) match {
        case Some("createdAt") => item.audit.createdAt
        case Some("updatedAt") => item.audit.modifiedAt
        case _ => item.audit.modifiedAt
      }
    }) {
      orderBy.flatMap(_.headOption.map(_.direction)) match {
        case Some(OrderDirection.Asc) => Ord.asc
        case Some(OrderDirection.Desc) => Ord.desc
        case _ => Ord.asc
      }
    }

But we will need to have multiple columns at the same time to the sortBy with match case seems unviable.
I've been experimenting with infix. Is there a way to use infix with sortBy? Can anyone provide an example?

Yisrael Union
@yisraelU
im having some trouble with some sql that is generated when using an implicit class to compare date
I ended up with a sql that looks like this
  1 = event_datetime >= ?
I'm using the comparison operators suggested on the Quill docs page. The error I receive states this is invalid sql
Quafadas
@Quafadas
When using quill in metals / vscode, metals - quill query compilation to SQL shows up as a "problem" in the compiler window
is this intentional?
Zulek
@Zulek

Hello, im using application joins (ver 2.5.4).
Somehow outer select does not contain all columns of table but inner select (in join statements) does and as a result i get "column ... does no exist".

Is there a way to force select all columns from big applicative join with filters?

Zulek
@Zulek
or joins have columns that are not in a scope of particular join (...) statement
Alexander Ioffe
@deusaquilus
@Zulek There were various bugs with older versions of Quill with columns being excluded. Are these columns used in Group By (or other aggregations) but any chance?
5 replies
Alexander Ioffe
@deusaquilus
@all Is anyone using AnyVal encoders? Are your AnyVal instances also case classes or not? In Dotty-Quill they might need to be.
1 reply
SemanticBeeng
@SemanticBeeng
What it the best way to use quill--spark with spark 3.1.1 ?
(forgive me if already discussed)
Lachezar Yankov
@lachezar

Hi, if I have two value types which have the same underlying type (String), is there any way to perform "column update" (assign the value from one of the columns to the other)?

case class Email(email: String) extends AnyVal
case class EmailVerified(emailVerified: String) extends AnyVal

...
... .update(table => table.emailVerified -> table.email, ...

beside infix

Hee Yeon Cho
@aposto
Hello, how to compile list updating.
dynamicQuery[TestEntity].update(set("i", 1), set("l", 2L)) 
// compile error
dynamicQuery[TestEntity].update(list.map(a => set(a._1, a._2):_*))
Alexander Ioffe
@deusaquilus
@lachezar This is basically an update-with-join use case which unfortunately we don't support yet.
Oleg Pyzhcov
@oleg-py
How to do select by a collection of compound keys? I have something like a runtime Vector[((UUID, Int), (UUID, Int))] and need to match on 4 corresponding columns. Using jdbc-monix and postgres.
attempt to liftQuery that vector would fail with "Can't tokenize a non-scalar lifting"
Dan Ellis
@danellis

I'm trying to use a model that has a java.time.Instant field. I've put this in my context class:

        implicit val encodeInstant = MappedEncoding[Instant, LocalDateTime](i => LocalDateTime.ofInstant(i, ZoneOffset.UTC))
        implicit val decodeInstant = MappedEncoding[LocalDateTime, Instant](_.toInstant(ZoneOffset.UTC))

but I'm still getting the "Can't find implicit Decoder[java.time.Instant]" error

I've also tried putting it after my import ctx._
Remi Guittaut
@remiguittaut
Hi guys, in quill 3.7.0 for whatever reason, the generated sql queries are not displayed at compile time anymore. Do you have the same problem? (I don't have -Dquill.macro.log=false in my build definition)
nafg
@nafg
Are there any sample projects besides quill-example and play-quill-jdbc repos? How do you maintain sample projects? (In Slick there's a lot of code in the SBT build dealing with it, which I'd like to simplify or eliminate, and I'm trying to find out what other people do.) Do you automate keeping them up to date, and if so, how? /cc @deusaquilus
Philippe Derome
@phderome
I am getting a macro TypecheckException for no implicit Decoder when using H2ZioJdbcContext. What is it generally indicative of?
[error] scala.reflect.macros.TypecheckException: Can't find implicit `Decoder[Foo]`. Please, do one of the following things:
[error] 1. ensure that implicit `Decoder[Foo]` is provided and there are no other conflicting implicits;
[error] 2. make `Foo` `Embedded` case class or `AnyVal`.
[error]                    
[error]         at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$3(Typers.scala:44)
[error]         at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$2(Typers.scala:38)
[error]         at scala.reflect.macros.contexts.Typers.doTypecheck$1(Typers.scala:37)
[error]         at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$7(Typers.scala:50)
[error]         at scala.reflect.internal.Trees.wrappingIntoTerm(Trees.scala:1891)
[error]         at scala.reflect.internal.Trees.wrappingIntoTerm$(Trees.scala:1888)
[error]         at scala.reflect.internal.SymbolTable.wrappingIntoTerm(SymbolTable.scala:28)
[error]         at scala.reflect.macros.contexts.Typers.typecheck(Typers.scala:50)
[error]         at scala.reflect.macros.contexts.Typers.typecheck$(Typers.scala:32)
[error]         at scala.reflect.macros.contexts.Context.typecheck(Context.scala:18)
[error]         at scala.reflect.macros.contexts.Context.typecheck(Context.scala:18)
[error]         at io.getquill.context.QueryMacro.expandQueryWithMeta(QueryMacro.scala:125)
[error]         at io.getquill.context.QueryMacro.expandQuery(QueryMacro.scala:51)
[error]         at io.getquill.context.QueryMacro.runQuery(QueryMacro.scala:34)
never mind that, I have some more basic questions/issues to address/understand. I'll ask something simpler if required.
Philippe Derome
@phderome
It seems to be about invalid usage of nesting of case classes, which makes sense that I'd need Decoder or Encoder for nesting case classes.
so the type parameter T in EntityQuery[T] has nested case classes.
Philippe Derome
@phderome
looks like the doc tells me what I should be doing: https://getquill.io/#quotation-schema-embedded-case-classes
that was it.
n0tel
@n0tel
hello. Can i use pattern matching on DynamicQuery. Like this:
schemaOne.dynamic.join(schemaTwo).on(_.id == _.id).groupBy  { case  quoted =>  // i want case (schema1, schema2) here
...
}
n0tel
@n0tel

How can i use dynamic query with implicit joins?

// Implicit Joins:
quote {
  for {
    a <- query[A]
    b <- query[B] if (a.id == b.fk) 
  } yield (a, b)
}

if i use dynamic query, this code return DynamicQuery[Quoted[Schema1], Quoted[Schema2]]:

// Implicit Joins:
val dynamicQ = quote {
  for {
    a <- query[A].dynamic
    b <- query[B].dynamic if (a.id == b.fk) 
  } yield (a, b)
}

and if i then use groupBy, im getting error The query definition must happen within aquoteblock. [error] b.groupBy(_._1)

dynamicQ.groupBy(_._1)
Vitaliy-Savkin
@Vitaliy-Savkin

Hi, can I somehow force quill to execute exactly the same sql I specified via infix?
When I execute this code

case class NamedEntity(name: String)
val rawQuery = s"SHOW DATABASES STARTS WITH '$dbName'"
run(quote(infix"#$rawQuery".as[Query[NamedEntity]])).exists(_.name == dbName)

I see query

SELECT "x"."name" FROM (SHOW DATABASES STARTS WITH 'ACC_***_DB') AS "x"

and get an error

SQL compilation error:
syntax error line 1 at position 24 unexpected 'SHOW'.
2 replies
n0tel
@n0tel

How i can write this query using quill ? (postgres)

select * from ( values ('Albert', 'Einstein'), ('Nicola', 'Tesla') ) s (name, lastName)

Query, that return predefined values (not from DB)

Denis Novac
@DenisNovac

Hi everyone. I am trying to make join of count, but i getting stuck with Tuple(Quoted, Quoted). Is there any way to make it Quoted(Tuple(...))?

stream(
      for {
        item <- items.dynamic
                  .filter(_.id == lift(id))
                  .filter(_.parent.isEmpty)

        childsCount = items.dynamic
                  .filter(_.parent == lift(Some(item.id)))
                  .size

      } yield (item, childsCount)
    ).transact(transactor)

The output type is Stream[F, (Quoted[Item], Quoted[Long])], but it should be Stream[F, (Item, Long)]

Denis Novac
@DenisNovac
I guess i just don't really need dynamic call here. It works without it.
ex0ns
@ex0ns

Hello

I'm trying to write a generic code with Quill to perform some operation on multiple datatype, as described in https://stackoverflow.com/questions/44784310/how-to-write-generic-function-with-scala-quill-io-library/44797199#44797199

I've created my macro

class FindMacro(val c: MacroContext) {
  import c.universe._

  def find[T](filter: Tree)(implicit t: WeakTypeTag[T]): Tree =
    q"""
            import ${c.prefix}._
            run(${c.prefix}.query[$t].filter($filter))
          """
}

That I'm then using in my generic trait:

trait Indexed[I, T] {
  def find(key: I, obj: T): Boolean
}

trait Storage[I, T] {
  def get(idx: I)(implicit eq: Indexed[I, T]): Task[Option[T]]
}

trait Queries { this: ZioJdbcContext[_, _] =>
  def find[T](filter: T => Boolean): T = macro FindMacro.find[T]
}

case class SqliteStorage[I, T](connection: Connection)(implicit schema: SchemaMeta[T]) extends Storage[I, T] {

  val ctx = new SqliteZioJdbcContext(SnakeCase) with Queries

  override def get(idx: I)(implicit eq: Indexed[I, T]): Task[Option[T]] =
    ctx.find[T](p => eq.find(idx, p))

}

Unfortunately, the implicit SchemaMeta[T] does not seems to work, I think I must be missing something here, but I don't understand what, could someone help me with that ?

Alexander Ioffe
@deusaquilus

ProtoQuill (i.e. Dotty-Quill) Beta-1 is out!

// build.sbt
lazy val root = project
  .in(file("."))
  .settings(
    scalaVersion := "3.0.0",
    libraryDependencies ++= Seq(
      "io.getquill" %% "quill-jdbc" %"3.7.1.Beta1.0"
    )
  )

Example:

@main
def simpleQuery = {
  inline def q = quote {
    query[Person]
  }
  val ctx = new SqlMirrorContext(PostgresDialect, Literal)
  import ctx._

  println(run(q))
}
Thanks to Aggelos Bibodis, Liu Fengyun, Prakhar Saxena and the ScQuilL Group and Jakub Kozłowski.
Special thanks to Nicolas Stucki!
vonchav
@voonchav_gitlab
Hi @deusaquilus, is there a blocker on supporting ScalaJS v1.x? Currently quill-core is still on scalajs 0.6.x. If there isn't a known issue, I can try and submit a PR.
Andrew Richards
@ajrnz
For protoquill: quill-jdbc-zio requires quill-zio which doesn't seem to be published for scala 3 (3.7.1.Beta1.0)
N.S. Cutler
@godenji

ProtoQuill (i.e. Dotty-Quill) Beta-1 is out!

:rocket:

Quafadas
@Quafadas
Does anyone have an example of customising quill-codegen to spit out companion objects with the case classes?
e-Evolution
@e-Evolution
Hi @deusaquilus, thank you very much for your great work, have you any plans to integrate ksqlDB https://ksqldb.io into the Quill Context family?
Lyall Jonathan Di Trapani
@lj-ditrapani
Hi @ajrnz @deusaquilus . I opened getquill/protoquill#6 regarding missing quill-zio artifact.
vbergeron-ledger
@vbergeron-ledger
Hello ! We got quite a nasty problem over there, using quill-cassandra.
We fail to get the InsertMeta implicit for a row with 16 Fields. 15 is fine tho. Anyone got clues ? :)
vbergeron-ledger
@vbergeron-ledger
(Issue was apparently caused by upgrading java from 14 to 16. Remains a problem for 14+ users tho)
cgrabows
@cgrabows
val insertResults =
          val insert = quote {
            liftQuery(entries.toList).foreach { item =>
              querySchema[Entry](TableName).insert(item)
            }
          run(insert).size
        }
Tree 'context.querySchema[Entry](cache)' can't be parsed to 'Ast'