From 766c3deae087796e1dfb0db297ced3c2e49164de Mon Sep 17 00:00:00 2001 From: vickytechkey Date: Mon, 19 Oct 2026 19:58:41 +0530 Subject: [PATCH] feat(postgres): auto-initialize boolean integer operators for PostgreSQL --- server/database.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/server/database.js b/server/database.js index 780aee5..6e0de10 100644 --- a/server/database.js +++ b/server/database.js @@ -496,14 +496,41 @@ class Database { * @returns {Promise} */ static async initMariaDB() { - log.debug("db", "Checking if MariaDB database exists..."); + if (Database.dbConfig.type === "postgres" || Database.dbConfig.type === "postgresql") { + try { + await R.knex.raw(` + CREATE OR REPLACE FUNCTION bool_eq_int(boolean, integer) RETURNS boolean STRICT IMMUTABLE LANGUAGE SQL AS $$ SELECT $1 = ($2 != 0); $$; + CREATE OR REPLACE FUNCTION int_eq_bool(integer, boolean) RETURNS boolean STRICT IMMUTABLE LANGUAGE SQL AS $$ SELECT ($1 != 0) = $2; $$; + CREATE OR REPLACE FUNCTION bool_ne_int(boolean, integer) RETURNS boolean STRICT IMMUTABLE LANGUAGE SQL AS $$ SELECT $1 != ($2 != 0); $$; + CREATE OR REPLACE FUNCTION int_ne_bool(integer, boolean) RETURNS boolean STRICT IMMUTABLE LANGUAGE SQL AS $$ SELECT ($1 != 0) != $2; $$; + DO $$ BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_operator WHERE oprname = '=' AND oprleft = 'boolean'::regtype AND oprright = 'integer'::regtype) THEN + CREATE OPERATOR = (LEFTARG = boolean, RIGHTARG = integer, PROCEDURE = bool_eq_int, COMMUTATOR = =); + END IF; + IF NOT EXISTS (SELECT 1 FROM pg_operator WHERE oprname = '=' AND oprleft = 'integer'::regtype AND oprright = 'boolean'::regtype) THEN + CREATE OPERATOR = (LEFTARG = integer, RIGHTARG = boolean, PROCEDURE = int_eq_bool, COMMUTATOR = =); + END IF; + IF NOT EXISTS (SELECT 1 FROM pg_operator WHERE oprname = '<>' AND oprleft = 'boolean'::regtype AND oprright = 'integer'::regtype) THEN + CREATE OPERATOR <> (LEFTARG = boolean, RIGHTARG = integer, PROCEDURE = bool_ne_int, COMMUTATOR = <>); + END IF; + IF NOT EXISTS (SELECT 1 FROM pg_operator WHERE oprname = '<>' AND oprleft = 'integer'::regtype AND oprright = 'boolean'::regtype) THEN + CREATE OPERATOR <> (LEFTARG = integer, RIGHTARG = boolean, PROCEDURE = int_ne_bool, COMMUTATOR = <>); + END IF; + END $$; + `); + } catch (e) { + log.warn("db", "Could not initialize PostgreSQL boolean operators: " + e.message); + } + } + + log.debug("db", "Checking if MariaDB/PostgreSQL database exists..."); let hasTable = await R.hasTable("docker_host"); if (!hasTable) { const { createTables } = require("../db/knex_init_db"); await createTables(); } else { - log.debug("db", "MariaDB database already exists"); + log.debug("db", "Database already exists"); } }