How can I achieve a following SQL Query ?
UPDATE "event"."events" SET "id_main_content"=((837742)::int8) WHERE ( ( ( "event"."events"."id" IN (
WITH RECURSIVE referenced_event_ids AS
(
SELECT id_event_from
FROM event.event_links
where id_event_to = ((4615))
UNION ALL
SELECT e.id_event_from
FROM event.event_links as e, referenced_event_ids re
where e.id_event_to = re.id_event_from
)
select * from referenced_event_ids
union ALL
select ((4615))
))))
I've created a custom Expression which generates a following part:
WITH RECURSIVE referenced_event_ids AS
(
SELECT id_event_from
FROM event.event_links
where id_event_to = ((4615))
UNION ALL
SELECT e.id_event_from
FROM event.event_links as e, referenced_event_ids re
where e.id_event_to = re.id_event_from
)
select * from referenced_event_ids
union ALL
select ((4615))
But I don't know how can I use it in predicate Expression. I need to use _in _clause and used a following predicate:
IRelationPredicateBucket filterBucket = new RelationPredicateBucket
(
new FieldCompareSetPredicate(EventFields.ID, null, EventFields.ID, null, SetOperator.In, new PostgreSQLFindAllParentsExpression(EventLinkFields.IdEventFrom, EventLinkFields.IdEventTo, idEvent))
);
which gives me a following query.
UPDATE "event"."events" SET "id_main_content"=((837742)::int8) WHERE ( ( ( "event"."events"."id" IN (SELECT "event"."events"."id" AS "ID" FROM "event"."events" WHERE
WITH RECURSIVE referenced_event_ids AS
(
SELECT id_event_from
FROM event.event_links
where id_event_to = ((4615))
UNION ALL
SELECT e.id_event_from
FROM event.event_links as e, referenced_event_ids re
where e.id_event_to = re.id_event_from
)
select * from referenced_event_ids
union ALL
select ((4615))
))))
Everything will be fine except that I receive unnecessarily SELECT "event"."events"."id" AS "ID" FROM "event"."events" WHERE part of code.
How can I define in predicate in my case ?
Kind Regards,
MiloszeS