Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove all UNKNOWN_PROP as a type of null. #4907

Merged
merged 9 commits into from
Nov 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/codec/RowReaderV1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,11 @@ Value RowReaderV1::getValueByName(const std::string& prop) const noexcept {

Value RowReaderV1::getValueByIndex(const int64_t index) const noexcept {
if (index < 0 || static_cast<size_t>(index) >= schema_->getNumFields()) {
return Value(NullType::UNKNOWN_PROP);
return Value(NullType::__NULL__);
}
auto vType = getSchema()->getFieldType(index);
if (PropertyType::UNKNOWN == vType) {
return Value(NullType::UNKNOWN_PROP);
return Value(NullType::__NULL__);
}
switch (vType) {
case PropertyType::BOOL:
Expand Down
2 changes: 1 addition & 1 deletion src/codec/RowReaderV2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Value RowReaderV2::getValueByName(const std::string& prop) const noexcept {

Value RowReaderV2::getValueByIndex(const int64_t index) const noexcept {
if (index < 0 || static_cast<size_t>(index) >= schema_->getNumFields()) {
return Value(NullType::UNKNOWN_PROP);
return Value(NullType::__NULL__);
}

auto field = schema_->field(index);
Expand Down
2 changes: 1 addition & 1 deletion src/common/datatypes/Map.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ struct Map {
const Value& at(const std::string& key) const {
auto iter = kvs.find(key);
if (iter == kvs.end()) {
return Value::kNullUnknownProp;
return Value::kNullValue;
}
return iter->second;
}
Expand Down
4 changes: 0 additions & 4 deletions src/common/datatypes/Value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ const Value Value::kNullNaN(NullType::NaN);
const Value Value::kNullBadData(NullType::BAD_DATA);
const Value Value::kNullBadType(NullType::BAD_TYPE);
const Value Value::kNullOverflow(NullType::ERR_OVERFLOW);
const Value Value::kNullUnknownProp(NullType::UNKNOWN_PROP);
const Value Value::kNullDivByZero(NullType::DIV_BY_ZERO);
const Value Value::kNullOutOfRange(NullType::OUT_OF_RANGE);

Expand Down Expand Up @@ -320,7 +319,6 @@ const std::string& Value::typeName() const {
{NullType::BAD_DATA, "BAD_DATA"},
{NullType::BAD_TYPE, "BAD_TYPE"},
{NullType::ERR_OVERFLOW, "ERR_OVERFLOW"},
{NullType::UNKNOWN_PROP, "UNKNOWN_PROP"},
{NullType::DIV_BY_ZERO, "DIV_BY_ZERO"},
};

Expand Down Expand Up @@ -1564,8 +1562,6 @@ std::string Value::toString() const {
return "__NULL_OVERFLOW__";
case NullType::NaN:
return "__NULL_NaN__";
case NullType::UNKNOWN_PROP:
return "__NULL_UNKNOWN_PROP__";
case NullType::OUT_OF_RANGE:
return "__NULL_OUT_OF_RANGE__";
}
Expand Down
6 changes: 2 additions & 4 deletions src/common/datatypes/Value.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ enum class NullType {
BAD_DATA = 2,
BAD_TYPE = 3,
ERR_OVERFLOW = 4,
UNKNOWN_PROP = 5,
DIV_BY_ZERO = 6,
OUT_OF_RANGE = 7,
};
Expand All @@ -52,7 +51,6 @@ struct Value {
static const Value kNullBadData;
static const Value kNullBadType;
static const Value kNullOverflow;
static const Value kNullUnknownProp;
static const Value kNullDivByZero;
static const Value kNullOutOfRange;

Expand Down Expand Up @@ -157,8 +155,8 @@ struct Value {
}
auto& null = value_.nVal;
return null == NullType::NaN || null == NullType::BAD_DATA || null == NullType::BAD_TYPE ||
null == NullType::ERR_OVERFLOW || null == NullType::UNKNOWN_PROP ||
null == NullType::DIV_BY_ZERO || null == NullType::OUT_OF_RANGE;
null == NullType::ERR_OVERFLOW || null == NullType::DIV_BY_ZERO ||
null == NullType::OUT_OF_RANGE;
}
bool isNumeric() const {
return type_ == Type::INT || type_ == Type::FLOAT;
Expand Down
2 changes: 0 additions & 2 deletions src/common/datatypes/test/ValueTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1565,7 +1565,6 @@ TEST(Value, typeName) {
EXPECT_EQ("BAD_DATA", Value::kNullBadData.typeName());
EXPECT_EQ("BAD_TYPE", Value::kNullBadType.typeName());
EXPECT_EQ("ERR_OVERFLOW", Value::kNullOverflow.typeName());
EXPECT_EQ("UNKNOWN_PROP", Value::kNullUnknownProp.typeName());
EXPECT_EQ("DIV_BY_ZERO", Value::kNullDivByZero.typeName());
}

Expand All @@ -1582,7 +1581,6 @@ TEST(Value, DecodeEncode) {
Value(NullType::BAD_DATA),
Value(NullType::ERR_OVERFLOW),
Value(NullType::OUT_OF_RANGE),
Value(NullType::UNKNOWN_PROP),

// int
Value(0),
Expand Down
2 changes: 1 addition & 1 deletion src/common/datatypes/test/ValueToJsonTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ TEST(ValueToJson, DecodeEncode) {
Value(NullType::BAD_DATA),
Value(NullType::ERR_OVERFLOW),
Value(NullType::OUT_OF_RANGE),
Value(NullType::UNKNOWN_PROP),
Value(NullType::__NULL__),

// int
Value(0),
Expand Down
2 changes: 1 addition & 1 deletion src/common/expression/AttributeExpression.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const Value &AttributeExpression::eval(ExpressionContext &ctx) {
return iter->second;
}
}
return Value::kNullUnknownProp;
return Value::kNullValue;
}
case Value::Type::EDGE: {
DCHECK(!rvalue.getStr().empty());
Expand Down
6 changes: 3 additions & 3 deletions src/common/expression/test/AttributeExpressionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ TEST_F(AttributeExpressionTest, DateTimeAttribute) {
auto *right = LabelExpression::make(&pool, "not exist attribute");
auto expr = AttributeExpression::make(&pool, left, right);
auto value = Expression::eval(expr, gExpCtxt);
ASSERT_EQ(Value::kNullUnknownProp, value);
ASSERT_EQ(Value::kNullValue, value);
}
{
auto *left = ConstantExpression::make(&pool, Value(dt));
Expand All @@ -148,7 +148,7 @@ TEST_F(AttributeExpressionTest, DateTimeAttribute) {
auto *right = LabelExpression::make(&pool, "not exist attribute");
auto expr = AttributeExpression::make(&pool, left, right);
auto value = Expression::eval(expr, gExpCtxt);
ASSERT_EQ(Value::kNullUnknownProp, value);
ASSERT_EQ(Value::kNullValue, value);
}
{
auto *left = ConstantExpression::make(&pool, Value(d));
Expand All @@ -162,7 +162,7 @@ TEST_F(AttributeExpressionTest, DateTimeAttribute) {
auto *right = LabelExpression::make(&pool, "not exist attribute");
auto expr = AttributeExpression::make(&pool, left, right);
auto value = Expression::eval(expr, gExpCtxt);
ASSERT_EQ(Value::kNullUnknownProp, value);
ASSERT_EQ(Value::kNullValue, value);
}
{
auto *left = ConstantExpression::make(&pool, Value(t));
Expand Down
1 change: 0 additions & 1 deletion src/common/expression/test/SubscriptExpressionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,6 @@ TEST_F(SubscriptExpressionTest, MapSubscript) {
auto expr = SubscriptExpression::make(&pool, map, key);
auto value = Expression::eval(expr, gExpCtxt);
ASSERT_TRUE(value.isNull());
ASSERT_TRUE(value.isBadNull());
}
// {"key1":1,"key2":2, "key3":3}[0]
{
Expand Down
6 changes: 3 additions & 3 deletions src/common/time/TimeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ class TimeUtils {
} else if (lowerProp == "microsecond") {
return static_cast<int>(dt.microsec);
} else {
return Value::kNullUnknownProp;
return Value::kNullValue;
}
}

Expand Down Expand Up @@ -160,7 +160,7 @@ class TimeUtils {
} else if (lowerProp == "day") {
return d.day;
} else {
return Value::kNullUnknownProp;
return Value::kNullValue;
}
}

Expand Down Expand Up @@ -203,7 +203,7 @@ class TimeUtils {
} else if (lowerProp == "microsecond") {
return t.microsec;
} else {
return Value::kNullUnknownProp;
return Value::kNullValue;
}
}

Expand Down
5 changes: 1 addition & 4 deletions src/common/utils/IndexKeyUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ StatusOr<Value> IndexKeyUtils::readValueWithLatestSche(RowReader* reader,
const std::string propName,
const meta::SchemaProviderIf* latestSchema) {
auto value = reader->getValueByName(propName);
if (latestSchema == nullptr || !value.isNull() || value.getNull() != NullType::UNKNOWN_PROP) {
if (latestSchema == nullptr || !value.isNull() || value.getNull() != NullType::__NULL__) {
return value;
}
auto field = latestSchema->field(propName);
Expand All @@ -230,9 +230,6 @@ Status IndexKeyUtils::checkValue(const Value& v, bool isNullable) {
}

switch (v.getNull()) {
case nebula::NullType::UNKNOWN_PROP: {
return Status::Error("Unknown prop");
}
case nebula::NullType::__NULL__: {
if (!isNullable) {
return Status::Error("Not allowed to be null");
Expand Down
1 change: 0 additions & 1 deletion src/interface/common.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ enum NullType {
BAD_DATA = 2,
BAD_TYPE = 3,
ERR_OVERFLOW = 4,
UNKNOWN_PROP = 5,
DIV_BY_ZERO = 6,
OUT_OF_RANGE = 7,
} (cpp.enum_strict, cpp.type = "nebula::NullType")
Expand Down
2 changes: 1 addition & 1 deletion src/storage/exec/IndexEdgeScanNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ Map<std::string, Value> IndexEdgeScanNode::decodeFromBase(const std::string& key
case QueryUtils::ReturnColType::kOther: {
auto field = edge_.back()->field(col);
if (field == nullptr) {
values[col] = Value::kNullUnknownProp;
values[col] = Value::kNullValue;
} else {
auto retVal = QueryUtils::readValue(reader.get(), col, field);
if (!retVal.ok()) {
Expand Down
2 changes: 1 addition & 1 deletion src/storage/exec/IndexVertexScanNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ Map<std::string, Value> IndexVertexScanNode::decodeFromBase(const std::string& k
case QueryUtils::ReturnColType::kOther: {
auto field = tag_.back()->field(col);
if (field == nullptr) {
values[col] = Value::kNullUnknownProp;
values[col] = Value::kNullValue;
} else {
auto retVal = QueryUtils::readValue(reader.get(), col, field);
if (!retVal.ok()) {
Expand Down
2 changes: 1 addition & 1 deletion src/storage/exec/QueryUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class QueryUtils final {
// read null value
auto nullType = value.getNull();

if (nullType == NullType::UNKNOWN_PROP) {
if (nullType == NullType::__NULL__) {
VLOG(1) << "Fail to read prop " << propName;
if (!field) {
return value;
Expand Down
2 changes: 1 addition & 1 deletion src/tools/db-upgrade/DbUpgrader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ std::string UpgraderSpace::encodeRowVal(const RowReader* reader,
LOG(ERROR) << "Write rowWriterV2 failed";
return "";
}
} else if (nullType != NullType::UNKNOWN_PROP) {
} else if (nullType != NullType::__NULL__) {
// nullType == NullType::kNullUnknownProp, indicates that the field is
// only in the latest schema, maybe use default value or null value.
LOG(ERROR) << "Data is illegal in " << name << " field";
Expand Down
4 changes: 2 additions & 2 deletions tests/common/nebula_test_suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
T_NULL_BAD_DATA.set_nVal(CommonTtypes.NullType.BAD_DATA)
T_NULL_BAD_TYPE = CommonTtypes.Value()
T_NULL_BAD_TYPE.set_nVal(CommonTtypes.NullType.BAD_TYPE)
T_NULL_UNKNOWN_PROP = CommonTtypes.Value()
T_NULL_UNKNOWN_PROP.set_nVal(CommonTtypes.NullType.UNKNOWN_PROP)
T_NULL___NULL__ = CommonTtypes.Value()
T_NULL___NULL__.set_nVal(CommonTtypes.NullType.__NULL__)
T_NULL_UNKNOWN_DIV_BY_ZERO = CommonTtypes.Value()
T_NULL_UNKNOWN_DIV_BY_ZERO.set_nVal(CommonTtypes.NullType.DIV_BY_ZERO)

Expand Down
12 changes: 6 additions & 6 deletions tests/tck/features/expression/Attribute.feature
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ Feature: Attribute
RETURN {k1 : 1, k2: true}.K1 AS k
"""
Then the result should be, in any order:
| k |
| UNKNOWN_PROP |
| k |
| __NULL__ |
When executing query:
"""
MATCH (v) WHERE id(v) == 'Tim Duncan' RETURN v.player.name
Expand Down Expand Up @@ -101,28 +101,28 @@ Feature: Attribute
"""
Then the result should be, in any order:
| not_exists_attr |
| UNKNOWN_PROP |
| __NULL__ |
When executing query:
"""
RETURN time("02:59:40").not_exists_attr AS not_exists_attr
"""
Then the result should be, in any order:
| not_exists_attr |
| UNKNOWN_PROP |
| __NULL__ |
When executing query:
"""
RETURN datetime("2021-07-19T02:59:40").not_exists_attr AS not_exists_attr
"""
Then the result should be, in any order:
| not_exists_attr |
| UNKNOWN_PROP |
| __NULL__ |
When executing query:
"""
RETURN {k1 : 1, k2: true}.not_exists_attr AS not_exists_attr
"""
Then the result should be, in any order:
| not_exists_attr |
| UNKNOWN_PROP |
| __NULL__ |
When executing query:
"""
MATCH (v) WHERE id(v) == 'Tim Duncan' RETURN v.player.not_exists_attr
Expand Down
4 changes: 2 additions & 2 deletions tests/tck/features/match/With.feature
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ Feature: With clause
RETURN x.c
"""
Then the result should be, in any order:
| x.c |
| UNKNOWN_PROP |
| x.c |
| __NULL__ |

Scenario: match with return
When executing query:
Expand Down
34 changes: 17 additions & 17 deletions tests/tck/features/optimizer/PrunePropertiesRule.feature
Original file line number Diff line number Diff line change
Expand Up @@ -747,9 +747,9 @@ Feature: Prune Properties rule
"""
Then the result should be, in order, with relax comparison:
| properties(src_v).age | properties(e).degree | name | src_v.player.sex | e.start_year | dst_v.player.age |
| 41 | UNKNOWN_PROP | "Dejounte Murray" | "男" | 2022 | 29 |
| 41 | __NULL__ | "Dejounte Murray" | "男" | 2022 | 29 |
| 41 | 88 | "Spurs" | "男" | 2002 | NULL |
| 41 | UNKNOWN_PROP | "Tiago Splitter" | "男" | 2022 | 34 |
| 41 | __NULL__ | "Tiago Splitter" | "男" | 2022 | 34 |
When executing query:
"""
match (src_v:player{name:"Manu Ginobili"})-[e*2]-(dst_v)
Expand All @@ -759,10 +759,10 @@ Feature: Prune Properties rule
Then the result should be, in order, with relax comparison:
| properties(src_v).sex | properties(e[0]).degree | properties(dst_v).name | age | e[1].start_year | dst_v.player.age |
| "男" | 88 | "Danny Green" | 41 | 2010 | 31 |
| "男" | UNKNOWN_PROP | "Danny Green" | 41 | 2022 | 31 |
| "男" | UNKNOWN_PROP | "LeBron James" | 41 | 2022 | 34 |
| "男" | __NULL__ | "Danny Green" | 41 | 2022 | 31 |
| "男" | __NULL__ | "LeBron James" | 41 | 2022 | 34 |
| "男" | 88 | "Cory Joseph" | 41 | 2011 | 27 |
| "男" | UNKNOWN_PROP | "76ers" | 41 | 2017 | NULL |
| "男" | __NULL__ | "76ers" | 41 | 2017 | NULL |
When executing query:
"""
match (src_v:player{name:"Manu Ginobili"})-[e:like*2..3]-(dst_v)
Expand All @@ -771,11 +771,11 @@ Feature: Prune Properties rule
"""
Then the result should be, in order, with relax comparison:
| properties(src_v).sex | properties(e[0]).degree | properties(dst_v).name | age | e[1].start_year | dst_v.player.age |
| "男" | UNKNOWN_PROP | "Danny Green" | 41 | 2022 | 31 |
| "男" | UNKNOWN_PROP | "Danny Green" | 41 | 2022 | 31 |
| "男" | UNKNOWN_PROP | "Kyle Anderson" | 41 | 2022 | 25 |
| "男" | UNKNOWN_PROP | "LeBron James" | 41 | 2022 | 34 |
| "男" | UNKNOWN_PROP | "Kevin Durant" | 41 | 2022 | 30 |
| "男" | __NULL__ | "Danny Green" | 41 | 2022 | 31 |
| "男" | __NULL__ | "Danny Green" | 41 | 2022 | 31 |
| "男" | __NULL__ | "Kyle Anderson" | 41 | 2022 | 25 |
| "男" | __NULL__ | "LeBron James" | 41 | 2022 | 34 |
| "男" | __NULL__ | "Kevin Durant" | 41 | 2022 | 30 |
When executing query:
"""
match (v1)-->(v2)-->(v3) where id(v1)=="Manu Ginobili"
Expand Down Expand Up @@ -841,19 +841,19 @@ Feature: Prune Properties rule
Then the result should be, in order, with relax comparison:
| properties(e).degree | degree |
| 88 | 88 |
| UNKNOWN_PROP | 88 |
| __NULL__ | 88 |
| 88 | 88 |
| UNKNOWN_PROP | 88 |
| __NULL__ | 88 |
| 88 | 88 |
When executing query:
"""
match (src_v)-[e:like|serve]->(dst_v)-[e2]-(dst_v2) where id(src_v)=="Rajon Rondo" return properties(e).degree1,properties(e).degree1,e2.a,dst_v.p.name,dst_v.player.sex1,properties(src_v).name2 limit 5;
"""
Then the result should be, in order, with relax comparison:
| properties(e).degree1 | properties(e).degree1 | e2.a | dst_v.p.name | dst_v.player.sex1 | properties(src_v).name2 |
| UNKNOWN_PROP | UNKNOWN_PROP | NULL | NULL | NULL | UNKNOWN_PROP |
| UNKNOWN_PROP | UNKNOWN_PROP | NULL | NULL | NULL | UNKNOWN_PROP |
| UNKNOWN_PROP | UNKNOWN_PROP | NULL | NULL | NULL | UNKNOWN_PROP |
| UNKNOWN_PROP | UNKNOWN_PROP | NULL | NULL | NULL | UNKNOWN_PROP |
| UNKNOWN_PROP | UNKNOWN_PROP | NULL | NULL | NULL | UNKNOWN_PROP |
| __NULL__ | __NULL__ | NULL | NULL | NULL | __NULL__ |
| __NULL__ | __NULL__ | NULL | NULL | NULL | __NULL__ |
| __NULL__ | __NULL__ | NULL | NULL | NULL | __NULL__ |
| __NULL__ | __NULL__ | NULL | NULL | NULL | __NULL__ |
| __NULL__ | __NULL__ | NULL | NULL | NULL | __NULL__ |
Then drop the used space
2 changes: 1 addition & 1 deletion tests/tck/features/parser/nebula.feature
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Feature: Value parsing
| BAD_DATA | BAD_DATA |
| BAD_TYPE | BAD_TYPE |
| OVERFLOW | ERR_OVERFLOW |
| UNKNOWN_PROP | UNKNOWN_PROP |
| __NULL__ | NULL |
| DIV_BY_ZERO | DIV_BY_ZERO |
| OUT_OF_RANGE | OUT_OF_RANGE |
| 123 | iVal |
Expand Down
Loading