Skip to content

Commit a9e03f6

Browse files
committed
oracle-like DROP PARTITION command
1 parent f4a997d commit a9e03f6

File tree

3 files changed

+33
-40
lines changed

3 files changed

+33
-40
lines changed

src/backend/commands/partition.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -430,23 +430,17 @@ rename_partition(Oid parent, AlterTableCmd *cmd)
430430
void
431431
drop_partition(Oid parent, AlterTableCmd *cmd)
432432
{
433-
DropStmt *n = makeNode(DropStmt);
434433
RangeVar *partition;
435434

436-
/* TODO: Check that parent is an actual parent of partition */
437-
438435
Assert(list_length(cmd->partitions) == 1);
439-
440436
partition = (RangeVar *) linitial(cmd->partitions);
441437

442-
n->removeType = OBJECT_TABLE;
443-
n->missing_ok = false;
444-
n->objects = list_make1(makeNameListFromRangeVar(partition));
445-
n->arguments = NIL;
446-
n->behavior = DROP_RESTRICT; // default behaviour
447-
n->concurrent = false;
438+
if (SPI_connect() != SPI_OK_CONNECT)
439+
elog(ERROR, "could not connect using SPI");
440+
441+
pm_drop_range_partition_expand_next(RangeVarGetRelid(partition, NoLock, false));
448442

449-
RemoveRelations(n);
443+
SPI_finish();
450444
}
451445

452446

src/backend/commands/pathman_wrapper.c

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -164,30 +164,6 @@ get_pathman_schema_name()
164164
return get_namespace_name(schema_oid);
165165
}
166166

167-
/* TODO: Probably remove this */
168-
Oid
169-
pm_get_attribute_type(Oid relid, const char *attname)
170-
{
171-
FuncArgs args;
172-
bool isnull;
173-
Datum atttype;
174-
bool ret;
175-
176-
InitFuncArgs(&args, 3);
177-
PG_SETARG_DATUM(&args, 0, OIDOID, ObjectIdGetDatum(relid));
178-
PG_SETARG_DATUM(&args, 1, TEXTOID, CStringGetTextDatum(attname));
179-
ret = pathman_invoke_return_value("get_attribute_type($1, $2)",
180-
&args,
181-
&atttype,
182-
&isnull);
183-
184-
if (!ret)
185-
elog(ERROR, "Cannot retrieve attribute type");
186-
187-
FreeFuncArgs(&args);
188-
189-
return !isnull ? DatumGetObjectId(atttype) : InvalidOid;
190-
}
191167

192168
char *
193169
pm_get_partition_key(Oid relid)
@@ -515,10 +491,15 @@ pm_split_range_partition(Oid part_relid,
515491
elog(ERROR, "Unable to split partition '%s'", get_rel_name(part_relid));
516492
}
517493

518-
void pm_alter_partition(Oid relid,
519-
const char *new_relname,
520-
Oid new_namespace,
521-
const char *new_tablespace)
494+
495+
/*
496+
* Change name, schema or tablespace
497+
*/
498+
void
499+
pm_alter_partition(Oid relid,
500+
const char *new_relname,
501+
Oid new_namespace,
502+
const char *new_tablespace)
522503
{
523504
FuncArgs args;
524505
bool ret;
@@ -550,3 +531,20 @@ void pm_alter_partition(Oid relid,
550531
if (!ret)
551532
elog(ERROR, "Unable to alter partition '%s'", get_rel_name(relid));
552533
}
534+
535+
536+
void
537+
pm_drop_range_partition_expand_next(Oid relid)
538+
{
539+
FuncArgs args;
540+
bool ret;
541+
542+
InitFuncArgs(&args, 1);
543+
PG_SETARG_DATUM(&args, 0, OIDOID, relid);
544+
545+
ret = pathman_invoke("drop_range_partition_expand_next($1)", &args);
546+
FreeFuncArgs(&args);
547+
548+
if (!ret)
549+
elog(ERROR, "Unable to drop partition '%s'", get_rel_name(relid));
550+
}

src/include/commands/pathman_wrapper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,5 @@ void pm_split_range_partition(Oid part_relid,
7070
Oid split_value_type,
7171
const char *relname,
7272
const char *tablespace);
73-
void pm_alter_partition(Oid relid, const char *new_relname, Oid new_namespace, const char *new_tablespace);
73+
void pm_alter_partition(Oid relid, const char *new_relname, Oid new_namespace, const char *new_tablespace);
74+
void pm_drop_range_partition_expand_next(Oid relid);

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