v20260708-0002-Resolve-unknown-type-literals-in-property-.patch
text/x-patch
Filename: v20260708-0002-Resolve-unknown-type-literals-in-property-.patch
Type: text/x-patch
Part: 1
Patch
Format: format-patch
Series: patch v20260708-0002
Subject: Resolve unknown-type literals in property expressions
| File | + | − |
|---|---|---|
| src/backend/commands/propgraphcmds.c | 2 | 0 |
| src/test/regress/expected/create_property_graph.out | 29 | 8 |
| src/test/regress/sql/create_property_graph.sql | 5 | 0 |
From 4195478723038fb6f9fb17e4a166dc5c0c0f690b Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Date: Wed, 29 Apr 2026 19:07:13 +0530
Subject: [PATCH v20260708 2/7] Resolve unknown-type literals in property
expressions
When a string literal is provided as a property expression, the data
type of the property was set to "unknown", which may lead to various
failures when the property is used in GRAPH_TABLE or when its data type
is compared against other properties with the same name. To fix this,
call resolveTargetListUnknowns() on the targetlist of new properties
being added to resolve unknown type literals.
Reported by: Noah Misch <noah@leadboat.com>
Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Discussion: https://www.postgresql.org/message-id/20260630173053.51.noahmisch@microsoft.com
---
src/backend/commands/propgraphcmds.c | 2 +
.../expected/create_property_graph.out | 37 +++++++++++++++----
.../regress/sql/create_property_graph.sql | 5 +++
3 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/src/backend/commands/propgraphcmds.c b/src/backend/commands/propgraphcmds.c
index 107c0449302..9c9f4f2b299 100644
--- a/src/backend/commands/propgraphcmds.c
+++ b/src/backend/commands/propgraphcmds.c
@@ -904,6 +904,8 @@ insert_property_records(Oid graphid, Oid ellabeloid, Oid pgerelid, const PropGra
table_close(rel, NoLock);
tp = transformTargetList(pstate, proplist, EXPR_KIND_PROPGRAPH_PROPERTY);
+ if (pstate->p_resolve_unknowns)
+ resolveTargetListUnknowns(pstate, tp);
assign_expr_collations(pstate, (Node *) tp);
/*
diff --git a/src/test/regress/expected/create_property_graph.out b/src/test/regress/expected/create_property_graph.out
index f8730e96340..4a8b3d91219 100644
--- a/src/test/regress/expected/create_property_graph.out
+++ b/src/test/regress/expected/create_property_graph.out
@@ -351,6 +351,10 @@ CREATE PROPERTY GRAPH gt
SOURCE KEY (k1) REFERENCES v1(a)
DESTINATION KEY (k2) REFERENCES v2(m)
);
+-- data types of constant property values
+CREATE PROPERTY GRAPH glc VERTEX TABLES (
+ v1 KEY (a) LABEL l1 PROPERTIES ('foo' AS p1, 123 AS p2, 3.14 AS p3, true AS p4)
+);
-- information schema
SELECT * FROM information_schema.property_graphs ORDER BY property_graph_name;
property_graph_catalog | property_graph_schema | property_graph_name
@@ -361,8 +365,9 @@ SELECT * FROM information_schema.property_graphs ORDER BY property_graph_name;
regression | create_property_graph_tests | g4
regression | create_property_graph_tests | g5
regression | create_property_graph_tests | gc1
+ regression | create_property_graph_tests | glc
regression | create_property_graph_tests | gt
-(7 rows)
+(8 rows)
SELECT * FROM information_schema.pg_element_tables ORDER BY property_graph_name, element_table_alias;
property_graph_catalog | property_graph_schema | property_graph_name | element_table_alias | element_table_kind | table_catalog | table_schema | table_name | element_table_definition
@@ -387,10 +392,11 @@ SELECT * FROM information_schema.pg_element_tables ORDER BY property_graph_name,
regression | create_property_graph_tests | gc1 | tc1 | VERTEX | regression | create_property_graph_tests | tc1 |
regression | create_property_graph_tests | gc1 | tc2 | VERTEX | regression | create_property_graph_tests | tc2 |
regression | create_property_graph_tests | gc1 | tc3 | VERTEX | regression | create_property_graph_tests | tc3 |
+ regression | create_property_graph_tests | glc | v1 | VERTEX | regression | create_property_graph_tests | v1 |
regression | create_property_graph_tests | gt | e | EDGE | regression | create_property_graph_tests | e |
regression | create_property_graph_tests | gt | v1 | VERTEX | regression | create_property_graph_tests | v1 |
regression | create_property_graph_tests | gt | v2 | VERTEX | regression | create_property_graph_tests | v2 |
-(23 rows)
+(24 rows)
SELECT * FROM information_schema.pg_element_table_key_columns ORDER BY property_graph_name, element_table_alias, ordinal_position;
property_graph_catalog | property_graph_schema | property_graph_name | element_table_alias | column_name | ordinal_position
@@ -421,11 +427,12 @@ SELECT * FROM information_schema.pg_element_table_key_columns ORDER BY property_
regression | create_property_graph_tests | gc1 | tc1 | a | 1
regression | create_property_graph_tests | gc1 | tc2 | a | 1
regression | create_property_graph_tests | gc1 | tc3 | a | 1
+ regression | create_property_graph_tests | glc | v1 | a | 1
regression | create_property_graph_tests | gt | e | k1 | 1
regression | create_property_graph_tests | gt | e | k2 | 2
regression | create_property_graph_tests | gt | v1 | a | 1
regression | create_property_graph_tests | gt | v2 | m | 1
-(30 rows)
+(31 rows)
SELECT * FROM information_schema.pg_edge_table_components ORDER BY property_graph_name, edge_table_alias, edge_end DESC, ordinal_position;
property_graph_catalog | property_graph_schema | property_graph_name | edge_table_alias | vertex_table_alias | edge_end | edge_table_column_name | vertex_table_column_name | ordinal_position
@@ -475,10 +482,11 @@ SELECT * FROM information_schema.pg_element_table_labels ORDER BY property_graph
regression | create_property_graph_tests | gc1 | tc1 | tc1
regression | create_property_graph_tests | gc1 | tc2 | tc2
regression | create_property_graph_tests | gc1 | tc3 | tc3
+ regression | create_property_graph_tests | glc | v1 | l1
regression | create_property_graph_tests | gt | e | e
regression | create_property_graph_tests | gt | v1 | v1
regression | create_property_graph_tests | gt | v2 | v2
-(25 rows)
+(26 rows)
SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_graph_name, element_table_alias, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | element_table_alias | property_name | property_expression
@@ -529,6 +537,10 @@ SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_g
regression | create_property_graph_tests | gc1 | tc2 | b | ((b)::character varying COLLATE "C")
regression | create_property_graph_tests | gc1 | tc3 | a | a
regression | create_property_graph_tests | gc1 | tc3 | b | (b)::character varying
+ regression | create_property_graph_tests | glc | v1 | p1 | 'foo'::text
+ regression | create_property_graph_tests | glc | v1 | p2 | 123
+ regression | create_property_graph_tests | glc | v1 | p3 | 3.14
+ regression | create_property_graph_tests | glc | v1 | p4 | true
regression | create_property_graph_tests | gt | e | c | c
regression | create_property_graph_tests | gt | e | k1 | k1
regression | create_property_graph_tests | gt | e | k2 | k2
@@ -536,7 +548,7 @@ SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_g
regression | create_property_graph_tests | gt | v1 | b | b
regression | create_property_graph_tests | gt | v2 | m | m
regression | create_property_graph_tests | gt | v2 | n | n
-(53 rows)
+(57 rows)
SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_name, label_name, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | label_name | property_name
@@ -593,6 +605,10 @@ SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_nam
regression | create_property_graph_tests | gc1 | tc2 | b
regression | create_property_graph_tests | gc1 | tc3 | a
regression | create_property_graph_tests | gc1 | tc3 | b
+ regression | create_property_graph_tests | glc | l1 | p1
+ regression | create_property_graph_tests | glc | l1 | p2
+ regression | create_property_graph_tests | glc | l1 | p3
+ regression | create_property_graph_tests | glc | l1 | p4
regression | create_property_graph_tests | gt | e | c
regression | create_property_graph_tests | gt | e | k1
regression | create_property_graph_tests | gt | e | k2
@@ -600,7 +616,7 @@ SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_nam
regression | create_property_graph_tests | gt | v1 | b
regression | create_property_graph_tests | gt | v2 | m
regression | create_property_graph_tests | gt | v2 | n
-(59 rows)
+(63 rows)
SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_name;
property_graph_catalog | property_graph_schema | property_graph_name | label_name
@@ -627,10 +643,11 @@ SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_n
regression | create_property_graph_tests | gc1 | tc1
regression | create_property_graph_tests | gc1 | tc2
regression | create_property_graph_tests | gc1 | tc3
+ regression | create_property_graph_tests | glc | l1
regression | create_property_graph_tests | gt | e
regression | create_property_graph_tests | gt | v1
regression | create_property_graph_tests | gt | v2
-(25 rows)
+(26 rows)
SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_name, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | property_name | data_type | character_maximum_length | character_octet_length | character_set_catalog | character_set_schema | character_set_name | collation_catalog | collation_schema | collation_name | numeric_precision | numeric_precision_radix | numeric_scale | datetime_precision | interval_type | interval_precision | user_defined_type_catalog | user_defined_type_schema | user_defined_type_name | scope_catalog | scope_schema | scope_name | maximum_cardinality | dtd_identifier
@@ -666,6 +683,10 @@ SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_
regression | create_property_graph_tests | gc1 | eb | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | eb
regression | create_property_graph_tests | gc1 | ek1 | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | ek1
regression | create_property_graph_tests | gc1 | ek2 | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | ek2
+ regression | create_property_graph_tests | glc | p1 | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | p1
+ regression | create_property_graph_tests | glc | p2 | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | p2
+ regression | create_property_graph_tests | glc | p3 | numeric | | | | | | regression | | | | | | | | | regression | pg_catalog | numeric | | | | | p3
+ regression | create_property_graph_tests | glc | p4 | boolean | | | | | | regression | | | | | | | | | regression | pg_catalog | bool | | | | | p4
regression | create_property_graph_tests | gt | a | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | a
regression | create_property_graph_tests | gt | b | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | b
regression | create_property_graph_tests | gt | c | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | c
@@ -673,7 +694,7 @@ SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_
regression | create_property_graph_tests | gt | k2 | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | k2
regression | create_property_graph_tests | gt | m | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | m
regression | create_property_graph_tests | gt | n | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | n
-(38 rows)
+(42 rows)
SELECT * FROM information_schema.pg_property_graph_privileges WHERE grantee LIKE 'regress%' ORDER BY property_graph_name, grantor, grantee, privilege_type;
grantor | grantee | property_graph_catalog | property_graph_schema | property_graph_name | privilege_type | is_grantable
diff --git a/src/test/regress/sql/create_property_graph.sql b/src/test/regress/sql/create_property_graph.sql
index 72885be949a..1667896f558 100644
--- a/src/test/regress/sql/create_property_graph.sql
+++ b/src/test/regress/sql/create_property_graph.sql
@@ -290,6 +290,11 @@ CREATE PROPERTY GRAPH gt
DESTINATION KEY (k2) REFERENCES v2(m)
);
+-- data types of constant property values
+CREATE PROPERTY GRAPH glc VERTEX TABLES (
+ v1 KEY (a) LABEL l1 PROPERTIES ('foo' AS p1, 123 AS p2, 3.14 AS p3, true AS p4)
+);
+
-- information schema
SELECT * FROM information_schema.property_graphs ORDER BY property_graph_name;
--
2.34.1