This is an automated email from the ASF dual-hosted git repository. reshke pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit f3752542bceb8fda891aa779332b452dc36df6b4 Author: reshke <[email protected]> AuthorDate: Wed Jan 22 06:49:21 2025 +0000 Fix cherry-pick issues. --- src/backend/access/common/reloptions_gp.c | 18 +++++--- src/backend/commands/tablecmds.c | 22 ++++----- src/include/access/reloptions.h | 2 +- src/test/regress/expected/alter_table_set_am.out | 58 ++++++++++++------------ src/test/regress/sql/alter_table_set_am.sql | 4 +- 5 files changed, 54 insertions(+), 50 deletions(-) diff --git a/src/backend/access/common/reloptions_gp.c b/src/backend/access/common/reloptions_gp.c index b6022e1ccc..77f2f86bb1 100644 --- a/src/backend/access/common/reloptions_gp.c +++ b/src/backend/access/common/reloptions_gp.c @@ -1670,7 +1670,7 @@ find_crsd(const char *column, List *stenc) List * transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, List *stenc, List *withOptions, List *parentenc, - bool explicitOnly, bool createDefaultOne) + bool explicitOnly, bool createDefaultOne, bool appendonly) { ColumnReferenceStorageDirective *deflt = NULL; ListCell *lc; @@ -1713,7 +1713,10 @@ transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, deflt = copyObject(c); - deflt->encoding = tam->transform_column_encoding_clauses(rel, deflt->encoding, true, false); + if (appendonly) + deflt->encoding = tam->transform_column_encoding_clauses(rel, deflt->encoding, true, false); + else + deflt->encoding = transformStorageEncodingClause(deflt->encoding, true); /* * The default encoding and the with clause better not @@ -1742,8 +1745,10 @@ transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, * if current am not inmplement transform_column_encoding_clauses * then tmpenc not null but no need fill with options. */ - if (tam->transform_column_encoding_clauses) + if (tam->transform_column_encoding_clauses && appendonly) deflt->encoding = tam->transform_column_encoding_clauses(rel, tmpenc, false, false); + else + deflt->encoding = transformStorageEncodingClause(tmpenc, false); } } @@ -1781,9 +1786,10 @@ transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, ColumnReferenceStorageDirective *s = find_crsd(d->colname, stenc); if (s) { - encoding = tam->transform_column_encoding_clauses(rel, s->encoding, true, false); + if (tam->transform_column_encoding_clauses) + encoding = tam->transform_column_encoding_clauses(rel, s->encoding, true, false); } else { - if (deflt) + if (deflt && deflt->encoding != NULL) encoding = copyObject(deflt->encoding); else if (!explicitOnly) { @@ -1796,7 +1802,7 @@ transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, else if (d->typeName) { /* get encoding by type, still need do transform and validate */ encoding = get_type_encoding(d->typeName); - if (tam->transform_column_encoding_clauses) + if (tam->transform_column_encoding_clauses && appendonly) encoding = tam->transform_column_encoding_clauses(rel, encoding, true, true); } if (!encoding && createDefaultOne) { diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 227fac7caa..5e79cb997a 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -584,7 +584,7 @@ static bool prebuild_temp_table(Relation rel, RangeVar *tmpname, DistributedBy * static void checkATSetDistributedByStandalone(AlteredTableInfo *tab, Relation rel); -static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOptions); +static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOptions, Oid newAm); static void clear_rel_opts(Relation rel); @@ -1147,7 +1147,8 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, stmt->options, parentenc, relkind == RELKIND_PARTITIONED_TABLE, - AMHandlerIsAoCols(amHandlerOid) /* createDefaultOne*/); + AMHandlerIsAoCols(amHandlerOid) /* createDefaultOne*/, true); + if (!AMHandlerSupportEncodingClause(tam) && relkind != RELKIND_PARTITIONED_TABLE) stmt->attr_encodings = NIL; } @@ -1334,7 +1335,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId, false, accessMethodId != AO_COLUMN_TABLE_AM_OID && !stmt->partbound && !stmt->partspec - /* errorOnEncodingClause */); + /* errorOnEncodingClause */, true); AddRelationAttributeEncodings(rel, part_attr_encodings); } @@ -4823,7 +4824,7 @@ AlterTable(AlterTableStmt *stmt, LOCKMODE lockmode, /* * Populate the column encoding option for each column in the relation. */ -static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOptions) +static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOptions, Oid newAccessMethod) { int attno; List *colDefs = NIL; @@ -4841,7 +4842,7 @@ static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOpti colDefs = lappend(colDefs, cd); } - tam = GetTableAmRoutineByAmId(rel->rd_rel->relam); + tam = GetTableAmRoutineByAmId(newAccessMethod); List *attr_encodings = transformColumnEncoding(tam /* TableAmRoutine */, rel, colDefs /*column clauses*/, @@ -4849,7 +4850,8 @@ static void populate_rel_col_encodings(Relation rel, List *stenc, List *withOpti withOptions /*withOptions*/, NULL, false, - RelationIsAoCols(rel)); + newAccessMethod == AO_COLUMN_TABLE_AM_OID, RelationIsAppendOptimized(rel)); + AddRelationAttributeEncodings(rel, attr_encodings); } @@ -6217,7 +6219,7 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, /* If we are changing AM to AOCO, add pg_attribute_encoding entries for each column. */ if (tab->newAccessMethod == AO_COLUMN_TABLE_AM_OID) - populate_rel_col_encodings(rel, NULL, (List*)cmd->def); + populate_rel_col_encodings(rel, NULL, (List*)cmd->def, tab->newAccessMethod); break; case AT_SetTableSpace: /* SET TABLESPACE */ @@ -8719,7 +8721,7 @@ ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel, NULL /* withOptions */, NULL /* parentenc */, false /* explicitOnly */, - RelationIsAoCols(rel) /* createDefaultOne */); + RelationIsAoCols(rel) /* createDefaultOne */, true); /* * Store the encoding clause for AO/CO tables. */ @@ -16122,10 +16124,6 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation, bool repl_repl[Natts_pg_class]; const TableAmRoutine * newAM; static char *validnsps[] = HEAP_RELOPT_NAMESPACES; - Oid tableam; - - /* Get the new table AM if applicable. Otherwise get the one from the reltion. */ - tableam = (newam != InvalidOid) ? newam : rel->rd_rel->relam; if (defList == NIL && operation != AT_ReplaceRelOptions) return; /* nothing to do */ diff --git a/src/include/access/reloptions.h b/src/include/access/reloptions.h index a52b526d6a..719f67b0e2 100644 --- a/src/include/access/reloptions.h +++ b/src/include/access/reloptions.h @@ -305,7 +305,7 @@ extern void validate_and_adjust_options(StdRdOptions *result, relopt_value *opti extern void validateAOCOColumnEncodingClauses(List *aocoColumnEncoding); extern List *transformColumnEncoding(const TableAmRoutine *tam, Relation rel, List *colDefs, List *stenc, List *withOptions, List *parentenc, - bool explicitOnly, bool createDefaultOne); + bool explicitOnly, bool createDefaultOne, bool appendonly); List* transfromColumnEncodingAocoRootPartition(List *colDefs, List *stenc, List *withOptions, bool errorOnEncodingClause); diff --git a/src/test/regress/expected/alter_table_set_am.out b/src/test/regress/expected/alter_table_set_am.out index f809c9cb14..f165717612 100644 --- a/src/test/regress/expected/alter_table_set_am.out +++ b/src/test/regress/expected/alter_table_set_am.out @@ -755,8 +755,8 @@ SELECT c.relname, a.attnum, a.attoptions FROM pg_attribute_encoding a, pg_class SELECT c.relname, a.amname, c.reloptions FROM pg_class c JOIN pg_am a ON c.relam = a.oid WHERE c.relname LIKE 'ao2co%'; relname | amname | reloptions ---------+-----------+--------------------------------------------------------- - ao2co | ao_column | - ao2co2 | ao_column | + ao2co | ao_column | {blocksize=65536,compresslevel=5} + ao2co2 | ao_column | {blocksize=65536,compresslevel=5} ao2co3 | ao_column | {blocksize=32768,compresstype=rle_type,compresslevel=3} ao2co4 | ao_column | {blocksize=32768,compresstype=rle_type,compresslevel=3} (4 rows) @@ -766,8 +766,8 @@ SELECT c.relname,a.blocksize,a.compresslevel,a.checksum,a.compresstype,a.columns FROM pg_appendonly a, pg_class c WHERE a.relid = c.oid AND relname like ('ao2co%'); relname | blocksize | compresslevel | checksum | compresstype | columnstore ---------+-----------+---------------+----------+--------------+------------- - ao2co | 32768 | 0 | t | | t - ao2co2 | 32768 | 0 | t | | t + ao2co | 65536 | 5 | t | zlib | t + ao2co2 | 65536 | 5 | t | zlib | t ao2co3 | 32768 | 3 | t | rle_type | t ao2co4 | 32768 | 3 | t | rle_type | t (4 rows) @@ -812,14 +812,14 @@ SELECT relname, relfrozenxid FROM pg_class WHERE relname LIKE 'co2heap%'; SELECT c.relname, a.attnum, attoptions FROM pg_attribute_encoding a, pg_class c WHERE a.attrelid=c.oid AND c.relname LIKE 'co2heap%'; relname | attnum | attoptions ----------+--------+----------------------------------------------------- - co2heap | 1 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap | 2 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap2 | 1 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap2 | 2 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap3 | 1 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap3 | 2 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap4 | 1 | {compresstype=zlib,blocksize=65536,compresslevel=5} - co2heap4 | 2 | {compresstype=zlib,blocksize=65536,compresslevel=5} + co2heap | 1 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap | 2 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap2 | 1 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap2 | 2 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap3 | 1 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap3 | 2 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap4 | 1 | {compresstype=zlib,compresslevel=5,blocksize=65536} + co2heap4 | 2 | {compresstype=zlib,compresslevel=5,blocksize=65536} (8 rows) CREATE TEMP TABLE relfilebeforeco2heap AS @@ -934,8 +934,8 @@ DROP TABLE co2heap2; DROP TABLE co2heap3; DROP TABLE co2heap4; -- Scenario 7: AOCO to AO -CREATE TABLE co2ao(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); -CREATE TABLE co2ao2(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); +CREATE TABLE co2ao(a int, b int) WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=3); +CREATE TABLE co2ao2(a int, b int) WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=3); CREATE TABLE co2ao3(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); CREATE TABLE co2ao4(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); CREATE INDEX aoi ON co2ao(b); @@ -949,8 +949,8 @@ INSERT INTO co2ao4 SELECT i,i FROM generate_series(1,5) i; SELECT relname, reloptions FROM pg_class WHERE relname LIKE 'co2ao%'; relname | reloptions ---------+--------------------------------------------------------- - co2ao | {compresstype=rle_type,compresslevel=3,blocksize=65536} - co2ao2 | {compresstype=rle_type,compresslevel=3,blocksize=65536} + co2ao | {compresstype=zlib,compresslevel=3,blocksize=65536} + co2ao2 | {compresstype=zlib,compresslevel=3,blocksize=65536} co2ao3 | {compresstype=rle_type,compresslevel=3,blocksize=65536} co2ao4 | {compresstype=rle_type,compresslevel=3,blocksize=65536} (4 rows) @@ -959,8 +959,8 @@ SELECT relname, reloptions FROM pg_class WHERE relname LIKE 'co2ao%'; SELECT c.relname, p.compresstype, p.compresslevel, p.blocksize FROM pg_class c, pg_appendonly p WHERE c.relname LIKE 'co2ao%' AND c.oid = p.relid; relname | compresstype | compresslevel | blocksize ---------+--------------+---------------+----------- - co2ao | rle_type | 3 | 65536 - co2ao2 | rle_type | 3 | 65536 + co2ao | zlib | 3 | 65536 + co2ao2 | zlib | 3 | 65536 co2ao3 | rle_type | 3 | 65536 co2ao4 | rle_type | 3 | 65536 (4 rows) @@ -969,10 +969,10 @@ SELECT c.relname, p.compresstype, p.compresslevel, p.blocksize FROM pg_class c, SELECT c.relname, a.attnum, attoptions FROM pg_attribute_encoding a, pg_class c WHERE a.attrelid=c.oid AND c.relname LIKE 'co2ao%'; relname | attnum | attoptions ---------+--------+--------------------------------------------------------- - co2ao | 1 | {compresstype=rle_type,compresslevel=3,blocksize=65536} - co2ao | 2 | {compresstype=rle_type,compresslevel=3,blocksize=65536} - co2ao2 | 1 | {compresstype=rle_type,compresslevel=3,blocksize=65536} - co2ao2 | 2 | {compresstype=rle_type,compresslevel=3,blocksize=65536} + co2ao | 1 | {compresstype=zlib,compresslevel=3,blocksize=65536} + co2ao | 2 | {compresstype=zlib,compresslevel=3,blocksize=65536} + co2ao2 | 1 | {compresstype=zlib,compresslevel=3,blocksize=65536} + co2ao2 | 2 | {compresstype=zlib,compresslevel=3,blocksize=65536} co2ao3 | 1 | {compresstype=rle_type,compresslevel=3,blocksize=65536} co2ao3 | 2 | {compresstype=rle_type,compresslevel=3,blocksize=65536} co2ao4 | 1 | {compresstype=rle_type,compresslevel=3,blocksize=65536} @@ -1056,7 +1056,7 @@ SELECT count(*) FROM co2ao4; SELECT * FROM gp_toolkit.__gp_aoseg('co2ao'); segment_id | segno | eof | tupcount | varblockcount | eof_uncompressed | modcount | formatversion | state ------------+-------+-----+----------+---------------+------------------+----------+---------------+------- - 0 | 0 | 88 | 3 | 1 | 88 | 1 | 3 | 1 + 0 | 0 | 72 | 3 | 1 | 88 | 1 | 3 | 1 1 | 0 | 40 | 1 | 1 | 40 | 1 | 3 | 1 2 | 0 | 40 | 1 | 1 | 40 | 1 | 3 | 1 (3 rows) @@ -1103,8 +1103,8 @@ SELECT gp_segment_id, (gp_toolkit.__gp_aoblkdir('co2ao3')).* FROM gp_dist_random SELECT c.relname, p.compresstype, p.compresslevel, p.blocksize FROM pg_class c, pg_appendonly p WHERE c.relname LIKE 'co2ao%' AND c.oid = p.relid; relname | compresstype | compresslevel | blocksize ---------+--------------+---------------+----------- - co2ao | | 0 | 32768 - co2ao2 | | 0 | 32768 + co2ao | zlib | 3 | 65536 + co2ao2 | zlib | 3 | 65536 co2ao3 | zlib | 7 | 32768 co2ao4 | zlib | 7 | 32768 (4 rows) @@ -1121,10 +1121,10 @@ SELECT c.relname, a.amname FROM pg_class c JOIN pg_am a ON c.relam = a.oid WHERE -- Only the new tables altered w/ reloptions supplies should have reloptions. SELECT relname, reloptions FROM pg_class WHERE relname LIKE 'co2ao%'; - relname | reloptions ----------+------------------------------------- - co2ao | - co2ao2 | + relname | reloptions +---------+----------------------------------------------------- + co2ao | {compresstype=zlib,compresslevel=3,blocksize=65536} + co2ao2 | {compresstype=zlib,compresslevel=3,blocksize=65536} co2ao3 | {compresstype=zlib,compresslevel=7} co2ao4 | {compresstype=zlib,compresslevel=7} (4 rows) diff --git a/src/test/regress/sql/alter_table_set_am.sql b/src/test/regress/sql/alter_table_set_am.sql index cc572c2fc1..f3c1a235c9 100644 --- a/src/test/regress/sql/alter_table_set_am.sql +++ b/src/test/regress/sql/alter_table_set_am.sql @@ -507,8 +507,8 @@ DROP TABLE co2heap3; DROP TABLE co2heap4; -- Scenario 7: AOCO to AO -CREATE TABLE co2ao(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); -CREATE TABLE co2ao2(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); +CREATE TABLE co2ao(a int, b int) WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=3); +CREATE TABLE co2ao2(a int, b int) WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=3); CREATE TABLE co2ao3(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); CREATE TABLE co2ao4(a int, b int) WITH (appendonly=true, orientation=column, compresstype=rle_type, compresslevel=3); CREATE INDEX aoi ON co2ao(b); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
