gaborkaszab commented on code in PR #31: URL: https://github.com/apache/iceberg-cpp/pull/31#discussion_r1919778107
########## src/iceberg/schema.h: ########## @@ -0,0 +1,60 @@ +/* + * 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/schema.h +/// Schemas for Iceberg tables. + +#include <cstdint> +#include <string> +#include <vector> + +#include "iceberg/iceberg_export.h" +#include "iceberg/type.h" + +namespace iceberg { + +/// \brief A schema for a Table. +/// +/// A schema is a list of typed columns, along with a unique integer ID. A +/// Table may have different schemas over its lifetime due to schema +/// evolution. +class ICEBERG_EXPORT Schema : public StructType { + public: + Schema(int32_t schema_id, std::vector<Field> fields); + + /// \brief Get the schema ID. + /// + /// Schemas are identified by a unique ID for the purposes of schema + /// evolution. + [[nodiscard]] int32_t schema_id() const; Review Comment: The functions within this class may not follow the same naming convention: See schema_id vs ToString, Equals I found the same mismatch below too, so I'm wondering if it's me missing something here. ########## src/iceberg/schema.h: ########## @@ -0,0 +1,60 @@ +/* + * 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/schema.h +/// Schemas for Iceberg tables. + +#include <cstdint> +#include <string> +#include <vector> + +#include "iceberg/iceberg_export.h" +#include "iceberg/type.h" + +namespace iceberg { + +/// \brief A schema for a Table. +/// +/// A schema is a list of typed columns, along with a unique integer ID. A +/// Table may have different schemas over its lifetime due to schema +/// evolution. +class ICEBERG_EXPORT Schema : public StructType { + public: + Schema(int32_t schema_id, std::vector<Field> fields); + + /// \brief Get the schema ID. + /// + /// Schemas are identified by a unique ID for the purposes of schema + /// evolution. + [[nodiscard]] int32_t schema_id() const; + + /// \brief Get a user-readable string representation of the schema. + [[nodiscard]] std::string ToString() const; + + /// \brief Compare two schemas for equality. + [[nodiscard]] bool Equals(const Schema& other) const; Review Comment: If we have operators for equality, can't we make the Equals() function private? I don't see the reason to expose both. ########## src/iceberg/schema.h: ########## @@ -0,0 +1,60 @@ +/* + * 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/schema.h Review Comment: I'm not familiar with this style of commenting. Could you please explain me why including the file name into a comment needed here? ########## src/iceberg/type.h: ########## @@ -0,0 +1,149 @@ +/* + * 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/type.h +/// Data types for Iceberg. + +#include <memory> +#include <span> +#include <string> +#include <vector> + +#include "iceberg/iceberg_export.h" +#include "iceberg/type_fwd.h" + +namespace iceberg { + +/// \brief A type combined with a name. +class ICEBERG_EXPORT Field { + public: + /// \brief Construct a field. + /// \param[in] field_id The field ID. + /// \param[in] name The field name. + /// \param[in] type The field type. + /// \param[in] optional Whether values of this field are required or nullable. + Field(int32_t field_id, std::string name, std::shared_ptr<Type> type, bool optional); Review Comment: > std::shared_ptr<Type> type Does this assume that for each type there is going to be an instance and the Fields will share these instances? Would it be too much overhead to keep a copy of a Type for each Field? ########## src/iceberg/type.h: ########## @@ -0,0 +1,149 @@ +/* + * 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/type.h +/// Data types for Iceberg. + +#include <memory> +#include <span> +#include <string> +#include <vector> + +#include "iceberg/iceberg_export.h" +#include "iceberg/type_fwd.h" + +namespace iceberg { + +/// \brief A type combined with a name. +class ICEBERG_EXPORT Field { Review Comment: I think similarly to Schema, I'd put Field into a separate file. Now this is in type.h but Field isn't really a type. -- 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