setup
CREATE TABLE t(
  a INT PRIMARY KEY,
  b INT,
  C INT,
  INDEX t_idx_b(b),
  INDEX t_idx_c(c)
);
CREATE SEQUENCE sq1;
CREATE VIEW v AS SELECT a FROM t;
CREATE TYPE notmyworkday AS ENUM ('Monday', 'Tuesday');
----

ops
CREATE FUNCTION f(a notmyworkday) RETURNS INT VOLATILE LANGUAGE SQL AS $$
  SELECT a FROM t;
  SELECT b FROM t@t_idx_b;
  SELECT c FROM t@t_idx_c;
  SELECT a FROM v;
  SELECT 'Monday'::notmyworkday;
  SELECT nextval('sq1');
$$;
----
StatementPhase stage 1 of 1 with 12 MutationType ops
  transitions:
    [[Function:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[SchemaChild:{DescID: 109, ReferencedDescID: 101}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionName:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionVolatility:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[Owner:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: admin}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: public}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: root}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionBody:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
  ops:
    *scop.CreateFunctionDescriptor
      Function:
        FunctionID: 109
        Params:
        - name: a
          class:
            class: 0
          type:
            type: |
              family: EnumFamily
              width: 0
              precision: 0
              locale: ""
              visible_type: 0
              oid: 100107
              time_precision_is_set: false
              udt_metadata: <
                array_type_oid: 100108
              >
            closedtypeids:
            - 107
            - 108
            typename: public.notmyworkday
          defaultexpr: ""
        ReturnType:
          Type:
            family: IntFamily
            oid: 20
            width: 64
          TypeName: INT8
    *scop.SetFunctionName
      FunctionID: 109
      Name: f
    *scop.SetFunctionVolatility
      FunctionID: 109
      Volatility: 1
    *scop.UpdateOwner
      Owner:
        DescriptorID: 109
        Owner: root
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 2
        UserName: admin
        WithGrantOption: 2
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 1048576
        UserName: public
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 2
        UserName: root
        WithGrantOption: 2
    *scop.SetFunctionBody
      Body:
        Body: |-
          SELECT a FROM t;
          SELECT b FROM t@t_idx_b;
          SELECT c FROM t@t_idx_c;
          SELECT a FROM v;
          SELECT b'@':::@100107;
          SELECT nextval(105:::REGCLASS);
        FunctionID: 109
        Lang:
          Lang: 1
        UsesSequenceIDs:
        - 105
        UsesTables:
        - tableid: 104
          columnids:
          - 1
          indexid: 0
        - tableid: 104
          columnids:
          - 2
          indexid: 2
        - tableid: 104
          columnids:
          - 3
          indexid: 3
        UsesTypeIDs:
        - 107
        - 108
        UsesViews:
        - viewid: 106
          columnids:
          - 1
    *scop.UpdateFunctionTypeReferences
      FunctionID: 109
      TypeIDs:
      - 107
      - 108
    *scop.UpdateFunctionRelationReferences
      FunctionID: 109
      SequenceIDs:
      - 105
      TableReferences:
      - tableid: 104
        columnids:
        - 1
        indexid: 0
      - tableid: 104
        columnids:
        - 2
        indexid: 2
      - tableid: 104
        columnids:
        - 3
        indexid: 3
      ViewReferences:
      - viewid: 106
        columnids:
        - 1
    *scop.SetObjectParentID
      ObjParent:
        ChildObjectID: 109
        SchemaID: 101
    *scop.MarkDescriptorAsPublic
      DescriptorID: 109
PreCommitPhase stage 1 of 2 with 1 MutationType op
  transitions:
    [[Function:{DescID: 109}, PUBLIC], PUBLIC] -> ABSENT
    [[SchemaChild:{DescID: 109, ReferencedDescID: 101}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionName:{DescID: 109}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionVolatility:{DescID: 109}, PUBLIC], PUBLIC] -> ABSENT
    [[Owner:{DescID: 109}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 109, Name: admin}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 109, Name: public}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 109, Name: root}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionBody:{DescID: 109}, PUBLIC], PUBLIC] -> ABSENT
  ops:
    *scop.UndoAllInTxnImmediateMutationOpSideEffects
      {}
