Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions testdata/diff/create_view/add_view/diff.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,24 @@ CREATE OR REPLACE VIEW array_operators_view AS
CASE WHEN priority <> ANY (ARRAY[1, 2, 3]) THEN 'different' ELSE 'same' END AS not_equal_any_test
FROM employees;

CREATE OR REPLACE VIEW nullif_functions_view AS
SELECT e.id,
e.name AS employee_name,
d.name AS department_name,
(e.priority - d.manager_id) / NULLIF(d.manager_id, 0) AS priority_ratio,
NULLIF(e.status::text, 'inactive'::text) AS active_status,
NULLIF(e.email::text, ''::text) AS valid_email,
GREATEST(e.priority, 0) AS min_priority,
LEAST(e.priority, 100) AS max_priority,
GREATEST(e.id, d.id, e.department_id) AS max_id,
CASE
WHEN NULLIF(e.department_id, 0) IS NOT NULL THEN 'assigned'::text
ELSE 'unassigned'::text
END AS assignment_status
FROM employees e
JOIN departments d USING (id)
WHERE e.priority > 0;

CREATE OR REPLACE VIEW text_search_view AS
SELECT id,
COALESCE((first_name::text || ' '::text) || last_name::text, 'Anonymous'::text) AS display_name,
Expand Down
26 changes: 25 additions & 1 deletion testdata/diff/create_view/add_view/new.sql
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,28 @@ SELECT
COALESCE(bio, 'No description available') AS description,
to_tsvector('english', COALESCE(first_name, '') || ' ' || COALESCE(last_name, '') || ' ' || COALESCE(bio, '')) AS search_vector
FROM employees
WHERE status = 'active';
WHERE status = 'active';

-- View testing NULLIF, GREATEST, LEAST, and joins (regression test for issue #103)
CREATE VIEW public.nullif_functions_view AS
SELECT
e.id,
e.name AS employee_name,
d.name AS department_name,
-- NULLIF to avoid divide-by-zero (main issue from #103)
(e.priority - d.manager_id) / NULLIF(d.manager_id, 0) AS priority_ratio,
-- Multiple NULLIF expressions
NULLIF(e.status, 'inactive') AS active_status,
NULLIF(e.email, '') AS valid_email,
-- GREATEST and LEAST functions
GREATEST(e.priority, 0) AS min_priority,
LEAST(e.priority, 100) AS max_priority,
GREATEST(e.id, d.id, e.department_id) AS max_id,
-- Complex CASE with NULLIF
CASE
WHEN NULLIF(e.department_id, 0) IS NOT NULL THEN 'assigned'
ELSE 'unassigned'
END AS assignment_status
FROM employees e
JOIN departments d USING (id)
WHERE e.priority > 0;
6 changes: 6 additions & 0 deletions testdata/diff/create_view/add_view/plan.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
"operation": "create",
"path": "public.array_operators_view"
},
{
"sql": "CREATE OR REPLACE VIEW nullif_functions_view AS\n SELECT e.id,\n e.name AS employee_name,\n d.name AS department_name,\n (e.priority - d.manager_id) / NULLIF(d.manager_id, 0) AS priority_ratio,\n NULLIF(e.status::text, 'inactive'::text) AS active_status,\n NULLIF(e.email::text, ''::text) AS valid_email,\n GREATEST(e.priority, 0) AS min_priority,\n LEAST(e.priority, 100) AS max_priority,\n GREATEST(e.id, d.id, e.department_id) AS max_id,\n CASE\n WHEN NULLIF(e.department_id, 0) IS NOT NULL THEN 'assigned'::text\n ELSE 'unassigned'::text\n END AS assignment_status\n FROM employees e\n JOIN departments d USING (id)\n WHERE e.priority > 0;",
"type": "view",
"operation": "create",
"path": "public.nullif_functions_view"
},
{
"sql": "CREATE OR REPLACE VIEW text_search_view AS\n SELECT id,\n COALESCE((first_name::text || ' '::text) || last_name::text, 'Anonymous'::text) AS display_name,\n COALESCE(email, ''::character varying) AS email,\n COALESCE(bio, 'No description available'::text) AS description,\n to_tsvector('english'::regconfig, (((COALESCE(first_name, ''::character varying)::text || ' '::text) || COALESCE(last_name, ''::character varying)::text) || ' '::text) || COALESCE(bio, ''::text)) AS search_vector\n FROM employees\n WHERE status::text = 'active'::text;",
"type": "view",
Expand Down
18 changes: 18 additions & 0 deletions testdata/diff/create_view/add_view/plan.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,24 @@ CREATE OR REPLACE VIEW array_operators_view AS
CASE WHEN priority <> ANY (ARRAY[1, 2, 3]) THEN 'different' ELSE 'same' END AS not_equal_any_test
FROM employees;

CREATE OR REPLACE VIEW nullif_functions_view AS
SELECT e.id,
e.name AS employee_name,
d.name AS department_name,
(e.priority - d.manager_id) / NULLIF(d.manager_id, 0) AS priority_ratio,
NULLIF(e.status::text, 'inactive'::text) AS active_status,
NULLIF(e.email::text, ''::text) AS valid_email,
GREATEST(e.priority, 0) AS min_priority,
LEAST(e.priority, 100) AS max_priority,
GREATEST(e.id, d.id, e.department_id) AS max_id,
CASE
WHEN NULLIF(e.department_id, 0) IS NOT NULL THEN 'assigned'::text
ELSE 'unassigned'::text
END AS assignment_status
FROM employees e
JOIN departments d USING (id)
WHERE e.priority > 0;

CREATE OR REPLACE VIEW text_search_view AS
SELECT id,
COALESCE((first_name::text || ' '::text) || last_name::text, 'Anonymous'::text) AS display_name,
Expand Down
23 changes: 21 additions & 2 deletions testdata/diff/create_view/add_view/plan.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
Plan: 2 to add.
Plan: 3 to add.

Summary by type:
views: 2 to add
views: 3 to add

Views:
+ array_operators_view
+ nullif_functions_view
+ text_search_view

DDL to be executed:
Expand All @@ -19,6 +20,24 @@ CREATE OR REPLACE VIEW array_operators_view AS
CASE WHEN priority <> ANY (ARRAY[1, 2, 3]) THEN 'different' ELSE 'same' END AS not_equal_any_test
FROM employees;

CREATE OR REPLACE VIEW nullif_functions_view AS
SELECT e.id,
e.name AS employee_name,
d.name AS department_name,
(e.priority - d.manager_id) / NULLIF(d.manager_id, 0) AS priority_ratio,
NULLIF(e.status::text, 'inactive'::text) AS active_status,
NULLIF(e.email::text, ''::text) AS valid_email,
GREATEST(e.priority, 0) AS min_priority,
LEAST(e.priority, 100) AS max_priority,
GREATEST(e.id, d.id, e.department_id) AS max_id,
CASE
WHEN NULLIF(e.department_id, 0) IS NOT NULL THEN 'assigned'::text
ELSE 'unassigned'::text
END AS assignment_status
FROM employees e
JOIN departments d USING (id)
WHERE e.priority > 0;

CREATE OR REPLACE VIEW text_search_view AS
SELECT id,
COALESCE((first_name::text || ' '::text) || last_name::text, 'Anonymous'::text) AS display_name,
Expand Down