具有忽略大小写操作的 Slick AST 库

Slick AST Library with ignore case operations

这个问题我已经在slickgoogle群里问过了。如果向不检查该组的人寻求帮助,请将其张贴在这里。

我正在尝试实现类似于 scala-kendo 的过滤器。我们已经使用普通查询开发了这个过滤器功能。现在,我正在尝试将其转换为 slick 表达式,类似于 slick-kendo 所做的。 我需要实施不区分大小写的过滤。但是,我不知道该怎么做。 scala.slick.ast.Library 中的成员仅提供区分大小写的搜索方法。

编辑:

添加代码:

private def predicate(e: E, f: Filter) = {
    val (c, v) = (colNode(e, f.field), LiteralNode(f.value))
    val L = Library
    def \(fs: FunctionSymbol, nodes: Node*) = fs.typed[Boolean](nodes: _*)
    Column.forNode[Boolean](f.operator match {
      case "EqualTo" => \(L.==, c, v)
      case "NotEqualTo" => \(L.Not, \(L.==, c, v))
      case "GreaterThen" => \(L.>, c, v)
      case "GreaterThenOrEqualTo" => \(L.>=, c, v)
      case "LessThen" => \(L.<, c, v)
      case "LessThenOrEqualTo" => \(L.<=, c, v)
      case "StartsWith" => \(L.StartsWith, c, v)
      case "StartsWithIgnore" => \(L.StartsWith, c, v)
      case "EndsWith" => \(L.EndsWith, c, v)
      case "Contains" => \(L.Like, c, LiteralNode(s"%${f.value}%"))
      case "DoesNotContain" => \(L.Not, \(L.Like, c, LiteralNode(s"%${f.value}%")))
    })
  } 

如你所见,Library中有StartsWithEndsWith等方法,但我需要StartsWithIgnoreCaseEndsWithIgnoreCase等方法等等

有人可以提供任何建议来实现我需要的这个功能。

如果我对你的理解是正确的,你想要像这里这样的东西:http://slick.typesafe.com/doc/3.0.0-RC3/queries.html#sorting-and-filtering - 请参阅 4. 示例 "val q4 = coffees.filter ..."。这部分文档也适用于 slick 2.x。

终于找到解决办法了。粘贴在这里是为了其他人的利益。浏览了光滑的代码库,发现了如何将节点转换为列并在列上应用小写字母。

case "EqualToIgnoreCase" => \(L.==, (Column.forNode[String](c).toLowerCase).toNode, LiteralNode(f.value.toLowerCase()))