Browse Source

fix: use CREATE OR ALTER/REPLACE FUNCTION to prevent startup failure on restart

On application restart the hosted service fails with:
  SqlException: There is already an object named 'json_exists' in the database.

The #if RELEASE guard in JsonFunction.cs skips DROP FUNCTION IF EXISTS
statements in release builds, so CREATE FUNCTION fails if the functions
already exist from a previous run.

Replace the DROP + CREATE pattern with idempotent alternatives:
- SQL Server: CREATE OR ALTER FUNCTION (supported since SQL Server 2016 SP1)
- MySQL:      CREATE OR REPLACE FUNCTION

PostgreSQL was already using CREATE OR REPLACE FUNCTION correctly.
DROP FUNCTION IF EXISTS statements are removed from both SQL files.
pull/1313/head
Joe de Ronde 5 months ago
parent
commit
3bb11e068c
  1. 75
      backend/src/Squidex.Data.EntityFramework/Providers/MySql/json_function.sql
  2. 66
      backend/src/Squidex.Data.EntityFramework/Providers/SqlServer/json_function.sql

75
backend/src/Squidex.Data.EntityFramework/Providers/MySql/json_function.sql

@ -1,8 +1,7 @@
-- =============================================================================
-- TYPE-AGNOSTIC
-- =============================================================================
DROP FUNCTION IF EXISTS json_empty;;
CREATE FUNCTION json_empty(col JSON, path VARCHAR(500))
CREATE OR REPLACE FUNCTION json_empty(col JSON, path VARCHAR(500))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -14,8 +13,7 @@ BEGIN
RETURN 0;
END;;
DROP FUNCTION IF EXISTS json_exists;;
CREATE FUNCTION json_exists(col JSON, path VARCHAR(500))
CREATE OR REPLACE FUNCTION json_exists(col JSON, path VARCHAR(500))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
RETURN NOT json_empty(col, path);
@ -25,8 +23,7 @@ END;;
-- =============================================================================
-- NULL
-- =============================================================================
DROP FUNCTION IF EXISTS json_null_equals;;
CREATE FUNCTION json_null_equals(col JSON, path VARCHAR(500))
CREATE OR REPLACE FUNCTION json_null_equals(col JSON, path VARCHAR(500))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -40,8 +37,7 @@ BEGIN
RETURN COALESCE(JSON_TYPE(val), 'NULL') = 'NULL';
END;;
DROP FUNCTION IF EXISTS json_null_notequals;;
CREATE FUNCTION json_null_notequals(col JSON, path VARCHAR(500))
CREATE OR REPLACE FUNCTION json_null_notequals(col JSON, path VARCHAR(500))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
RETURN NOT json_null_equals(col, path);
@ -51,8 +47,7 @@ END;;
-- =============================================================================
-- TEXT
-- =============================================================================
DROP FUNCTION IF EXISTS json_text_equals;;
CREATE FUNCTION json_text_equals(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_equals(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -66,8 +61,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) = target;
END;;
DROP FUNCTION IF EXISTS json_text_notequals;;
CREATE FUNCTION json_text_notequals(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_notequals(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -81,8 +75,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) != target;
END;;
DROP FUNCTION IF EXISTS json_text_lessthan;;
CREATE FUNCTION json_text_lessthan(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_lessthan(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -96,8 +89,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) < target;
END;;
DROP FUNCTION IF EXISTS json_text_lessthanorequal;;
CREATE FUNCTION json_text_lessthanorequal(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_lessthanorequal(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -111,8 +103,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) <= target;
END;;
DROP FUNCTION IF EXISTS json_text_greaterthan;;
CREATE FUNCTION json_text_greaterthan(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_greaterthan(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -126,8 +117,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) > target;
END;;
DROP FUNCTION IF EXISTS json_text_greaterthanorequal;;
CREATE FUNCTION json_text_greaterthanorequal(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_greaterthanorequal(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -141,8 +131,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) >= target;
END;;
DROP FUNCTION IF EXISTS json_text_contains;;
CREATE FUNCTION json_text_contains(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_contains(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -156,8 +145,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) LIKE CONCAT('%', target, '%');
END;;
DROP FUNCTION IF EXISTS json_text_startswith;;
CREATE FUNCTION json_text_startswith(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_startswith(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -171,8 +159,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) LIKE CONCAT(target, '%');
END;;
DROP FUNCTION IF EXISTS json_text_endswith;;
CREATE FUNCTION json_text_endswith(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_endswith(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -186,8 +173,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) LIKE CONCAT('%', target);
END;;
DROP FUNCTION IF EXISTS json_text_matchs;;
CREATE FUNCTION json_text_matchs(col JSON, path VARCHAR(500), target VARCHAR(2000))
CREATE OR REPLACE FUNCTION json_text_matchs(col JSON, path VARCHAR(500), target VARCHAR(2000))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -201,8 +187,7 @@ BEGIN
RETURN JSON_UNQUOTE(val) REGEXP target;
END;;
DROP FUNCTION IF EXISTS json_text_in;;
CREATE FUNCTION json_text_in(col JSON, path VARCHAR(500), targets JSON)
CREATE OR REPLACE FUNCTION json_text_in(col JSON, path VARCHAR(500), targets JSON)
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -220,8 +205,7 @@ END;;
-- =============================================================================
-- NUMBER
-- =============================================================================
DROP FUNCTION IF EXISTS json_number_equals;;
CREATE FUNCTION json_number_equals(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_equals(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -238,8 +222,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) = target;
END;;
DROP FUNCTION IF EXISTS json_number_notequals;;
CREATE FUNCTION json_number_notequals(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_notequals(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -256,8 +239,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) != target;
END;;
DROP FUNCTION IF EXISTS json_number_lessthan;;
CREATE FUNCTION json_number_lessthan(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_lessthan(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -274,8 +256,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) < target;
END;;
DROP FUNCTION IF EXISTS json_number_lessthanorequal;;
CREATE FUNCTION json_number_lessthanorequal(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_lessthanorequal(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -292,8 +273,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) <= target;
END;;
DROP FUNCTION IF EXISTS json_number_greaterthan;;
CREATE FUNCTION json_number_greaterthan(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_greaterthan(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -310,8 +290,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) > target;
END;;
DROP FUNCTION IF EXISTS json_number_greaterthanorequal;;
CREATE FUNCTION json_number_greaterthanorequal(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
CREATE OR REPLACE FUNCTION json_number_greaterthanorequal(col JSON, path VARCHAR(500), target DECIMAL(65, 10))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -328,8 +307,7 @@ BEGIN
RETURN CAST(JSON_UNQUOTE(val) AS DECIMAL(65, 10)) >= target;
END;;
DROP FUNCTION IF EXISTS json_number_in;;
CREATE FUNCTION json_number_in(col JSON, path VARCHAR(500), targets JSON)
CREATE OR REPLACE FUNCTION json_number_in(col JSON, path VARCHAR(500), targets JSON)
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -349,8 +327,7 @@ END;;
-- =============================================================================
-- BOOLEAN
-- =============================================================================
DROP FUNCTION IF EXISTS json_boolean_equals;;
CREATE FUNCTION json_boolean_equals(col JSON, path VARCHAR(500), target TINYINT(1))
CREATE OR REPLACE FUNCTION json_boolean_equals(col JSON, path VARCHAR(500), target TINYINT(1))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -367,8 +344,7 @@ BEGIN
RETURN val = target_json;
END;;
DROP FUNCTION IF EXISTS json_boolean_notequals;;
CREATE FUNCTION json_boolean_notequals(col JSON, path VARCHAR(500), target TINYINT(1))
CREATE OR REPLACE FUNCTION json_boolean_notequals(col JSON, path VARCHAR(500), target TINYINT(1))
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;
@ -385,8 +361,7 @@ BEGIN
RETURN val != target_json;
END;;
DROP FUNCTION IF EXISTS json_boolean_in;;
CREATE FUNCTION json_boolean_in(col JSON, path VARCHAR(500), targets JSON)
CREATE OR REPLACE FUNCTION json_boolean_in(col JSON, path VARCHAR(500), targets JSON)
RETURNS TINYINT(1) DETERMINISTIC
BEGIN
DECLARE val JSON;

66
backend/src/Squidex.Data.EntityFramework/Providers/SqlServer/json_function.sql

@ -1,8 +1,7 @@
-- =============================================================================
-- TYPE-AGNOSTIC
-- =============================================================================
DROP FUNCTION IF EXISTS dbo.json_empty;;
CREATE FUNCTION dbo.json_empty(@col NVARCHAR(MAX), @path NVARCHAR(500))
CREATE OR ALTER FUNCTION dbo.json_empty(@col NVARCHAR(MAX), @path NVARCHAR(500))
RETURNS BIT
AS
BEGIN
@ -17,8 +16,7 @@ BEGIN
RETURN 0;
END;;
DROP FUNCTION IF EXISTS dbo.json_exists;;
CREATE FUNCTION dbo.json_exists(@col NVARCHAR(MAX), @path NVARCHAR(500))
CREATE OR ALTER FUNCTION dbo.json_exists(@col NVARCHAR(MAX), @path NVARCHAR(500))
RETURNS BIT
AS
BEGIN
@ -29,8 +27,7 @@ END;;
-- =============================================================================
-- NULL
-- =============================================================================
DROP FUNCTION IF EXISTS dbo.json_null_equals;;
CREATE FUNCTION dbo.json_null_equals(@col NVARCHAR(MAX), @path NVARCHAR(500))
CREATE OR ALTER FUNCTION dbo.json_null_equals(@col NVARCHAR(MAX), @path NVARCHAR(500))
RETURNS BIT
AS
BEGIN
@ -42,8 +39,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) IS NULL THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_null_notequals;;
CREATE FUNCTION dbo.json_null_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500))
CREATE OR ALTER FUNCTION dbo.json_null_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500))
RETURNS BIT
AS
BEGIN
@ -54,8 +50,7 @@ END;;
-- =============================================================================
-- TEXT
-- =============================================================================
DROP FUNCTION IF EXISTS dbo.json_text_equals;;
CREATE FUNCTION dbo.json_text_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -67,8 +62,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) = @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_notequals;;
CREATE FUNCTION dbo.json_text_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -80,8 +74,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) != @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_lessthan;;
CREATE FUNCTION dbo.json_text_lessthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_lessthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -93,8 +86,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) < @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_lessthanorequal;;
CREATE FUNCTION dbo.json_text_lessthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_lessthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -106,8 +98,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) <= @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_greaterthan;;
CREATE FUNCTION dbo.json_text_greaterthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_greaterthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -119,8 +110,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) > @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_greaterthanorequal;;
CREATE FUNCTION dbo.json_text_greaterthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_greaterthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -132,8 +122,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) >= @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_contains;;
CREATE FUNCTION dbo.json_text_contains(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_contains(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -145,8 +134,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) LIKE '%' + @target + '%' THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_startswith;;
CREATE FUNCTION dbo.json_text_startswith(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_startswith(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -158,8 +146,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) LIKE @target + '%' THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_endswith;;
CREATE FUNCTION dbo.json_text_endswith(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_endswith(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -171,8 +158,7 @@ BEGIN
RETURN CASE WHEN JSON_VALUE(@col, @path) LIKE '%' + @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_text_matchs;;
CREATE FUNCTION dbo.json_text_matchs(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
CREATE OR ALTER FUNCTION dbo.json_text_matchs(@col NVARCHAR(MAX), @path NVARCHAR(500), @target NVARCHAR(2000))
RETURNS BIT
AS
BEGIN
@ -188,8 +174,7 @@ END;;
-- =============================================================================
-- NUMBER
-- =============================================================================
DROP FUNCTION IF EXISTS dbo.json_number_equals;;
CREATE FUNCTION dbo.json_number_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -203,8 +188,7 @@ BEGIN
RETURN CASE WHEN TRY_CAST(JSON_VALUE(@col, @path) AS DECIMAL(38, 10)) = @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_number_notequals;;
CREATE FUNCTION dbo.json_number_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -218,8 +202,7 @@ BEGIN
RETURN CASE WHEN TRY_CAST(JSON_VALUE(@col, @path) AS DECIMAL(38, 10)) != @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_number_lessthan;;
CREATE FUNCTION dbo.json_number_lessthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_lessthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -233,8 +216,7 @@ BEGIN
RETURN CASE WHEN TRY_CAST(JSON_VALUE(@col, @path) AS DECIMAL(38, 10)) < @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_number_lessthanorequal;;
CREATE FUNCTION dbo.json_number_lessthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_lessthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -248,8 +230,7 @@ BEGIN
RETURN CASE WHEN TRY_CAST(JSON_VALUE(@col, @path) AS DECIMAL(38, 10)) <= @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_number_greaterthan;;
CREATE FUNCTION dbo.json_number_greaterthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_greaterthan(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -263,8 +244,7 @@ BEGIN
RETURN CASE WHEN TRY_CAST(JSON_VALUE(@col, @path) AS DECIMAL(38, 10)) > @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_number_greaterthanorequal;;
CREATE FUNCTION dbo.json_number_greaterthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
CREATE OR ALTER FUNCTION dbo.json_number_greaterthanorequal(@col NVARCHAR(MAX), @path NVARCHAR(500), @target DECIMAL(38, 10))
RETURNS BIT
AS
BEGIN
@ -282,8 +262,7 @@ END;;
-- =============================================================================
-- BOOLEAN
-- =============================================================================
DROP FUNCTION IF EXISTS dbo.json_boolean_equals;;
CREATE FUNCTION dbo.json_boolean_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target BIT)
CREATE OR ALTER FUNCTION dbo.json_boolean_equals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target BIT)
RETURNS BIT
AS
BEGIN
@ -297,8 +276,7 @@ BEGIN
RETURN CASE WHEN IIF(JSON_VALUE(@col, @path) = 'true', 1, IIF(JSON_VALUE(@col, @path) = 'false', 0, NULL)) = @target THEN 1 ELSE 0 END;
END;;
DROP FUNCTION IF EXISTS dbo.json_boolean_notequals;;
CREATE FUNCTION dbo.json_boolean_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target BIT)
CREATE OR ALTER FUNCTION dbo.json_boolean_notequals(@col NVARCHAR(MAX), @path NVARCHAR(500), @target BIT)
RETURNS BIT
AS
BEGIN

Loading…
Cancel
Save