From 1fde5b41305d95c21f77c114d3de45b047f4b0ad Mon Sep 17 00:00:00 2001 From: Oleg Volchkov Date: Wed, 13 Aug 2025 11:57:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=20json=5Fnull=20=D0=B8=20json=5Fnot=5Fnull?= =?UTF-8?q?=20=D0=B2=20lib/sql/models/sql=5Ftable.p@pfSQLBuilder.fieldValu?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/sql/models/sql_table.p | 11 ++++++++--- ut/sql/sql_table/common_test.p | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/sql/models/sql_table.p b/lib/sql/models/sql_table.p index 3f433c4..221bd8c 100644 --- a/lib/sql/models/sql_table.p +++ b/lib/sql/models/sql_table.p @@ -989,7 +989,8 @@ pfClass ## now, auto_now — текущие дата время (если не задано значение поля) ## curtime, auto_curtime — текущее время (если не задано значение поля) ## curdate, auto_curdate — текущая дата (если не задано значение поля) -## json — сереиализует значение в json +## json, json_null — сереиализует значение в json, если значение пустое, то null +## json_not_null — сереиализует значение в json, если значение пустое, то '{}' ## null — если не задано значение, то возвращает null ## uint_null — преобразуем зачение в целое без знака, если не задано значение, то возвращаем null ## uid, auto_uid — уникальный идентификатор (math:uuid) @@ -1150,8 +1151,12 @@ pfClass $result[^if(def $aValue){'^if($aValue is date){^aValue.sql-string[time]}{^taint[$aValue]}'}{NULL}] } - ^case[json]{ - $result[^if(def $aValue || $aValue is hash){'^taint[^json:string[$aValue]]'}{NULL}] + ^case[json;json_null]{ + $result[^if(def $aValue || $aValue is hash){'^taint[^json:string[$aValue;$.one-line(true)]]'}{NULL}] + } + + ^case[json_not_null]{ + $result[^if(def $aValue || $aValue is hash){'^taint[^json:string[$aValue;$.one-line(true)]]'}{'{}'}] } ^case[uid;auto_uid;uuid;uuid_auto]{ diff --git a/ut/sql/sql_table/common_test.p b/ut/sql/sql_table/common_test.p index 974869f..7ce90a5 100644 --- a/ut/sql/sql_table/common_test.p +++ b/ut/sql/sql_table/common_test.p @@ -134,3 +134,25 @@ pfTestCase ^self.assertRaises[assert.fail]{ ^sut.sqlFieldName[unexistant] } + +@test_sql_json_processors[] + ^self.sut.addFields[ + $.j1[$.processor[json]] + $.j2[$.processor[json_null]] + $.j3[$.processor[json_not_null]] + ] + + ^self.assertEq[^self.sut.fieldValue[j1;];NULL] + ^self.assertEq[^self.sut.fieldValue[j1;value];'"value"'] + ^self.assertEq[^self.sut.fieldValue[j1;^hash::create[]];'{}'] + ^self.assertEq[^self.sut.fieldValue[j1;$.k1[v1] $.k2[v2]];'{ "k1":"v1", "k2":"v2" }'] + + ^self.assertEq[^self.sut.fieldValue[j2;];NULL] + ^self.assertEq[^self.sut.fieldValue[j2;value];'"value"'] + ^self.assertEq[^self.sut.fieldValue[j2;^hash::create[]];'{}'] + ^self.assertEq[^self.sut.fieldValue[j2;$.k1[v1] $.k2[v2]];'{ "k1":"v1", "k2":"v2" }'] + + ^self.assertEq[^self.sut.fieldValue[j3;];'{}'] + ^self.assertEq[^self.sut.fieldValue[j3;value];'"value"'] + ^self.assertEq[^self.sut.fieldValue[j3;^hash::create[]];'{}'] + ^self.assertEq[^self.sut.fieldValue[j3;$.k1[v1] $.k2[v2]];'{ "k1":"v1", "k2":"v2" }']