Skip to content

Commit fa6f4c1

Browse files
committed
clean code, take lock in PathmanRenameConstraint()
1 parent 1277897 commit fa6f4c1

File tree

6 files changed

+57
-56
lines changed

6 files changed

+57
-56
lines changed

src/hooks.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ pathman_process_utility_hook(Node *parsetree,
653653
* Rename check constraint of a table if it is a partition managed
654654
* by pg_pathman
655655
*/
656-
PathmanDoRenameConstraint((RenameStmt *) parsetree);
656+
PathmanRenameConstraint((RenameStmt *) parsetree);
657657
}
658658
}
659659

src/init.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -593,12 +593,18 @@ find_inheritance_children_array(Oid parentrelId,
593593
/*
594594
* Generate check constraint name for a partition.
595595
*
596-
* This function does not perform sanity checks at all.
596+
* These functions does not perform sanity checks at all.
597597
*/
598598
char *
599-
build_check_constraint_name_internal(Oid relid, AttrNumber attno)
599+
build_check_constraint_name_relid_internal(Oid relid, AttrNumber attno)
600600
{
601-
return build_check_constraint_name_by_relname(get_rel_name(relid), attno);
601+
return build_check_constraint_name_relname_internal(get_rel_name(relid), attno);
602+
}
603+
604+
char *
605+
build_check_constraint_name_relname_internal(char *relname, AttrNumber attno)
606+
{
607+
return psprintf("pathman_%s_%u_check", relname, attno);
602608
}
603609

604610
/*
@@ -807,7 +813,7 @@ get_partition_constraint_expr(Oid partition, AttrNumber part_attno)
807813
bool conbin_isnull;
808814
Expr *expr; /* expression tree for constraint */
809815

810-
conname = build_check_constraint_name_internal(partition, part_attno);
816+
conname = build_check_constraint_name_relid_internal(partition, part_attno);
811817
conid = get_relation_constraint_oid(partition, conname, true);
812818
if (conid == InvalidOid)
813819
{

src/init.h

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,6 @@ extern PathmanInitState pg_pathman_init_state;
8686
pg_pathman_init_state.initialization_needed = true; \
8787
} while (0)
8888

89-
/*
90-
* Generate check constraint name for given relname
91-
*/
92-
static inline char *
93-
build_check_constraint_name_by_relname(char *relname, AttrNumber attno)
94-
{
95-
return psprintf("pathman_%s_%u_check", relname, attno);
96-
}
97-
9889

9990
/*
10091
* Save and restore PathmanInitState.
@@ -132,8 +123,11 @@ find_children_status find_inheritance_children_array(Oid parentrelId,
132123
uint32 *children_size,
133124
Oid **children);
134125

135-
char *build_check_constraint_name_internal(Oid relid,
136-
AttrNumber attno);
126+
char *build_check_constraint_name_relid_internal(Oid relid,
127+
AttrNumber attno);
128+
129+
char *build_check_constraint_name_relname_internal(char *relname,
130+
AttrNumber attno);
137131

138132
bool pathman_config_contains_relation(Oid relid,
139133
Datum *values,

src/pl_funcs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ build_check_constraint_name_attnum(PG_FUNCTION_ARGS)
521521
elog(ERROR, "Cannot build check constraint name: "
522522
"invalid attribute number %i", attnum);
523523

524-
result = build_check_constraint_name_internal(relid, attnum);
524+
result = build_check_constraint_name_relid_internal(relid, attnum);
525525

526526
PG_RETURN_TEXT_P(cstring_to_text(quote_identifier(result)));
527527
}
@@ -541,7 +541,7 @@ build_check_constraint_name_attname(PG_FUNCTION_ARGS)
541541
elog(ERROR, "relation \"%s\" has no column \"%s\"",
542542
get_rel_name_or_relid(relid), text_to_cstring(attname));
543543

544-
result = build_check_constraint_name_internal(relid, attnum);
544+
result = build_check_constraint_name_relid_internal(relid, attnum);
545545

546546
PG_RETURN_TEXT_P(cstring_to_text(quote_identifier(result)));
547547
}

src/utility_stmt_hooking.c

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -626,44 +626,45 @@ prepare_rri_fdw_for_copy(EState *estate,
626626
}
627627

628628
/*
629-
* Rename check constraint of table if it is a partition
629+
* Rename check constraint of table if it's a partition
630630
*/
631631
void
632-
PathmanDoRenameConstraint(const RenameStmt *stmt)
632+
PathmanRenameConstraint(const RenameStmt *stmt)
633633
{
634-
Oid partition = RangeVarGetRelid(stmt->relation, NoLock, true);
635-
Oid parent = get_rel_parent(partition);
636-
637-
if (partition != InvalidOid && parent != InvalidOid)
638-
{
639-
char *old_constraint_name,
640-
*new_constraint_name;
641-
const PartRelationInfo *prel = get_pathman_relation_info(parent);
642-
643-
if (prel)
644-
{
645-
RangeVar *rngVar;
646-
RenameStmt *s;
647-
648-
/* Generate old constraint name */
649-
old_constraint_name = build_check_constraint_name_by_relname(
650-
get_rel_name(partition),
651-
prel->attnum);
652-
653-
/* Generate new constraint name */
654-
new_constraint_name = build_check_constraint_name_by_relname(
655-
stmt->newname,
656-
prel->attnum);
657-
658-
/* Build check constraint RENAME statement */
659-
s = makeNode(RenameStmt);
660-
s->renameType = OBJECT_TABCONSTRAINT;
661-
s->relation = stmt->relation;
662-
s->subname = old_constraint_name;
663-
s->newname = new_constraint_name;
664-
s->missing_ok = false;
665-
666-
RenameConstraint(s);
667-
}
668-
}
634+
Oid partition_relid,
635+
parent_relid;
636+
char *old_constraint_name,
637+
*new_constraint_name;
638+
RenameStmt *rename_stmt;
639+
const PartRelationInfo *prel;
640+
641+
partition_relid = RangeVarGetRelid(stmt->relation, AccessShareLock, false);
642+
parent_relid = get_rel_parent(partition_relid);
643+
644+
/* Skip if there's no parent */
645+
if (!OidIsValid(parent_relid)) return;
646+
647+
/* Fetch partitioning data */
648+
prel = get_pathman_relation_info(parent_relid);
649+
650+
/* Skip if this table is not partitioned */
651+
if (!prel) return;
652+
653+
/* Generate old constraint name */
654+
old_constraint_name = build_check_constraint_name_relid_internal(partition_relid,
655+
prel->attnum);
656+
657+
/* Generate new constraint name */
658+
new_constraint_name = build_check_constraint_name_relname_internal(stmt->newname,
659+
prel->attnum);
660+
661+
/* Build check constraint RENAME statement */
662+
rename_stmt = makeNode(RenameStmt);
663+
rename_stmt->renameType = OBJECT_TABCONSTRAINT;
664+
rename_stmt->relation = stmt->relation;
665+
rename_stmt->subname = old_constraint_name;
666+
rename_stmt->newname = new_constraint_name;
667+
rename_stmt->missing_ok = false;
668+
669+
RenameConstraint(rename_stmt);
669670
}

src/utility_stmt_hooking.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919

2020
bool is_pathman_related_copy(Node *parsetree);
2121
void PathmanDoCopy(const CopyStmt *stmt, const char *queryString, uint64 *processed);
22-
void PathmanDoRenameConstraint(const RenameStmt *stmt);
22+
void PathmanRenameConstraint(const RenameStmt *stmt);
2323

2424
#endif

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy