/**********************************************************************
 *
 * PostGIS - Spatial Types for PostgreSQL
 * http://postgis.net
 *
 * PostGIS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * PostGIS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with PostGIS.  If not, see <http://www.gnu.org/licenses/>.
 *
 **********************************************************************
 *
 * Copyright (C) 2018-2020 Regina Obe <lr@pcorp.us>
 *
 **********************************************************************/
/******************************************************************************
 * This file is to hold functions we no longer use,
 * but we need to keep because they were used at one time behind SQL API functions.
 * This is to ease pg_upgrade upgrades
 *
 * All functions in this file should throw an error telling the user to upgrade
 * the install
 *
 *****************************************************************************/

#include "postgres.h"
#include "utils/builtins.h"
#include "../postgis_config.h"

#define POSTGIS_DEPRECATE(version, funcname) \
	Datum funcname(PG_FUNCTION_ARGS); \
	PG_FUNCTION_INFO_V1(funcname); \
	Datum funcname(PG_FUNCTION_ARGS) \
	{ \
		ereport(ERROR, (\
			errcode(ERRCODE_FEATURE_NOT_SUPPORTED), \
			errmsg("A stored procedure tried to use deprecated C function '%s'", \
			       __func__), \
			errdetail("Library function '%s' was deprecated in PostGIS %s", \
			          __func__, version), \
			errhint("Consider running: SELECT postgis_extensions_upgrade()") \
		)); \
		PG_RETURN_POINTER(NULL); \
	}

POSTGIS_DEPRECATE("2.2.0", LWGEOMFromWKB)
POSTGIS_DEPRECATE("2.5.0", pgis_abs_in)
POSTGIS_DEPRECATE("2.5.0", pgis_abs_out)
POSTGIS_DEPRECATE("3.0.0", area)
POSTGIS_DEPRECATE("3.0.0", LWGEOM_area_polygon)
POSTGIS_DEPRECATE("3.0.0", distance)
POSTGIS_DEPRECATE("3.0.0", LWGEOM_mindistance2d)
POSTGIS_DEPRECATE("3.0.0", geomunion)
POSTGIS_DEPRECATE("3.0.0", geos_geomunion)
POSTGIS_DEPRECATE("3.0.0", intersection)
POSTGIS_DEPRECATE("3.0.0", geos_intersection)
POSTGIS_DEPRECATE("3.0.0", difference)
POSTGIS_DEPRECATE("3.0.0", geos_difference)
POSTGIS_DEPRECATE("3.0.0", geos_intersects)
POSTGIS_DEPRECATE("3.0.0", sfcgal_intersects)
POSTGIS_DEPRECATE("3.0.0", intersects3d)
POSTGIS_DEPRECATE("3.0.0", intersects3d_dwithin)
POSTGIS_DEPRECATE("3.0.0", sfcgal_intersects3d)
POSTGIS_DEPRECATE("3.0.0", distance3d)
POSTGIS_DEPRECATE("3.0.0", sfcgal_distance3d)
POSTGIS_DEPRECATE("3.0.0", LWGEOM_mindistance3d)
POSTGIS_DEPRECATE("3.0.0", intersects)
POSTGIS_DEPRECATE("3.0.0", pgis_geometry_accum_finalfn)
POSTGIS_DEPRECATE("3.0.0", postgis_autocache_bbox)
POSTGIS_DEPRECATE("2.0.0", postgis_uses_stats)

/**Start: SFCGAL functions moved to postgis_sfcgal lib, to ease pg_upgrade **/
/**: TODO these can be taken out in a later release once PostGIS 3.0 is EOLd **/
POSTGIS_DEPRECATE("3.1.0", sfcgal_from_ewkt)
POSTGIS_DEPRECATE("3.1.0", sfcgal_area3D)
POSTGIS_DEPRECATE("3.1.0", sfcgal_intersection3D)
POSTGIS_DEPRECATE("3.1.0", sfcgal_difference3D)
POSTGIS_DEPRECATE("3.1.0", sfcgal_union3D)
POSTGIS_DEPRECATE("3.1.0", sfcgal_volume)
POSTGIS_DEPRECATE("3.1.0", sfcgal_extrude)
POSTGIS_DEPRECATE("3.1.0", sfcgal_straight_skeleton)
POSTGIS_DEPRECATE("3.1.0", sfcgal_approximate_medial_axis)
POSTGIS_DEPRECATE("3.1.0", sfcgal_is_planar)
POSTGIS_DEPRECATE("3.1.0", sfcgal_orientation)
POSTGIS_DEPRECATE("3.1.0", sfcgal_force_lhr)
POSTGIS_DEPRECATE("3.1.0", ST_ConstrainedDelaunayTriangles)
POSTGIS_DEPRECATE("3.1.0", sfcgal_tesselate)
POSTGIS_DEPRECATE("3.1.0", sfcgal_minkowski_sum)
POSTGIS_DEPRECATE("3.1.0", sfcgal_make_solid)
POSTGIS_DEPRECATE("3.1.0", sfcgal_is_solid)
POSTGIS_DEPRECATE("3.1.0", postgis_sfcgal_noop)
/**End: SFCGAL functions moved to postgis_sfcgal lib, to ease pg_upgrade **/

POSTGIS_DEPRECATE("3.1.0", LWGEOM_locate_between_m)
POSTGIS_DEPRECATE("3.1.0", postgis_svn_version)
POSTGIS_DEPRECATE("3.1.0", symdifference)
POSTGIS_DEPRECATE("3.3.0", pgis_geometry_union_finalfn)

/**START: Removal of transactin lock feature **/
POSTGIS_DEPRECATE("3.5.0", check_authorization)
POSTGIS_DEPRECATE("3.5.0", getTransactionID)
/**End: Remoal of transaction lock feature */
