Scala isDefined получает значение None, даже если оно имеет значения - PullRequest
2 голосов
/ 01 апреля 2020

При передаче массива JSON для построения запроса sql я получаю значение None в качестве значения, если имя символа имени столбца превышает 30 символов. Это функция моего строителя.

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": []
}
Нерабочая оплата
{
    "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 -коннектор- java "%" 5.1.18 "mysql разъем

1 Ответ

2 голосов
/ 05 апреля 2020

Это проблема с плагином maven com.itfsw / QueryBuilder для построителя запросов. Я использовал

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

при обновлении до

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

решил проблему

...