[fix](table_options) fix potential NPE when quering table_options systable (#40944) (#41040)

bp #40944
This commit is contained in:
Mingyu Chen
2024-09-20 16:57:02 +08:00
committed by GitHub
parent 68b7783e3a
commit 3484e7b2ff

View File

@ -1090,40 +1090,45 @@ public class MetadataGenerator {
continue;
}
OlapTable olapTable = (OlapTable) table;
TRow trow = new TRow();
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
trow.addToColumnValue(
new TCell().setStringVal(olapTable.getKeysType().toMetadata())); // TABLE_MODEL
trow.addToColumnValue(
new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes
olapTable.readLock();
try {
TRow trow = new TRow();
trow.addToColumnValue(new TCell().setStringVal(catalog.getName())); // TABLE_CATALOG
trow.addToColumnValue(new TCell().setStringVal(database.getFullName())); // TABLE_SCHEMA
trow.addToColumnValue(new TCell().setStringVal(table.getName())); // TABLE_NAME
trow.addToColumnValue(
new TCell().setStringVal(olapTable.getKeysType().toMetadata())); // TABLE_MODEL
trow.addToColumnValue(
new TCell().setStringVal(olapTable.getKeyColAsString())); // key columTypes
DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo();
if (distributionInfo.getType() == DistributionInfoType.HASH) {
HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo;
List<Column> distributionColumns = hashDistributionInfo.getDistributionColumns();
StringBuilder distributeKey = new StringBuilder();
for (Column c : distributionColumns) {
if (distributeKey.length() != 0) {
distributeKey.append(",");
DistributionInfo distributionInfo = olapTable.getDefaultDistributionInfo();
if (distributionInfo.getType() == DistributionInfoType.HASH) {
HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo;
List<Column> distributionColumns = hashDistributionInfo.getDistributionColumns();
StringBuilder distributeKey = new StringBuilder();
for (Column c : distributionColumns) {
if (distributeKey.length() != 0) {
distributeKey.append(",");
}
distributeKey.append(c.getName());
}
distributeKey.append(c.getName());
}
if (distributeKey.length() == 0) {
trow.addToColumnValue(new TCell().setStringVal(""));
if (distributeKey.length() == 0) {
trow.addToColumnValue(new TCell().setStringVal(""));
} else {
trow.addToColumnValue(
new TCell().setStringVal(distributeKey.toString()));
}
trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE
} else {
trow.addToColumnValue(
new TCell().setStringVal(distributeKey.toString()));
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE
}
trow.addToColumnValue(new TCell().setStringVal("HASH")); // DISTRIBUTE_TYPE
} else {
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_KEY
trow.addToColumnValue(new TCell().setStringVal("RANDOM")); // DISTRIBUTE_TYPE
trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM
trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM
dataBatch.add(trow);
} finally {
olapTable.readUnlock();
}
trow.addToColumnValue(new TCell().setIntVal(distributionInfo.getBucketNum())); // BUCKETS_NUM
trow.addToColumnValue(new TCell().setIntVal(olapTable.getPartitionNum())); // PARTITION_NUM
dataBatch.add(trow);
}
}