ВОПРОС ПО UPDATESELECT К РАЗРАБОТЧИКАМ БАЗОВОЙ СИСТЕМЫ CREATIO 2

Продолжение темы: https://community.terrasoft.ru/questions/vopros-po-updateselect-k-razra…

 

Зачем в классе Terrasoft.DB.PostgreSql.PostgreSqlEngine в методе BuildUpdateSelectTargetSqlText(StringBuilder sb, ModifyQuerySource modifySource, string alias) код "string value = " \"" + alias + "\""; sb.Append(value);" ?

Класс генерирует неправильный запрос в БД:

var us =
	new UpdateSelect(_userConnection, "Contact", "c")
		.Set("Name", Column.Parameter("Andrew Baker (sample) + 1"))
		.From("Contact", "c")
		.InnerJoin("Account").As("a").On("a", "Id").IsEqual("c", "AccountId")
		.Where("a", "Web").IsEqual(Column.Parameter("ac.com"))
		.And("c", "Id").IsNotEqual(Column.Parameter(Guid.NewGuid()))
	as UpdateSelect;
UPDATE "public"."Contact" "c"
SET
	"Name" = 'Andrew Baker (sample) + 1'
FROM
	"public"."Contact" "c"
	INNER JOIN "public"."Account" "a" ON "a"."Id" = "c"."AccountId"
WHERE
	"a"."Web" = 'ac.com'
	AND "c"."Id" <> '{19812101-C7A9-4DED-BD44-F8973A98D746}'

Результат выполнения:

Изображение удалено.

При этом если бы упомянутого выше кода не было, то запрос был бы верным:

Изображение удалено.

Нравится

1 комментарий

Владислав, проблема в самом запросе, вы пытаетесь  задать один и тот же алиас как целевой таблице так и источнику. В вашем случае запрос должен выглядеть так: 

var us =

                new UpdateSelect(UserConnection, "Contact", "c")

                    .Set("Name", Column.Parameter("Andrew Baker (sample) + 2"))

                    .From("Contact", "ca")

                    .InnerJoin("Account").As("a").On("a", "Id").IsEqual("ca", "AccountId")

                    .Where("a", "Web").IsEqual(Column.Parameter("ac.com"))

                    .And("ca", "Id").IsNotEqual(Column.Parameter(Guid.NewGuid()))

                as UpdateSelect;

Как и в случае с методом ReplaceUpdateTargetAliasWithName, эта строка нужна для правильного построения запроса. С ней были проведены тесты и они показали правильность её работы.

Показать все комментарии