Commit d70d46fd authored by Tom Lane's avatar Tom Lane

PATH and POLYGON datatypes are now TOASTable. Associated functions

updated to new fmgr style.  Deleted hoary old functions for compatibility
with pre-6.1 representations of these datatypes.
parent 1ebe1da2
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.31 2000/07/14 15:26:21 thomas Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.32 2000/07/29 18:45:51 tgl Exp $
--> -->
<chapter id="datatype"> <chapter id="datatype">
...@@ -1641,13 +1641,6 @@ January 8 04:05:06 1999 PST ...@@ -1641,13 +1641,6 @@ January 8 04:05:06 1999 PST
<para> <para>
Paths are output using the first syntax. Paths are output using the first syntax.
Note that <productname>Postgres</productname> versions prior to
v6.1 used a format for paths which had a single leading parenthesis,
a "closed" flag,
an integer count of the number of points, then the list of points followed by a
closing parenthesis.
The built-in function <function>upgradepath</function> is supplied to convert
paths dumped and reloaded from pre-v6.1 databases.
</para> </para>
</sect2> </sect2>
...@@ -1687,12 +1680,6 @@ January 8 04:05:06 1999 PST ...@@ -1687,12 +1680,6 @@ January 8 04:05:06 1999 PST
<para> <para>
Polygons are output using the first syntax. Polygons are output using the first syntax.
Note that <productname>Postgres</productname> versions prior to
v6.1 used a format for polygons which had a single leading parenthesis, the list
of x-axis coordinates, the list of y-axis coordinates,
followed by a closing parenthesis.
The built-in function <function>upgradepoly</function> is supplied to convert
polygons dumped and reloaded from pre-v6.1 databases.
</para> </para>
</sect2> </sect2>
......
...@@ -1423,48 +1423,6 @@ Not defined by this name. Implements the intersection operator '#' ...@@ -1423,48 +1423,6 @@ Not defined by this name. Implements the intersection operator '#'
</tgroup> </tgroup>
</table> </table>
</para> </para>
<para>
<table tocentry="1">
<title>Geometric Upgrade Functions</title>
<tgroup cols="4">
<thead>
<row>
<entry>Function</entry>
<entry>Returns</entry>
<entry>Description</entry>
<entry>Example</entry>
</row>
</thead>
<tbody>
<row>
<entry>isoldpath(path)</entry>
<entry>path</entry>
<entry>test path for pre-v6.1 form</entry>
<entry>isoldpath('(1,3,0,0,1,1,2,0)'::path)</entry>
</row>
<row>
<entry>revertpoly(polygon)</entry>
<entry>polygon</entry>
<entry>to pre-v6.1</entry>
<entry>revertpoly('((0,0),(1,1),(2,0))'::polygon)</entry>
</row>
<row>
<entry>upgradepath(path)</entry>
<entry>path</entry>
<entry>to pre-v6.1</entry>
<entry>upgradepath('(1,3,0,0,1,1,2,0)'::path)</entry>
</row>
<row>
<entry>upgradepoly(polygon)</entry>
<entry>polygon</entry>
<entry>to pre-v6.1</entry>
<entry>upgradepoly('(0,1,2,0,1,0)'::polygon)</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect1> </sect1>
<sect1> <sect1>
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtproc.c,v 1.27 2000/06/14 05:24:43 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtproc.c,v 1.28 2000/07/29 18:45:52 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
#include "postgres.h" #include "postgres.h"
#include "utils/builtins.h" #include "utils/geo_decls.h"
BOX * BOX *
...@@ -81,16 +81,15 @@ rt_bigbox_size(BOX *a, float *size) ...@@ -81,16 +81,15 @@ rt_bigbox_size(BOX *a, float *size)
rt_box_size(a, size); rt_box_size(a, size);
} }
POLYGON * Datum
rt_poly_union(POLYGON *a, POLYGON *b) rt_poly_union(PG_FUNCTION_ARGS)
{ {
POLYGON *a = PG_GETARG_POLYGON_P(0);
POLYGON *b = PG_GETARG_POLYGON_P(1);
POLYGON *p; POLYGON *p;
p = (POLYGON *) palloc(sizeof(POLYGON)); p = (POLYGON *) palloc(sizeof(POLYGON));
if (!PointerIsValid(p))
elog(ERROR, "Cannot allocate polygon for union");
MemSet((char *) p, 0, sizeof(POLYGON)); /* zero any holes */ MemSet((char *) p, 0, sizeof(POLYGON)); /* zero any holes */
p->size = sizeof(POLYGON); p->size = sizeof(POLYGON);
p->npts = 0; p->npts = 0;
...@@ -98,7 +97,12 @@ rt_poly_union(POLYGON *a, POLYGON *b) ...@@ -98,7 +97,12 @@ rt_poly_union(POLYGON *a, POLYGON *b)
p->boundbox.high.y = Max(a->boundbox.high.y, b->boundbox.high.y); p->boundbox.high.y = Max(a->boundbox.high.y, b->boundbox.high.y);
p->boundbox.low.x = Min(a->boundbox.low.x, b->boundbox.low.x); p->boundbox.low.x = Min(a->boundbox.low.x, b->boundbox.low.x);
p->boundbox.low.y = Min(a->boundbox.low.y, b->boundbox.low.y); p->boundbox.low.y = Min(a->boundbox.low.y, b->boundbox.low.y);
return p;
/* Avoid leaking memory when handed toasted input. */
PG_FREE_IF_COPY(a, 0);
PG_FREE_IF_COPY(b, 1);
PG_RETURN_POLYGON_P(p);
} }
Datum Datum
...@@ -125,16 +129,15 @@ rt_poly_size(PG_FUNCTION_ARGS) ...@@ -125,16 +129,15 @@ rt_poly_size(PG_FUNCTION_ARGS)
PG_RETURN_VOID(); PG_RETURN_VOID();
} }
POLYGON * Datum
rt_poly_inter(POLYGON *a, POLYGON *b) rt_poly_inter(PG_FUNCTION_ARGS)
{ {
POLYGON *a = PG_GETARG_POLYGON_P(0);
POLYGON *b = PG_GETARG_POLYGON_P(1);
POLYGON *p; POLYGON *p;
p = (POLYGON *) palloc(sizeof(POLYGON)); p = (POLYGON *) palloc(sizeof(POLYGON));
if (!PointerIsValid(p))
elog(ERROR, "Cannot allocate polygon for intersection");
MemSet((char *) p, 0, sizeof(POLYGON)); /* zero any holes */ MemSet((char *) p, 0, sizeof(POLYGON)); /* zero any holes */
p->size = sizeof(POLYGON); p->size = sizeof(POLYGON);
p->npts = 0; p->npts = 0;
...@@ -143,11 +146,16 @@ rt_poly_inter(POLYGON *a, POLYGON *b) ...@@ -143,11 +146,16 @@ rt_poly_inter(POLYGON *a, POLYGON *b)
p->boundbox.low.x = Max(a->boundbox.low.x, b->boundbox.low.x); p->boundbox.low.x = Max(a->boundbox.low.x, b->boundbox.low.x);
p->boundbox.low.y = Max(a->boundbox.low.y, b->boundbox.low.y); p->boundbox.low.y = Max(a->boundbox.low.y, b->boundbox.low.y);
if (p->boundbox.high.x < p->boundbox.low.x || p->boundbox.high.y < p->boundbox.low.y) /* Avoid leaking memory when handed toasted input. */
PG_FREE_IF_COPY(a, 0);
PG_FREE_IF_COPY(b, 1);
if (p->boundbox.high.x < p->boundbox.low.x ||
p->boundbox.high.y < p->boundbox.low.y)
{ {
pfree(p); pfree(p);
return (POLYGON *) NULL; PG_RETURN_NULL();
} }
return p; PG_RETURN_POLYGON_P(p);
} }
This diff is collapsed.
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_selfuncs.c,v 1.16 2000/06/05 07:28:52 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_selfuncs.c,v 1.17 2000/07/29 18:45:53 tgl Exp $
* *
* XXX These are totally bogus. Perhaps someone will make them do * XXX These are totally bogus. Perhaps someone will make them do
* something reasonable, someday. * something reasonable, someday.
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
*/ */
#include "postgres.h" #include "postgres.h"
#include "utils/builtins.h" #include "utils/geo_decls.h"
/* /*
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_type.h,v 1.94 2000/07/29 03:26:43 tgl Exp $ * $Id: pg_type.h,v 1.95 2000/07/29 18:46:00 tgl Exp $
* *
* NOTES * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -267,13 +267,13 @@ DESCR("geometric point '(x, y)'"); ...@@ -267,13 +267,13 @@ DESCR("geometric point '(x, y)'");
DATA(insert OID = 601 ( lseg PGUID 32 48 f b t \054 0 600 lseg_in lseg_out lseg_in lseg_out d p _null_ )); DATA(insert OID = 601 ( lseg PGUID 32 48 f b t \054 0 600 lseg_in lseg_out lseg_in lseg_out d p _null_ ));
DESCR("geometric line segment '(pt1,pt2)'"); DESCR("geometric line segment '(pt1,pt2)'");
#define LSEGOID 601 #define LSEGOID 601
DATA(insert OID = 602 ( path PGUID -1 -1 f b t \054 0 0 path_in path_out path_in path_out d p _null_ )); DATA(insert OID = 602 ( path PGUID -1 -1 f b t \054 0 0 path_in path_out path_in path_out d x _null_ ));
DESCR("geometric path '(pt1,...)'"); DESCR("geometric path '(pt1,...)'");
#define PATHOID 602 #define PATHOID 602
DATA(insert OID = 603 ( box PGUID 32 100 f b t \073 0 600 box_in box_out box_in box_out d p _null_ )); DATA(insert OID = 603 ( box PGUID 32 100 f b t \073 0 600 box_in box_out box_in box_out d p _null_ ));
DESCR("geometric box '(lower left,upper right)'"); DESCR("geometric box '(lower left,upper right)'");
#define BOXOID 603 #define BOXOID 603
DATA(insert OID = 604 ( polygon PGUID -1 -1 f b t \054 0 0 poly_in poly_out poly_in poly_out d p _null_ )); DATA(insert OID = 604 ( polygon PGUID -1 -1 f b t \054 0 0 poly_in poly_out poly_in poly_out d x _null_ ));
DESCR("geometric polygon '(pt1,...)'"); DESCR("geometric polygon '(pt1,...)'");
#define POLYGONOID 604 #define POLYGONOID 604
DATA(insert OID = 605 ( filename PGUID 256 -1 f b t \054 0 18 filename_in filename_out filename_in filename_out i p _null_ )); DATA(insert OID = 605 ( filename PGUID 256 -1 f b t \054 0 18 filename_in filename_out filename_in filename_out i p _null_ ));
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: builtins.h,v 1.125 2000/07/29 03:26:51 tgl Exp $ * $Id: builtins.h,v 1.126 2000/07/29 18:46:05 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include "nodes/relation.h" /* for amcostestimate parameters */ #include "nodes/relation.h" /* for amcostestimate parameters */
#include "storage/itemptr.h" #include "storage/itemptr.h"
#include "utils/inet.h" #include "utils/inet.h"
#include "utils/geo_decls.h"
#include "utils/numeric.h" #include "utils/numeric.h"
#include "utils/lztext.h" #include "utils/lztext.h"
...@@ -174,17 +173,6 @@ extern Datum btcharcmp(PG_FUNCTION_ARGS); ...@@ -174,17 +173,6 @@ extern Datum btcharcmp(PG_FUNCTION_ARGS);
extern Datum btnamecmp(PG_FUNCTION_ARGS); extern Datum btnamecmp(PG_FUNCTION_ARGS);
extern Datum bttextcmp(PG_FUNCTION_ARGS); extern Datum bttextcmp(PG_FUNCTION_ARGS);
/* support routines for the rtree access method, by opclass */
extern BOX *rt_box_union(BOX *a, BOX *b);
extern BOX *rt_box_inter(BOX *a, BOX *b);
extern void rt_box_size(BOX *a, float *size);
extern void rt_bigbox_size(BOX *a, float *size);
extern Datum rt_poly_size(PG_FUNCTION_ARGS);
extern POLYGON *rt_poly_union(POLYGON *a, POLYGON *b);
extern POLYGON *rt_poly_inter(POLYGON *a, POLYGON *b);
/* arrayfuncs.c */
/* filename.c */ /* filename.c */
extern char *filename_in(char *file); extern char *filename_in(char *file);
extern char *filename_out(char *s); extern char *filename_out(char *s);
...@@ -393,7 +381,6 @@ extern Datum currtid_byreloid(PG_FUNCTION_ARGS); ...@@ -393,7 +381,6 @@ extern Datum currtid_byreloid(PG_FUNCTION_ARGS);
extern Datum currtid_byrelname(PG_FUNCTION_ARGS); extern Datum currtid_byrelname(PG_FUNCTION_ARGS);
/* varchar.c */ /* varchar.c */
extern Datum bpcharin(PG_FUNCTION_ARGS); extern Datum bpcharin(PG_FUNCTION_ARGS);
extern Datum bpcharout(PG_FUNCTION_ARGS); extern Datum bpcharout(PG_FUNCTION_ARGS);
extern Datum bpchar(PG_FUNCTION_ARGS); extern Datum bpchar(PG_FUNCTION_ARGS);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: geo_decls.h,v 1.29 2000/06/13 07:35:30 tgl Exp $ * $Id: geo_decls.h,v 1.30 2000/07/29 18:46:05 tgl Exp $
* *
* NOTE * NOTE
* These routines do *not* use the float types from adt/. * These routines do *not* use the float types from adt/.
...@@ -152,10 +152,12 @@ typedef struct ...@@ -152,10 +152,12 @@ typedef struct
#define PG_GETARG_LSEG_P(n) DatumGetLsegP(PG_GETARG_DATUM(n)) #define PG_GETARG_LSEG_P(n) DatumGetLsegP(PG_GETARG_DATUM(n))
#define PG_RETURN_LSEG_P(x) return LsegPGetDatum(x) #define PG_RETURN_LSEG_P(x) return LsegPGetDatum(x)
#define DatumGetPathP(X) ((PATH *) PG_DETOAST_DATUM(X)) #define DatumGetPathP(X) ((PATH *) PG_DETOAST_DATUM(X))
#define PathPGetDatum(X) PointerGetDatum(X) #define DatumGetPathPCopy(X) ((PATH *) PG_DETOAST_DATUM_COPY(X))
#define PG_GETARG_PATH_P(n) DatumGetPathP(PG_GETARG_DATUM(n)) #define PathPGetDatum(X) PointerGetDatum(X)
#define PG_RETURN_PATH_P(x) return PathPGetDatum(x) #define PG_GETARG_PATH_P(n) DatumGetPathP(PG_GETARG_DATUM(n))
#define PG_GETARG_PATH_P_COPY(n) DatumGetPathPCopy(PG_GETARG_DATUM(n))
#define PG_RETURN_PATH_P(x) return PathPGetDatum(x)
#define DatumGetLineP(X) ((LINE *) DatumGetPointer(X)) #define DatumGetLineP(X) ((LINE *) DatumGetPointer(X))
#define LinePGetDatum(X) PointerGetDatum(X) #define LinePGetDatum(X) PointerGetDatum(X)
...@@ -167,10 +169,12 @@ typedef struct ...@@ -167,10 +169,12 @@ typedef struct
#define PG_GETARG_BOX_P(n) DatumGetBoxP(PG_GETARG_DATUM(n)) #define PG_GETARG_BOX_P(n) DatumGetBoxP(PG_GETARG_DATUM(n))
#define PG_RETURN_BOX_P(x) return BoxPGetDatum(x) #define PG_RETURN_BOX_P(x) return BoxPGetDatum(x)
#define DatumGetPolygonP(X) ((POLYGON *) PG_DETOAST_DATUM(X)) #define DatumGetPolygonP(X) ((POLYGON *) PG_DETOAST_DATUM(X))
#define PolygonPGetDatum(X) PointerGetDatum(X) #define DatumGetPolygonPCopy(X) ((POLYGON *) PG_DETOAST_DATUM_COPY(X))
#define PG_GETARG_POLYGON_P(n) DatumGetPolygonP(PG_GETARG_DATUM(n)) #define PolygonPGetDatum(X) PointerGetDatum(X)
#define PG_RETURN_POLYGON_P(x) return PolygonPGetDatum(x) #define PG_GETARG_POLYGON_P(n) DatumGetPolygonP(PG_GETARG_DATUM(n))
#define PG_GETARG_POLYGON_P_COPY(n) DatumGetPolygonPCopy(PG_GETARG_DATUM(n))
#define PG_RETURN_POLYGON_P(x) return PolygonPGetDatum(x)
#define DatumGetCircleP(X) ((CIRCLE *) DatumGetPointer(X)) #define DatumGetCircleP(X) ((CIRCLE *) DatumGetPointer(X))
#define CirclePGetDatum(X) PointerGetDatum(X) #define CirclePGetDatum(X) PointerGetDatum(X)
...@@ -228,7 +232,7 @@ extern Point *lseg_center(LSEG *lseg); ...@@ -228,7 +232,7 @@ extern Point *lseg_center(LSEG *lseg);
extern Point *lseg_interpt(LSEG *l1, LSEG *l2); extern Point *lseg_interpt(LSEG *l1, LSEG *l2);
extern double *dist_pl(Point *pt, LINE *line); extern double *dist_pl(Point *pt, LINE *line);
extern double *dist_ps(Point *pt, LSEG *lseg); extern double *dist_ps(Point *pt, LSEG *lseg);
extern double *dist_ppath(Point *pt, PATH *path); extern Datum dist_ppath(PG_FUNCTION_ARGS);
extern double *dist_pb(Point *pt, BOX *box); extern double *dist_pb(Point *pt, BOX *box);
extern double *dist_sl(LSEG *lseg, LINE *line); extern double *dist_sl(LSEG *lseg, LINE *line);
extern double *dist_sb(LSEG *lseg, BOX *box); extern double *dist_sb(LSEG *lseg, BOX *box);
...@@ -244,7 +248,7 @@ extern Point *close_lb(LINE *line, BOX *box); ...@@ -244,7 +248,7 @@ extern Point *close_lb(LINE *line, BOX *box);
extern bool on_pl(Point *pt, LINE *line); extern bool on_pl(Point *pt, LINE *line);
extern bool on_ps(Point *pt, LSEG *lseg); extern bool on_ps(Point *pt, LSEG *lseg);
extern bool on_pb(Point *pt, BOX *box); extern bool on_pb(Point *pt, BOX *box);
extern bool on_ppath(Point *pt, PATH *path); extern Datum on_ppath(PG_FUNCTION_ARGS);
extern bool on_sl(LSEG *lseg, LINE *line); extern bool on_sl(LSEG *lseg, LINE *line);
extern bool on_sb(LSEG *lseg, BOX *box); extern bool on_sb(LSEG *lseg, BOX *box);
extern bool inter_sl(LSEG *lseg, LINE *line); extern bool inter_sl(LSEG *lseg, LINE *line);
...@@ -294,72 +298,62 @@ extern double *box_distance(BOX *box1, BOX *box2); ...@@ -294,72 +298,62 @@ extern double *box_distance(BOX *box1, BOX *box2);
extern Point *box_center(BOX *box); extern Point *box_center(BOX *box);
extern BOX *box_intersect(BOX *box1, BOX *box2); extern BOX *box_intersect(BOX *box1, BOX *box2);
extern LSEG *box_diagonal(BOX *box); extern LSEG *box_diagonal(BOX *box);
/* private routines */
extern double box_dt(BOX *box1, BOX *box2);
extern BOX *box(Point *p1, Point *p2); extern BOX *box(Point *p1, Point *p2);
extern BOX *box_add(BOX *box, Point *p); extern BOX *box_add(BOX *box, Point *p);
extern BOX *box_sub(BOX *box, Point *p); extern BOX *box_sub(BOX *box, Point *p);
extern BOX *box_mul(BOX *box, Point *p); extern BOX *box_mul(BOX *box, Point *p);
extern BOX *box_div(BOX *box, Point *p); extern BOX *box_div(BOX *box, Point *p);
/* private routines */
extern double box_dt(BOX *box1, BOX *box2);
/* public path routines */ /* public path routines */
extern PATH *path_in(char *str); extern Datum path_in(PG_FUNCTION_ARGS);
extern char *path_out(PATH *path); extern Datum path_out(PG_FUNCTION_ARGS);
extern bool path_n_lt(PATH *p1, PATH *p2); extern Datum path_n_lt(PG_FUNCTION_ARGS);
extern bool path_n_gt(PATH *p1, PATH *p2); extern Datum path_n_gt(PG_FUNCTION_ARGS);
extern bool path_n_eq(PATH *p1, PATH *p2); extern Datum path_n_eq(PG_FUNCTION_ARGS);
extern bool path_n_le(PATH *p1, PATH *p2); extern Datum path_n_le(PG_FUNCTION_ARGS);
extern bool path_n_ge(PATH *p1, PATH *p2); extern Datum path_n_ge(PG_FUNCTION_ARGS);
extern bool path_inter(PATH *p1, PATH *p2); extern Datum path_inter(PG_FUNCTION_ARGS);
extern double *path_distance(PATH *p1, PATH *p2); extern Datum path_distance(PG_FUNCTION_ARGS);
extern double *path_length(PATH *path); extern Datum path_length(PG_FUNCTION_ARGS);
extern bool path_isclosed(PATH *path); extern Datum path_isclosed(PG_FUNCTION_ARGS);
extern bool path_isopen(PATH *path); extern Datum path_isopen(PG_FUNCTION_ARGS);
extern int4 path_npoints(PATH *path); extern Datum path_npoints(PG_FUNCTION_ARGS);
extern PATH *path_close(PATH *path); extern Datum path_close(PG_FUNCTION_ARGS);
extern PATH *path_open(PATH *path); extern Datum path_open(PG_FUNCTION_ARGS);
extern PATH *path_add(PATH *p1, PATH *p2); extern Datum path_add(PG_FUNCTION_ARGS);
extern PATH *path_add_pt(PATH *path, Point *point); extern Datum path_add_pt(PG_FUNCTION_ARGS);
extern PATH *path_sub_pt(PATH *path, Point *point); extern Datum path_sub_pt(PG_FUNCTION_ARGS);
extern PATH *path_mul_pt(PATH *path, Point *point); extern Datum path_mul_pt(PG_FUNCTION_ARGS);
extern PATH *path_div_pt(PATH *path, Point *point); extern Datum path_div_pt(PG_FUNCTION_ARGS);
extern Point *path_center(PATH *path); extern Datum path_center(PG_FUNCTION_ARGS);
extern POLYGON *path_poly(PATH *path); extern Datum path_poly(PG_FUNCTION_ARGS);
extern PATH *upgradepath(PATH *path);
extern bool isoldpath(PATH *path);
/* public polygon routines */ /* public polygon routines */
extern POLYGON *poly_in(char *s); extern Datum poly_in(PG_FUNCTION_ARGS);
extern char *poly_out(POLYGON *poly); extern Datum poly_out(PG_FUNCTION_ARGS);
extern bool poly_left(POLYGON *polya, POLYGON *polyb); extern Datum poly_left(PG_FUNCTION_ARGS);
extern bool poly_overleft(POLYGON *polya, POLYGON *polyb); extern Datum poly_overleft(PG_FUNCTION_ARGS);
extern bool poly_right(POLYGON *polya, POLYGON *polyb); extern Datum poly_right(PG_FUNCTION_ARGS);
extern bool poly_overright(POLYGON *polya, POLYGON *polyb); extern Datum poly_overright(PG_FUNCTION_ARGS);
extern bool poly_same(POLYGON *polya, POLYGON *polyb); extern Datum poly_same(PG_FUNCTION_ARGS);
extern bool poly_overlap(POLYGON *polya, POLYGON *polyb); extern Datum poly_overlap(PG_FUNCTION_ARGS);
extern bool poly_contain(POLYGON *polya, POLYGON *polyb); extern Datum poly_contain(PG_FUNCTION_ARGS);
extern bool poly_contained(POLYGON *polya, POLYGON *polyb); extern Datum poly_contained(PG_FUNCTION_ARGS);
extern bool poly_contain_pt(POLYGON *poly, Point *p); extern Datum poly_contain_pt(PG_FUNCTION_ARGS);
extern bool pt_contained_poly(Point *p, POLYGON *poly); extern Datum pt_contained_poly(PG_FUNCTION_ARGS);
extern double *poly_distance(POLYGON *polya, POLYGON *polyb); extern Datum poly_distance(PG_FUNCTION_ARGS);
extern int4 poly_npoints(POLYGON *poly); extern Datum poly_npoints(PG_FUNCTION_ARGS);
extern Point *poly_center(POLYGON *poly); extern Datum poly_center(PG_FUNCTION_ARGS);
extern BOX *poly_box(POLYGON *poly); extern Datum poly_box(PG_FUNCTION_ARGS);
extern PATH *poly_path(POLYGON *poly); extern Datum poly_path(PG_FUNCTION_ARGS);
extern POLYGON *box_poly(BOX *box); extern Datum box_poly(PG_FUNCTION_ARGS);
extern POLYGON *upgradepoly(POLYGON *poly);
extern POLYGON *revertpoly(POLYGON *poly);
/* private polygon routines */
/* public circle routines */ /* public circle routines */
extern CIRCLE *circle_in(char *str); extern CIRCLE *circle_in(char *str);
...@@ -391,18 +385,27 @@ extern double *circle_diameter(CIRCLE *circle); ...@@ -391,18 +385,27 @@ extern double *circle_diameter(CIRCLE *circle);
extern double *circle_radius(CIRCLE *circle); extern double *circle_radius(CIRCLE *circle);
extern double *circle_distance(CIRCLE *circle1, CIRCLE *circle2); extern double *circle_distance(CIRCLE *circle1, CIRCLE *circle2);
extern double *dist_pc(Point *point, CIRCLE *circle); extern double *dist_pc(Point *point, CIRCLE *circle);
extern double *dist_cpoly(CIRCLE *circle, POLYGON *poly); extern Datum dist_cpoly(PG_FUNCTION_ARGS);
extern Point *circle_center(CIRCLE *circle); extern Point *circle_center(CIRCLE *circle);
extern CIRCLE *circle(Point *center, float8 *radius); extern CIRCLE *circle(Point *center, float8 *radius);
extern CIRCLE *box_circle(BOX *box); extern CIRCLE *box_circle(BOX *box);
extern BOX *circle_box(CIRCLE *circle); extern BOX *circle_box(CIRCLE *circle);
extern CIRCLE *poly_circle(POLYGON *poly); extern Datum poly_circle(PG_FUNCTION_ARGS);
extern Datum circle_poly(PG_FUNCTION_ARGS); extern Datum circle_poly(PG_FUNCTION_ARGS);
/* private routines */ /* private routines */
extern double *circle_area(CIRCLE *circle); extern double *circle_area(CIRCLE *circle);
extern double circle_dt(CIRCLE *circle1, CIRCLE *circle2); extern double circle_dt(CIRCLE *circle1, CIRCLE *circle2);
/* support routines for the rtree access method (rtproc.c) */
extern BOX *rt_box_union(BOX *a, BOX *b);
extern BOX *rt_box_inter(BOX *a, BOX *b);
extern void rt_box_size(BOX *a, float *size);
extern void rt_bigbox_size(BOX *a, float *size);
extern Datum rt_poly_size(PG_FUNCTION_ARGS);
extern Datum rt_poly_union(PG_FUNCTION_ARGS);
extern Datum rt_poly_inter(PG_FUNCTION_ARGS);
/* geo_selfuncs.c */ /* geo_selfuncs.c */
extern Datum areasel(PG_FUNCTION_ARGS); extern Datum areasel(PG_FUNCTION_ARGS);
extern Datum areajoinsel(PG_FUNCTION_ARGS); extern Datum areajoinsel(PG_FUNCTION_ARGS);
......
/* /*
* $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.41 2000/07/05 23:12:09 tgl Exp $ * $Header: /cvsroot/pgsql/src/test/regress/regress.c,v 1.42 2000/07/29 18:46:12 tgl Exp $
*/ */
#include <float.h> /* faked on sunos */ #include <float.h> /* faked on sunos */
...@@ -120,7 +120,8 @@ POLYGON *poly; ...@@ -120,7 +120,8 @@ POLYGON *poly;
sprintf(buf, "%c", RDELIM); sprintf(buf, "%c", RDELIM);
strcat(output, buf); strcat(output, buf);
return path_in(output); return DatumGetPathP(DirectFunctionCall1(path_in,
CStringGetDatum(output)));
} }
/* return the point where two paths intersect. Assumes that they do. */ /* return the point where two paths intersect. Assumes that they do. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment