Skip to content

Commit fe6d972

Browse files
committed
Fix: show exceed capacity entries
1 parent 075581f commit fe6d972

File tree

3 files changed

+159
-37
lines changed

3 files changed

+159
-37
lines changed

python/test/test_show.py

+14
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,17 @@ def test_show_columns(self):
6060
res = infinity_obj.disconnect()
6161
assert res.error_code == ErrorCode.OK
6262

63+
def test_show_big_databases(self):
64+
infinity_obj = infinity.connect(common_values.TEST_REMOTE_HOST)
65+
66+
for i in range(8193):
67+
infinity_obj.drop_database(f"test_show_big_databases_{i}", ConflictType.Ignore)
68+
69+
for i in range(8193):
70+
infinity_obj.create_database(f"test_show_big_databases_{i}", ConflictType.Ignore)
71+
72+
res = infinity_obj.list_databases()
73+
assert res.error_code == ErrorCode.OK
74+
75+
for i in range(8193):
76+
infinity_obj.drop_database(f"test_show_big_databases_{i}", ConflictType.Ignore)

python/test_http_api/test_index.py

+1
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ def test_http_insert_data_fulltext_index_search(self):
537537
"header": False,
538538
"delimiter": "\t"
539539
})
540+
self.drop_table(db_name, table_name)
540541

541542
return
542543

src/executor/operator/physical_show.cpp

