Scala isDefined获得无值,即使它具有值

问题描述 投票:2回答:1

[传递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
    }


  }

}

我的样本有效载荷

  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连接器

scala playframework query-builder
1个回答
2
投票

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

libraryDependencies + =“ com.itfsw”%“ QueryBuilder”%“ 1.0.2”

升级到

libraryDependencies + =“ com.itfsw”%“ QueryBuilder”%“ 1.0.4”

已解决问题

© www.soinside.com 2019 - 2024. All rights reserved.