Skip to content

Commit dbcd051

Browse files
author
Nikita Glukhov
committed
Add compression methods
1 parent c80da1c commit dbcd051

File tree

25 files changed

+554
-10
lines changed

25 files changed

+554
-10
lines changed

src/backend/catalog/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ POSTGRES_BKI_SRCS = $(addprefix $(top_srcdir)/src/include/catalog/,\
4545
pg_default_acl.h pg_init_privs.h pg_seclabel.h pg_shseclabel.h \
4646
pg_collation.h pg_partitioned_table.h pg_range.h pg_transform.h \
4747
pg_sequence.h pg_publication.h pg_publication_rel.h pg_subscription.h \
48-
pg_subscription_rel.h toasting.h indexing.h \
48+
pg_subscription_rel.h pg_compression.h toasting.h indexing.h \
4949
toasting.h indexing.h \
5050
)
5151

src/backend/catalog/aclchk.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3340,6 +3340,8 @@ static const char *const no_priv_msg[MAX_ACL_KIND] =
33403340
gettext_noop("permission denied for publication %s"),
33413341
/* ACL_KIND_SUBSCRIPTION */
33423342
gettext_noop("permission denied for subscription %s"),
3343+
/* ACL_KIND_COMPRESSION_METHOD */
3344+
gettext_noop("permission denied for compression method %s"),
33433345
};
33443346

33453347
static const char *const not_owner_msg[MAX_ACL_KIND] =

src/backend/catalog/dependency.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "catalog/pg_cast.h"
2929
#include "catalog/pg_collation.h"
3030
#include "catalog/pg_collation_fn.h"
31+
#include "catalog/pg_compression.h"
3132
#include "catalog/pg_constraint.h"
3233
#include "catalog/pg_constraint_fn.h"
3334
#include "catalog/pg_conversion.h"
@@ -173,7 +174,8 @@ static const Oid object_classes[] = {
173174
PublicationRelationId, /* OCLASS_PUBLICATION */
174175
PublicationRelRelationId, /* OCLASS_PUBLICATION_REL */
175176
SubscriptionRelationId, /* OCLASS_SUBSCRIPTION */
176-
TransformRelationId /* OCLASS_TRANSFORM */
177+
TransformRelationId, /* OCLASS_TRANSFORM */
178+
CompressionMethodRelationId /* OCLASS_COMPRESSION_METHOD */
177179
};
178180

179181

@@ -1269,6 +1271,10 @@ doDeletion(const ObjectAddress *object, int flags)
12691271
RemoveStatisticsById(object->objectId);
12701272
break;
12711273

1274+
case OCLASS_COMPRESSION_METHOD:
1275+
RemoveCompressionMethodById(object->objectId);
1276+
break;
1277+
12721278
default:
12731279
elog(ERROR, "unrecognized object class: %u",
12741280
object->classId);
@@ -2446,6 +2452,9 @@ getObjectClass(const ObjectAddress *object)
24462452

24472453
case TransformRelationId:
24482454
return OCLASS_TRANSFORM;
2455+
2456+
case CompressionMethodRelationId:
2457+
return OCLASS_COMPRESSION_METHOD;
24492458
}
24502459

24512460
/* shouldn't get here */

src/backend/catalog/objectaddress.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "catalog/pg_default_acl.h"
3030
#include "catalog/pg_event_trigger.h"
3131
#include "catalog/pg_collation.h"
32+
#include "catalog/pg_compression.h"
3233
#include "catalog/pg_constraint.h"
3334
#include "catalog/pg_constraint_fn.h"
3435
#include "catalog/pg_conversion.h"
@@ -150,6 +151,18 @@ static const ObjectPropertyType ObjectProperty[] =
150151
ACL_KIND_COLLATION,
151152
true
152153
},
154+
{
155+
CompressionMethodRelationId,
156+
CompressionMethodOidIndexId,
157+
COMPRESSIONMETHODOID,
158+
COMPRESSIONMETHODNAME,
159+
Anum_pg_compression_cmname,
160+
InvalidAttrNumber,
161+
InvalidAttrNumber,
162+
InvalidAttrNumber,
163+
-1,
164+
true
165+
},
153166
{
154167
ConstraintRelationId,
155168
ConstraintOidIndexId,
@@ -713,6 +726,10 @@ static const struct object_type_map
713726
/* OBJECT_STATISTIC_EXT */
714727
{
715728
"statistics", OBJECT_STATISTIC_EXT
729+
},
730+
/* OCLASS_COMPRESSION_METHOD */
731+
{
732+
"compression method", OBJECT_COMPRESSION_METHOD
716733
}
717734
};
718735

