|
9 | 9 | * |
10 | 10 | * |
11 | 11 | * IDENTIFICATION |
12 | | - * $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.68 2010/07/06 19:18:56 momjian Exp $ |
| 12 | + * $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.69 2010/07/16 00:13:23 tgl Exp $ |
13 | 13 | * |
14 | 14 | *------------------------------------------------------------------------- |
15 | 15 | */ |
@@ -640,16 +640,9 @@ DefineOpFamily(CreateOpFamilyStmt *stmt) |
640 | 640 | { |
641 | 641 | char *opfname; /* name of opfamily we're creating */ |
642 | 642 | Oid amoid, /* our AM's oid */ |
643 | | - namespaceoid, /* namespace to create opfamily in */ |
644 | | - opfamilyoid; /* oid of opfamily we create */ |
645 | | - Relation rel; |
| 643 | + namespaceoid; /* namespace to create opfamily in */ |
646 | 644 | HeapTuple tup; |
647 | | - Datum values[Natts_pg_opfamily]; |
648 | | - bool nulls[Natts_pg_opfamily]; |
649 | 645 | AclResult aclresult; |
650 | | - NameData opfName; |
651 | | - ObjectAddress myself, |
652 | | - referenced; |
653 | 646 |
|
654 | 647 | /* Convert list of names to a name and namespace */ |
655 | 648 | namespaceoid = QualifiedNameGetCreationNamespace(stmt->opfamilyname, |
@@ -678,68 +671,14 @@ DefineOpFamily(CreateOpFamilyStmt *stmt) |
678 | 671 | /* |
679 | 672 | * Currently, we require superuser privileges to create an opfamily. See |
680 | 673 | * comments in DefineOpClass. |
681 | | - * |
682 | | - * XXX re-enable NOT_USED code sections below if you remove this test. |
683 | 674 | */ |
684 | 675 | if (!superuser()) |
685 | 676 | ereport(ERROR, |
686 | 677 | (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), |
687 | 678 | errmsg("must be superuser to create an operator family"))); |
688 | 679 |
|
689 | | - rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock); |
690 | | - |
691 | | - /* |
692 | | - * Make sure there is no existing opfamily of this name (this is just to |
693 | | - * give a more friendly error message than "duplicate key"). |
694 | | - */ |
695 | | - if (SearchSysCacheExists3(OPFAMILYAMNAMENSP, |
696 | | - ObjectIdGetDatum(amoid), |
697 | | - CStringGetDatum(opfname), |
698 | | - ObjectIdGetDatum(namespaceoid))) |
699 | | - ereport(ERROR, |
700 | | - (errcode(ERRCODE_DUPLICATE_OBJECT), |
701 | | - errmsg("operator family \"%s\" for access method \"%s\" already exists", |
702 | | - opfname, stmt->amname))); |
703 | | - |
704 | | - /* |
705 | | - * Okay, let's create the pg_opfamily entry. |
706 | | - */ |
707 | | - memset(values, 0, sizeof(values)); |
708 | | - memset(nulls, false, sizeof(nulls)); |
709 | | - |
710 | | - values[Anum_pg_opfamily_opfmethod - 1] = ObjectIdGetDatum(amoid); |
711 | | - namestrcpy(&opfName, opfname); |
712 | | - values[Anum_pg_opfamily_opfname - 1] = NameGetDatum(&opfName); |
713 | | - values[Anum_pg_opfamily_opfnamespace - 1] = ObjectIdGetDatum(namespaceoid); |
714 | | - values[Anum_pg_opfamily_opfowner - 1] = ObjectIdGetDatum(GetUserId()); |
715 | | - |
716 | | - tup = heap_form_tuple(rel->rd_att, values, nulls); |
717 | | - |
718 | | - opfamilyoid = simple_heap_insert(rel, tup); |
719 | | - |
720 | | - CatalogUpdateIndexes(rel, tup); |
721 | | - |
722 | | - heap_freetuple(tup); |
723 | | - |
724 | | - /* |
725 | | - * Create dependencies for the opfamily proper. Note: we do not create a |
726 | | - * dependency link to the AM, because we don't currently support DROP |
727 | | - * ACCESS METHOD. |
728 | | - */ |
729 | | - myself.classId = OperatorFamilyRelationId; |
730 | | - myself.objectId = opfamilyoid; |
731 | | - myself.objectSubId = 0; |
732 | | - |
733 | | - /* dependency on namespace */ |
734 | | - referenced.classId = NamespaceRelationId; |
735 | | - referenced.objectId = namespaceoid; |
736 | | - referenced.objectSubId = 0; |
737 | | - recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); |
738 | | - |
739 | | - /* dependency on owner */ |
740 | | - recordDependencyOnOwner(OperatorFamilyRelationId, opfamilyoid, GetUserId()); |
741 | | - |
742 | | - heap_close(rel, RowExclusiveLock); |
| 680 | + /* Insert pg_opfamily catalog entry */ |
| 681 | + (void) CreateOpFamily(stmt->amname, opfname, namespaceoid, amoid); |
743 | 682 | } |
744 | 683 |
|
745 | 684 |
|
|
0 commit comments