Feature A: GiST index for equatorial type with KNN ordering (<-> strategy 15). 24-byte float-precision spherical bounding box, RA-wrapping aware merge/split, Vincenty lower-bound distance for correct KNN pruning. Apollo-hardened with epsilon-widened bounds, circular-aware picksplit, compile-time size assertions. Feature B: 4 new DE moon equatorial functions (galilean_equatorial_de, saturn_moon_equatorial_de, uranus_moon_equatorial_de, mars_moon_equatorial_de). Same-provider rule enforced, transparent VSOP87 fallback. 120 -> 132 SQL objects. 22 regression suites passing.
73 lines
3.8 KiB
SQL
73 lines
3.8 KiB
SQL
-- pg_orrery 0.11.0 -> 0.12.0 migration
|
|
--
|
|
-- Adds equatorial GiST operator class for KNN sky queries
|
|
-- and DE moon equatorial functions for all 4 planetary moon families.
|
|
|
|
-- ============================================================
|
|
-- GiST support functions for equatorial type
|
|
-- ============================================================
|
|
|
|
CREATE FUNCTION gist_eq_consistent(internal, equatorial, smallint, oid, internal) RETURNS bool
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_union(internal, internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_compress(internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_decompress(internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_penalty(internal, internal, internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_picksplit(internal, internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_same(internal, internal, internal) RETURNS internal
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION gist_eq_distance(internal, equatorial, smallint, oid, internal) RETURNS float8
|
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
|
|
|
-- ============================================================
|
|
-- Equatorial GiST operator class (KNN ordering only)
|
|
-- ============================================================
|
|
|
|
CREATE OPERATOR CLASS eq_gist_ops
|
|
DEFAULT FOR TYPE equatorial USING gist AS
|
|
OPERATOR 15 <-> (equatorial, equatorial) FOR ORDER BY pg_catalog.float_ops,
|
|
FUNCTION 1 gist_eq_consistent(internal, equatorial, smallint, oid, internal),
|
|
FUNCTION 2 gist_eq_union(internal, internal),
|
|
FUNCTION 3 gist_eq_compress(internal),
|
|
FUNCTION 4 gist_eq_decompress(internal),
|
|
FUNCTION 5 gist_eq_penalty(internal, internal, internal),
|
|
FUNCTION 6 gist_eq_picksplit(internal, internal),
|
|
FUNCTION 7 gist_eq_same(internal, internal, internal),
|
|
FUNCTION 8 gist_eq_distance(internal, equatorial, smallint, oid, internal);
|
|
|
|
-- ============================================================
|
|
-- DE moon equatorial functions (STABLE, fall back to VSOP87)
|
|
-- ============================================================
|
|
|
|
CREATE FUNCTION galilean_equatorial_de(int4, timestamptz) RETURNS equatorial
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE STRICT PARALLEL SAFE;
|
|
COMMENT ON FUNCTION galilean_equatorial_de(int4, timestamptz) IS
|
|
'Geocentric RA/Dec of a Galilean moon via DE parent position (falls back to VSOP87). 0=Io, 1=Europa, 2=Ganymede, 3=Callisto.';
|
|
|
|
CREATE FUNCTION saturn_moon_equatorial_de(int4, timestamptz) RETURNS equatorial
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE STRICT PARALLEL SAFE;
|
|
COMMENT ON FUNCTION saturn_moon_equatorial_de(int4, timestamptz) IS
|
|
'Geocentric RA/Dec of a Saturn moon via DE parent position (falls back to VSOP87). 0=Mimas..7=Hyperion.';
|
|
|
|
CREATE FUNCTION uranus_moon_equatorial_de(int4, timestamptz) RETURNS equatorial
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE STRICT PARALLEL SAFE;
|
|
COMMENT ON FUNCTION uranus_moon_equatorial_de(int4, timestamptz) IS
|
|
'Geocentric RA/Dec of a Uranus moon via DE parent position (falls back to VSOP87). 0=Miranda..4=Oberon.';
|
|
|
|
CREATE FUNCTION mars_moon_equatorial_de(int4, timestamptz) RETURNS equatorial
|
|
AS 'MODULE_PATHNAME' LANGUAGE C STABLE STRICT PARALLEL SAFE;
|
|
COMMENT ON FUNCTION mars_moon_equatorial_de(int4, timestamptz) IS
|
|
'Geocentric RA/Dec of a Mars moon via DE parent position (falls back to VSOP87). 0=Phobos, 1=Deimos.';
|