Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8e650a2

Browse files
author
Nikita Glukhov
committed
Enable jsonbc compression method for jsonb type
1 parent8d14756 commit8e650a2

File tree

6 files changed

+38
-13
lines changed

6 files changed

+38
-13
lines changed

‎src/backend/access/common/tupdesc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,8 @@ TupleDescInitAttrCompression(TupleDesc desc,
785785
:get_base_typnullcm(desc->attrs[attnum-1]->atttypid);
786786

787787
ac->routineNull=OidIsValid(nullcmoid)
788-
?GetCompressionMethodRoutineByCmId(nullcmoid)
788+
?GetCompressionMethodRoutineByCmId(nullcmoid,
789+
desc->attrs[attnum-1]->atttypid)
789790
:NULL;
790791
}
791792

‎src/backend/catalog/heap.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1482,7 +1482,8 @@ DropAttributeCompression(HeapTuple tuple)
14821482
{
14831483
Form_pg_attributeatt= (Form_pg_attribute)GETSTRUCT(tuple);
14841484
CompressionMethodRoutine*cmr=
1485-
GetCompressionMethodRoutineByCmId(att->attcompression);
1485+
GetCompressionMethodRoutineByCmId(att->attcompression,
1486+
att->atttypid);
14861487

14871488
if (cmr->dropAttr)
14881489
{

‎src/backend/commands/compressioncmds.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,12 +243,16 @@ get_compression_method_name(Oid cmOid)
243243
* which will be palloc'd in the caller's context.
244244
*/
245245
CompressionMethodRoutine*
246-
GetCompressionMethodRoutine(Oidcmhandler)
246+
GetCompressionMethodRoutine(Oidcmhandler,Oidtypeid)
247247
{
248-
Datumdatum;
249-
CompressionMethodRoutine*routine;
248+
Datumdatum;
249+
CompressionMethodRoutine*routine;
250+
CompressionMethodOpArgsopargs;
250251

251-
datum=OidFunctionCall0(cmhandler);
252+
opargs.op=CMOP_GET_ROUTINE;
253+
opargs.args.getRoutine.typeid=typeid;
254+
255+
datum=OidFunctionCall1(cmhandler,PointerGetDatum(&opargs));
252256
routine= (CompressionMethodRoutine*)DatumGetPointer(datum);
253257

254258
if (routine==NULL|| !IsA(routine,CompressionMethodRoutine))
@@ -265,7 +269,7 @@ GetCompressionMethodRoutine(Oid cmhandler)
265269
* and get its CompressionMethodRoutine struct.
266270
*/
267271
CompressionMethodRoutine*
268-
GetCompressionMethodRoutineByCmId(Oidcmoid)
272+
GetCompressionMethodRoutineByCmId(Oidcmoid,Oidtypeid)
269273
{
270274
HeapTupletuple;
271275
Form_pg_compressioncmform;
@@ -291,5 +295,5 @@ GetCompressionMethodRoutineByCmId(Oid cmoid)
291295
ReleaseSysCache(tuple);
292296

293297
/* And finally, call the handler function to get the API struct. */
294-
returnGetCompressionMethodRoutine(cmhandler);
298+
returnGetCompressionMethodRoutine(cmhandler,typeid);
295299
}

‎src/backend/commands/tablecmds.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5239,7 +5239,8 @@ GetAttributeCompression(ColumnCompression *compression,
52395239
*optionsList=NIL;
52405240
}
52415241

5242-
*cmr=OidIsValid(*cmid) ?GetCompressionMethodRoutineByCmId(*cmid) :NULL;
5242+
*cmr=OidIsValid(*cmid) ?
5243+
GetCompressionMethodRoutineByCmId(*cmid,att->atttypid) :NULL;
52435244

52445245
if (*cmr&& (*cmr)->options&& (*cmr)->options->validate)
52455246
*optionsList= (*cmr)->options->validate(att,*optionsList);
@@ -12554,7 +12555,8 @@ ATExecAlterColumnCompression(AlteredTableInfo *tab, Relation rel,
1255412555
if (OidIsValid(oldCm))
1255512556
{
1255612557
CompressionMethodRoutine*oldCmr=
12557-
GetCompressionMethodRoutineByCmId(oldCm);
12558+
GetCompressionMethodRoutineByCmId(oldCm,
12559+
atttableform->atttypid);
1255812560

1255912561
if (oldCmr->dropAttr)
1256012562
{

‎src/backend/utils/cache/relcache.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,8 @@ RelationBuildTupleDesc(Relation relation)
575575
List*optionsList;
576576
CompressionMethodRoutine*cmr;
577577

578-
cmr=GetCompressionMethodRoutineByCmId(attp->attcompression);
578+
cmr=GetCompressionMethodRoutineByCmId(attp->attcompression,
579+
attp->atttypid);
579580
optionsDatum=get_attcmoptions(RelationGetRelid(relation),
580581
attp->attnum);
581582
optionsList=untransformRelOptions(optionsDatum);

‎src/include/access/compression.h

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,23 @@ typedef struct CompressionMethodRoutine
5050
DecompressionRoutinedecompress;
5151
}CompressionMethodRoutine;
5252

53-
externCompressionMethodRoutine*GetCompressionMethodRoutine(Oidcmhandler);
54-
externCompressionMethodRoutine*GetCompressionMethodRoutineByCmId(Oidcmoid);
53+
typedefenum {CMOP_GET_ROUTINE }CompressionMethodOp;
54+
55+
typedefstructCompressionMethodOpArgs
56+
{
57+
CompressionMethodOpop;
58+
union
59+
{
60+
struct
61+
{
62+
Oidtypeid;
63+
}getRoutine;
64+
}args;
65+
}CompressionMethodOpArgs;
66+
67+
externCompressionMethodRoutine*GetCompressionMethodRoutine(Oidcmhandler,
68+
Oidtypeid);
69+
externCompressionMethodRoutine*GetCompressionMethodRoutineByCmId(Oidcmoid,
70+
Oidtypeid);
5571

5672
#endif/* COMPRESSION_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp