blob: 8b84d7dc12f5216524f25c2da98618c6ba375ae9 [file] [log] [blame]
/*
* Copyright 2024-present Alibaba Inc.
*
* Licensed 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 <map>
#include <memory>
#include <string>
#include "paimon/result.h"
#include "paimon/type_fwd.h"
#include "paimon/visibility.h"
namespace paimon {
class Executor;
class MemoryPool;
/// `CommitContext` is some configuration for commit operations.
///
/// Please do not use this class directly, use `CommitContextBuilder` to build a `CommitContext`
/// which has input validation.
/// @see CommitContextBuilder
class PAIMON_EXPORT CommitContext {
public:
CommitContext(const std::string& root_path, const std::string& commit_user,
bool ignore_empty_commit, bool use_rest_catalog_commit,
const std::shared_ptr<MemoryPool>& memory_pool,
const std::shared_ptr<Executor>& executor,
const std::shared_ptr<FileSystem>& specific_file_system,
const std::map<std::string, std::string>& options);
~CommitContext();
const std::string& GetRootPath() const {
return root_path_;
}
const std::string& GetCommitUser() const {
return commit_user_;
}
bool IgnoreEmptyCommit() const {
return ignore_empty_commit_;
}
bool UseRESTCatalogCommit() const {
return use_rest_catalog_commit_;
}
std::shared_ptr<MemoryPool> GetMemoryPool() const {
return memory_pool_;
}
std::shared_ptr<Executor> GetExecutor() const {
return executor_;
}
std::shared_ptr<FileSystem> GetSpecificFileSystem() const {
return specific_file_system_;
}
const std::map<std::string, std::string>& GetOptions() const {
return options_;
}
private:
std::string root_path_;
std::string commit_user_;
bool ignore_empty_commit_;
bool use_rest_catalog_commit_;
std::shared_ptr<MemoryPool> memory_pool_;
std::shared_ptr<Executor> executor_;
std::shared_ptr<FileSystem> specific_file_system_;
std::map<std::string, std::string> options_;
};
/// `CommitContextBuilder` used to build a `CommitContext`, has input validation.
class PAIMON_EXPORT CommitContextBuilder {
public:
/// Constructs a `CommitContextBuilder` with required parameters.
/// @param root_path The root path of the Paimon table.
/// @param commit_user The user identifier for the commit operation.
CommitContextBuilder(const std::string& root_path, const std::string& commit_user);
~CommitContextBuilder();
/// Set a configuration options map to set some option entries which are not defined in the
/// table schema or whose values you want to overwrite.
/// @note The options map will clear the options added by `AddOption()` before.
/// @param options The configuration options map.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& SetOptions(const std::map<std::string, std::string>& options);
/// Add a single configuration option which is not defined in the table schema or whose value
/// you want to overwrite.
///
/// If you want to add multiple options, call `AddOption()` multiple times or use `SetOptions()`
/// instead.
/// @param key The option key.
/// @param value The option value.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& AddOption(const std::string& key, const std::string& value);
/// Sets whether to ignore empty commits (default is true).
/// When set to true, commits that don't contain any actual data changes will be ignored.
/// @param ignore_empty_commit True to ignore empty commits, false otherwise.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& IgnoreEmptyCommit(bool ignore_empty_commit);
/// Sets whether to use REST catalog commit (default is false).
/// @note Temporary interface, will be removed in the future.
/// @param use_rest_catalog_commit True to use REST catalog commit, false otherwise.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& UseRESTCatalogCommit(bool use_rest_catalog_commit);
/// Sets the memory pool to be used for memory allocation during commit operations.
/// @param memory_pool Shared pointer to the memory pool instance.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& WithMemoryPool(const std::shared_ptr<MemoryPool>& memory_pool);
/// Sets the executor to be used for asynchronous operations during commit.
/// @param executor Shared pointer to the executor instance.
/// @return Reference to this builder for method chaining.
CommitContextBuilder& WithExecutor(const std::shared_ptr<Executor>& executor);
/// Sets a custom file system instance to be used for all file operations in this commit
/// context.
/// This bypasses the global file system registry and uses the provided implementation directly.
///
/// @param file_system The file system to use.
/// @return Reference to this builder for method chaining.
/// @note If not set, use default file system (configured in `Options::FILE_SYSTEM`)
CommitContextBuilder& WithFileSystem(const std::shared_ptr<FileSystem>& file_system);
/// Build and return a `CommitContext` instance with input validation.
/// @return Result containing the constructed `CommitContext` or an error status.
Result<std::unique_ptr<CommitContext>> Finish();
private:
class Impl;
std::unique_ptr<Impl> impl_;
};
} // namespace paimon