Skip to content

Commit 4ffc74b

Browse files
authored
Merge pull request ClickHouse#77319 from Avogar/fix-bool-partition
Fix name for partition with a Bool value
2 parents a0c1164 + 1291c91 commit 4ffc74b

File tree

5 files changed

+18
-2
lines changed

5 files changed

+18
-2
lines changed

src/DataTypes/Serializations/SerializationBool.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,8 @@ ReturnType deserializeImpl(
225225
void SerializationBool::deserializeBinary(DB::Field & field, DB::ReadBuffer & istr, const DB::FormatSettings & settings) const
226226
{
227227
nested_serialization->deserializeBinary(field, istr, settings);
228-
field = bool(field.safeGet<bool>());
228+
if (!settings.binary.read_bool_field_as_int)
229+
field = bool(field.safeGet<bool>());
229230
}
230231

231232
SerializationBool::SerializationBool(const SerializationPtr &nested_)

src/Formats/FormatSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ struct FormatSettings
127127
bool decode_types_in_binary_format = false;
128128
bool read_json_as_string = false;
129129
bool write_json_as_string = false;
130+
bool read_bool_field_as_int = false;
130131
} binary{};
131132

132133
struct

src/Storages/MergeTree/MergeTreePartition.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,12 @@ void MergeTreePartition::load(const IMergeTreeDataPart & part)
416416
const auto & partition_key_sample = adjustPartitionKey(metadata_snapshot, part.storage.getContext()).sample_block;
417417

418418
auto file = part.readFile("partition.dat");
419+
FormatSettings settings;
420+
/// For compatibility we should read values of Bool data type as 0/1 int Field, not as bool true/false Field.
421+
settings.binary.read_bool_field_as_int = true;
419422
value.resize(partition_key_sample.columns());
420423
for (size_t i = 0; i < partition_key_sample.columns(); ++i)
421-
partition_key_sample.getByPosition(i).type->getDefaultSerialization()->deserializeBinary(value[i], *file, {});
424+
partition_key_sample.getByPosition(i).type->getDefaultSerialization()->deserializeBinary(value[i], *file, settings);
422425
}
423426

424427
std::unique_ptr<WriteBufferFromFileBase> MergeTreePartition::store(
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
0_1_1_0
2+
1_2_2_0
3+
false
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
DROP TABLE IF EXISTS t0;
2+
CREATE TABLE t0 (c0 Bool) ENGINE = MergeTree() ORDER BY tuple() PARTITION BY (c0);
3+
INSERT INTO TABLE t0 (c0) VALUES (FALSE), (TRUE);
4+
SELECT part_name FROM system.parts where table='t0' and database=currentDatabase();
5+
DELETE FROM t0 WHERE c0;
6+
SELECT c0 FROM t0;
7+
DROP TABLE t0;
8+

0 commit comments

Comments
 (0)