scala - Scala isDefined 得到 None 值,即使它有值
问题描述
传递 JSON 数组以构建 sql 查询时,如果列名字符的名称超过 30 个字符,则将 None 作为值。这是我的构建器的功能。
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
}
}
}
我的示例有效载荷
- 工作负载
{ "filter": "{\"condition\":\"AND\",\"rules\":[{\"field\":\"hospital_id\",\"operator\":\"equal\",\"type\":\"number\",\"value\":\"3\"}]}", "columns": [ { "columnName": "Order_status" } ], "groupBy": [] }
- 非工作负载
{ "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}]}
And am using libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.18" mysql connector
解决方案
这是查询构建器的 maven com.itfsw/QueryBuilder 插件版本的问题。我正在使用
libraryDependencies += "com.itfsw" % "QueryBuilder" % "1.0.2"
升级到
libraryDependencies += "com.itfsw" % "QueryBuilder" % "1.0.4"
解决了这个问题
推荐阅读
- codeigniter - 如何在 Grocery Crud 中强制字段类型范围?
- php - 展平多维数组
- strapi - CMS - 限制列表视图加载关系导致渲染缓慢
- wpf - 选择确实隐藏了 DataGridCell
- javascript - Vuej.js 调试,谷歌浏览器崩溃
- swift - 使用 ARKit 面部跟踪时 didUpdate 回调的速率
- mongodb - 如何使用 Groovy 在 mongo 中插入双精度类型值?
- python - 正确使用 processName LogRecord 属性
- python - 使用 Python BeautifulSoup 抓取表格时遇到问题
- python - 检测时间序列的快速增长