+144-37
Original file line numberDiff line numberDiff line change
@@ -799,12 +799,15 @@ void PhysicalShow::ExecuteShowDatabases(QueryContext *query_context, ShowOperato
799799
Vector<DatabaseDetail> databases_detail = txn->ListDatabases();
800800

801801
// Prepare the output data block
802-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
802+
UniquePtr<DataBlock> output_block_ptr = nullptr;
803803
Vector<SharedPtr<DataType>> column_types{varchar_type};
804-
805-
output_block_ptr->Init(column_types);
804+
SizeT row_count = 0;
806805

807806
for (auto &database_detail : databases_detail) {
807+
if (!output_block_ptr) {
808+
output_block_ptr = DataBlock::MakeUniquePtr();
809+
output_block_ptr->Init(column_types);
810+
}
808811

809812
SizeT column_id = 0;
810813
{
@@ -814,10 +817,19 @@ void PhysicalShow::ExecuteShowDatabases(QueryContext *query_context, ShowOperato
814817
ValueExpression value_expr(value);
815818
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
816819
}
820+
821+
if (++row_count == output_block_ptr->capacity()) {
822+
output_block_ptr->Finalize();
823+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
824+
output_block_ptr = nullptr;
825+
row_count = 0;
826+
}
817827
}
818828

819-
output_block_ptr->Finalize();
820-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
829+
if (output_block_ptr) {
830+
output_block_ptr->Finalize();
831+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
832+
}
821833
}
822834

823835
/**
@@ -843,13 +855,17 @@ void PhysicalShow::ExecuteShowTables(QueryContext *query_context, ShowOperatorSt
843855
}
844856

845857
// Prepare the output data block
846-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
858+
UniquePtr<DataBlock> output_block_ptr = nullptr;
847859
Vector<SharedPtr<DataType>>
848860
column_types{varchar_type, varchar_type, varchar_type, bigint_type, bigint_type, bigint_type, bigint_type, bigint_type};
849-
850-
output_block_ptr->Init(column_types);
861+
SizeT row_count = 0;
851862

852863
for (auto &table_detail : table_collections_detail) {
864+
// Initialize the output data block
865+
if (!output_block_ptr) {
866+
output_block_ptr = DataBlock::MakeUniquePtr();
867+
output_block_ptr->Init(column_types);
868+
}
853869

854870
SizeT column_id = 0;
855871
{
@@ -958,10 +974,19 @@ void PhysicalShow::ExecuteShowTables(QueryContext *query_context, ShowOperatorSt
958974
ValueExpression value_expr(value);
959975
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
960976
}
977+
978+
if (++row_count == output_block_ptr->capacity()) {
979+
output_block_ptr->Finalize();
980+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
981+
output_block_ptr = nullptr;
982+
row_count = 0;
983+
}
961984
}
962985

963-
output_block_ptr->Finalize();
964-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
986+
if (output_block_ptr) {
987+
output_block_ptr->Finalize();
988+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
989+
}
965990
}
966991

967992
void PhysicalShow::ExecuteShowViews(QueryContext *query_context, ShowOperatorState *show_operator_state) {
@@ -980,13 +1005,16 @@ void PhysicalShow::ExecuteShowViews(QueryContext *query_context, ShowOperatorSta
9801005
}
9811006

9821007
// Prepare the output data block
983-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
1008+
UniquePtr<DataBlock> output_block_ptr = nullptr;
9841009
Vector<SharedPtr<DataType>>
9851010
column_types{varchar_type, varchar_type, varchar_type, bigint_type, bigint_type, bigint_type, bigint_type, bigint_type};
986-
987-
output_block_ptr->Init(column_types);
1011+
SizeT row_count = 0;
9881012

9891013
for (auto &view_detail : views_detail) {
1014+
if (!output_block_ptr) {
1015+
output_block_ptr = DataBlock::MakeUniquePtr();
1016+
output_block_ptr->Init(column_types);
1017+
}
9901018

9911019
SizeT column_id = 0;
9921020
{
@@ -1013,10 +1041,19 @@ void PhysicalShow::ExecuteShowViews(QueryContext *query_context, ShowOperatorSta
10131041
ValueExpression value_expr(value);
10141042
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
10151043
}
1044+
1045+
if (++row_count == output_block_ptr->capacity()) {
1046+
output_block_ptr->Finalize();
1047+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1048+
output_block_ptr = nullptr;
1049+
row_count = 0;
1050+
}
10161051
}
10171052

1018-
output_block_ptr->Finalize();
1019-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1053+
if (output_block_ptr) {
1054+
output_block_ptr->Finalize();
1055+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1056+
}
10201057
}
10211058

10221059
void PhysicalShow::ExecuteShowProfiles(QueryContext *query_context, ShowOperatorState *show_operator_state) {
@@ -1041,7 +1078,7 @@ void PhysicalShow::ExecuteShowProfiles(QueryContext *query_context, ShowOperator
10411078
SharedPtr<TableDef> table_def = TableDef::Make(MakeShared<String>("default"), MakeShared<String>("profiles"), column_defs);
10421079

10431080
// create data block for output state
1044-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
1081+
UniquePtr<DataBlock> output_block_ptr = nullptr;
10451082
Vector<SharedPtr<DataType>> column_types{varchar_type,
10461083
varchar_type,
10471084
varchar_type,
@@ -1053,10 +1090,14 @@ void PhysicalShow::ExecuteShowProfiles(QueryContext *query_context, ShowOperator
10531090
varchar_type,
10541091
varchar_type,
10551092
varchar_type};
1056-
output_block_ptr->Init(column_types);
1093+
SizeT row_count = 0;
10571094

10581095
auto records = catalog->GetProfilerRecords();
10591096
for (SizeT i = 0; i < records.size(); ++i) {
1097+
if (!output_block_ptr) {
1098+
output_block_ptr = DataBlock::MakeUniquePtr();
1099+
output_block_ptr->Init(column_types);
1100+
}
10601101

10611102
// Output record no
10621103
ValueExpression record_no_expr(Value::MakeVarchar(fmt::format("{}", i)));
@@ -1078,9 +1119,19 @@ void PhysicalShow::ExecuteShowProfiles(QueryContext *query_context, ShowOperator
10781119
NanoSeconds total_duration(total_cost);
10791120
ValueExpression phase_cost_expr(Value::MakeVarchar(BaseProfiler::ElapsedToString(total_duration)));
10801121
phase_cost_expr.AppendToChunk(output_block_ptr->column_vectors.back());
1122+
1123+
if (++row_count == output_block_ptr->capacity()) {
1124+
output_block_ptr->Finalize();
1125+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1126+
output_block_ptr = nullptr;
1127+
row_count = 0;
1128+
}
1129+
}
1130+
1131+
if (output_block_ptr) {
1132+
output_block_ptr->Finalize();
1133+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
10811134
}
1082-
output_block_ptr->Finalize();
1083-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
10841135
}
10851136

10861137
/**
@@ -1110,17 +1161,21 @@ void PhysicalShow::ExecuteShowColumns(QueryContext *query_context, ShowOperatorS
11101161
SharedPtr<TableDef> table_def = TableDef::Make(MakeShared<String>("default"), MakeShared<String>("Views"), column_defs);
11111162

11121163
// create data block for output state
1113-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
1164+
UniquePtr<DataBlock> output_block_ptr = nullptr;
11141165
Vector<SharedPtr<DataType>> column_types{
11151166
varchar_type,
11161167
varchar_type,
11171168
varchar_type,
11181169
};
1119-
1120-
output_block_ptr->Init(column_types);
1170+
SizeT row_count = 0;
11211171

11221172
SizeT column_count = table_entry->ColumnCount();
11231173
for (SizeT input_column_id = 0; input_column_id < column_count; ++input_column_id) {
1174+
if (!output_block_ptr) {
1175+
output_block_ptr = DataBlock::MakeUniquePtr();
1176+
output_block_ptr->Init(column_types);
1177+
}
1178+
11241179
const ColumnDef *column = table_entry->GetColumnDefByID(input_column_id);
11251180

11261181
SizeT output_column_idx = 0;
@@ -1160,10 +1215,19 @@ void PhysicalShow::ExecuteShowColumns(QueryContext *query_context, ShowOperatorS
11601215
ValueExpression value_expr(value);
11611216
value_expr.AppendToChunk(output_block_ptr->column_vectors[output_column_idx]);
11621217
}
1218+
1219+
if (++row_count == output_block_ptr->capacity()) {
1220+
output_block_ptr->Finalize();
1221+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1222+
output_block_ptr = nullptr;
1223+
row_count = 0;
1224+
}
11631225
}
1164-
output_block_ptr->Finalize();
11651226

1166-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1227+
if (output_block_ptr) {
1228+
output_block_ptr->Finalize();
1229+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1230+
}
11671231
}
11681232

11691233
void PhysicalShow::ExecuteShowSegments(QueryContext *query_context, ShowOperatorState *show_operator_state) {
@@ -1178,15 +1242,20 @@ void PhysicalShow::ExecuteShowSegments(QueryContext *query_context, ShowOperator
11781242

11791243
auto varchar_type = MakeShared<DataType>(LogicalType::kVarchar);
11801244
auto bigint_type = MakeShared<DataType>(LogicalType::kBigInt);
1181-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
1245+
UniquePtr<DataBlock> output_block_ptr = nullptr;
11821246
Vector<SharedPtr<DataType>> column_types{
11831247
bigint_type,
11841248
varchar_type,
11851249
varchar_type,
11861250
};
1187-
output_block_ptr->Init(column_types);
1251+
SizeT row_count = 0;
11881252

11891253
for (auto &[_, segment_entry] : table_entry->segment_map()) {
1254+
if (!output_block_ptr) {
1255+
output_block_ptr = DataBlock::MakeUniquePtr();
1256+
output_block_ptr->Init(column_types);
1257+
}
1258+
11901259
SizeT column_id = 0;
11911260
{
11921261
Value value = Value::MakeBigInt(segment_entry->segment_id());
@@ -1208,10 +1277,19 @@ void PhysicalShow::ExecuteShowSegments(QueryContext *query_context, ShowOperator
12081277
ValueExpression value_expr(value);
12091278
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
12101279
}
1280+
1281+
if (++row_count == output_block_ptr->capacity()) {
1282+
output_block_ptr->Finalize();
1283+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1284+
output_block_ptr = nullptr;
1285+
row_count = 0;
1286+
}
12111287
}
12121288

1213-
output_block_ptr->Finalize();
1214-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1289+
if (output_block_ptr) {
1290+
output_block_ptr->Finalize();
1291+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1292+
}
12151293
}
12161294

12171295
void PhysicalShow::ExecuteShowSegmentDetail(QueryContext *query_context, ShowOperatorState *show_operator_state) {
@@ -1335,13 +1413,13 @@ void PhysicalShow::ExecuteShowBlocks(QueryContext *query_context, ShowOperatorSt
13351413

13361414
auto bigint_type = MakeShared<DataType>(LogicalType::kBigInt);
13371415
auto varchar_type = MakeShared<DataType>(LogicalType::kVarchar);
1338-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
1416+
UniquePtr<DataBlock> output_block_ptr = nullptr;
13391417
Vector<SharedPtr<DataType>> column_types{
13401418
bigint_type,
13411419
varchar_type,
13421420
bigint_type,
13431421
};
1344-
output_block_ptr->Init(column_types);
1422+
SizeT row_count = 0;
13451423

13461424
auto segment_entry = table_entry->GetSegmentByID(*segment_id_, begin_ts);
13471425
if (!segment_entry) {
@@ -1350,6 +1428,11 @@ void PhysicalShow::ExecuteShowBlocks(QueryContext *query_context, ShowOperatorSt
13501428
}
13511429
auto block_entry_iter = BlockEntryIter(segment_entry.get());
13521430
for (auto *block_entry = block_entry_iter.Next(); block_entry != nullptr; block_entry = block_entry_iter.Next()) {
1431+
if (!output_block_ptr) {
1432+
output_block_ptr = DataBlock::MakeUniquePtr();
1433+
output_block_ptr->Init(column_types);
1434+
}
1435+
13531436
SizeT column_id = 0;
13541437
{
13551438
Value value = Value::MakeBigInt(block_entry->block_id());
@@ -1371,10 +1454,19 @@ void PhysicalShow::ExecuteShowBlocks(QueryContext *query_context, ShowOperatorSt
13711454
ValueExpression value_expr(value);
13721455
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
13731456
}
1457+
1458+
if (++row_count == output_block_ptr->capacity()) {
1459+
output_block_ptr->Finalize();
1460+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1461+
output_block_ptr = nullptr;
1462+
row_count = 0;
1463+
}
13741464
}
13751465

1376-
output_block_ptr->Finalize();
1377-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1466+
if (output_block_ptr) {
1467+
output_block_ptr->Finalize();
1468+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
1469+
}
13781470
}
13791471

13801472
void PhysicalShow::ExecuteShowBlockDetail(QueryContext *query_context, ShowOperatorState *show_operator_state) {
@@ -1606,7 +1698,7 @@ void PhysicalShow::ExecuteShowBlockColumn(QueryContext *query_context, ShowOpera
16061698
++column_id;
16071699
{
16081700
String outline_storage;
1609-
for(SizeT idx = 0; idx < outline_count; ++ idx) {
1701+
for (SizeT idx = 0; idx < outline_count; ++idx) {
16101702
outline_storage += *(column_block_entry->OutlineFilename(idx));
16111703
outline_storage += ";";
16121704
}
@@ -2178,13 +2270,18 @@ void PhysicalShow::ExecuteShowIndexes(QueryContext *query_context, ShowOperatorS
21782270

21792271
auto table_def = TableDef::Make(MakeShared<String>("default"), MakeShared<String>("Views"), column_defs);
21802272

2181-
UniquePtr<DataBlock> output_block_ptr = DataBlock::MakeUniquePtr();
2273+
UniquePtr<DataBlock> output_block_ptr = nullptr;
21822274
Vector<SharedPtr<DataType>> column_types{varchar_type, varchar_type, bigint_type, varchar_type, varchar_type, varchar_type, varchar_type};
2183-
output_block_ptr->Init(column_types);
2275+
SizeT row_count = 0;
21842276

21852277
{
21862278
auto map_guard = table_entry->IndexMetaMap();
21872279
for (const auto &[index_name, index_meta] : *map_guard) {
2280+
if (!output_block_ptr) {
2281+
output_block_ptr = DataBlock::MakeUniquePtr();
2282+
output_block_ptr->Init(column_types);
2283+
}
2284+
21882285
auto [table_index_entry, status] = index_meta->GetEntryNolock(txn->TxnID(), txn->BeginTS());
21892286
if (!status.ok()) {
21902287
// Index isn't found.
@@ -2256,10 +2353,20 @@ void PhysicalShow::ExecuteShowIndexes(QueryContext *query_context, ShowOperatorS
22562353
ValueExpression value_expr(value);
22572354
value_expr.AppendToChunk(output_block_ptr->column_vectors[column_id]);
22582355
}
2356+
2357+
if (++row_count == output_block_ptr->capacity()) {
2358+
output_block_ptr->Finalize();
2359+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
2360+
output_block_ptr = nullptr;
2361+
row_count = 0;
2362+
}
22592363
}
22602364
}
2261-
output_block_ptr->Finalize();
2262-
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
2365+
2366+
if (output_block_ptr) {
2367+
output_block_ptr->Finalize();
2368+
show_operator_state->output_.emplace_back(std::move(output_block_ptr));
2369+
}
22632370
}
22642371

22652372
void PhysicalShow::ExecuteShowViewDetail(QueryContext *query_context,

0 commit comments

Comments
 (0)