Github user orhankislal commented on a diff in the pull request:

    https://github.com/apache/madlib/pull/337#discussion_r232282360
  
    --- Diff: src/madpack/diff_udo.sql ---
    @@ -0,0 +1,81 @@
    
+------------------------------------------------------------------------------
    +-- 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})$'
    --- End diff --
    
    I use the `\do madlib.*` command of `psql` as a basis. The corresponding 
query (you can get this if you start with `psql -E`) uses this particular 
phrase to get all of the operators of a particular schema. 
    Basically, this regex looks at the schema name(n.nspname) and filters that 
don't start (^) and end ($) with madlib schema name. 


---

Reply via email to