Fix DDL command collection for TRANSFORM
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 26 Jun 2015 21:17:54 +0000 (18:17 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 26 Jun 2015 21:17:54 +0000 (18:17 -0300)
Commit b488c580ae, which added the DDL command collection feature,
neglected to update the code that commit cac76582053e had previously
added two weeks earlier for the TRANSFORM feature.

Reported by Michael Paquier.

src/backend/commands/functioncmds.c
src/backend/tcop/utility.c
src/include/commands/defrem.h
src/test/modules/test_ddl_deparse/Makefile
src/test/modules/test_ddl_deparse/expected/create_transform.out [new file with mode: 0644]
src/test/modules/test_ddl_deparse/sql/create_transform.sql [new file with mode: 0644]

index 4accf767bbf03555dcfee673fc39a480ea5acd2c..dbbb2d3f88ab9aceebe9e0fd6ea3995cc4f427fd 100644 (file)
@@ -1740,7 +1740,7 @@ check_transform_function(Form_pg_proc procstruct)
 /*
  * CREATE TRANSFORM
  */
-Oid
+ObjectAddress
 CreateTransform(CreateTransformStmt *stmt)
 {
    Oid         typeid;
@@ -1938,7 +1938,7 @@ CreateTransform(CreateTransformStmt *stmt)
 
    heap_close(relation, RowExclusiveLock);
 
-   return transformid;
+   return myself;
 }
 
 
index 7db9f96fdf717ce1f26394950e4518f685a3ca7b..0dabcc130e013d779e947fb69b55fae21daf6776 100644 (file)
@@ -1438,7 +1438,7 @@ ProcessUtilitySlow(Node *parsetree,
                break;
 
            case T_CreateTransformStmt:
-               CreateTransform((CreateTransformStmt *) parsetree);
+               address = CreateTransform((CreateTransformStmt *) parsetree);
                break;
 
            case T_AlterOpFamilyStmt:
index dcb6c082c5271485c382053ce97e93168bce3b8f..9b81c16d8239107c7b7aa40ec210136edbef9feb 100644 (file)
@@ -51,7 +51,7 @@ extern void SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType);
 extern ObjectAddress AlterFunction(AlterFunctionStmt *stmt);
 extern ObjectAddress CreateCast(CreateCastStmt *stmt);
 extern void DropCastById(Oid castOid);
-extern Oid CreateTransform(CreateTransformStmt *stmt);
+extern ObjectAddress CreateTransform(CreateTransformStmt *stmt);
 extern void DropTransformById(Oid transformOid);
 extern void IsThereFunctionInNamespace(const char *proname, int pronargs,
                           oidvector *proargtypes, Oid nspOid);
index 13b985a296364733240cffd8e95287b448947016..8ea6f39afd2ca3d42f5a3617ea65901dccf4f4b3 100644 (file)
@@ -15,6 +15,7 @@ REGRESS = test_ddl_deparse \
    create_domain \
    create_sequence_1 \
    create_table \
+   create_transform \
    alter_table \
    create_view \
    create_trigger \
diff --git a/src/test/modules/test_ddl_deparse/expected/create_transform.out b/src/test/modules/test_ddl_deparse/expected/create_transform.out
new file mode 100644 (file)
index 0000000..0d1cc36
--- /dev/null
@@ -0,0 +1,13 @@
+--
+-- CREATE_TRANSFORM
+--
+-- Create a dummy transform
+-- The function FROM SQL should have internal as single argument as well
+-- as return type. The function TO SQL should have as single argument
+-- internal and as return argument the datatype of the transform done.
+-- pl/plpgsql does not authorize the use of internal as data type.
+CREATE TRANSFORM FOR int LANGUAGE SQL (
+    FROM SQL WITH FUNCTION varchar_transform(internal),
+    TO SQL WITH FUNCTION int4recv(internal));
+NOTICE:  DDL test: type simple, tag CREATE TRANSFORM
+DROP TRANSFORM FOR int LANGUAGE SQL;
diff --git a/src/test/modules/test_ddl_deparse/sql/create_transform.sql b/src/test/modules/test_ddl_deparse/sql/create_transform.sql
new file mode 100644 (file)
index 0000000..0968702
--- /dev/null
@@ -0,0 +1,14 @@
+--
+-- CREATE_TRANSFORM
+--
+
+-- Create a dummy transform
+-- The function FROM SQL should have internal as single argument as well
+-- as return type. The function TO SQL should have as single argument
+-- internal and as return argument the datatype of the transform done.
+-- pl/plpgsql does not authorize the use of internal as data type.
+CREATE TRANSFORM FOR int LANGUAGE SQL (
+    FROM SQL WITH FUNCTION varchar_transform(internal),
+    TO SQL WITH FUNCTION int4recv(internal));
+
+DROP TRANSFORM FOR int LANGUAGE SQL;