From 4987ca2d888cb544a0d4edd6c9db63f04e194d3c Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sat, 23 Nov 2002 03:50:21 +0000
Subject: [PATCH] This is a patch to make cube output work like double
 precision output with regard to the extra_float_digits setting.

Since builtins.h was already included, I just deleted the extern
statement (and accompaning comments).

 Bruno Wolff III
---
 contrib/cube/cube.c            | 11 +++++++++--
 contrib/cube/expected/cube.out | 36 +++++++++++++++++-----------------
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 98c6167e62..d24d0f5593 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -121,9 +121,16 @@ cube_out(NDBOX * cube)
 	bool		equal = true;
 	int			dim = cube->dim;
 	int			i;
+	int		ndig;
 
 	initStringInfo(&buf);
 
+	/*
+	 * Get the number of digits to display.
+	 */
+	ndig = DBL_DIG + extra_float_digits;
+	if (ndig < 1) ndig = 1;
+
 	/*
 	 * while printing the first (LL) corner, check if it is equal to the
 	 * second one
@@ -133,7 +140,7 @@ cube_out(NDBOX * cube)
 	{
 		if (i > 0)
 			appendStringInfo(&buf, ", ");
-		appendStringInfo(&buf, "%.16g", cube->x[i]);
+		appendStringInfo(&buf, "%.*g", ndig, cube->x[i]);
 		if (cube->x[i] != cube->x[i + dim])
 			equal = false;
 	}
@@ -146,7 +153,7 @@ cube_out(NDBOX * cube)
 		{
 			if (i > 0)
 				appendStringInfo(&buf, ", ");
-			appendStringInfo(&buf, "%.16g", cube->x[i + dim]);
+			appendStringInfo(&buf, "%.*g", ndig, cube->x[i + dim]);
 		}
 		appendStringInfoChar(&buf, ')');
 	}
diff --git a/contrib/cube/expected/cube.out b/contrib/cube/expected/cube.out
index 5eeeb0f5fc..beced4e64a 100644
--- a/contrib/cube/expected/cube.out
+++ b/contrib/cube/expected/cube.out
@@ -145,39 +145,39 @@ SELECT '-1e-700'::cube AS cube;
 (1 row)
 
 SELECT '1234567890123456'::cube AS cube;
-        cube        
---------------------
- (1234567890123456)
+          cube          
+------------------------
+ (1.23456789012346e+15)
 (1 row)
 
 SELECT '+1234567890123456'::cube AS cube;
-        cube        
---------------------
- (1234567890123456)
+          cube          
+------------------------
+ (1.23456789012346e+15)
 (1 row)
 
 SELECT '-1234567890123456'::cube AS cube;
-        cube         
----------------------
- (-1234567890123456)
+          cube           
+-------------------------
+ (-1.23456789012346e+15)
 (1 row)
 
 SELECT '.1234567890123456'::cube AS cube;
-         cube         
-----------------------
- (0.1234567890123456)
+        cube         
+---------------------
+ (0.123456789012346)
 (1 row)
 
 SELECT '+.1234567890123456'::cube AS cube;
-         cube         
-----------------------
- (0.1234567890123456)
+        cube         
+---------------------
+ (0.123456789012346)
 (1 row)
 
 SELECT '-.1234567890123456'::cube AS cube;
-         cube          
------------------------
- (-0.1234567890123456)
+         cube         
+----------------------
+ (-0.123456789012346)
 (1 row)
 
 -- simple lists (points)