При передаче массива 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
}
}
}
мои образцы полезных нагрузок
- рабочая полезная нагрузка
{
"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 разъем