1

我必须在中缀中编写普通的 SQL 查询。我有一个主 SQL 查询,然后根据某些条件向其中添加 AND 子句。

例如 :

  val andClause= quote { (name: String) =>
    infix"""AND name = $name """.as[Query[(Int, String)]]
   }

   val rawQuery = quote { (id: String, name: String) =>
    infix"""SELECT id, name FROM my_entity WHERE id = $id ${andClause(name)}"""
        .as[Query[(Int, String)]]
  }

 ctx.translate(rawQuery("ramakrishna", "rk”))

这打印

  SELECT x._1, x._2 FROM (SELECT id, name FROM my_entity WHERE id = 'ramakrishna' AND name = 'rk' ) AS x

正如预期的那样。

但是我需要有条件地连接中缀,例如

    val andClause1= quote { (name: String) =>
     infix"""AND name = $name """.as[Query[(Int, String)]]
    }

    val andClause2= quote { (name: String) =>
     infix"""   """.as[Query[(Int, String)]]
    }


   def andClauseCondition(i: String) =
      if (!i.isEmpty) {
         andClause1(i)
   } else {
       andClause2(i)
   }

我称我的查询为

val rawQuery = quote { (id: String, name: String) =>
     infix"""SELECT id, name FROM my_entity WHERE id = $id ${andClauseCondition(name)}"""
         .as[Query[(Int, String)]]
   }

但我得到错误

 Error:(231, 26) Tree 'andClauseCondition(name)' can't be parsed to 'Ast'
    val rawQuery = quote { (id: String, name: String) =>

是否可以将一个或多个中缀附加到基本查询?如果是,这是附加的正确方法吗?

4

0 回答 0