PreCommitPhase stage 2 of 2 with 12 MutationType ops
  transitions:
    [[Function:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[SchemaChild:{DescID: 109, ReferencedDescID: 101}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionName:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionVolatility:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[Owner:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: admin}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: public}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 109, Name: root}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionBody:{DescID: 109}, PUBLIC], ABSENT] -> PUBLIC
  ops:
    *scop.CreateFunctionDescriptor
      Function:
        FunctionID: 109
        Params:
        - name: a
          class:
            class: 0
          type:
            type: |
              family: EnumFamily
              width: 0
              precision: 0
              locale: ""
              visible_type: 0
              oid: 100107
              time_precision_is_set: false
              udt_metadata: <
                array_type_oid: 100108
              >
            closedtypeids:
            - 107
            - 108
            typename: public.notmyworkday
          defaultexpr: ""
        ReturnType:
          Type:
            family: IntFamily
            oid: 20
            width: 64
          TypeName: INT8
    *scop.SetFunctionName
      FunctionID: 109
      Name: f
    *scop.SetFunctionVolatility
      FunctionID: 109
      Volatility: 1
    *scop.UpdateOwner
      Owner:
        DescriptorID: 109
        Owner: root
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 2
        UserName: admin
        WithGrantOption: 2
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 1048576
        UserName: public
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 109
        Privileges: 2
        UserName: root
        WithGrantOption: 2
    *scop.SetFunctionBody
      Body:
        Body: |-
          SELECT a FROM t;
          SELECT b FROM t@t_idx_b;
          SELECT c FROM t@t_idx_c;
          SELECT a FROM v;
          SELECT b'@':::@100107;
          SELECT nextval(105:::REGCLASS);
        FunctionID: 109
        Lang:
          Lang: 1
        UsesSequenceIDs:
        - 105
        UsesTables:
        - tableid: 104
          columnids:
          - 1
          indexid: 0
        - tableid: 104
          columnids:
          - 2
          indexid: 2
        - tableid: 104
          columnids:
          - 3
          indexid: 3
        UsesTypeIDs:
        - 107
        - 108
        UsesViews:
        - viewid: 106
          columnids:
          - 1
    *scop.UpdateFunctionTypeReferences
      FunctionID: 109
      TypeIDs:
      - 107
      - 108
    *scop.UpdateFunctionRelationReferences
      FunctionID: 109
      SequenceIDs:
      - 105
      TableReferences:
      - tableid: 104
        columnids:
        - 1
        indexid: 0
      - tableid: 104
        columnids:
        - 2
        indexid: 2
      - tableid: 104
        columnids:
        - 3
        indexid: 3
      ViewReferences:
      - viewid: 106
        columnids:
        - 1
    *scop.SetObjectParentID
      ObjParent:
        ChildObjectID: 109
        SchemaID: 101
    *scop.MarkDescriptorAsPublic
      DescriptorID: 109

deps
CREATE FUNCTION f(a notmyworkday) RETURNS INT VOLATILE LANGUAGE SQL AS $$
  SELECT a FROM t;
  SELECT b FROM t@t_idx_b;
  SELECT c FROM t@t_idx_c;
  SELECT a FROM v;
  SELECT 'Monday'::notmyworkday;
  SELECT nextval('sq1');
