yingcai-cy commented on code in PR #58: URL: https://github.com/apache/iceberg-cpp/pull/58#discussion_r2040591689
########## src/iceberg/expression.h: ########## @@ -0,0 +1,83 @@ +/* + * 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. + */ + +#pragma once + +/// \file iceberg/expression.h +/// Expression interface for Iceberg table operations. + +#include "iceberg/expected.h" +#include "iceberg/iceberg_export.h" +#include "iceberg/result.h" + +namespace iceberg { + +/// \brief Represents a boolean expression tree. +class ICEBERG_EXPORT Expression { + public: + /// Operation types for expressions + enum class Operation { + kTrue, + kFalse, + kIsNull, + kNotNull, + kIsNan, + kNotNan, + kLt, + kLtEq, + kGt, + kGtEq, + kEq, + kNotEq, + kIn, + kNotIn, + kNot, + kAnd, + kOr, + kStartsWith, + kNotStartsWith, + kCount, + kCountStar, + kMax, + kMin + }; + + virtual ~Expression() = default; + + /// \brief Returns the operation for an expression node. + virtual Operation Op() const = 0; + + /// \brief Returns the negation of this expression, equivalent to not(this). + virtual Result<std::shared_ptr<Expression>> Negate() const { Review Comment: If True/False objects are singletons, then they cannot return unique_ptr to change ownership. Maybe we should use shared_ptr for all expression methods, because sub expressions can be shared in many cases. ########## src/iceberg/expressions/false.h: ########## @@ -0,0 +1,55 @@ +/* + * 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. + */ + +#pragma once + +#include <string> + +#include "iceberg/expression.h" + +namespace iceberg { + +/// \brief An expression that is always false. +class ICEBERG_EXPORT False : public Expression { + public: + static const False& instance() { + static False instance; Review Comment: Actually it is safe after c++ 11, inline function and local static variable only initiallize once; I'll move implmentation to cc. ########## src/iceberg/result.h: ########## @@ -39,6 +39,8 @@ enum class ErrorKind { kNotImplemented, kUnknownError, kNotSupported, + kInvalidExpression, + kInvalidOperatorType, Review Comment: Will remove it later. ########## src/iceberg/expressions/false.h: ########## @@ -0,0 +1,55 @@ +/* + * 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. + */ + +#pragma once + +#include <string> + +#include "iceberg/expression.h" + +namespace iceberg { + +/// \brief An expression that is always false. +class ICEBERG_EXPORT False : public Expression { + public: + static const False& instance() { Review Comment: Got it -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org For additional commands, e-mail: issues-h...@iceberg.apache.org