summaryrefslogtreecommitdiff
path: root/src/schema.sql
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2026-06-28 18:47:14 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2026-06-28 18:47:14 +0100
commitad2a2ff05af8df1ba552d906e377afa345a449a7 (patch)
tree38b6f21bdcc0ed89825a9b837366f134a013d580 /src/schema.sql
parent22a85bd4e1f6005455b91bb3edff68d4019526a1 (diff)
downloadwebstat-ad2a2ff05af8df1ba552d906e377afa345a449a7.tar.bz2
webstat-ad2a2ff05af8df1ba552d906e377afa345a449a7.tar.xz
webstat-ad2a2ff05af8df1ba552d906e377afa345a449a7.zip
Fix entity function sometimes returning null/wrong id
Includes tests over the errant behaviour. Didn't match on type and control flow could return multiple rows.
Diffstat (limited to 'src/schema.sql')
-rw-r--r--src/schema.sql24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/schema.sql b/src/schema.sql
index 81080ff..6f28f2d 100644
--- a/src/schema.sql
+++ b/src/schema.sql
@@ -57,11 +57,6 @@ DECLARE
recid integer;
nulldetail boolean;
BEGIN
- IF newValue IS NULL THEN
- RETURN query
- VALUES (NULL,
- NULL);
- END IF;
INSERT INTO entities(value, type)
SELECT
newValue,
@@ -72,26 +67,31 @@ BEGIN
FROM
entities
WHERE
- md5(value) = md5(newValue))
+ md5(value) = md5(newValue)
+ AND type = newType)
ON CONFLICT
DO NOTHING
RETURNING
entities.id,
- entities.detail IS NULL INTO recid,
+ entities.detail IS NULL
+ INTO
+ recid,
nulldetail;
IF recid IS NULL THEN
- RETURN query
+ RETURN QUERY
SELECT
e.id,
e.detail IS NULL
FROM
entities e
WHERE
- md5(e.value) = md5(newValue);
+ md5(e.value) = md5(newValue)
+ AND e.type = newType;
+ ELSE
+ RETURN QUERY
+ VALUES (recid,
+ nulldetail);
END IF;
- RETURN query
-VALUES (recid,
- nulldetail);
END;
$$
LANGUAGE plpgSQL