gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:18:28 26 4
gpt4 key购买 nike

在传递 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}]}
    并且正在使用
    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"



    解决了这个问题

    关于Scala isDefined 获取 None 值,即使它有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60972399/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com