This is an automated email from the ASF dual-hosted git repository.
mtaha pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/age.git
The following commit(s) were added to refs/heads/master by this push:
new 190354c4 Fix issue 2243 - Regression in string concatenation (#2244)
190354c4 is described below
commit 190354c415851b9eba893b314fea55623518b3a6
Author: John Gemignani <[email protected]>
AuthorDate: Thu Nov 13 07:57:41 2025 -0800
Fix issue 2243 - Regression in string concatenation (#2244)
Fixed issue 2243 - Regression in string concatenation using the + operator.
The issue was in versions 1.5.0 and 1.6.0, at least. It was due to using
Int8GetDatum instead of Int64GetDatum for the agtype integer field in the
following functions -
get_numeric_datum_from_agtype_value
get_string_from_agtype_value
This impacted more than what the original issue covered, but those
additional
cases were resolved too.
Added regression tests.
modified: regress/expected/agtype.out
modified: regress/sql/agtype.sql
modified: src/backend/utils/adt/agtype_ops.c
---
regress/expected/agtype.out | 101 +++++++++++++++++++++++++++++++++++++
regress/sql/agtype.sql | 47 +++++++++++++++++
src/backend/utils/adt/agtype_ops.c | 4 +-
3 files changed, 150 insertions(+), 2 deletions(-)
diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out
index d4a577c0..065f357f 100644
--- a/regress/expected/agtype.out
+++ b/regress/expected/agtype.out
@@ -3776,9 +3776,110 @@ SELECT agtype_build_map('1', '1', 2, 2, 3.14, 3.14,
'e', 2.71);
{"1": "1", "2": 2, "e": 2.71::numeric, "3.14": 3.14::numeric}
(1 row)
+--
+-- Bug found from issue 2043 - Regression in string concatenation using the +
operator
+--
+-- This bug impacted specific numeric cases too.
+--
+SELECT * FROM create_graph('issue_2243');
+NOTICE: graph "issue_2243" has been created
+ create_graph
+--------------
+
+(1 row)
+
+SELECT * FROM cypher('issue_2243', $$
+ CREATE (n30164502:Node {data_id: 30164502})
+ RETURN id(n30164502) + ':test_n' + n30164502.data_id
+ $$ ) as (result agtype);
+ result
+----------------------------------
+ "844424930131969:test_n30164502"
+(1 row)
+
+-- concat / add
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer + ":test_n" +
9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+-------------------------------------------------
+ "9223372036854775807:test_n9223372036854775807"
+(1 row)
+
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric + 9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+-------------------------------
+ 18446744073709551614::numeric
+(1 row)
+
+-- sub
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric - 9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+------------
+ 0::numeric
+(1 row)
+
+-- mul
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric * 9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+-------------------------------------------------
+ 85070591730234615847396907784232501249::numeric
+(1 row)
+
+-- div
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric / 9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+---------------------------------
+ 1.00000000000000000000::numeric
+(1 row)
+
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer / 9223372036854775807::numeric
+ $$ ) as (result agtype);
+ result
+---------------------------------
+ 1.00000000000000000000::numeric
+(1 row)
+
+-- mod
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric % 9223372036854775807::integer
+ $$ ) as (result agtype);
+ result
+------------
+ 0::numeric
+(1 row)
+
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer % 9223372036854775807::numeric
+ $$ ) as (result agtype);
+ result
+------------
+ 0::numeric
+(1 row)
+
--
-- Cleanup
--
+SELECT drop_graph('issue_2243', true);
+NOTICE: drop cascades to 3 other objects
+DETAIL: drop cascades to table issue_2243._ag_label_vertex
+drop cascades to table issue_2243._ag_label_edge
+drop cascades to table issue_2243."Node"
+NOTICE: graph "issue_2243" has been dropped
+ drop_graph
+------------
+
+(1 row)
+
SELECT drop_graph('agtype_build_map', true);
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table agtype_build_map._ag_label_vertex
diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql
index 016f457f..6dab6bc3 100644
--- a/regress/sql/agtype.sql
+++ b/regress/sql/agtype.sql
@@ -1075,9 +1075,56 @@ SELECT * FROM cypher('agtype_build_map', $$ RETURN
ag_catalog.agtype_build_map('
$$) AS (results agtype);
SELECT agtype_build_map('1', '1', 2, 2, 3.14, 3.14, 'e', 2.71);
+--
+-- Bug found from issue 2043 - Regression in string concatenation using the +
operator
+--
+-- This bug impacted specific numeric cases too.
+--
+SELECT * FROM create_graph('issue_2243');
+SELECT * FROM cypher('issue_2243', $$
+ CREATE (n30164502:Node {data_id: 30164502})
+ RETURN id(n30164502) + ':test_n' + n30164502.data_id
+ $$ ) as (result agtype);
+
+-- concat / add
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer + ":test_n" +
9223372036854775807::integer
+ $$ ) as (result agtype);
+
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric + 9223372036854775807::integer
+ $$ ) as (result agtype);
+
+-- sub
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric - 9223372036854775807::integer
+ $$ ) as (result agtype);
+
+-- mul
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric * 9223372036854775807::integer
+ $$ ) as (result agtype);
+
+-- div
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric / 9223372036854775807::integer
+ $$ ) as (result agtype);
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer / 9223372036854775807::numeric
+ $$ ) as (result agtype);
+
+-- mod
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::numeric % 9223372036854775807::integer
+ $$ ) as (result agtype);
+SELECT * FROM cypher('issue_2243', $$
+ RETURN 9223372036854775807::integer % 9223372036854775807::numeric
+ $$ ) as (result agtype);
+
--
-- Cleanup
--
+SELECT drop_graph('issue_2243', true);
SELECT drop_graph('agtype_build_map', true);
DROP TABLE agtype_table;
diff --git a/src/backend/utils/adt/agtype_ops.c
b/src/backend/utils/adt/agtype_ops.c
index c6c13aad..d831447b 100644
--- a/src/backend/utils/adt/agtype_ops.c
+++ b/src/backend/utils/adt/agtype_ops.c
@@ -68,7 +68,7 @@ static char *get_string_from_agtype_value(agtype_value *agtv,
int *length)
{
case AGTV_INTEGER:
number = DirectFunctionCall1(int8out,
- Int8GetDatum(agtv->val.int_value));
+ Int64GetDatum(agtv->val.int_value));
string = DatumGetCString(number);
*length = strlen(string);
return string;
@@ -115,7 +115,7 @@ Datum get_numeric_datum_from_agtype_value(agtype_value
*agtv)
{
case AGTV_INTEGER:
return DirectFunctionCall1(int8_numeric,
- Int8GetDatum(agtv->val.int_value));
+ Int64GetDatum(agtv->val.int_value));
case AGTV_FLOAT:
return DirectFunctionCall1(float8_numeric,
Float8GetDatum(agtv->val.float_value));