mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Remove unused functions in regress.c.
This patch removes five functions that presumably were once used in the regression tests, but haven't been so used in many years. Nonetheless we've been wasting maintenance effort on them (e.g., by converting them to V1 function protocol). I see no reason to think that reviving them would add any useful test coverage, so drop 'em. In passing, mark regress_lseg_construct static, since it's not called from outside this file. Discussion: https://postgr.es/m/29322.1519701006@sss.pgh.pa.us
This commit is contained in:
parent
364de25665
commit
db3af9feb1
@ -119,40 +119,6 @@ SELECT trigger_name, event_manipulation, event_object_schema, event_object_table
|
|||||||
DROP TABLE pkeys;
|
DROP TABLE pkeys;
|
||||||
DROP TABLE fkeys;
|
DROP TABLE fkeys;
|
||||||
DROP TABLE fkeys2;
|
DROP TABLE fkeys2;
|
||||||
-- -- I've disabled the funny_dup17 test because the new semantics
|
|
||||||
-- -- of AFTER ROW triggers, which get now fired at the end of a
|
|
||||||
-- -- query always, cause funny_dup17 to enter an endless loop.
|
|
||||||
-- --
|
|
||||||
-- -- Jan
|
|
||||||
--
|
|
||||||
-- create table dup17 (x int4);
|
|
||||||
--
|
|
||||||
-- create trigger dup17_before
|
|
||||||
-- before insert on dup17
|
|
||||||
-- for each row
|
|
||||||
-- execute procedure
|
|
||||||
-- funny_dup17 ()
|
|
||||||
-- ;
|
|
||||||
--
|
|
||||||
-- insert into dup17 values (17);
|
|
||||||
-- select count(*) from dup17;
|
|
||||||
-- insert into dup17 values (17);
|
|
||||||
-- select count(*) from dup17;
|
|
||||||
--
|
|
||||||
-- drop trigger dup17_before on dup17;
|
|
||||||
--
|
|
||||||
-- create trigger dup17_after
|
|
||||||
-- after insert on dup17
|
|
||||||
-- for each row
|
|
||||||
-- execute procedure
|
|
||||||
-- funny_dup17 ()
|
|
||||||
-- ;
|
|
||||||
-- insert into dup17 values (13);
|
|
||||||
-- select count(*) from dup17 where x = 13;
|
|
||||||
-- insert into dup17 values (13);
|
|
||||||
-- select count(*) from dup17 where x = 13;
|
|
||||||
--
|
|
||||||
-- DROP TABLE dup17;
|
|
||||||
create sequence ttdummy_seq increment 10 start 0 minvalue 0;
|
create sequence ttdummy_seq increment 10 start 0 minvalue 0;
|
||||||
create table tttest (
|
create table tttest (
|
||||||
price_id int4,
|
price_id int4,
|
||||||
|
@ -37,11 +37,6 @@ CREATE FUNCTION autoinc ()
|
|||||||
AS '@libdir@/autoinc@DLSUFFIX@'
|
AS '@libdir@/autoinc@DLSUFFIX@'
|
||||||
LANGUAGE C;
|
LANGUAGE C;
|
||||||
|
|
||||||
CREATE FUNCTION funny_dup17 ()
|
|
||||||
RETURNS trigger
|
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
|
||||||
LANGUAGE C;
|
|
||||||
|
|
||||||
CREATE FUNCTION ttdummy ()
|
CREATE FUNCTION ttdummy ()
|
||||||
RETURNS trigger
|
RETURNS trigger
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
|
@ -72,11 +72,6 @@ CREATE FUNCTION overpaid(emp)
|
|||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
LANGUAGE C STRICT;
|
LANGUAGE C STRICT;
|
||||||
|
|
||||||
CREATE FUNCTION boxarea(box)
|
|
||||||
RETURNS float8
|
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
|
||||||
LANGUAGE C STRICT;
|
|
||||||
|
|
||||||
CREATE FUNCTION interpt_pp(path, path)
|
CREATE FUNCTION interpt_pp(path, path)
|
||||||
RETURNS point
|
RETURNS point
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
|
@ -35,10 +35,6 @@ CREATE FUNCTION autoinc ()
|
|||||||
RETURNS trigger
|
RETURNS trigger
|
||||||
AS '@libdir@/autoinc@DLSUFFIX@'
|
AS '@libdir@/autoinc@DLSUFFIX@'
|
||||||
LANGUAGE C;
|
LANGUAGE C;
|
||||||
CREATE FUNCTION funny_dup17 ()
|
|
||||||
RETURNS trigger
|
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
|
||||||
LANGUAGE C;
|
|
||||||
CREATE FUNCTION ttdummy ()
|
CREATE FUNCTION ttdummy ()
|
||||||
RETURNS trigger
|
RETURNS trigger
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
|
@ -55,10 +55,6 @@ CREATE FUNCTION overpaid(emp)
|
|||||||
RETURNS bool
|
RETURNS bool
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
LANGUAGE C STRICT;
|
LANGUAGE C STRICT;
|
||||||
CREATE FUNCTION boxarea(box)
|
|
||||||
RETURNS float8
|
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
|
||||||
LANGUAGE C STRICT;
|
|
||||||
CREATE FUNCTION interpt_pp(path, path)
|
CREATE FUNCTION interpt_pp(path, path)
|
||||||
RETURNS point
|
RETURNS point
|
||||||
AS '@libdir@/regress@DLSUFFIX@'
|
AS '@libdir@/regress@DLSUFFIX@'
|
||||||
|
@ -43,120 +43,11 @@
|
|||||||
#define RDELIM ')'
|
#define RDELIM ')'
|
||||||
#define DELIM ','
|
#define DELIM ','
|
||||||
|
|
||||||
extern PATH *poly2path(POLYGON *poly);
|
static void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2);
|
||||||
extern void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2);
|
|
||||||
|
|
||||||
PG_MODULE_MAGIC;
|
PG_MODULE_MAGIC;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Distance from a point to a path
|
|
||||||
*/
|
|
||||||
PG_FUNCTION_INFO_V1(regress_dist_ptpath);
|
|
||||||
|
|
||||||
Datum
|
|
||||||
regress_dist_ptpath(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
Point *pt = PG_GETARG_POINT_P(0);
|
|
||||||
PATH *path = PG_GETARG_PATH_P(1);
|
|
||||||
float8 result = 0.0; /* keep compiler quiet */
|
|
||||||
float8 tmp;
|
|
||||||
int i;
|
|
||||||
LSEG lseg;
|
|
||||||
|
|
||||||
switch (path->npts)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
case 1:
|
|
||||||
result = point_dt(pt, &path->p[0]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
|
|
||||||
/*
|
|
||||||
* the distance from a point to a path is the smallest distance
|
|
||||||
* from the point to any of its constituent segments.
|
|
||||||
*/
|
|
||||||
Assert(path->npts > 1);
|
|
||||||
for (i = 0; i < path->npts - 1; ++i)
|
|
||||||
{
|
|
||||||
regress_lseg_construct(&lseg, &path->p[i], &path->p[i + 1]);
|
|
||||||
tmp = DatumGetFloat8(DirectFunctionCall2(dist_ps,
|
|
||||||
PointPGetDatum(pt),
|
|
||||||
LsegPGetDatum(&lseg)));
|
|
||||||
if (i == 0 || tmp < result)
|
|
||||||
result = tmp;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PG_RETURN_FLOAT8(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* this essentially does a cartesian product of the lsegs in the
|
|
||||||
* two paths, and finds the min distance between any two lsegs
|
|
||||||
*/
|
|
||||||
PG_FUNCTION_INFO_V1(regress_path_dist);
|
|
||||||
|
|
||||||
Datum
|
|
||||||
regress_path_dist(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
PATH *p1 = PG_GETARG_PATH_P(0);
|
|
||||||
PATH *p2 = PG_GETARG_PATH_P(1);
|
|
||||||
bool have_min = false;
|
|
||||||
float8 min = 0.0; /* initialize to keep compiler quiet */
|
|
||||||
float8 tmp;
|
|
||||||
int i,
|
|
||||||
j;
|
|
||||||
LSEG seg1,
|
|
||||||
seg2;
|
|
||||||
|
|
||||||
for (i = 0; i < p1->npts - 1; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < p2->npts - 1; j++)
|
|
||||||
{
|
|
||||||
regress_lseg_construct(&seg1, &p1->p[i], &p1->p[i + 1]);
|
|
||||||
regress_lseg_construct(&seg2, &p2->p[j], &p2->p[j + 1]);
|
|
||||||
|
|
||||||
tmp = DatumGetFloat8(DirectFunctionCall2(lseg_distance,
|
|
||||||
LsegPGetDatum(&seg1),
|
|
||||||
LsegPGetDatum(&seg2)));
|
|
||||||
if (!have_min || tmp < min)
|
|
||||||
{
|
|
||||||
min = tmp;
|
|
||||||
have_min = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!have_min)
|
|
||||||
PG_RETURN_NULL();
|
|
||||||
|
|
||||||
PG_RETURN_FLOAT8(min);
|
|
||||||
}
|
|
||||||
|
|
||||||
PATH *
|
|
||||||
poly2path(POLYGON *poly)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *output = (char *) palloc(2 * (P_MAXDIG + 1) * poly->npts + 64);
|
|
||||||
char buf[2 * (P_MAXDIG) + 20];
|
|
||||||
|
|
||||||
sprintf(output, "(1, %*d", P_MAXDIG, poly->npts);
|
|
||||||
|
|
||||||
for (i = 0; i < poly->npts; i++)
|
|
||||||
{
|
|
||||||
snprintf(buf, sizeof(buf), ",%*g,%*g",
|
|
||||||
P_MAXDIG, poly->p[i].x, P_MAXDIG, poly->p[i].y);
|
|
||||||
strcat(output, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%c", RDELIM);
|
|
||||||
strcat(output, buf);
|
|
||||||
return DatumGetPathP(DirectFunctionCall1(path_in,
|
|
||||||
CStringGetDatum(output)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* return the point where two paths intersect, or NULL if no intersection. */
|
/* return the point where two paths intersect, or NULL if no intersection. */
|
||||||
PG_FUNCTION_INFO_V1(interpt_pp);
|
PG_FUNCTION_INFO_V1(interpt_pp);
|
||||||
|
|
||||||
@ -201,7 +92,7 @@ interpt_pp(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
|
|
||||||
/* like lseg_construct, but assume space already allocated */
|
/* like lseg_construct, but assume space already allocated */
|
||||||
void
|
static void
|
||||||
regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2)
|
regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2)
|
||||||
{
|
{
|
||||||
lseg->p[0].x = pt1->x;
|
lseg->p[0].x = pt1->x;
|
||||||
@ -291,20 +182,6 @@ pt_in_widget(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_BOOL(point_dt(point, &widget->center) < widget->radius);
|
PG_RETURN_BOOL(point_dt(point, &widget->center) < widget->radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(boxarea);
|
|
||||||
|
|
||||||
Datum
|
|
||||||
boxarea(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
BOX *box = PG_GETARG_BOX_P(0);
|
|
||||||
double width,
|
|
||||||
height;
|
|
||||||
|
|
||||||
width = Abs(box->high.x - box->low.x);
|
|
||||||
height = Abs(box->high.y - box->low.y);
|
|
||||||
PG_RETURN_FLOAT8(width * height);
|
|
||||||
}
|
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(reverse_name);
|
PG_FUNCTION_INFO_V1(reverse_name);
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
@ -327,123 +204,6 @@ reverse_name(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TransactionId fd17b_xid = InvalidTransactionId;
|
|
||||||
static TransactionId fd17a_xid = InvalidTransactionId;
|
|
||||||
static int fd17b_level = 0;
|
|
||||||
static int fd17a_level = 0;
|
|
||||||
static bool fd17b_recursion = true;
|
|
||||||
static bool fd17a_recursion = true;
|
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(funny_dup17);
|
|
||||||
|
|
||||||
Datum
|
|
||||||
funny_dup17(PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
TriggerData *trigdata = (TriggerData *) fcinfo->context;
|
|
||||||
TransactionId *xid;
|
|
||||||
int *level;
|
|
||||||
bool *recursion;
|
|
||||||
Relation rel;
|
|
||||||
TupleDesc tupdesc;
|
|
||||||
HeapTuple tuple;
|
|
||||||
char *query,
|
|
||||||
*fieldval,
|
|
||||||
*fieldtype;
|
|
||||||
char *when;
|
|
||||||
uint64 inserted;
|
|
||||||
int selected = 0;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!CALLED_AS_TRIGGER(fcinfo))
|
|
||||||
elog(ERROR, "funny_dup17: not fired by trigger manager");
|
|
||||||
|
|
||||||
tuple = trigdata->tg_trigtuple;
|
|
||||||
rel = trigdata->tg_relation;
|
|
||||||
tupdesc = rel->rd_att;
|
|
||||||
if (TRIGGER_FIRED_BEFORE(trigdata->tg_event))
|
|
||||||
{
|
|
||||||
xid = &fd17b_xid;
|
|
||||||
level = &fd17b_level;
|
|
||||||
recursion = &fd17b_recursion;
|
|
||||||
when = "BEFORE";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xid = &fd17a_xid;
|
|
||||||
level = &fd17a_level;
|
|
||||||
recursion = &fd17a_recursion;
|
|
||||||
when = "AFTER ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TransactionIdIsCurrentTransactionId(*xid))
|
|
||||||
{
|
|
||||||
*xid = GetCurrentTransactionId();
|
|
||||||
*level = 0;
|
|
||||||
*recursion = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*level == 17)
|
|
||||||
{
|
|
||||||
*recursion = false;
|
|
||||||
return PointerGetDatum(tuple);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(*recursion))
|
|
||||||
return PointerGetDatum(tuple);
|
|
||||||
|
|
||||||
(*level)++;
|
|
||||||
|
|
||||||
SPI_connect();
|
|
||||||
|
|
||||||
fieldval = SPI_getvalue(tuple, tupdesc, 1);
|
|
||||||
fieldtype = SPI_gettype(tupdesc, 1);
|
|
||||||
|
|
||||||
query = (char *) palloc(100 + NAMEDATALEN * 3 +
|
|
||||||
strlen(fieldval) + strlen(fieldtype));
|
|
||||||
|
|
||||||
sprintf(query, "insert into %s select * from %s where %s = '%s'::%s",
|
|
||||||
SPI_getrelname(rel), SPI_getrelname(rel),
|
|
||||||
SPI_fname(tupdesc, 1),
|
|
||||||
fieldval, fieldtype);
|
|
||||||
|
|
||||||
if ((ret = SPI_exec(query, 0)) < 0)
|
|
||||||
elog(ERROR, "funny_dup17 (fired %s) on level %3d: SPI_exec (insert ...) returned %d",
|
|
||||||
when, *level, ret);
|
|
||||||
|
|
||||||
inserted = SPI_processed;
|
|
||||||
|
|
||||||
sprintf(query, "select count (*) from %s where %s = '%s'::%s",
|
|
||||||
SPI_getrelname(rel),
|
|
||||||
SPI_fname(tupdesc, 1),
|
|
||||||
fieldval, fieldtype);
|
|
||||||
|
|
||||||
if ((ret = SPI_exec(query, 0)) < 0)
|
|
||||||
elog(ERROR, "funny_dup17 (fired %s) on level %3d: SPI_exec (select ...) returned %d",
|
|
||||||
when, *level, ret);
|
|
||||||
|
|
||||||
if (SPI_processed > 0)
|
|
||||||
{
|
|
||||||
selected = DatumGetInt32(DirectFunctionCall1(int4in,
|
|
||||||
CStringGetDatum(SPI_getvalue(
|
|
||||||
SPI_tuptable->vals[0],
|
|
||||||
SPI_tuptable->tupdesc,
|
|
||||||
1
|
|
||||||
))));
|
|
||||||
}
|
|
||||||
|
|
||||||
elog(DEBUG4, "funny_dup17 (fired %s) on level %3d: " UINT64_FORMAT "/%d tuples inserted/selected",
|
|
||||||
when, *level, inserted, selected);
|
|
||||||
|
|
||||||
SPI_finish();
|
|
||||||
|
|
||||||
(*level)--;
|
|
||||||
|
|
||||||
if (*level == 0)
|
|
||||||
*xid = InvalidTransactionId;
|
|
||||||
|
|
||||||
return PointerGetDatum(tuple);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TTDUMMY_INFINITY 999999
|
#define TTDUMMY_INFINITY 999999
|
||||||
|
|
||||||
static SPIPlanPtr splan = NULL;
|
static SPIPlanPtr splan = NULL;
|
||||||
|
@ -103,41 +103,6 @@ DROP TABLE pkeys;
|
|||||||
DROP TABLE fkeys;
|
DROP TABLE fkeys;
|
||||||
DROP TABLE fkeys2;
|
DROP TABLE fkeys2;
|
||||||
|
|
||||||
-- -- I've disabled the funny_dup17 test because the new semantics
|
|
||||||
-- -- of AFTER ROW triggers, which get now fired at the end of a
|
|
||||||
-- -- query always, cause funny_dup17 to enter an endless loop.
|
|
||||||
-- --
|
|
||||||
-- -- Jan
|
|
||||||
--
|
|
||||||
-- create table dup17 (x int4);
|
|
||||||
--
|
|
||||||
-- create trigger dup17_before
|
|
||||||
-- before insert on dup17
|
|
||||||
-- for each row
|
|
||||||
-- execute procedure
|
|
||||||
-- funny_dup17 ()
|
|
||||||
-- ;
|
|
||||||
--
|
|
||||||
-- insert into dup17 values (17);
|
|
||||||
-- select count(*) from dup17;
|
|
||||||
-- insert into dup17 values (17);
|
|
||||||
-- select count(*) from dup17;
|
|
||||||
--
|
|
||||||
-- drop trigger dup17_before on dup17;
|
|
||||||
--
|
|
||||||
-- create trigger dup17_after
|
|
||||||
-- after insert on dup17
|
|
||||||
-- for each row
|
|
||||||
-- execute procedure
|
|
||||||
-- funny_dup17 ()
|
|
||||||
-- ;
|
|
||||||
-- insert into dup17 values (13);
|
|
||||||
-- select count(*) from dup17 where x = 13;
|
|
||||||
-- insert into dup17 values (13);
|
|
||||||
-- select count(*) from dup17 where x = 13;
|
|
||||||
--
|
|
||||||
-- DROP TABLE dup17;
|
|
||||||
|
|
||||||
create sequence ttdummy_seq increment 10 start 0 minvalue 0;
|
create sequence ttdummy_seq increment 10 start 0 minvalue 0;
|
||||||
|
|
||||||
create table tttest (
|
create table tttest (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user