From ba50fcb28c115c91324354bd9ec91aa557801a1f Mon Sep 17 00:00:00 2001
From: stepan-neretin7 <fenixrnd@mail.ru>
Date: Thu, 20 Jul 2023 16:51:37 +0700
Subject: [PATCH 1/2] Return value from function, which should return angle
 must be float, not pointer

---
 Makefile                |   2 +-
 expected/euler.out      | 138 ++++++++++++++++++++++++++++++++++++++++
 expected/init.out       |   2 +-
 pg_sphere--1.2.3.sql.in |   2 +
 pg_sphere.control       |   2 +-
 sql/euler.sql           |  46 ++++++++++++++
 src/euler.c             |   7 +-
 7 files changed, 192 insertions(+), 7 deletions(-)
 create mode 100644 pg_sphere--1.2.3.sql.in

diff --git a/Makefile b/Makefile
index 95c9bbb..d9e90d7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-PGSPHERE_VERSION = 1.2.2
+PGSPHERE_VERSION = 1.2.3
 EXTENSION        = pg_sphere
 RELEASE_SQL      = $(EXTENSION)--$(PGSPHERE_VERSION).sql
 USE_PGXS         = 1
diff --git a/expected/euler.out b/expected/euler.out
index 9ea179d..e48f9ad 100644
--- a/expected/euler.out
+++ b/expected/euler.out
@@ -17,3 +17,141 @@ SELECT strans '-40d,0d,40d,ZZZ' <> '-40d,0d,40d,XXX' ;
  f
 (1 row)
 
