------------------------------------------------------------------------------ -- Licensed to the Apache Software Foundation (ASF) under one -- or more contributor license agreements. See the NOTICE file -- distributed with this work for additional information -- regarding copyright ownership. The ASF licenses this file -- to you under the Apache License, Version 2.0 (the -- "License"); you may not use this file except in compliance -- with the License. You may obtain a copy of the License at -- http://www.apache.org/licenses/LICENSE-2.0 -- Unless required by applicable law or agreed to in writing, -- software distributed under the License is distributed on an -- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -- KIND, either express or implied. See the License for the -- specific language governing permissions and limitations -- under the License. ------------------------------------------------------------------------------ SET client_min_messages to ERROR; \x on CREATE OR REPLACE FUNCTION filter_schema(argstr text, schema_name text) RETURNS text AS $$ if argstr is None: return "NULL" return argstr.replace(schema_name + ".", '') $$ LANGUAGE plpythonu; CREATE OR REPLACE FUNCTION alter_schema(argstr text, schema_name text) RETURNS text AS $$ if argstr is None: return "NULL" return argstr.replace(schema_name + ".", 'schema_madlib.') $$ LANGUAGE plpythonu; CREATE OR REPLACE FUNCTION get_udos(table_name text, schema_name text, type_filter text) RETURNS VOID AS $$ import plpy plpy.execute(""" create table {table_name} AS SELECT * FROM ( SELECT n.nspname AS "Schema", o.oprname AS name, filter_schema(o.oprcode::text, '{schema_name}') AS oprcode, alter_schema(pg_catalog.format_type(o.oprleft, NULL), '{schema_name}') AS oprleft, alter_schema(pg_catalog.format_type(o.oprright, NULL), '{schema_name}') AS oprright, alter_schema(pg_catalog.format_type(o.oprresult, NULL), '{schema_name}') AS rettype FROM pg_catalog.pg_operator o LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace WHERE n.nspname OPERATOR(pg_catalog.~) '^({schema_name})$' ) q WHERE oprleft LIKE 'schema_madlib.{type_filter}' OR oprleft LIKE 'schema_madlib.{type_filter}[]' OR oprright LIKE 'schema_madlib.{type_filter}' OR oprright LIKE 'schema_madlib.{type_filter}[]' OR rettype LIKE 'schema_madlib.{type_filter}' OR rettype LIKE 'schema_madlib.{type_filter}[]' OR '{type_filter}' LIKE 'Full' """.format(table_name=table_name, schema_name=schema_name, type_filter=type_filter)) $$ LANGUAGE plpythonu; DROP TABLE if exists udo_madlib_old_version; DROP TABLE if exists udo_madlib_new_version; SELECT get_udos('udo_madlib_old_version','madlib_old_vers','Full'); SELECT get_udos('udo_madlib_new_version','madlib','Full'); SELECT old1.name AS name , old1.oprright AS oprright, old1.oprleft AS oprleft, old1.rettype AS rettype FROM udo_madlib_old_version AS old1 LEFT JOIN udo_madlib_new_version USING (name, oprcode, oprright, oprleft, rettype) WHERE udo_madlib_new_version.name is NULL ORDER BY old1.name;