$$;
----
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [FunctionBody:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [FunctionName:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [FunctionVolatility:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [Owner:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [SchemaChild:{DescID: 110, ReferencedDescID: 101}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 110, Name: admin}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 110, Name: public}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 110}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 110, Name: root}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [FunctionBody:{DescID: 110}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [FunctionName:{DescID: 110}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [FunctionName:{DescID: 110}, PUBLIC]
  to:   [SchemaChild:{DescID: 110, ReferencedDescID: 101}, PUBLIC]
  kind: Precedence
  rule: function name should be set before parent ids
- from: [FunctionVolatility:{DescID: 110}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [Owner:{DescID: 110}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [SchemaChild:{DescID: 110, ReferencedDescID: 101}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 110, Name: admin}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 110, Name: public}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 110, Name: root}, PUBLIC]
  to:   [Function:{DescID: 110}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public

ops
CREATE FUNCTION f(a notmyworkday) RETURNS INT VOLATILE LANGUAGE PLpgSQL AS $$
  BEGIN
  SELECT a FROM t;
  SELECT b FROM t@t_idx_b;
  SELECT c FROM t@t_idx_c;
  SELECT a FROM v;
  SELECT 'Monday'::notmyworkday;
  RETURN nextval('sq1');
  END
$$;
----
StatementPhase stage 1 of 1 with 12 MutationType ops
  transitions:
    [[Function:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[SchemaChild:{DescID: 111, ReferencedDescID: 101}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionName:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionVolatility:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[Owner:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: admin}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: public}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: root}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionBody:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
  ops:
    *scop.CreateFunctionDescriptor
      Function:
        FunctionID: 111
        Params:
        - name: a
          class:
            class: 0
          type:
            type: |
              family: EnumFamily
              width: 0
              precision: 0
              locale: ""
              visible_type: 0
              oid: 100107
              time_precision_is_set: false
              udt_metadata: <
                array_type_oid: 100108
              >
            closedtypeids:
            - 107
            - 108
            typename: public.notmyworkday
          defaultexpr: ""
        ReturnType:
          Type:
            family: IntFamily
            oid: 20
            width: 64
          TypeName: INT8
    *scop.SetFunctionName
      FunctionID: 111
      Name: f
    *scop.SetFunctionVolatility
      FunctionID: 111
      Volatility: 1
    *scop.UpdateOwner
      Owner:
        DescriptorID: 111
        Owner: root
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 2
        UserName: admin
        WithGrantOption: 2
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 1048576
        UserName: public
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 2
        UserName: root
        WithGrantOption: 2
    *scop.SetFunctionBody
      Body:
        Body: |
          BEGIN
          SELECT a FROM t;
          SELECT b FROM t@t_idx_b;
          SELECT c FROM t@t_idx_c;
          SELECT a FROM v;
          SELECT b'@':::@100107;
          RETURN nextval(105:::REGCLASS);
          END;
        FunctionID: 111
        Lang:
          Lang: 2
        UsesSequenceIDs:
        - 105
        UsesTables:
        - tableid: 104
          columnids:
          - 1
          indexid: 0
        - tableid: 104
          columnids:
          - 2
          indexid: 2
        - tableid: 104
          columnids:
          - 3
          indexid: 3
        UsesTypeIDs:
        - 107
        - 108
        UsesViews:
        - viewid: 106
          columnids:
          - 1
    *scop.UpdateFunctionTypeReferences
      FunctionID: 111
      TypeIDs:
      - 107
      - 108
    *scop.UpdateFunctionRelationReferences
      FunctionID: 111
      SequenceIDs:
      - 105
      TableReferences:
      - tableid: 104
        columnids:
        - 1
        indexid: 0
      - tableid: 104
        columnids:
        - 2
        indexid: 2
      - tableid: 104
        columnids:
        - 3
        indexid: 3
      ViewReferences:
      - viewid: 106
        columnids:
        - 1
    *scop.SetObjectParentID
      ObjParent:
        ChildObjectID: 111
        SchemaID: 101
    *scop.MarkDescriptorAsPublic
      DescriptorID: 111
PreCommitPhase stage 1 of 2 with 1 MutationType op
  transitions:
    [[Function:{DescID: 111}, PUBLIC], PUBLIC] -> ABSENT
    [[SchemaChild:{DescID: 111, ReferencedDescID: 101}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionName:{DescID: 111}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionVolatility:{DescID: 111}, PUBLIC], PUBLIC] -> ABSENT
    [[Owner:{DescID: 111}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 111, Name: admin}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 111, Name: public}, PUBLIC], PUBLIC] -> ABSENT
    [[UserPrivileges:{DescID: 111, Name: root}, PUBLIC], PUBLIC] -> ABSENT
    [[FunctionBody:{DescID: 111}, PUBLIC], PUBLIC] -> ABSENT
  ops:
    *scop.UndoAllInTxnImmediateMutationOpSideEffects
      {}
PreCommitPhase stage 2 of 2 with 12 MutationType ops
  transitions:
    [[Function:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[SchemaChild:{DescID: 111, ReferencedDescID: 101}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionName:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionVolatility:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[Owner:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: admin}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: public}, PUBLIC], ABSENT] -> PUBLIC
    [[UserPrivileges:{DescID: 111, Name: root}, PUBLIC], ABSENT] -> PUBLIC
    [[FunctionBody:{DescID: 111}, PUBLIC], ABSENT] -> PUBLIC
  ops:
    *scop.CreateFunctionDescriptor
      Function:
        FunctionID: 111
        Params:
        - name: a
          class:
            class: 0
          type:
            type: |
              family: EnumFamily
              width: 0
              precision: 0
              locale: ""
              visible_type: 0
              oid: 100107
              time_precision_is_set: false
              udt_metadata: <
                array_type_oid: 100108
              >
            closedtypeids:
            - 107
            - 108
            typename: public.notmyworkday
          defaultexpr: ""
        ReturnType:
          Type:
            family: IntFamily
            oid: 20
            width: 64
          TypeName: INT8
    *scop.SetFunctionName
      FunctionID: 111
      Name: f
    *scop.SetFunctionVolatility
      FunctionID: 111
      Volatility: 1
    *scop.UpdateOwner
      Owner:
        DescriptorID: 111
        Owner: root
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 2
        UserName: admin
        WithGrantOption: 2
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 1048576
        UserName: public
    *scop.UpdateUserPrivileges
      Privileges:
        DescriptorID: 111
        Privileges: 2
        UserName: root
        WithGrantOption: 2
    *scop.SetFunctionBody
      Body:
        Body: |
          BEGIN
          SELECT a FROM t;
          SELECT b FROM t@t_idx_b;
          SELECT c FROM t@t_idx_c;
          SELECT a FROM v;
          SELECT b'@':::@100107;
          RETURN nextval(105:::REGCLASS);
          END;
        FunctionID: 111
        Lang:
          Lang: 2
        UsesSequenceIDs:
        - 105
        UsesTables:
        - tableid: 104
          columnids:
          - 1
          indexid: 0
        - tableid: 104
          columnids:
          - 2
          indexid: 2
        - tableid: 104
          columnids:
          - 3
          indexid: 3
        UsesTypeIDs:
        - 107
        - 108
        UsesViews:
        - viewid: 106
          columnids:
          - 1
    *scop.UpdateFunctionTypeReferences
      FunctionID: 111
      TypeIDs:
      - 107
      - 108
    *scop.UpdateFunctionRelationReferences
      FunctionID: 111
      SequenceIDs:
      - 105
      TableReferences:
      - tableid: 104
        columnids:
        - 1
        indexid: 0
      - tableid: 104
        columnids:
        - 2
        indexid: 2
      - tableid: 104
        columnids:
        - 3
        indexid: 3
      ViewReferences:
      - viewid: 106
        columnids:
        - 1
    *scop.SetObjectParentID
      ObjParent:
        ChildObjectID: 111
        SchemaID: 101
    *scop.MarkDescriptorAsPublic
      DescriptorID: 111

deps
CREATE FUNCTION f(a notmyworkday) RETURNS INT VOLATILE LANGUAGE PLpgSQL AS $$
  BEGIN
  SELECT a FROM t;
  SELECT b FROM t@t_idx_b;
  SELECT c FROM t@t_idx_c;
  SELECT a FROM v;
  SELECT 'Monday'::notmyworkday;
  RETURN nextval('sq1');
  END
$$;
----
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [FunctionBody:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [FunctionName:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [FunctionVolatility:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [Owner:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [SchemaChild:{DescID: 112, ReferencedDescID: 101}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 112, Name: admin}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 112, Name: public}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [Function:{DescID: 112}, DESCRIPTOR_ADDED]
  to:   [UserPrivileges:{DescID: 112, Name: root}, PUBLIC]
  kind: Precedence
  rule: descriptor existence precedes dependents
- from: [FunctionBody:{DescID: 112}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [FunctionName:{DescID: 112}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [FunctionName:{DescID: 112}, PUBLIC]
  to:   [SchemaChild:{DescID: 112, ReferencedDescID: 101}, PUBLIC]
  kind: Precedence
  rule: function name should be set before parent ids
- from: [FunctionVolatility:{DescID: 112}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [Owner:{DescID: 112}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [SchemaChild:{DescID: 112, ReferencedDescID: 101}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 112, Name: admin}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 112, Name: public}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
- from: [UserPrivileges:{DescID: 112, Name: root}, PUBLIC]
  to:   [Function:{DescID: 112}, PUBLIC]
  kind: Precedence
  rule: dependents exist before descriptor becomes public
