diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e916c78d..29eae4d10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ accidentally triggering the load of a previous DB version.** * #5214 Fix use of prepared statement in async module * #5290 Compression can't be enabled on continuous aggregates when segmentby/orderby columns need quotation * #5239 Fix next_start calculation for fixed schedules +* #5336 Use NameData and namestrcpy for names ## 2.9.3 (2023-02-03) diff --git a/scripts/test_update_from_tag.sh b/scripts/test_update_from_tag.sh index cd95dc7fc..9ea9a0252 100755 --- a/scripts/test_update_from_tag.sh +++ b/scripts/test_update_from_tag.sh @@ -43,8 +43,12 @@ remove_containers() { docker rm -vf ${CONTAINER_CLEAN_RESTORE} 2>/dev/null docker rm -vf ${CONTAINER_UPDATED} 2>/dev/null docker rm -vf ${CONTAINER_CLEAN_RERUN} 2>/dev/null - docker volume rm -f ${CLEAN_VOLUME} 2>/dev/null - docker volume rm -f ${UPDATE_VOLUME} 2>/dev/null + if [[ -n "${CLEAN_VOLUME}" ]]; then + docker volume rm -f ${CLEAN_VOLUME} 2>/dev/null + fi + if [[ -n "${UPDATE_VOLUME}" ]]; then + docker volume rm -f ${UPDATE_VOLUME} 2>/dev/null + fi } cleanup() { diff --git a/src/partitioning.c b/src/partitioning.c index 33d4d9adc..f33aa7b1f 100644 --- a/src/partitioning.c +++ b/src/partitioning.c @@ -122,7 +122,11 @@ partitioning_func_set_func_fmgr(PartitioningFunc *pf, Oid argtype, DimensionType if (dimtype != DIMENSION_TYPE_CLOSED && dimtype != DIMENSION_TYPE_OPEN) elog(ERROR, "invalid dimension type %u", dimtype); - funcoid = ts_lookup_proc_filtered(pf->schema, pf->name, &pf->rettype, filter, &argtype); + funcoid = ts_lookup_proc_filtered(NameStr(pf->schema), + NameStr(pf->name), + &pf->rettype, + filter, + &argtype); if (!OidIsValid(funcoid)) { @@ -145,7 +149,7 @@ partitioning_func_set_func_fmgr(PartitioningFunc *pf, Oid argtype, DimensionType List * ts_partitioning_func_qualified_name(PartitioningFunc *pf) { - return list_make2(makeString(pf->schema), makeString(pf->name)); + return list_make2(makeString(NameStr(pf->schema)), makeString(NameStr(pf->name))); } static Oid @@ -184,16 +188,16 @@ ts_partitioning_info_create(const char *schema, const char *partfunc, const char errmsg("partitioning function information cannot be null"))); pinfo = palloc0(sizeof(PartitioningInfo)); - strlcpy(pinfo->partfunc.name, partfunc, NAMEDATALEN); - strlcpy(pinfo->column, partcol, NAMEDATALEN); - pinfo->column_attnum = get_attnum(relid, pinfo->column); + namestrcpy(&pinfo->partfunc.name, partfunc); + namestrcpy(&pinfo->column, partcol); + pinfo->column_attnum = get_attnum(relid, NameStr(pinfo->column)); pinfo->dimtype = dimtype; /* handle the case that the attribute has been dropped */ if (pinfo->column_attnum == InvalidAttrNumber) return NULL; - strlcpy(pinfo->partfunc.schema, schema, NAMEDATALEN); + namestrcpy(&pinfo->partfunc.schema, schema); /* Lookup the type cache entry to access the hash function for the type */ columntype = get_atttype(relid, pinfo->column_attnum); @@ -250,8 +254,8 @@ ts_partitioning_func_apply(PartitioningInfo *pinfo, Oid collation, Datum value) if (fcinfo->isnull) elog(ERROR, "partitioning function \"%s.%s\" returned NULL", - pinfo->partfunc.schema, - pinfo->partfunc.name); + NameStr(pinfo->partfunc.schema), + NameStr(pinfo->partfunc.name)); return result; } diff --git a/src/partitioning.h b/src/partitioning.h index fae7cac5d..677831862 100644 --- a/src/partitioning.h +++ b/src/partitioning.h @@ -25,8 +25,8 @@ typedef struct PartitioningFunc { - char schema[NAMEDATALEN]; - char name[NAMEDATALEN]; + NameData schema; + NameData name; Oid rettype; /* @@ -38,7 +38,7 @@ typedef struct PartitioningFunc typedef struct PartitioningInfo { - char column[NAMEDATALEN]; + NameData column; AttrNumber column_attnum; DimensionType dimtype; PartitioningFunc partfunc; diff --git a/src/ts_catalog/catalog.c b/src/ts_catalog/catalog.c index 1e009012c..eb629d918 100644 --- a/src/ts_catalog/catalog.c +++ b/src/ts_catalog/catalog.c @@ -381,7 +381,7 @@ static void catalog_database_info_init(CatalogDatabaseInfo *info) { info->database_id = MyDatabaseId; - strlcpy(info->database_name, get_database_name(MyDatabaseId), NAMEDATALEN); + namestrcpy(&info->database_name, get_database_name(MyDatabaseId)); info->schema_id = get_namespace_oid(CATALOG_SCHEMA_NAME, false); info->owner_uid = catalog_owner(); diff --git a/src/ts_catalog/catalog.h b/src/ts_catalog/catalog.h index 2c4796fef..ed3137ac1 100644 --- a/src/ts_catalog/catalog.h +++ b/src/ts_catalog/catalog.h @@ -1378,7 +1378,7 @@ typedef struct CatalogTableInfo typedef struct CatalogDatabaseInfo { - char database_name[NAMEDATALEN]; + NameData database_name; Oid database_id; Oid schema_id; Oid owner_uid;