From 3c17f67073d741563260c7110550fef8cf6a96d9 Mon Sep 17 00:00:00 2001 From: Georgij Tsarin <68424751+crystarm@users.noreply.github.com> Date: Fri, 10 Apr 2026 18:09:11 +0300 Subject: [PATCH 1/2] Version SQL functions to v1 --- postgresql/schemas/db-1.sql | 45 ++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/postgresql/schemas/db-1.sql b/postgresql/schemas/db-1.sql index 9430ce1..16dbc1b 100644 --- a/postgresql/schemas/db-1.sql +++ b/postgresql/schemas/db-1.sql @@ -161,7 +161,7 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.create_article(_title varchar(255), _slug varchar(255), _body text, _description text, _user_id text, _tags varchar(255)[]) +CREATE OR REPLACE FUNCTION real_medium.create_article_v1(_title varchar(255), _slug varchar(255), _body text, _description text, _user_id text, _tags varchar(255)[]) RETURNS text AS $$ DECLARE @@ -192,6 +192,15 @@ END; $$ LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION real_medium.create_article(_title varchar(255), _slug varchar(255), _body text, _description text, _user_id text, _tags varchar(255)[]) + RETURNS text + AS $$ +BEGIN + RETURN real_medium.create_article_v1(_title, _slug, _body, _description, _user_id, _tags); +END; +$$ +LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION real_medium.is_favorited_article(_article_id text, _user_id text = NULL) RETURNS bool AS $$ @@ -217,7 +226,7 @@ BEGIN username, bio, image, - CASE WHEN _follower_id = NULL THEN + CASE WHEN _follower_id IS NULL THEN FALSE ELSE real_medium.is_following(_id, _follower_id) @@ -230,7 +239,7 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile(_article_id text, _follower_id text = NULL) +CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_v1(_article_id text, _follower_id text = NULL) RETURNS SETOF real_medium.tagged_article_with_author_profile AS $$ BEGIN @@ -259,7 +268,20 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_by_slug(_slug varchar(255), _follower_id text = NULL) +CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile(_article_id text, _follower_id text = NULL) + RETURNS SETOF real_medium.tagged_article_with_author_profile + AS $$ +BEGIN + RETURN QUERY + SELECT + * + FROM + real_medium.get_article_with_author_profile_v1(_article_id, _follower_id); +END; +$$ +LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_by_slug_v1(_slug varchar(255), _follower_id text = NULL) RETURNS SETOF real_medium.tagged_article_with_author_profile AS $$ DECLARE @@ -296,6 +318,19 @@ END; $$ LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_by_slug(_slug varchar(255), _follower_id text = NULL) + RETURNS SETOF real_medium.tagged_article_with_author_profile + AS $$ +BEGIN + RETURN QUERY + SELECT + * + FROM + real_medium.get_article_with_author_profile_by_slug_v1(_slug, _follower_id); +END; +$$ +LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION real_medium.get_feed_articles(_user_id text, _limit int = 20, _offset int = 0) RETURNS SETOF real_medium.tagged_article_with_author_profile AS $$ @@ -400,5 +435,3 @@ LANGUAGE plpgsql; CREATE INDEX IF NOT EXISTS idx_createdat ON real_medium.articles(created_at DESC); CREATE INDEX IF NOT EXISTS idx_tagname ON real_medium.tag_list(tag_name); - - From 360ce506e1c0e470146b1556bb9100faf127e0c1 Mon Sep 17 00:00:00 2001 From: Georgij Tsarin <68424751+crystarm@users.noreply.github.com> Date: Mon, 27 Apr 2026 15:03:53 +0300 Subject: [PATCH 2/2] Use versioned SQL functions directly and drop legacy wrappers --- postgresql/schemas/db-1.sql | 35 ++----------------- src/db/create_article.sql | 2 +- src/db/get_article_with_author_profile.sql | 2 +- ...et_article_with_author_profile_by_slug.sql | 2 +- 4 files changed, 6 insertions(+), 35 deletions(-) diff --git a/postgresql/schemas/db-1.sql b/postgresql/schemas/db-1.sql index 16dbc1b..e3b3531 100644 --- a/postgresql/schemas/db-1.sql +++ b/postgresql/schemas/db-1.sql @@ -192,14 +192,7 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.create_article(_title varchar(255), _slug varchar(255), _body text, _description text, _user_id text, _tags varchar(255)[]) - RETURNS text - AS $$ -BEGIN - RETURN real_medium.create_article_v1(_title, _slug, _body, _description, _user_id, _tags); -END; -$$ -LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION real_medium.is_favorited_article(_article_id text, _user_id text = NULL) RETURNS bool @@ -268,18 +261,7 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile(_article_id text, _follower_id text = NULL) - RETURNS SETOF real_medium.tagged_article_with_author_profile - AS $$ -BEGIN - RETURN QUERY - SELECT - * - FROM - real_medium.get_article_with_author_profile_v1(_article_id, _follower_id); -END; -$$ -LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_by_slug_v1(_slug varchar(255), _follower_id text = NULL) RETURNS SETOF real_medium.tagged_article_with_author_profile @@ -318,18 +300,7 @@ END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION real_medium.get_article_with_author_profile_by_slug(_slug varchar(255), _follower_id text = NULL) - RETURNS SETOF real_medium.tagged_article_with_author_profile - AS $$ -BEGIN - RETURN QUERY - SELECT - * - FROM - real_medium.get_article_with_author_profile_by_slug_v1(_slug, _follower_id); -END; -$$ -LANGUAGE plpgsql; + CREATE OR REPLACE FUNCTION real_medium.get_feed_articles(_user_id text, _limit int = 20, _offset int = 0) RETURNS SETOF real_medium.tagged_article_with_author_profile diff --git a/src/db/create_article.sql b/src/db/create_article.sql index 6f54a46..8e061bb 100644 --- a/src/db/create_article.sql +++ b/src/db/create_article.sql @@ -1 +1 @@ -SELECT real_medium.create_article($1, $2, $3, $4, $5, $6) +SELECT real_medium.create_article_v1($1, $2, $3, $4, $5, $6) diff --git a/src/db/get_article_with_author_profile.sql b/src/db/get_article_with_author_profile.sql index d34f16a..da8e9fe 100644 --- a/src/db/get_article_with_author_profile.sql +++ b/src/db/get_article_with_author_profile.sql @@ -1 +1 @@ -SELECT real_medium.get_article_with_author_profile($1, $2) +SELECT real_medium.get_article_with_author_profile_v1($1, $2) diff --git a/src/db/get_article_with_author_profile_by_slug.sql b/src/db/get_article_with_author_profile_by_slug.sql index 2fdb628..1a0d085 100644 --- a/src/db/get_article_with_author_profile_by_slug.sql +++ b/src/db/get_article_with_author_profile_by_slug.sql @@ -1 +1 @@ -SELECT real_medium.get_article_with_author_profile_by_slug($1, $2) +SELECT real_medium.get_article_with_author_profile_by_slug_v1($1, $2)