change parent_id in comment
This commit is contained in:
@@ -14,7 +14,7 @@ begin
|
||||
from (select *, row_number() over () % (article_count+7) rn from citizen, lateral generate_series(1, 5) g) z
|
||||
join (select *, row_number() over () rn from article) a using (rn);
|
||||
|
||||
insert into comment_on_article (id, created_by_id, target_id, content, parent_id)
|
||||
insert into comment_on_article (id, created_by_id, target_id, content, parent_comment_id)
|
||||
select
|
||||
uuid_in(md5('comment_on_article_2'||row_number() over ())::cstring),
|
||||
z.id,
|
||||
@@ -24,7 +24,7 @@ begin
|
||||
from (select *, row_number() over () % (article_count+7) rn from citizen, lateral generate_series(1, 5) g) z
|
||||
join (select *, row_number() over () rn from comment_on_article) a using (rn);
|
||||
|
||||
insert into comment_on_article (id, created_by_id, target_id, content, parent_id)
|
||||
insert into comment_on_article (id, created_by_id, target_id, content, parent_comment_id)
|
||||
select
|
||||
uuid_in(md5('comment_on_article_3'||row_number() over ())::cstring),
|
||||
z.id,
|
||||
@@ -32,7 +32,7 @@ begin
|
||||
'content' || row_number() over () * g,
|
||||
a.id
|
||||
from (select *, row_number() over () % (article_count+7) rn from citizen, lateral generate_series(1, 5) g) z
|
||||
join (select *, row_number() over () rn from comment_on_article where parent_id is not null) a using (rn);
|
||||
join (select *, row_number() over () rn from comment_on_article where parent_comment_id is not null) a using (rn);
|
||||
|
||||
insert into comment_on_constitution (id, created_by_id, target_id, content)
|
||||
select
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
create or replace function comment(reference regclass, target_id uuid, created_by_id uuid, content text, parent_id uuid default null, out id uuid)
|
||||
create or replace function comment(reference regclass, target_id uuid, created_by_id uuid, content text, parent_comment_id uuid default null, out id uuid)
|
||||
language plpgsql as
|
||||
$$
|
||||
declare
|
||||
_created_by_id alias for created_by_id;
|
||||
_target_id alias for target_id;
|
||||
_content alias for content;
|
||||
_parent_id alias for parent_id;
|
||||
_parent_comment_id alias for parent_comment_id;
|
||||
_id alias for id;
|
||||
begin
|
||||
if reference = 'article'::regclass then
|
||||
insert into comment_on_article (created_by_id, target_id, content, parent_id)
|
||||
values (_created_by_id, _target_id, _content, _parent_id)
|
||||
insert into comment_on_article (created_by_id, target_id, content, parent_comment_id)
|
||||
values (_created_by_id, _target_id, _content, _parent_comment_id)
|
||||
returning comment_on_article.id into _id;
|
||||
elseif reference = 'constitution'::regclass then
|
||||
insert into comment_on_constitution (created_by_id, target_id, content, parent_id)
|
||||
values (_created_by_id, _target_id, _content, _parent_id)
|
||||
insert into comment_on_constitution (created_by_id, target_id, content, parent_comment_id)
|
||||
values (_created_by_id, _target_id, _content, _parent_comment_id)
|
||||
returning comment_on_constitution.id into _id;
|
||||
else
|
||||
raise exception 'comment with target as "%", is no implemented', reference::text;
|
||||
|
||||
@@ -15,7 +15,7 @@ begin
|
||||
find_reference_by_id(com.target_id, com.target_reference) as target,
|
||||
find_citizen_by_id(com.created_by_id) as created_by
|
||||
from "comment" as com
|
||||
where com.parents_ids @> array[_parent_id]
|
||||
where parent_id = _parent_id
|
||||
order by com.parents_ids nulls first, created_at desc,
|
||||
com.created_at desc
|
||||
limit "limit" offset "offset"
|
||||
|
||||
@@ -370,7 +370,8 @@ create table comment
|
||||
(
|
||||
updated_at timestamptz default now() not null check ( updated_at >= created_at ),
|
||||
"content" text not null check ( content != '' and length(content) < 4096),
|
||||
parent_id uuid references comment (id),
|
||||
parent_id uuid not null,
|
||||
parent_comment_id uuid references comment (id),
|
||||
parents_ids uuid[],
|
||||
deleted_at timestamptz null,
|
||||
foreign key (created_by_id) references citizen (id),
|
||||
@@ -380,20 +381,25 @@ create table comment
|
||||
create index comment_parents_ids_idx
|
||||
on comment (parents_ids);
|
||||
|
||||
create index parent_id
|
||||
on comment (parent_id);
|
||||
|
||||
create or replace function set_comment_parents_ids() returns trigger
|
||||
language plpgsql as
|
||||
$$
|
||||
begin
|
||||
if (new.parent_id is not null) then
|
||||
if (new.parent_comment_id is not null) then
|
||||
new.parents_ids = (
|
||||
select com.parents_ids || com.id
|
||||
from "comment" com
|
||||
where com.id = new.parent_id
|
||||
where com.id = new.parent_comment_id
|
||||
);
|
||||
else
|
||||
new.parents_ids = null;
|
||||
new.parents_ids = array [new.target_id]::uuid[];
|
||||
end if;
|
||||
|
||||
new.parent_id = (new.parents_ids[array_upper(new.parents_ids, 1)]);
|
||||
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
@@ -409,7 +415,7 @@ create table comment_on_article
|
||||
target_reference regclass default 'article'::regclass not null,
|
||||
foreign key (created_by_id) references citizen (id),
|
||||
foreign key (target_id) references article (id),
|
||||
foreign key (parent_id) references comment_on_article (id),
|
||||
foreign key (parent_comment_id) references comment_on_article (id),
|
||||
primary key (id)
|
||||
) inherits (comment);
|
||||
|
||||
@@ -427,7 +433,7 @@ create table comment_on_constitution
|
||||
target_reference regclass default 'constitution'::regclass not null,
|
||||
foreign key (created_by_id) references citizen (id),
|
||||
foreign key (target_id) references constitution (id),
|
||||
foreign key (parent_id) references comment_on_constitution (id),
|
||||
foreign key (parent_comment_id) references comment_on_constitution (id),
|
||||
primary key (id)
|
||||
) inherits (comment);
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ begin
|
||||
target_id => (created_article->>'id')::uuid,
|
||||
created_by_id => _citizen_id,
|
||||
content => 'God not exist'::text,
|
||||
parent_id => _comment_id::uuid
|
||||
parent_comment_id => _comment_id::uuid
|
||||
) into _comment_id_response;
|
||||
|
||||
select "comment"(
|
||||
@@ -101,7 +101,7 @@ begin
|
||||
target_id => (created_article->>'id')::uuid,
|
||||
created_by_id => _citizen_id,
|
||||
content => 'are you really sure ?'::text,
|
||||
parent_id => _comment_id_response::uuid
|
||||
parent_comment_id => _comment_id_response::uuid
|
||||
) into _comment_id_response2;
|
||||
assert (select count(*) = 3 from "comment"), 'response must be inserted';
|
||||
assert (select com.parents_ids @> ARRAY[_comment_id] from "comment" com where id = _comment_id_response), 'parents_ids not contain "' || _comment_id::text || '" ' || (select com.parents_ids::text[] from "comment" com where id = _comment_id_response);
|
||||
|
||||
Reference in New Issue
Block a user