CREATE CAST (raster AS geometry)
WITH FUNCTION st_convexhull(raster) AS ASSIGNMENT;
--- new TYPEs
-DROP FUNCTION IF EXISTS _checktype_drop_create(name, name[], name[]);
-CREATE OR REPLACE FUNCTION _checktype_drop_create(
- reftype name,
- refatt name[],
- refatttype name[]
-)
- RETURNS void AS $$
- DECLARE
- att name[];
- atttype name[];
-
- dodrop boolean DEFAULT FALSE;
- docreate boolean DEFAULT FALSE;
-
- cnt int;
- i int;
- found boolean;
- typeargtext text DEFAULT '';
- BEGIN
- cnt := array_length(refatt, 1);
- EXECUTE 'SELECT array_agg(a.attname), array_agg(att.typname) ' ||
- 'FROM pg_type t ' ||
- 'JOIN pg_class c ' ||
- 'ON t.typrelid = c.oid ' ||
- 'JOIN pg_attribute a ' ||
- 'ON a.attrelid = c.oid ' ||
- 'JOIN pg_type att ' ||
- 'ON a.atttypid = att.oid ' ||
- 'WHERE t.typname = ' || quote_literal(reftype)
- INTO att, atttype;
-
- -- check specifics of TYPE
- IF att IS NOT NULL THEN
- FOR i in 1..cnt LOOP
- SELECT refatt[i] = ANY(att) INTO found;
-
- IF NOT found THEN
- docreate := TRUE;
- EXIT;
- END IF;
-
- IF refatttype[i] != atttype[i] THEN
- dodrop := TRUE;
- docreate := TRUE;
- END IF;
- END LOOP;
- ELSE
- docreate := TRUE;
- END IF;
-
- IF dodrop THEN
- EXECUTE 'DROP TYPE IF EXISTS ' || reftype || ' CASCADE';
- END IF;
-
- IF docreate THEN
- FOR i in 1..cnt LOOP
- typeargtext := typeargtext || quote_ident(refatt[i]) || ' ' || refatttype[i];
- IF i < cnt THEN
- typeargtext := typeargtext || ',';
- END IF;
- END LOOP;
- EXECUTE 'CREATE TYPE ' || quote_ident(reftype) || ' AS (' || typeargtext || ')';
- END IF;
- END;
- $$ LANGUAGE 'plpgsql' VOLATILE;
-
-SELECT _checktype_drop_create(
- 'addbandarg',
- ARRAY['index', 'pixeltype', 'initialvalue', 'nodataval']::name[],
- ARRAY['int4', 'text', 'float8', 'float8']::name[]
-);
-SELECT _checktype_drop_create(
- 'agg_samealignment',
- ARRAY['refraster', 'aligned']::name[],
- ARRAY['raster', 'bool']::name[]
+-- new TYPE
+ALTER TYPE addbandarg RENAME TO old_addbandarg;
+DROP FUNCTION IF EXISTS st_addband(raster, old_addbandarg[]);
+DROP TYPE IF EXISTS old_addbandarg;
+CREATE TYPE addbandarg AS (
+ index int,
+ pixeltype text,
+ initialvalue float8,
+ nodataval float8
);
-DROP FUNCTION _checktype_drop_create(name, name[], name[]);
+-- new TYPE
+ALTER TYPE agg_samealignment RENAME TO old_agg_samealignment;
+DROP AGGREGATE IF EXISTS st_samealignment(raster);
+DROP FUNCTION IF EXISTS _st_samealignment_transfn(old_agg_samealignment, raster);
+DROP FUNCTION IF EXISTS _st_samealignment_finalfn(old_agg_samealignment);
+DROP TYPE IF EXISTS old_agg_samealignment;
+CREATE TYPE agg_samealignment AS (
+ refraster raster,
+ aligned boolean
+);