@@ -877,6 +894,7 @@ get_object_address(ObjectType objtype, Node *object,
877894
case OBJECT_ACCESS_METHOD:
878895
case OBJECT_PUBLICATION:
879896
case OBJECT_SUBSCRIPTION:
897+
case OBJECT_COMPRESSION_METHOD:
880898
address = get_object_address_unqualified(objtype,
881899
(Value *) object, missing_ok);
882900
break;
@@ -1183,6 +1201,11 @@ get_object_address_unqualified(ObjectType objtype,
11831201
address.objectId = get_subscription_oid(name, missing_ok);
11841202
address.objectSubId = 0;
11851203
break;
1204+
case OBJECT_COMPRESSION_METHOD:
1205+
address.classId = CompressionMethodRelationId;
1206+
address.objectId = get_compression_method_oid(name, missing_ok);
1207+
address.objectSubId = 0;
1208+
break;
11861209
default:
11871210
elog(ERROR, "unrecognized objtype: %d", (int) objtype);
11881211
/* placate compiler, which doesn't know elog won't return */
@@ -2135,6 +2158,7 @@ pg_get_object_address(PG_FUNCTION_ARGS)
21352158
case OBJECT_SCHEMA:
21362159
case OBJECT_SUBSCRIPTION:
21372160
case OBJECT_TABLESPACE:
2161+
case OBJECT_COMPRESSION_METHOD:
21382162
if (list_length(name) != 1)
21392163
ereport(ERROR,
21402164
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -2391,6 +2415,7 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address,
23912415
case OBJECT_TSPARSER:
23922416
case OBJECT_TSTEMPLATE:
23932417
case OBJECT_ACCESS_METHOD:
2418+
case OBJECT_COMPRESSION_METHOD:
23942419
/* We treat these object types as being owned by superusers */
23952420
if (!superuser_arg(roleid))
23962421
ereport(ERROR,
@@ -3392,6 +3417,17 @@ getObjectDescription(const ObjectAddress *object)
33923417
{
33933418
appendStringInfo(&buffer, _("subscription %s"),
33943419
get_subscription_name(object->objectId));
3420+
break;
3421+
}
3422+
3423+
case OCLASS_COMPRESSION_METHOD:
3424+
{
3425+
char *name = get_compression_method_name(object->objectId);
3426+
if (!name)
3427+
elog(ERROR, "cache lookup failed for compression method %u",
3428+
object->objectId);
3429+
appendStringInfo(&buffer, _("compression method %s"), name);
3430+
pfree(name);
33953431
break;
33963432
}
33973433

@@ -3897,6 +3933,10 @@ getObjectTypeDescription(const ObjectAddress *object)
38973933
appendStringInfoString(&buffer, "statistics");
38983934
break;
38993935

3936+
case OCLASS_COMPRESSION_METHOD:
3937+
appendStringInfoString(&buffer, "compression method");
3938+
break;
3939+
39003940
default:
39013941
appendStringInfo(&buffer, "unrecognized %u", object->classId);
39023942
break;
@@ -4137,6 +4177,20 @@ getObjectIdentityParts(const ObjectAddress *object,
41374177
break;
41384178
}
41394179

4180+
case OCLASS_COMPRESSION_METHOD:
4181+
{
4182+
char *cmname = get_compression_method_name(object->objectId);
4183+
if (!cmname)
4184+
elog(ERROR, "cache lookup failed for compression method %u",
4185+
object->objectId);
4186+
appendStringInfoString(&buffer, quote_identifier(cmname));
4187+
if (objname)
4188+
*objname = list_make1(cmname);
4189+
else
4190+
pfree(cmname);
4191+
break;
4192+
}
4193+
41404194
case OCLASS_CONSTRAINT:
41414195
{
41424196
HeapTuple conTup;

src/backend/commands/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ top_builddir = ../../..
1313
include $(top_builddir)/src/Makefile.global
1414

1515
OBJS = amcmds.o aggregatecmds.o alter.o analyze.o async.o cluster.o comment.o \
16-
collationcmds.o constraint.o conversioncmds.o copy.o createas.o \
17-
dbcommands.o define.o discard.o dropcmds.o \
16+
collationcmds.o compressioncmds.o constraint.o conversioncmds.o copy.o \
17+
createas.o dbcommands.o define.o discard.o dropcmds.o \
1818
event_trigger.o explain.o extension.o foreigncmds.o functioncmds.o \
1919
indexcmds.o lockcmds.o matview.o operatorcmds.o opclasscmds.o \
2020
policy.o portalcmds.o prepare.o proclang.o publicationcmds.o \

0 commit comments

Comments
 (0)