使用 Scala 的 Anorm 库中已有的资源,有一种方法可以转义 SQL 数据以进行外部写入(例如:数据转储)

Using the resources already available in Scala's Anorm library is there a way of escaping SQL data for an external write (e.g.: datadump)

我尽量不去写已经写好的代码——我真的是:)

我有一个生产 MariaDB 数据库,它只是拒绝将负载转储到其自身的早期版本,我需要编写一个自定义 dump/load 例程来处理这种情况。 myriad of compatibility switches 的 None 为 mysqldump 悲哀地行事。

手动清理转储的工作量太大且太危险,无法实现自动化,我需要精确地重复该过程几次,所以我负担不起任何手动工作。我知道有些工具可能会有所帮助,但编写代码(我熟悉)比学会信任另一个工具更容易

我之前在 platform/framework 中写过这段代码,所以我知道必须做什么以及如何做。

这次我想问的是,有没有一种优雅的方法可以使用 Anorm 用来清理数据的任何东西来清理数据预转储?

到目前为止,我什至无法查看 Anorm 生成的实际 SQL 查询(除了通过 MySQL 查询记录器)所以我不抱太大希望,但我我在问,以防其他人有办法进入我还没有找到的内部例程。

据我所知,答案显然是否定的。

但是我讨厌把事情留在死胡同里,所以这里有一个小程序可以解决问题。我很确定它可以更好地优化,因为我不太喜欢 char.toString 必须在 每个 字符上调用 not 替换。

 def escapeSQLDelimiters(dataToEscape: String) = {
    dataToEscape flatMap { c =>
      c match {
        case '\' => "\\"
        case '\u0000' => "\0"
        case '\n' => "\n"
        case '\t' => "\t"
        case '\r' => "\r"
        case '\b' => "\b"
        case '\'' => "\\'"
        case '\"' => "\\""
        case _ => c.toString
      }
    }
  }