在油滑生成的查询删除别名(Remove alias in Slick generated queri

2019-10-21 14:47发布

我使用的数据库操作油滑在我的应用程序(使用的是Postgres作为数据库)。 我面临的一些问题,而试图建立广义的查询。 我要求SO一个问题,使用表名,而不是别名(的位置 ),但发现它没有可能。

所以,我现在正在努力解决这个问题的油滑的一面。

def ++= (selectStatement:String) ={
    this.customSelectStatement = Some(selectStatement + " E where " +  getQuery(filterPropertyList))
  }

filterQuery ++= (TableQuery[SkillTable] innerJoin TableQuery[SkillCategoryTable] on (_.skillCategoryId === _.id)).sortBy(_._1.id).map{ case (a,at) => (a.id,a.name,at.name)}.selectStatement
    val result = filter[SkillContainer](filterQuery)

该方法getQuery建立其中条件查询基于它接收到的特性的SQL。 我建立使用油滑表达式SELECT子句,然后将其转换为SQL查询,然后通过附加内置WHERE条件getQuery

当我运行的代码,是如何产生的查询如下:

SELECT x2.x3,
       x2.x4,
       x5.x6
FROM (
  SELECT x7."SkillId" AS x3,
         x7."Name" AS x4,
         x7."Description" AS x8,
         x7."IsRemoved" AS x9,
         x7."SkillCategoryId" AS x10
  FROM "base"."Skill" x7
) x2
  INNER JOIN (
    SELECT x11."SkillCategoryId" AS x12,
           x11."Name" AS x6,
           x11."Description" AS x13,
           x11."IsRemoved" AS x14
    FROM "base"."SkillCategory" x11
  ) x5 ON x2.x10 = x5.x12
WHERE base."Skill"."IsRemoved" = 'false' 
LIMIT 10 offset 0

但是,上面的查询会因为失败base."Skill"."IsRemoved"我油滑产生与别名查询将不会得到解决。 但是,如果我将其更改为x2.x9 = 'false' ,则查询成功执行。

WHERE条件查询由建getQuery方法,它不知道要使用的别名。 有没有什么办法中,我可以问油滑不生成列别名,也提供了表达自身的子查询的别名( 两次 ),这样我将拥有控制权的子查询的别名?

Answer 1:

该“maybefilter”可能允许您使用类型安全的油滑的API做没有串联SQL字符串。 https://gist.github.com/cvogt/9193220

除此之外,除去别名,在可能的情况将是一个不错的改进查询编译的,我有时在过去有,虽然,太多。 请添加票: https://github.com/slick/slick/issues



文章来源: Remove alias in Slick generated queries