Improve the test clarity

This commit is contained in:
Jakub Kuklis 2022-04-14 11:08:36 +02:00
parent f19e473482
commit 5c34585a00
3 changed files with 64 additions and 53 deletions

View File

@ -2280,7 +2280,7 @@ namespace
{
bool is_group = (parent_field_descriptor->type() == FieldTypeId::TYPE_GROUP);
writer->endNestedMessage(parent_field_descriptor->number(), is_group,
should_skip_if_empty || nullGoogleWrapper(row_num));
should_skip_if_empty || (google_wrappers_special_treatment && nullGoogleWrapper(row_num)));
}
else if (has_envelope_as_parent)
{
@ -2418,16 +2418,6 @@ namespace
bool nullGoogleWrapper(size_t row_num)
{
return isGoogleWrapperField(parent_field_descriptor) && mutable_columns[0].get()->isNullAt(row_num);
// if (isGoogleWrapperField(parent_field_descriptor)) {
// // auto column = mutable_columns[0].get();
// // if (column->isNullable()) {
// // const auto & column_nullable = assert_cast<const ColumnNullable &>(*column);
// // const auto & null_map = column_nullable.getNullMapData();
// // return null_map[row_num];
// // }
// return mutable_columns[0].get()->isNullAt(row_num);
// }
// return false;
}
struct FieldInfo

View File

@ -1,4 +1,4 @@
Table (Nullable(String), Int32):
Insert ('str1',1),('',2),('str2',3) into table (Nullable(String), Int32):
str1 1
2
str2 3
@ -7,7 +7,7 @@ Protobuf representation of the second row:
00000000 0a 00 10 02 |....|
00000004
Decoded:
Decoded with protoc:
str {
}
ref: 2
@ -17,7 +17,7 @@ Proto message with (NULL, 1), ('', 2), ('str', 3):
00000010 10 03 |..|
00000012
Initial table after putting the message in:
Insert proto message into table (Nullable(String), Int32):
\N 1
2
str 3
@ -31,7 +31,7 @@ Proto output of the table without using Google wrappers:
00000000 02 10 01 02 10 02 07 0a 03 73 74 72 10 03 |.........str..|
0000000e
Inserting message into table (Tuple(String), Int32)
Insert proto message into table (Tuple(String), Int32)
with disabled format_protobuf_google_wrappers_special_treatment:
('') 1
('') 2

View File

@ -3,46 +3,63 @@
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
SCHEMADIR=$CURDIR/format_schemas
# shellcheck source=../shell_config.sh
. "$CURDIR"/../shell_config.sh
set -eo pipefail
BINARY_FILE_PATH=$(mktemp "$CURDIR/02266_protobuf_format_google_wrappers.XXXXXX.binary")
MESSAGE_FILE_PATH=$(mktemp "$CURDIR/02266_protobuf_format_google_wrappers_message.XXXXXX.binary")
PROTOBUF_FILE_NAME="02266_protobuf_format_google_wrappers"
PROTOBUF_FILE_PATH="$SCHEMADIR/$PROTOBUF_FILE_NAME"
echo "Table (Nullable(String), Int32):"
$CLICKHOUSE_CLIENT --multiquery <<EOF
DROP TABLE IF EXISTS google_wrappers_02266;
DROP TABLE IF EXISTS roundtrip_google_wrappers_02266;
DROP TABLE IF EXISTS before_google_wrappers_02266;
BINARY_FILE_PATH=$(mktemp "$CURDIR/${PROTOBUF_FILE_NAME}.XXXXXX.binary")
MESSAGE_FILE_PATH=$(mktemp "$CURDIR/${PROTOBUF_FILE_NAME}_message.XXXXXX.binary")
CREATE TABLE google_wrappers_02266
(
str Nullable(String),
ref Int32
) ENGINE = MergeTree ORDER BY tuple();
MAIN_TABLE="google_wrappers_02266"
ROUNDTRIP_TABLE="roundtrip_google_wrappers_02266"
COMPATIBILITY_TABLE="compatibility_google_wrappers_02266"
INSERT INTO google_wrappers_02266 VALUES ('str1', 1), ('', 2), ('str2', 3);
SELECT * FROM google_wrappers_02266;
# takes ClickHouse format and protobuf class as arguments
format_settings() {
clickhouse_format="$1"
protobuf_class="$2"
echo "FORMAT $clickhouse_format SETTINGS format_schema = '$PROTOBUF_FILE_PATH:$protobuf_class'"
}
CREATE TABLE before_google_wrappers_02266
(
str Tuple(value String),
ref Int32
) ENGINE = MergeTree ORDER BY tuple();
$CLICKHOUSE_CLIENT -n --query "
DROP TABLE IF EXISTS $MAIN_TABLE;
DROP TABLE IF EXISTS $ROUNDTRIP_TABLE;
DROP TABLE IF EXISTS $COMPATIBILITY_TABLE;
CREATE TABLE roundtrip_google_wrappers_02266 AS google_wrappers_02266
EOF
CREATE TABLE $MAIN_TABLE
(
str Nullable(String),
ref Int32
) ENGINE = MergeTree ORDER BY tuple();
$CLICKHOUSE_CLIENT --query "SELECT * FROM google_wrappers_02266 WHERE ref = 2 LIMIT 1 FORMAT ProtobufSingle SETTINGS format_schema = '$SCHEMADIR/02266_protobuf_format_google_wrappers:Message'" > "$BINARY_FILE_PATH"
CREATE TABLE $ROUNDTRIP_TABLE AS $MAIN_TABLE;
CREATE TABLE $COMPATIBILITY_TABLE
(
str Tuple(value String),
ref Int32
) ENGINE = MergeTree ORDER BY tuple();
"
INITIAL_INSERT_VALUES="('str1',1),('',2),('str2',3)"
echo "Insert $INITIAL_INSERT_VALUES into table (Nullable(String), Int32):"
$CLICKHOUSE_CLIENT -n --query "
INSERT INTO $MAIN_TABLE VALUES $INITIAL_INSERT_VALUES;
SELECT * FROM $MAIN_TABLE;
"
echo
echo "Protobuf representation of the second row:"
$CLICKHOUSE_CLIENT --query "SELECT * FROM $MAIN_TABLE WHERE ref = 2 LIMIT 1 $(format_settings ProtobufSingle Message)" > "$BINARY_FILE_PATH"
hexdump -C $BINARY_FILE_PATH
echo
echo "Decoded:"
(cd $SCHEMADIR && $PROTOC_BINARY --decode Message 02266_protobuf_format_google_wrappers.proto) < $BINARY_FILE_PATH
echo "Decoded with protoc:"
(cd $SCHEMADIR && $PROTOC_BINARY --decode Message "$PROTOBUF_FILE_NAME".proto) < $BINARY_FILE_PATH
echo
echo "Proto message with (NULL, 1), ('', 2), ('str', 3):"
@ -52,31 +69,35 @@ printf '\x09\x0A\x05\x0A\x03\x73\x74\x72\x10\x03' >> "$MESSAGE_FILE_PATH" # ('st
hexdump -C $MESSAGE_FILE_PATH
echo
echo "Initial table after putting the message in:"
$CLICKHOUSE_CLIENT --query "INSERT INTO roundtrip_google_wrappers_02266 FORMAT Protobuf SETTINGS format_schema='$SCHEMADIR/02266_protobuf_format_google_wrappers:Message'" < "$MESSAGE_FILE_PATH"
$CLICKHOUSE_CLIENT --query "SELECT * FROM roundtrip_google_wrappers_02266"
echo "Insert proto message into table (Nullable(String), Int32):"
$CLICKHOUSE_CLIENT --query "INSERT INTO $ROUNDTRIP_TABLE $(format_settings Protobuf Message)" < "$MESSAGE_FILE_PATH"
$CLICKHOUSE_CLIENT --query "SELECT * FROM $ROUNDTRIP_TABLE"
$CLICKHOUSE_CLIENT --query "SELECT * FROM roundtrip_google_wrappers_02266 FORMAT Protobuf SETTINGS format_schema = '$SCHEMADIR/02266_protobuf_format_google_wrappers:Message'" > "$BINARY_FILE_PATH"
echo
echo "Proto output of the table:"
$CLICKHOUSE_CLIENT --query "SELECT * FROM $ROUNDTRIP_TABLE $(format_settings Protobuf Message)" > "$BINARY_FILE_PATH"
hexdump -C $BINARY_FILE_PATH
$CLICKHOUSE_CLIENT --query "SELECT * FROM roundtrip_google_wrappers_02266 FORMAT Protobuf SETTINGS format_schema = '$SCHEMADIR/02266_protobuf_format_google_wrappers:MessageNoWrapper'" > "$BINARY_FILE_PATH"
echo
echo "Proto output of the table without using Google wrappers:"
$CLICKHOUSE_CLIENT --query "SELECT * FROM $ROUNDTRIP_TABLE $(format_settings Protobuf MessageNoWrapper)" > "$BINARY_FILE_PATH"
hexdump -C $BINARY_FILE_PATH
SETTING_NAME="format_protobuf_google_wrappers_special_treatment"
echo
echo "Inserting message into table (Tuple(String), Int32)"
echo "with disabled format_protobuf_google_wrappers_special_treatment:"
$CLICKHOUSE_CLIENT -n --query "SET format_protobuf_google_wrappers_special_treatment = false; INSERT INTO before_google_wrappers_02266 FORMAT Protobuf SETTINGS format_schema='$SCHEMADIR/02266_protobuf_format_google_wrappers:Message'" < "$MESSAGE_FILE_PATH"
$CLICKHOUSE_CLIENT --query "SELECT * FROM before_google_wrappers_02266"
echo "Insert proto message into table (Tuple(String), Int32)"
echo "with disabled $SETTING_NAME:"
$CLICKHOUSE_CLIENT -n --query "
SET $SETTING_NAME = false;
INSERT INTO $COMPATIBILITY_TABLE $(format_settings Protobuf Message)
" < "$MESSAGE_FILE_PATH"
$CLICKHOUSE_CLIENT --query "SELECT * FROM $COMPATIBILITY_TABLE"
rm "$BINARY_FILE_PATH"
rm "$MESSAGE_FILE_PATH"
$CLICKHOUSE_CLIENT --multiquery <<EOF
DROP TABLE google_wrappers_02266;
DROP TABLE roundtrip_google_wrappers_02266;
DROP TABLE before_google_wrappers_02266;
EOF
$CLICKHOUSE_CLIENT -n --query "
DROP TABLE $MAIN_TABLE;
DROP TABLE $ROUNDTRIP_TABLE;
DROP TABLE $COMPATIBILITY_TABLE;
"