diff --git a/lib/common.p b/lib/common.p index f4f054a..30c597b 100644 --- a/lib/common.p +++ b/lib/common.p @@ -18,6 +18,11 @@ locals @create[aOptions] +@A[*aValues] -> array[aValues...] +## Создаёт массив c элементами из параметров методов. +## Аналог ^array::create[...], но с коротким именем + $result[^array::copy[$aValues]] + @assert[aCondition;aComment] -> [] | throws: assert.fail $result[] ^if(!$aCondition){ diff --git a/lib/sql/models/sql_table.p b/lib/sql/models/sql_table.p index 719a7b5..7bb7dbc 100644 --- a/lib/sql/models/sql_table.p +++ b/lib/sql/models/sql_table.p @@ -687,24 +687,30 @@ pfClass @sqlFieldName[aFieldName] ^self.assert(^self._fields.contains[$aFieldName]){Неизвестное поле «${aFieldName}».} $lField[$self._fields.[$aFieldName]] - ^if($self.__context eq "where" - && ^lField.contains[fieldExpression] - && def $lField.fieldExpression){ - $result[$lField.fieldExpression] - }(^lField.contains[expression] + + ^if(^lField.contains[fieldExpression] + && def $lField.fieldExpression + && ($self.__context eq "where" || $self.__context eq "update") + ){ + ^return[$lField.fieldExpression] + } + + ^if(^lField.contains[expression] && def $lField.expression + && !($self.__context eq "update" && ^lField.contains[dbField]) ){ ^if($self.__context eq "group"){ - $result[^self._builder.quoteIdentifier[$lField.name]] - }{ - $result[$lField.expression] - } - }{ - ^if(!^lField.contains[dbField]){ - ^throw[pfSQLTable.field.fail;Для поля «${aFieldName}» не задано выражение или имя в базе данных.] + ^return[^self._builder.quoteIdentifier[$lField.name]] } - $result[^self._builder.sqlFieldName[$lField;^if($self.__context ne "update"){$self.TABLE_ALIAS}]] - } + + ^return[$lField.expression] + } + + ^if(!^lField.contains[dbField]){ + ^throw[pfSQLTable.field.fail;Для поля «${aFieldName}» не задано выражение или имя в базе данных.] + } + + ^return[^self._builder.sqlFieldName[$lField;^if($self.__context ne "update"){$self.TABLE_ALIAS}]] @asContext[aContext;aCode] $lOldContext[$self.__context] diff --git a/ut/common/common_pfclass_test.p b/ut/common/common_pfclass_test.p new file mode 100644 index 0000000..6317ae4 --- /dev/null +++ b/ut/common/common_pfclass_test.p @@ -0,0 +1,21 @@ +@USE +pf2/lib/tests/unittest.p +pf2/lib/common.p + +@CLASS +TestPFClass + +@OPTIONS +locals + +@BASE +pfTestCase + +@testDynamicA[] + $sut[^pfClass::create[]] + $res[^sut.A[dyn;1;2;$.three[val1];$void;;four](5;6.34;true)[^array::create[1;2;3]]]] + ^self.assertEq[^json:string[$res;$.one-line(true)];[ "dyn", "1", "2", { "three":"val1" }, null, "", "four", 5, 6.34, true, [ "1", "2", "3" ] ]] + +@testStaticA[] + $res[^pfClass:A[sta;1;2;$.three[val1];$void;;four](5;6.34;true)[^array::create[1;2;3]]]] + ^self.assertEq[^json:string[$res;$.one-line(true)];[ "sta", "1", "2", { "three":"val1" }, null, "", "four", 5, 6.34, true, [ "1", "2", "3" ] ]] diff --git a/ut/sql/sql_table/common_test.p b/ut/sql/sql_table/common_test.p index d0653b7..974869f 100644 --- a/ut/sql/sql_table/common_test.p +++ b/ut/sql/sql_table/common_test.p @@ -91,3 +91,46 @@ pfTestCase ] ^self.assertEq["test_table"."id";$sut.PRIMARYKEY] + +@test_sql_field_name[] + ^self.sut.addFields[ + $.simple[] + $.dbField[$.dbField[db_field]] + $.exField[$.expression[sum(db_field_1)]] + $.exDBField[$.expression[max(db_field_2)] $.dbField[db_field_2]] + $.fexField[$.expression[min(db_field_3)] $.fieldExpression[db_field_3]] + ] + + ^self.assertEq[^sut.sqlFieldName[simple];"test_table"."simple"] + ^self.assertEq[^sut.sqlFieldName[dbField];"test_table"."db_field"] + ^self.assertEq[^sut.sqlFieldName[exField];sum(db_field_1)] + ^self.assertEq[^sut.sqlFieldName[exDBField];max(db_field_2)] + ^self.assertEq[^sut.sqlFieldName[fexField];min(db_field_3)] + + ^self.sut.asContext[group]{ + ^self.assertEq[^sut.sqlFieldName[simple];"test_table"."simple"] + ^self.assertEq[^sut.sqlFieldName[dbField];"test_table"."db_field"] + ^self.assertEq[^sut.sqlFieldName[exField];"exField"] + ^self.assertEq[^sut.sqlFieldName[exDBField];"exDBField"] + ^self.assertEq[^sut.sqlFieldName[fexField];"fexField"] + } + + ^self.sut.asContext[where]{ + ^self.assertEq[^sut.sqlFieldName[simple];"test_table"."simple"] + ^self.assertEq[^sut.sqlFieldName[dbField];"test_table"."db_field"] + ^self.assertEq[^sut.sqlFieldName[exField];sum(db_field_1)] + ^self.assertEq[^sut.sqlFieldName[exDBField];max(db_field_2)] + ^self.assertEq[^sut.sqlFieldName[fexField];db_field_3] + } + + ^self.sut.asContext[update]{ + ^self.assertEq[^sut.sqlFieldName[simple];"simple"] + ^self.assertEq[^sut.sqlFieldName[dbField];"db_field"] + ^self.assertEq[^sut.sqlFieldName[exField];sum(db_field_1)] + ^self.assertEq[^sut.sqlFieldName[exDBField];"db_field_2"] + ^self.assertEq[^sut.sqlFieldName[fexField];db_field_3] + } + + ^self.assertRaises[assert.fail]{ + ^sut.sqlFieldName[unexistant] + }