Лучше всего подходит Json Структура для создания предложения where в моем REST API - PullRequest
0 голосов
/ 05 мая 2020

У меня есть требование, я хочу создать предложение where на основе ввода JSON. Подобные фильтры предоставляются как входные данные из тела запроса (JSON). Таким образом, он может содержать условия И и ИЛИ. Я пробовал немного, но предложение where, как показано ниже. Но я хочу сделать его более надежным. Может ли кто-нибудь предложить лучший формат JSON для достижения этой цели?

Я предоставляю образец JSON, который был закодирован, и предложение where построено с его использованием.

{"filter": [
	{
		"operator": "AND",
		
		"operands":[ {
					"paramName": "publishDate",
					"operator":"gt",
					"paramValue":"2020-02-06T00:00:00.000Z"
				}, 
				 {
					"paramName": "binName",
					"operator":"co",
					"paramValue":"30"
				}
			]
	},
	{
		"operator": "OR",
		
		"operands":[ {
					"paramName": "itemName",
					"operator":"eq",
					"paramValue":"Test1"
				}, 
				 {
					"paramName": "itemName",
					"operator":"eq",
					"paramValue":"pqre"
				}
			]
	},
	{
		"operator": "OR",
		
		"operands":[ {
					"paramName": "kpiName",
					"operator":"eq",
					"paramValue":"Test1"
				}, 
				 {
					"paramName": "kpiName",
					"operator":"eq",
					"paramValue":"pqre"
				}
			]
	}
	]
		

}

Конечный пункт вывода

AND (
PUBLISH_DATE > TO_TIMESTAMP ('2020-02-06 05:30:00.0','yyyy-mm-dd hh24:mi:ss.ff') 
AND BIN_NAME like '%30%'
)
AND (
CONCATENATED_SEGMENTS = 'Test1'
OR CONCATENATED_SEGMENTS = 'pqre'
)
AND (
KPI_NAME = 'Test1'
OR KPI_NAME = 'pqre'
)

Ожидание:

AND   (
        publish_date > to_timestamp('2020-02-06 05:30:00.0','yyyy-mm-dd hh24:mi:ss.ff')
        AND   bin_name LIKE '%30%'
        **OR  ParamName1 = PARAMVALUE_1
        OR ParamName2 > PARAMVALUE_2** 
    )
    AND   (
        (concatenated_segments = 'Test1'
        OR    concatenated_segments = 'pqre')
        **AND TEST_PARAM = PARAM_VAL_1**
    )
    AND   (
        kpi_name = 'Test1'
        OR    kpi_name = 'pqre'
    )
...