+SELECT strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' );
+                strans                 
+---------------------------------------
+ 0.34906585, 1.5707963, 1.2304571, XZY
+(1 row)
+
+SELECT theta( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+     theta     
+---------------
+ 1.57079632679
+(1 row)
+
+SELECT psi( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+      psi      
+---------------
+ 1.23045712266
+(1 row)
+
+SELECT phi( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+      phi       
+----------------
+ 0.349065850399
+(1 row)
+
+SELECT theta( strans( '20d, 30d, 40d, XZY' ) );
+     theta      
+----------------
+ 0.523598775598
+(1 row)
+
+SELECT psi( strans( '20d, 30d, 40d, XZY' ) );
+      psi       
+----------------
+ 0.698131700798
+(1 row)
+
+SELECT phi( strans( '20d, 30d, 40d, XZY' ) );
+      phi       
+----------------
+ 0.349065850399
+(1 row)
+
+SELECT strans( '2d 20m, 10d, 0' );
+             strans              
+---------------------------------
+ 0.040724349, 0.17453293, 0, ZXZ
+(1 row)
+
+SELECT theta( strans( '2d 20m, 10d, 0' ) );
+     theta      
+----------------
+ 0.174532925199
+(1 row)
+
+SELECT psi( strans( '2d 20m, 10d, 0' ) );
+ psi 
+-----
+   0
+(1 row)
+
+SELECT phi( strans( '2d 20m, 10d, 0' ) );
+       phi       
+-----------------
+ 0.0407243492132
+(1 row)
+
+SELECT strans ( '10d, 90d, 270d, ZXZ' );
+                strans                
+--------------------------------------
+ 0.17453293, 1.5707963, 4.712389, ZXZ
+(1 row)
+
+SELECT theta( strans ( '10d, 90d, 270d, ZXZ' ) );
+     theta     
+---------------
+ 1.57079632679
+(1 row)
+
+SELECT psi( strans ( '10d, 90d, 270d, ZXZ' ) );
+      psi      
+---------------
+ 4.71238898038
+(1 row)
+
+SELECT phi( strans ( '10d, 90d, 270d, ZXZ' ) );
+      phi       
+----------------
+ 0.174532925199
+(1 row)
+
+SELECT - strans ( '20d, 50d, 80d, XYZ' );
+               ?column?               
+--------------------------------------
+ 4.8869219, 5.4105207, 5.9341195, ZYX
+(1 row)
+
+SELECT theta( - strans ( '20d, 50d, 80d, XYZ' ) );
+      theta      
+-----------------
+ -0.872664625997
+(1 row)
+
+SELECT psi( - strans ( '20d, 50d, 80d, XYZ' ) );
+       psi       
+-----------------
+ -0.349065850399
+(1 row)
+
+SELECT phi( - strans ( '20d, 50d, 80d, XYZ' ) );
+      phi      
+---------------
+ -1.3962634016
+(1 row)
+
+SELECT strans( '90d, 60d, 30d' );
+                strans                 
+---------------------------------------
+ 1.5707963, 1.0471976, 0.52359878, ZXZ
+(1 row)
+
+SELECT theta( strans( '90d, 60d, 30d' ) );
+    theta     
+--------------
+ 1.0471975512
+(1 row)
+
+SELECT psi( strans( '90d, 60d, 30d' ) );
+      psi       
+----------------
+ 0.523598775598
+(1 row)
+
+SELECT phi( strans( '90d, 60d, 30d' ) );
+      phi      
+---------------
+ 1.57079632679
+(1 row)
+
diff --git a/expected/init.out b/expected/init.out
index 5bce07c..519c140 100644
--- a/expected/init.out
+++ b/expected/init.out
@@ -6,6 +6,6 @@ CREATE EXTENSION pg_sphere;
 select pg_sphere_version();
  pg_sphere_version 
 -------------------
- 1.2.2
+ 1.2.3
 (1 row)
 
diff --git a/pg_sphere--1.2.3.sql.in b/pg_sphere--1.2.3.sql.in
new file mode 100644
index 0000000..b83d02a
--- /dev/null
+++ b/pg_sphere--1.2.3.sql.in
@@ -0,0 +1,2 @@
+-- complain if this script is run via psql
+\echo Use "CREATE EXTENSION pg_sphere" to load this file. \quit
diff --git a/pg_sphere.control b/pg_sphere.control
index a995012..bebbe02 100644
--- a/pg_sphere.control
+++ b/pg_sphere.control
@@ -1,5 +1,5 @@
 # pg_sphere extension
 comment = 'spherical objects with useful functions, operators and index support'
-default_version = '1.2.2'
+default_version = '1.2.3'
 module_pathname = '$libdir/pg_sphere'
 relocatable = true
diff --git a/sql/euler.sql b/sql/euler.sql
index c60bf02..6fabaf9 100644
--- a/sql/euler.sql
+++ b/sql/euler.sql
@@ -1,5 +1,6 @@
 \set ECHO none
 SELECT set_sphere_output_precision(8);
+SET extra_float_digits TO -3;
 \set ECHO all
 
 -- checking Euler transformation operators
@@ -7,3 +8,48 @@ SELECT set_sphere_output_precision(8);
 SELECT strans '-10d,0d,10d,ZZZ'  = '-10d,0d,10d,XXX' ;
 SELECT strans '-40d,0d,40d,ZZZ' <> '-40d,0d,40d,XXX' ;
 
+SELECT strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' );
+
+SELECT theta( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+
+SELECT psi( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+
+SELECT phi( strans ( 20.0*pi()/180.0, -270.0*pi()/180.0, 70.5*pi()/180.0, 'XZY' ) );
+
+SELECT theta( strans( '20d, 30d, 40d, XZY' ) );
+
+SELECT psi( strans( '20d, 30d, 40d, XZY' ) );
+
+SELECT phi( strans( '20d, 30d, 40d, XZY' ) );
+
+SELECT strans( '2d 20m, 10d, 0' );
+
+SELECT theta( strans( '2d 20m, 10d, 0' ) );
+
+SELECT psi( strans( '2d 20m, 10d, 0' ) );
+
+SELECT phi( strans( '2d 20m, 10d, 0' ) );
+
+SELECT strans ( '10d, 90d, 270d, ZXZ' );
+
+SELECT theta( strans ( '10d, 90d, 270d, ZXZ' ) );
+
+SELECT psi( strans ( '10d, 90d, 270d, ZXZ' ) );
+
+SELECT phi( strans ( '10d, 90d, 270d, ZXZ' ) );
+
+SELECT - strans ( '20d, 50d, 80d, XYZ' );
+
+SELECT theta( - strans ( '20d, 50d, 80d, XYZ' ) );
+
+SELECT psi( - strans ( '20d, 50d, 80d, XYZ' ) );
+
+SELECT phi( - strans ( '20d, 50d, 80d, XYZ' ) );
+
+SELECT strans( '90d, 60d, 30d' );
+
+SELECT theta( strans( '90d, 60d, 30d' ) );
+
+SELECT psi( strans( '90d, 60d, 30d' ) );
+
+SELECT phi( strans( '90d, 60d, 30d' ) );
diff --git a/src/euler.c b/src/euler.c
index b071635..a45f7b3 100644
--- a/src/euler.c
+++ b/src/euler.c
@@ -203,15 +203,14 @@ spheretrans_phi(PG_FUNCTION_ARGS)
 {
 	SEuler	   *se = (SEuler *) PG_GETARG_POINTER(0);
 
-	PG_RETURN_POINTER(&se->phi);
+	PG_RETURN_FLOAT8(se->phi);
 }
 
 Datum
 spheretrans_theta(PG_FUNCTION_ARGS)
 {
 	SEuler	   *se = (SEuler *) PG_GETARG_POINTER(0);
-
-	PG_RETURN_POINTER(&se->theta);
+	PG_RETURN_FLOAT8(se->theta);
 }
 
 Datum
@@ -219,7 +218,7 @@ spheretrans_psi(PG_FUNCTION_ARGS)
 {
 	SEuler	   *se = (SEuler *) PG_GETARG_POINTER(0);
 
-	PG_RETURN_POINTER(&se->psi);
+	PG_RETURN_FLOAT8(se->psi);
 }
 
 Datum

From bc591b8b1383ff8acaf413f12b933689fac4bd94 Mon Sep 17 00:00:00 2001
From: stepan-neretin7 <fenixrnd@mail.ru>
Date: Mon, 24 Jul 2023 13:37:03 +0700
Subject: [PATCH 2/2] Create Upgrade script

---
 Makefile                                       | 6 +++++-
 pg_sphere--1.2.1.sql.in                        | 2 --
 pg_sphere--1.2.2.sql.in                        | 2 --
 upgrade_scripts/pg_sphere--1.2.2--1.2.3.sql.in | 1 +
 4 files changed, 6 insertions(+), 5 deletions(-)
 delete mode 100644 pg_sphere--1.2.1.sql.in
 delete mode 100644 pg_sphere--1.2.2.sql.in
 create mode 100644 upgrade_scripts/pg_sphere--1.2.2--1.2.3.sql.in

diff --git a/Makefile b/Makefile
index d9e90d7..dca3b7d 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,8 @@ DATA_built  = $(RELEASE_SQL) \
 			  pg_sphere--1.1.5beta2gavo--1.1.5beta4gavo.sql \
 			  pg_sphere--1.1.5beta4gavo--1.2.0.sql \
 			  pg_sphere--1.2.0--1.2.1.sql \
-			  pg_sphere--1.2.1--1.2.2.sql
+			  pg_sphere--1.2.1--1.2.2.sql \
+			  pg_sphere--1.2.2--1.2.3.sql
 
 DOCS        = README.pg_sphere COPYRIGHT.pg_sphere
 REGRESS     = init tables points euler circle line ellipse poly path box index \
@@ -256,6 +257,9 @@ pg_sphere--1.2.1--1.2.2.sql:
 	cat upgrade_scripts/$@.in > $@
 endif
 
+pg_sphere--1.2.2--1.2.3.sql:
+	cat upgrade_scripts/$@.in > $@
+
 # end of local stuff
 
 src/sscan.o : src/sparse.c
diff --git a/pg_sphere--1.2.1.sql.in b/pg_sphere--1.2.1.sql.in
deleted file mode 100644
index b83d02a..0000000
--- a/pg_sphere--1.2.1.sql.in
+++ /dev/null
@@ -1,2 +0,0 @@
--- complain if this script is run via psql
-\echo Use "CREATE EXTENSION pg_sphere" to load this file. \quit
diff --git a/pg_sphere--1.2.2.sql.in b/pg_sphere--1.2.2.sql.in
deleted file mode 100644
index b83d02a..0000000
--- a/pg_sphere--1.2.2.sql.in
+++ /dev/null
@@ -1,2 +0,0 @@
--- complain if this script is run via psql
-\echo Use "CREATE EXTENSION pg_sphere" to load this file. \quit
diff --git a/upgrade_scripts/pg_sphere--1.2.2--1.2.3.sql.in b/upgrade_scripts/pg_sphere--1.2.2--1.2.3.sql.in
new file mode 100644
index 0000000..8ea3baa
--- /dev/null
+++ b/upgrade_scripts/pg_sphere--1.2.2--1.2.3.sql.in
@@ -0,0 +1 @@
+-- Nothing to upgrade in the schema