Scala isDefined 获得 None 值,即使它有值

Scala isDefined gets None value even though it has values

传递 JSON 数组以构建 sql 查询时,如果列名称字符的名称超过 30 个字符,我将获得 None 作为值。这是我的builder的功能。

import com.itfsw.query.builder.SqlQueryBuilderFactory
import org.apache.commons.lang3.math.NumberUtils
import play.api.Logger
import v1.controllers.QueryParserReq

final case class ColumnEmptyException(private val message: String = "",
                                      private val cause: Throwable = None.orNull)
  extends Exception(message, cause)

class QueryParser {
  private val logger = Logger(getClass)

  def parse(json: String): Option[String] = {

    val sqlQueryBuilderFactory = new SqlQueryBuilderFactory
    val sqlBuilder = sqlQueryBuilderFactory.builder

    // build query

    try {
      val sqlQueryResult = sqlBuilder.build(json)
      logger.info(s" conditions $sqlQueryResult")
      Some(sqlQueryResult.getQuery(true))

    }
    catch {
      case ex: Exception =>
        logger.error(ex.getMessage, ex)
        None

    }


  }

  def createQuery(queryReq: QueryParserReq): Option[String] = {
    val select: String = "SELECT "
    val from: String = " FROM "
    val where: String = " WHERE "


    if (queryReq.fields.filter(k => NumberUtils.isNumber(k)).isEmpty &&
      queryReq.fields.nonEmpty
    ) {
      val builder = StringBuilder.newBuilder
      builder.append(select)
      builder.append(queryReq.fields.mkString(","))
      builder.append(from)
      builder.append(queryReq.cubeName.trim)

      println(queryReq.jsCondition)


        //No filters
      if (queryReq.jsCondition.isEmpty) {
        logger.info(s"dynamic Query is $builder")
        Some(builder.toString())
      }

        //with filters
      else {
        val filters = parse(queryReq.jsCondition)
        if (filters.isDefined) {
          builder.append(where)
          builder.append(filters.get)
          logger.info(s"dynamic Query is $builder")
          Some(builder.toString())
        }
        else {
           None
        }
      }
    }
    else {
      None
    }


  }

}

我的示例负载

  1. 工作负载
{
    "filter": "{\"condition\":\"AND\",\"rules\":[{\"field\":\"hospital_id\",\"operator\":\"equal\",\"type\":\"number\",\"value\":\"3\"}]}",
    "columns": [
        {
            "columnName": "Order_status"
        }
    ],
    "groupBy": []
}
  1. 非工作负载
{
    "filter": "{\"condition\":\"AND\",\"rules\":[{\"field\":\"orbkn_surgery_procedures_hospital_id\",\"operator\":\"equal\",\"type\":\"number\",\"value\":\"3\"}]}",
    "columns": [
        {
            "columnName": "Order_status"
        }
    ],
    "groupBy": [] }

query.JsCondition 的值 = {"condition":"AND","rules":[{"field":"booking_id","operator":"equal","type":"number","value":3}]} 并且正在使用 libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.18" mysql 连接器

这是查询生成器的 maven com.itfsw/QueryBuilder 插件版本的问题。 我正在使用

libraryDependencies += "com.itfsw" % "QueryBuilder" % "1.0.2"

升级到

libraryDependencies += "com.itfsw" % "QueryBuilder" % "1.0.4"

解决了问题