blob: a2bd361567c47729a371d15fd10e1ec874c35638 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
**/
#include <cstddef>
#include "types/CharType.hpp"
#include "types/Type.hpp"
#include "types/Type.pb.h"
#include "types/TypeFactory.hpp"
#include "types/TypeID.hpp"
#include "types/VarCharType.hpp"
#include "utility/Macros.hpp"
#include "gtest/gtest.h"
using std::size_t;
namespace quickstep {
void CheckTypeSerialization(const Type &type) {
serialization::Type proto = type.getProto();
switch (type.getTypeID()) {
case kInt:
EXPECT_EQ(serialization::Type::INT, proto.type_id());
break;
case kLong:
EXPECT_EQ(serialization::Type::LONG, proto.type_id());
break;
case kFloat:
EXPECT_EQ(serialization::Type::FLOAT, proto.type_id());
break;
case kDouble:
EXPECT_EQ(serialization::Type::DOUBLE, proto.type_id());
break;
case kDatetime:
EXPECT_EQ(serialization::Type::DATETIME, proto.type_id());
break;
case kDatetimeInterval:
EXPECT_EQ(serialization::Type::DATETIME_INTERVAL, proto.type_id());
break;
case kYearMonthInterval:
EXPECT_EQ(serialization::Type::YEAR_MONTH_INTERVAL, proto.type_id());
break;
case kChar:
EXPECT_EQ(serialization::Type::CHAR, proto.type_id());
EXPECT_TRUE(proto.HasExtension(serialization::CharType::length));
EXPECT_EQ((static_cast<const CharType&>(type)).getStringLength(),
proto.GetExtension(serialization::CharType::length));
break;
case kVarChar:
EXPECT_EQ(serialization::Type::VAR_CHAR, proto.type_id());
EXPECT_TRUE(proto.HasExtension(serialization::VarCharType::length));
EXPECT_EQ((static_cast<const VarCharType&>(type)).getStringLength(),
proto.GetExtension(serialization::VarCharType::length));
break;
default:
FATAL_ERROR("type is not a valid Type in CheckTypeSerialization");
}
EXPECT_EQ(type.isNullable(), proto.nullable());
EXPECT_TRUE(type.equals(TypeFactory::ReconstructFromProto(proto)));
}
TEST(TypeTest, TypeSerializationTest) {
CheckTypeSerialization(TypeFactory::GetType(kInt));
CheckTypeSerialization(TypeFactory::GetType(kInt, true));
CheckTypeSerialization(TypeFactory::GetType(kLong));
CheckTypeSerialization(TypeFactory::GetType(kLong, true));
CheckTypeSerialization(TypeFactory::GetType(kFloat));
CheckTypeSerialization(TypeFactory::GetType(kFloat, true));
CheckTypeSerialization(TypeFactory::GetType(kDouble));
CheckTypeSerialization(TypeFactory::GetType(kDouble, true));
CheckTypeSerialization(TypeFactory::GetType(kDatetime));
CheckTypeSerialization(TypeFactory::GetType(kDatetime, true));
CheckTypeSerialization(TypeFactory::GetType(kDatetimeInterval));
CheckTypeSerialization(TypeFactory::GetType(kDatetimeInterval, true));
CheckTypeSerialization(TypeFactory::GetType(kYearMonthInterval));
CheckTypeSerialization(TypeFactory::GetType(kYearMonthInterval, true));
size_t length = 0;
CheckTypeSerialization(TypeFactory::GetType(kChar, length));
CheckTypeSerialization(TypeFactory::GetType(kChar, length, true));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length, true));
length = 8;
CheckTypeSerialization(TypeFactory::GetType(kChar, length));
CheckTypeSerialization(TypeFactory::GetType(kChar, length, true));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length, true));
length = 1024;
CheckTypeSerialization(TypeFactory::GetType(kChar, length));
CheckTypeSerialization(TypeFactory::GetType(kChar, length, true));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length, true));
length = 65536;
CheckTypeSerialization(TypeFactory::GetType(kChar, length));
CheckTypeSerialization(TypeFactory::GetType(kChar, length, true));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length));
CheckTypeSerialization(TypeFactory::GetType(kVarChar, length, true));
}
} // namespace quickstep