From db3af9feb19f39827e916145f88fa5eca3130cb2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 27 Feb 2018 11:11:25 -0500 Subject: [PATCH] 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 --- src/test/regress/expected/triggers.out | 34 --- .../regress/input/create_function_1.source | 5 - .../regress/input/create_function_2.source | 5 - .../regress/output/create_function_1.source | 4 - .../regress/output/create_function_2.source | 4 - src/test/regress/regress.c | 244 +----------------- src/test/regress/sql/triggers.sql | 35 --- 7 files changed, 2 insertions(+), 329 deletions(-) diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index ce8fa211a59..1b99dec27dc 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -119,40 +119,6 @@ SELECT trigger_name, event_manipulation, event_object_schema, event_object_table DROP TABLE pkeys; DROP TABLE fkeys; 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 table tttest ( price_id int4, diff --git a/src/test/regress/input/create_function_1.source b/src/test/regress/input/create_function_1.source index cde78eb1a07..b4479e44f6b 100644 --- a/src/test/regress/input/create_function_1.source +++ b/src/test/regress/input/create_function_1.source @@ -37,11 +37,6 @@ CREATE FUNCTION autoinc () AS '@libdir@/autoinc@DLSUFFIX@' LANGUAGE C; -CREATE FUNCTION funny_dup17 () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; - CREATE FUNCTION ttdummy () RETURNS trigger AS '@libdir@/regress@DLSUFFIX@' diff --git a/src/test/regress/input/create_function_2.source b/src/test/regress/input/create_function_2.source index b167c8ac6d8..9e6d2942ec7 100644 --- a/src/test/regress/input/create_function_2.source +++ b/src/test/regress/input/create_function_2.source @@ -72,11 +72,6 @@ CREATE FUNCTION overpaid(emp) AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; -CREATE FUNCTION boxarea(box) - RETURNS float8 - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; - CREATE FUNCTION interpt_pp(path, path) RETURNS point AS '@libdir@/regress@DLSUFFIX@' diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source index ab601be3759..1d8c170df86 100644 --- a/src/test/regress/output/create_function_1.source +++ b/src/test/regress/output/create_function_1.source @@ -35,10 +35,6 @@ CREATE FUNCTION autoinc () RETURNS trigger AS '@libdir@/autoinc@DLSUFFIX@' LANGUAGE C; -CREATE FUNCTION funny_dup17 () - RETURNS trigger - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C; CREATE FUNCTION ttdummy () RETURNS trigger AS '@libdir@/regress@DLSUFFIX@' diff --git a/src/test/regress/output/create_function_2.source b/src/test/regress/output/create_function_2.source index 8f28bff298a..ac9a7f5cf8d 100644 --- a/src/test/regress/output/create_function_2.source +++ b/src/test/regress/output/create_function_2.source @@ -55,10 +55,6 @@ CREATE FUNCTION overpaid(emp) RETURNS bool AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C STRICT; -CREATE FUNCTION boxarea(box) - RETURNS float8 - AS '@libdir@/regress@DLSUFFIX@' - LANGUAGE C STRICT; CREATE FUNCTION interpt_pp(path, path) RETURNS point AS '@libdir@/regress@DLSUFFIX@' diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 13e72074579..200ce5064fd 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -43,120 +43,11 @@ #define RDELIM ')' #define DELIM ',' -extern PATH *poly2path(POLYGON *poly); -extern void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2); +static void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2); 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. */ PG_FUNCTION_INFO_V1(interpt_pp); @@ -201,7 +92,7 @@ interpt_pp(PG_FUNCTION_ARGS) /* like lseg_construct, but assume space already allocated */ -void +static void regress_lseg_construct(LSEG *lseg, Point *pt1, Point *pt2) { 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_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); 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 static SPIPlanPtr splan = NULL; diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index ae8349ccbfa..b7643826e8f 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -103,41 +103,6 @@ DROP TABLE pkeys; DROP TABLE fkeys; 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 table tttest (