diff --git a/src/duckdb/src/common/arrow/physical_arrow_collector.cpp b/src/duckdb/src/common/arrow/physical_arrow_collector.cpp index 7934a0438..a8b225f75 100644 --- a/src/duckdb/src/common/arrow/physical_arrow_collector.cpp +++ b/src/duckdb/src/common/arrow/physical_arrow_collector.cpp @@ -8,23 +8,23 @@ namespace duckdb { -unique_ptr PhysicalArrowCollector::Create(ClientContext &context, PreparedStatementData &data, - idx_t batch_size) { +PhysicalOperator &PhysicalArrowCollector::Create(ClientContext &context, PreparedStatementData &data, + idx_t batch_size) { auto &physical_plan = *data.physical_plan; auto &root = physical_plan.Root(); if (!PhysicalPlanGenerator::PreserveInsertionOrder(context, root)) { // Not an order-preserving plan: use the parallel materialized collector. - return make_uniq(physical_plan, data, true, batch_size); + return physical_plan.Make(data, true, batch_size); } if (!PhysicalPlanGenerator::UseBatchIndex(context, root)) { // Order-preserving plan, and we cannot use the batch index: use single-threaded result collector. - return make_uniq(physical_plan, data, false, batch_size); + return physical_plan.Make(data, false, batch_size); } // Order-preserving plan, and we can use the batch index: use a batch collector. - return make_uniq(physical_plan, data, batch_size); + return physical_plan.Make(data, batch_size); } SinkResultType PhysicalArrowCollector::Sink(ExecutionContext &context, DataChunk &chunk, diff --git a/src/duckdb/src/common/enum_util.cpp b/src/duckdb/src/common/enum_util.cpp index 4d260816c..9897e4d30 100644 --- a/src/duckdb/src/common/enum_util.cpp +++ b/src/duckdb/src/common/enum_util.cpp @@ -5138,24 +5138,6 @@ TimestampCastResult EnumUtil::FromString(const char *value) return static_cast(StringUtil::StringToEnum(GetTimestampCastResultValues(), 5, "TimestampCastResult", value)); } -const StringUtil::EnumStringLiteral *GetTransactionInvalidationPolicyValues() { - static constexpr StringUtil::EnumStringLiteral values[] { - { static_cast(TransactionInvalidationPolicy::STANDARD_POLICY), "STANDARD_POLICY" }, - { static_cast(TransactionInvalidationPolicy::ALL_ERRORS_INVALIDATE_TRANSACTION), "ALL_ERRORS_INVALIDATE_TRANSACTION" } - }; - return values; -} - -template<> -const char* EnumUtil::ToChars(TransactionInvalidationPolicy value) { - return StringUtil::EnumToString(GetTransactionInvalidationPolicyValues(), 2, "TransactionInvalidationPolicy", static_cast(value)); -} - -template<> -TransactionInvalidationPolicy EnumUtil::FromString(const char *value) { - return static_cast(StringUtil::StringToEnum(GetTransactionInvalidationPolicyValues(), 2, "TransactionInvalidationPolicy", value)); -} - const StringUtil::EnumStringLiteral *GetTransactionModifierTypeValues() { static constexpr StringUtil::EnumStringLiteral values[] { { static_cast(TransactionModifierType::TRANSACTION_DEFAULT_MODIFIER), "TRANSACTION_DEFAULT_MODIFIER" }, diff --git a/src/duckdb/src/common/file_system.cpp b/src/duckdb/src/common/file_system.cpp index 8b83c25c6..514d361c9 100644 --- a/src/duckdb/src/common/file_system.cpp +++ b/src/duckdb/src/common/file_system.cpp @@ -770,7 +770,7 @@ int64_t FileHandle::Write(void *buffer, idx_t nr_bytes) { int64_t FileHandle::Write(QueryContext context, void *buffer, idx_t nr_bytes) { if (context.GetClientContext() != nullptr) { - context.GetClientContext()->client_data->profiler->AddToCounter(MetricType::TOTAL_BYTES_WRITTEN, nr_bytes); + context.GetClientContext()->client_data->profiler->AddToCounter(MetricType::TOTAL_BYTES_READ, nr_bytes); } return file_system.Write(*this, buffer, UnsafeNumericCast(nr_bytes)); diff --git a/src/duckdb/src/common/path.cpp b/src/duckdb/src/common/path.cpp index ed2a82bd6..fdebd11a1 100644 --- a/src/duckdb/src/common/path.cpp +++ b/src/duckdb/src/common/path.cpp @@ -355,20 +355,4 @@ size_t Path::ParseUNCScheme(const string &input, Path &parsed) { } #endif -string Path::AddSuffixToPath(const string &path, const string &suffix) { - // we append the ".wal" **before** a question mark in case of GET parameters - // but only if we are not in a windows long path (which starts with \\?\) - std::size_t question_mark_pos = std::string::npos; - if (!StringUtil::StartsWith(path, "\\\\?\\")) { - question_mark_pos = path.find('?'); - } - auto result = path; - if (question_mark_pos != std::string::npos) { - result.insert(question_mark_pos, suffix); - } else { - result += suffix; - } - return result; -} - } // namespace duckdb diff --git a/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp b/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp index ccec5cd19..df95ce707 100644 --- a/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +++ b/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp @@ -22,32 +22,31 @@ PhysicalResultCollector::PhysicalResultCollector(PhysicalPlan &physical_plan, Pr types = data.types; } -unique_ptr PhysicalResultCollector::GetResultCollector(ClientContext &context, - PreparedStatementData &data) { +PhysicalOperator &PhysicalResultCollector::GetResultCollector(ClientContext &context, PreparedStatementData &data) { auto &physical_plan = *data.physical_plan; auto &root = physical_plan.Root(); if (!PhysicalPlanGenerator::PreserveInsertionOrder(context, root)) { // Not an order-preserving plan: use the parallel materialized collector. if (data.output_type == QueryResultOutputType::ALLOW_STREAMING) { - return make_uniq(physical_plan, data, true); + return physical_plan.Make(data, true); } - return make_uniq(physical_plan, data, true); + return physical_plan.Make(data, true); } if (!PhysicalPlanGenerator::UseBatchIndex(context, root)) { // Order-preserving plan, and we cannot use the batch index: use single-threaded result collector. if (data.output_type == QueryResultOutputType::ALLOW_STREAMING) { - return make_uniq(physical_plan, data, false); + return physical_plan.Make(data, false); } - return make_uniq(physical_plan, data, false); + return physical_plan.Make(data, false); } // Order-preserving plan, and we can use the batch index: use a batch collector. if (data.output_type == QueryResultOutputType::ALLOW_STREAMING) { - return make_uniq(physical_plan, data); + return physical_plan.Make(data); } - return make_uniq(physical_plan, data); + return physical_plan.Make(data); } vector> PhysicalResultCollector::GetChildren() const { diff --git a/src/duckdb/src/execution/operator/helper/physical_transaction.cpp b/src/duckdb/src/execution/operator/helper/physical_transaction.cpp index 5ccd901a6..2e75990ca 100644 --- a/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +++ b/src/duckdb/src/execution/operator/helper/physical_transaction.cpp @@ -32,8 +32,6 @@ SourceResultType PhysicalTransaction::GetDataInternal(ExecutionContext &context, if (info->modifier == TransactionModifierType::TRANSACTION_READ_ONLY) { client.transaction.SetReadOnly(); } - client.transaction.SetInvalidationPolicy(info->invalidation_policy); - client.transaction.SetAutoRollback(info->auto_rollback); if (Settings::Get(context.client)) { // if immediate transaction mode is enabled then start all transactions immediately auto databases = DatabaseManager::Get(client).GetDatabases(client); diff --git a/src/duckdb/src/function/scalar/list/list_resize.cpp b/src/duckdb/src/function/scalar/list/list_resize.cpp index ce39a5171..19fd149e3 100644 --- a/src/duckdb/src/function/scalar/list/list_resize.cpp +++ b/src/duckdb/src/function/scalar/list/list_resize.cpp @@ -1,4 +1,3 @@ -#include "duckdb/common/operator/add.hpp" #include "duckdb/common/types/data_chunk.hpp" #include "duckdb/function/scalar/nested_functions.hpp" #include "duckdb/function/scalar/list_functions.hpp" @@ -42,8 +41,7 @@ static void ListResizeFunction(DataChunk &args, ExpressionState &, Vector &resul auto new_size_idx = new_sizes_data.sel->get_index(row_idx); if (lists_data.validity.RowIsValid(list_idx) && new_sizes_data.validity.RowIsValid(new_size_idx)) { - child_vector_size = AddOperatorOverflowCheck::Operation( - child_vector_size, new_size_entries[new_size_idx]); + child_vector_size += new_size_entries[new_size_idx]; } } ListVector::Reserve(result, child_vector_size); diff --git a/src/duckdb/src/function/table/version/pragma_version.cpp b/src/duckdb/src/function/table/version/pragma_version.cpp index 9849ff087..a43fefc12 100644 --- a/src/duckdb/src/function/table/version/pragma_version.cpp +++ b/src/duckdb/src/function/table/version/pragma_version.cpp @@ -1,5 +1,5 @@ #ifndef DUCKDB_PATCH_VERSION -#define DUCKDB_PATCH_VERSION "1-dev401" +#define DUCKDB_PATCH_VERSION "1" #endif #ifndef DUCKDB_MINOR_VERSION #define DUCKDB_MINOR_VERSION 5 @@ -8,10 +8,10 @@ #define DUCKDB_MAJOR_VERSION 1 #endif #ifndef DUCKDB_VERSION -#define DUCKDB_VERSION "v1.5.1-dev401" +#define DUCKDB_VERSION "v1.5.1" #endif #ifndef DUCKDB_SOURCE_ID -#define DUCKDB_SOURCE_ID "710adf3d05" +#define DUCKDB_SOURCE_ID "7dbb2e646f" #endif #include "duckdb/function/table/system_functions.hpp" #include "duckdb/main/database.hpp" diff --git a/src/duckdb/src/include/duckdb/common/arrow/physical_arrow_collector.hpp b/src/duckdb/src/include/duckdb/common/arrow/physical_arrow_collector.hpp index 7671f49d0..d659235d2 100644 --- a/src/duckdb/src/include/duckdb/common/arrow/physical_arrow_collector.hpp +++ b/src/duckdb/src/include/duckdb/common/arrow/physical_arrow_collector.hpp @@ -44,7 +44,7 @@ class PhysicalArrowCollector : public PhysicalResultCollector { } public: - static unique_ptr Create(ClientContext &context, PreparedStatementData &data, idx_t batch_size); + static PhysicalOperator &Create(ClientContext &context, PreparedStatementData &data, idx_t batch_size); SinkResultType Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const override; SinkCombineResultType Combine(ExecutionContext &context, OperatorSinkCombineInput &input) const override; unique_ptr GetResult(GlobalSinkState &state) const override; diff --git a/src/duckdb/src/include/duckdb/common/enum_util.hpp b/src/duckdb/src/include/duckdb/common/enum_util.hpp index 92a6e4f03..5529a5784 100644 --- a/src/duckdb/src/include/duckdb/common/enum_util.hpp +++ b/src/duckdb/src/include/duckdb/common/enum_util.hpp @@ -458,8 +458,6 @@ enum class ThreadPinMode : uint8_t; enum class TimestampCastResult : uint8_t; -enum class TransactionInvalidationPolicy : uint8_t; - enum class TransactionModifierType : uint8_t; enum class TransactionType : uint8_t; @@ -1144,9 +1142,6 @@ const char* EnumUtil::ToChars(ThreadPinMode value); template<> const char* EnumUtil::ToChars(TimestampCastResult value); -template<> -const char* EnumUtil::ToChars(TransactionInvalidationPolicy value); - template<> const char* EnumUtil::ToChars(TransactionModifierType value); @@ -1853,9 +1848,6 @@ ThreadPinMode EnumUtil::FromString(const char *value); template<> TimestampCastResult EnumUtil::FromString(const char *value); -template<> -TransactionInvalidationPolicy EnumUtil::FromString(const char *value); - template<> TransactionModifierType EnumUtil::FromString(const char *value); diff --git a/src/duckdb/src/include/duckdb/common/enums/current_transaction_state.hpp b/src/duckdb/src/include/duckdb/common/enums/current_transaction_state.hpp deleted file mode 100644 index aff42da2a..000000000 --- a/src/duckdb/src/include/duckdb/common/enums/current_transaction_state.hpp +++ /dev/null @@ -1,15 +0,0 @@ -//===----------------------------------------------------------------------===// -// DuckDB -// -// duckdb/common/enums/current_transaction_state.hpp -// -// -//===----------------------------------------------------------------------===// - -#pragma once - -namespace duckdb { - -enum CurrentTransactionState { IN_ACTIVE_TRANSACTION, NOT_IN_ACTIVE_TRANSACTION }; - -} // namespace duckdb diff --git a/src/duckdb/src/include/duckdb/common/path.hpp b/src/duckdb/src/include/duckdb/common/path.hpp index 8191f6b97..8756b66cf 100644 --- a/src/duckdb/src/include/duckdb/common/path.hpp +++ b/src/duckdb/src/include/duckdb/common/path.hpp @@ -135,8 +135,6 @@ class Path { return FromString(input).ToString(); } - static string AddSuffixToPath(const string &path, const string &suffix); - private: string scheme; string authority; diff --git a/src/duckdb/src/include/duckdb/execution/executor.hpp b/src/duckdb/src/include/duckdb/execution/executor.hpp index 46315a989..769626000 100644 --- a/src/duckdb/src/include/duckdb/execution/executor.hpp +++ b/src/duckdb/src/include/duckdb/execution/executor.hpp @@ -52,7 +52,6 @@ class Executor { static Executor &Get(ClientContext &context); void Initialize(PhysicalOperator &physical_plan); - void Initialize(unique_ptr physical_plan); void CancelTasks(); PendingExecutionResult ExecuteTask(bool dry_run = false); @@ -148,7 +147,6 @@ class Executor { private: optional_ptr physical_plan; - unique_ptr owned_plan; mutex executor_lock; //! All pipelines of the query plan diff --git a/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp b/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp index c1114b091..e654a8e9d 100644 --- a/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +++ b/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp @@ -32,7 +32,7 @@ class PhysicalResultCollector : public PhysicalOperator { vector names; public: - static unique_ptr GetResultCollector(ClientContext &context, PreparedStatementData &data); + static PhysicalOperator &GetResultCollector(ClientContext &context, PreparedStatementData &data); public: //! The final method used to fetch the query result from this operator diff --git a/src/duckdb/src/include/duckdb/main/client_config.hpp b/src/duckdb/src/include/duckdb/main/client_config.hpp index 893ddcb31..40980b8a0 100644 --- a/src/duckdb/src/include/duckdb/main/client_config.hpp +++ b/src/duckdb/src/include/duckdb/main/client_config.hpp @@ -25,8 +25,7 @@ class ClientContext; class PhysicalResultCollector; class PreparedStatementData; -typedef std::function(ClientContext &context, PreparedStatementData &data)> - get_result_collector_t; +typedef std::function get_result_collector_t; struct ClientConfig { //! If the query profiler is enabled or not. diff --git a/src/duckdb/src/include/duckdb/main/client_context.hpp b/src/duckdb/src/include/duckdb/main/client_context.hpp index aa077598f..e73e60bca 100644 --- a/src/duckdb/src/include/duckdb/main/client_context.hpp +++ b/src/duckdb/src/include/duckdb/main/client_context.hpp @@ -186,7 +186,7 @@ class ClientContext : public enable_shared_from_this { //! Extract the logical plan of a query DUCKDB_API unique_ptr ExtractPlan(const string &query); - DUCKDB_API void PreprocessStatements(vector> &statements); + DUCKDB_API void HandlePragmaStatements(vector> &statements); //! Runs a function with a valid transaction context, potentially starting a transaction if the context is in auto //! commit mode. @@ -311,8 +311,6 @@ class ClientContext : public enable_shared_from_this { unique_ptr statement, PendingQueryParameters parameters); - bool ErrorInvalidatesTransaction(ExceptionType type); - private: //! Lock on using the ClientContext in parallel mutex context_lock; diff --git a/src/duckdb/src/include/duckdb/main/settings.hpp b/src/duckdb/src/include/duckdb/main/settings.hpp index 30a2f3021..812565dcd 100644 --- a/src/duckdb/src/include/duckdb/main/settings.hpp +++ b/src/duckdb/src/include/duckdb/main/settings.hpp @@ -372,18 +372,6 @@ struct CheckpointThresholdSetting { static Value GetSetting(const ClientContext &context); }; -struct CurrentTransactionInvalidationPolicySetting { - using RETURN_TYPE = string; - static constexpr const char *Name = "current_transaction_invalidation_policy"; - static constexpr const char *Description = - "Which types of exceptions invalidate the database for the current transaction"; - static constexpr const char *InputType = "VARCHAR"; - static constexpr const char *DefaultValue = "STANDARD_POLICY"; - static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 16; - static void OnSet(SettingCallbackInfo &info, Value &input); -}; - struct CustomExtensionRepositorySetting { using RETURN_TYPE = string; static constexpr const char *Name = "custom_extension_repository"; @@ -391,7 +379,7 @@ struct CustomExtensionRepositorySetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 17; + static constexpr idx_t SettingIndex = 16; }; struct CustomProfilingSettingsSetting { @@ -421,7 +409,7 @@ struct DebugAsofIejoinSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 18; + static constexpr idx_t SettingIndex = 17; }; struct DebugCheckpointAbortSetting { @@ -432,7 +420,7 @@ struct DebugCheckpointAbortSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "NONE"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 19; + static constexpr idx_t SettingIndex = 18; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -443,7 +431,7 @@ struct DebugCheckpointSleepMsSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "0"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 20; + static constexpr idx_t SettingIndex = 19; }; struct DebugEvictionQueueSleepMicroSecondsSetting { @@ -454,7 +442,7 @@ struct DebugEvictionQueueSleepMicroSecondsSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "0"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 21; + static constexpr idx_t SettingIndex = 20; }; struct DebugForceExternalSetting { @@ -476,7 +464,7 @@ struct DebugForceNoCrossProductSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 22; + static constexpr idx_t SettingIndex = 21; }; struct DebugPhysicalTableScanExecutionStrategySetting { @@ -487,7 +475,7 @@ struct DebugPhysicalTableScanExecutionStrategySetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "DEFAULT"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 23; + static constexpr idx_t SettingIndex = 22; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -498,7 +486,7 @@ struct DebugSkipCheckpointOnCommitSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 24; + static constexpr idx_t SettingIndex = 23; }; struct DebugVerifyBlocksSetting { @@ -508,7 +496,7 @@ struct DebugVerifyBlocksSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 25; + static constexpr idx_t SettingIndex = 24; }; struct DebugVerifyVectorSetting { @@ -518,7 +506,7 @@ struct DebugVerifyVectorSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "NONE"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 26; + static constexpr idx_t SettingIndex = 25; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -529,7 +517,7 @@ struct DebugWindowModeSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "WINDOW"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 27; + static constexpr idx_t SettingIndex = 26; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -541,7 +529,7 @@ struct DefaultBlockSizeSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "262144"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 28; + static constexpr idx_t SettingIndex = 27; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -552,7 +540,7 @@ struct DefaultCollationSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 29; + static constexpr idx_t SettingIndex = 28; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -563,7 +551,7 @@ struct DefaultNullOrderSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "NULLS_LAST"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 30; + static constexpr idx_t SettingIndex = 29; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -574,7 +562,7 @@ struct DefaultOrderSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "ASCENDING"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 31; + static constexpr idx_t SettingIndex = 30; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -595,7 +583,7 @@ struct DeprecatedUsingKeySyntaxSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "DEFAULT"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 32; + static constexpr idx_t SettingIndex = 31; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -608,7 +596,7 @@ struct DisableDatabaseInvalidationSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 33; + static constexpr idx_t SettingIndex = 32; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -619,7 +607,7 @@ struct DisableTimestamptzCastsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 34; + static constexpr idx_t SettingIndex = 33; }; struct DisabledCompressionMethodsSetting { @@ -669,7 +657,7 @@ struct DuckDBAPISetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 35; + static constexpr idx_t SettingIndex = 34; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -681,7 +669,7 @@ struct DynamicOrFilterThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "50"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 36; + static constexpr idx_t SettingIndex = 35; }; struct EnableExternalAccessSetting { @@ -693,7 +681,7 @@ struct EnableExternalAccessSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 37; + static constexpr idx_t SettingIndex = 36; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -704,7 +692,7 @@ struct EnableExternalFileCacheSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 38; + static constexpr idx_t SettingIndex = 37; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -716,7 +704,7 @@ struct EnableFSSTVectorsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 39; + static constexpr idx_t SettingIndex = 38; }; struct EnableHTTPLoggingSetting { @@ -736,7 +724,7 @@ struct EnableHTTPMetadataCacheSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 40; + static constexpr idx_t SettingIndex = 39; }; struct EnableLogging { @@ -757,7 +745,7 @@ struct EnableMacroDependenciesSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 41; + static constexpr idx_t SettingIndex = 40; }; struct EnableObjectCacheSetting { @@ -767,7 +755,7 @@ struct EnableObjectCacheSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 42; + static constexpr idx_t SettingIndex = 41; }; struct EnableProfilingSetting { @@ -813,7 +801,7 @@ struct EnableViewDependenciesSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 43; + static constexpr idx_t SettingIndex = 42; }; struct EnabledLogTypes { @@ -833,7 +821,7 @@ struct ErrorsAsJSONSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 44; + static constexpr idx_t SettingIndex = 43; }; struct ExperimentalMetadataReuseSetting { @@ -843,7 +831,7 @@ struct ExperimentalMetadataReuseSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 45; + static constexpr idx_t SettingIndex = 44; }; struct ExplainOutputSetting { @@ -853,7 +841,7 @@ struct ExplainOutputSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "PHYSICAL_ONLY"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 46; + static constexpr idx_t SettingIndex = 45; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -874,7 +862,7 @@ struct ExtensionDirectorySetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 47; + static constexpr idx_t SettingIndex = 46; }; struct ExternalThreadsSetting { @@ -884,7 +872,7 @@ struct ExternalThreadsSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "1"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 48; + static constexpr idx_t SettingIndex = 47; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -895,7 +883,7 @@ struct FileSearchPathSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 49; + static constexpr idx_t SettingIndex = 48; }; struct ForceBitpackingModeSetting { @@ -905,7 +893,7 @@ struct ForceBitpackingModeSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "AUTO"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 50; + static constexpr idx_t SettingIndex = 49; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -916,7 +904,7 @@ struct ForceCompressionSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "auto"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 51; + static constexpr idx_t SettingIndex = 50; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -949,7 +937,7 @@ struct GeometryMinimumShreddingSize { static constexpr const char *InputType = "BIGINT"; static constexpr const char *DefaultValue = "30000"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 52; + static constexpr idx_t SettingIndex = 51; }; struct HomeDirectorySetting { @@ -959,7 +947,7 @@ struct HomeDirectorySetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 53; + static constexpr idx_t SettingIndex = 52; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -981,7 +969,7 @@ struct HTTPProxySetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 54; + static constexpr idx_t SettingIndex = 53; }; struct HTTPProxyPasswordSetting { @@ -991,7 +979,7 @@ struct HTTPProxyPasswordSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 55; + static constexpr idx_t SettingIndex = 54; }; struct HTTPProxyUsernameSetting { @@ -1001,7 +989,7 @@ struct HTTPProxyUsernameSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 56; + static constexpr idx_t SettingIndex = 55; }; struct IeeeFloatingPointOpsSetting { @@ -1012,7 +1000,7 @@ struct IeeeFloatingPointOpsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 57; + static constexpr idx_t SettingIndex = 56; }; struct IgnoreUnknownCrsSetting { @@ -1023,7 +1011,7 @@ struct IgnoreUnknownCrsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 58; + static constexpr idx_t SettingIndex = 57; }; struct ImmediateTransactionModeSetting { @@ -1034,7 +1022,7 @@ struct ImmediateTransactionModeSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 59; + static constexpr idx_t SettingIndex = 58; }; struct IndexScanMaxCountSetting { @@ -1046,7 +1034,7 @@ struct IndexScanMaxCountSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "2048"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 60; + static constexpr idx_t SettingIndex = 59; }; struct IndexScanPercentageSetting { @@ -1058,7 +1046,7 @@ struct IndexScanPercentageSetting { static constexpr const char *InputType = "DOUBLE"; static constexpr const char *DefaultValue = "0.001"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 61; + static constexpr idx_t SettingIndex = 60; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1070,7 +1058,7 @@ struct IntegerDivisionSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 62; + static constexpr idx_t SettingIndex = 61; }; struct LambdaSyntaxSetting { @@ -1081,7 +1069,7 @@ struct LambdaSyntaxSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "DEFAULT"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 63; + static constexpr idx_t SettingIndex = 62; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1093,7 +1081,7 @@ struct LateMaterializationMaxRowsSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "50"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 64; + static constexpr idx_t SettingIndex = 63; }; struct LockConfigurationSetting { @@ -1103,7 +1091,7 @@ struct LockConfigurationSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 65; + static constexpr idx_t SettingIndex = 64; }; struct LogQueryPathSetting { @@ -1114,7 +1102,7 @@ struct LogQueryPathSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 66; + static constexpr idx_t SettingIndex = 65; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1157,7 +1145,7 @@ struct MaxExpressionDepthSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "1000"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 67; + static constexpr idx_t SettingIndex = 66; }; struct MaxMemorySetting { @@ -1188,7 +1176,7 @@ struct MaxVacuumTasksSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "100"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 68; + static constexpr idx_t SettingIndex = 67; }; struct MergeJoinThresholdSetting { @@ -1198,7 +1186,7 @@ struct MergeJoinThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "1000"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 69; + static constexpr idx_t SettingIndex = 68; }; struct NestedLoopJoinThresholdSetting { @@ -1209,7 +1197,7 @@ struct NestedLoopJoinThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "5"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 70; + static constexpr idx_t SettingIndex = 69; }; struct OldImplicitCastingSetting { @@ -1219,7 +1207,7 @@ struct OldImplicitCastingSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 71; + static constexpr idx_t SettingIndex = 70; }; struct OrderByNonIntegerLiteralSetting { @@ -1230,7 +1218,7 @@ struct OrderByNonIntegerLiteralSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 72; + static constexpr idx_t SettingIndex = 71; }; struct OrderedAggregateThresholdSetting { @@ -1240,7 +1228,7 @@ struct OrderedAggregateThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "262144"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 73; + static constexpr idx_t SettingIndex = 72; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1252,7 +1240,7 @@ struct PartitionedWriteFlushThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "524288"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 74; + static constexpr idx_t SettingIndex = 73; }; struct PartitionedWriteMaxOpenFilesSetting { @@ -1263,7 +1251,7 @@ struct PartitionedWriteMaxOpenFilesSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "100"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 75; + static constexpr idx_t SettingIndex = 74; }; struct PasswordSetting { @@ -1273,7 +1261,7 @@ struct PasswordSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 76; + static constexpr idx_t SettingIndex = 75; }; struct PerfectHtThresholdSetting { @@ -1283,7 +1271,7 @@ struct PerfectHtThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "12"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 77; + static constexpr idx_t SettingIndex = 76; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1295,7 +1283,7 @@ struct PinThreadsSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "auto"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 78; + static constexpr idx_t SettingIndex = 77; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1307,7 +1295,7 @@ struct PivotFilterThresholdSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "20"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 79; + static constexpr idx_t SettingIndex = 78; }; struct PivotLimitSetting { @@ -1317,7 +1305,7 @@ struct PivotLimitSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "100000"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 80; + static constexpr idx_t SettingIndex = 79; }; struct PreferRangeJoinsSetting { @@ -1327,7 +1315,7 @@ struct PreferRangeJoinsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 81; + static constexpr idx_t SettingIndex = 80; }; struct PreserveIdentifierCaseSetting { @@ -1338,7 +1326,7 @@ struct PreserveIdentifierCaseSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 82; + static constexpr idx_t SettingIndex = 81; }; struct PreserveInsertionOrderSetting { @@ -1350,7 +1338,7 @@ struct PreserveInsertionOrderSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 83; + static constexpr idx_t SettingIndex = 82; }; struct ProduceArrowStringViewSetting { @@ -1361,7 +1349,7 @@ struct ProduceArrowStringViewSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 84; + static constexpr idx_t SettingIndex = 83; }; struct ProfileOutputSetting { @@ -1414,7 +1402,7 @@ struct ScalarSubqueryErrorOnMultipleRowsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "true"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::LOCAL_DEFAULT; - static constexpr idx_t SettingIndex = 85; + static constexpr idx_t SettingIndex = 84; }; struct SchedulerProcessPartialSetting { @@ -1429,7 +1417,7 @@ struct SchedulerProcessPartialSetting { static constexpr const char *DefaultValue = "false"; #endif static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 86; + static constexpr idx_t SettingIndex = 85; }; struct SchemaSetting { @@ -1471,7 +1459,7 @@ struct StorageBlockPrefetchSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "REMOTE_ONLY"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 87; + static constexpr idx_t SettingIndex = 86; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1513,7 +1501,7 @@ struct TempFileEncryptionSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 88; + static constexpr idx_t SettingIndex = 87; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1534,7 +1522,7 @@ struct UsernameSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = ""; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 89; + static constexpr idx_t SettingIndex = 88; }; struct ValidateExternalFileCacheSetting { @@ -1546,7 +1534,7 @@ struct ValidateExternalFileCacheSetting { static constexpr const char *InputType = "VARCHAR"; static constexpr const char *DefaultValue = "VALIDATE_ALL"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 90; + static constexpr idx_t SettingIndex = 89; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1558,7 +1546,7 @@ struct VariantMinimumShreddingSizeSetting { static constexpr const char *InputType = "BIGINT"; static constexpr const char *DefaultValue = "30000"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 91; + static constexpr idx_t SettingIndex = 90; }; struct WalAutocheckpointEntriesSetting { @@ -1569,7 +1557,7 @@ struct WalAutocheckpointEntriesSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "0"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 92; + static constexpr idx_t SettingIndex = 91; }; struct WarningsAsErrorsSetting { @@ -1579,7 +1567,7 @@ struct WarningsAsErrorsSetting { static constexpr const char *InputType = "BOOLEAN"; static constexpr const char *DefaultValue = "false"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 93; + static constexpr idx_t SettingIndex = 92; static void OnSet(SettingCallbackInfo &info, Value &input); }; @@ -1591,7 +1579,7 @@ struct WriteBufferRowGroupCountSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "5"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_DEFAULT; - static constexpr idx_t SettingIndex = 94; + static constexpr idx_t SettingIndex = 93; }; struct ZstdMinStringLengthSetting { @@ -1602,11 +1590,11 @@ struct ZstdMinStringLengthSetting { static constexpr const char *InputType = "UBIGINT"; static constexpr const char *DefaultValue = "4096"; static constexpr SettingScopeTarget Scope = SettingScopeTarget::GLOBAL_ONLY; - static constexpr idx_t SettingIndex = 95; + static constexpr idx_t SettingIndex = 94; }; struct GeneratedSettingInfo { - static constexpr idx_t MaxSettingIndex = 96; + static constexpr idx_t MaxSettingIndex = 95; }; //===----------------------------------------------------------------------===// diff --git a/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp b/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp index f5ca9731f..ffbc5f128 100644 --- a/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +++ b/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp @@ -20,26 +20,17 @@ enum class TransactionModifierType : uint8_t { TRANSACTION_READ_WRITE }; -enum class TransactionInvalidationPolicy : uint8_t { STANDARD_POLICY, ALL_ERRORS_INVALIDATE_TRANSACTION }; - struct TransactionInfo : public ParseInfo { public: static constexpr const ParseInfoType TYPE = ParseInfoType::TRANSACTION_INFO; public: - explicit TransactionInfo( - TransactionType type, - TransactionInvalidationPolicy invalidation_policy = TransactionInvalidationPolicy::STANDARD_POLICY, - bool auto_rollback = false); + explicit TransactionInfo(TransactionType type); //! The type of transaction statement TransactionType type; //! Whether or not a transaction can make modifications to the database TransactionModifierType modifier; - //! Which types of exceptions invalidate the database - TransactionInvalidationPolicy invalidation_policy; - //! If transaction fails, automatically do a ROLLBACK; - bool auto_rollback; public: void Serialize(Serializer &serializer) const override; diff --git a/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp b/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp new file mode 100644 index 000000000..361a6a768 --- /dev/null +++ b/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/planner/pragma_handler.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/common/common.hpp" +#include "duckdb/common/vector.hpp" +#include "duckdb/parser/statement/pragma_statement.hpp" + +namespace duckdb { +class ClientContext; +class ClientContextLock; +class SQLStatement; +struct PragmaInfo; + +//! Pragma handler is responsible for converting certain pragma statements into new queries +class PragmaHandler { +public: + explicit PragmaHandler(ClientContext &context); + + void HandlePragmaStatements(ClientContextLock &lock, vector> &statements); + +private: + ClientContext &context; + +private: + //! Handles a pragma statement, returns whether the statement was expanded, if it was expanded the 'resulting_query' + //! contains the statement(s) to replace the current one + bool HandlePragma(SQLStatement &statement, string &resulting_query); + + void HandlePragmaStatementsInternal(vector> &statements); +}; +} // namespace duckdb diff --git a/src/duckdb/src/include/duckdb/planner/statement_preprocessor.hpp b/src/duckdb/src/include/duckdb/planner/statement_preprocessor.hpp deleted file mode 100644 index be8492f99..000000000 --- a/src/duckdb/src/include/duckdb/planner/statement_preprocessor.hpp +++ /dev/null @@ -1,39 +0,0 @@ -//===----------------------------------------------------------------------===// -// DuckDB -// -// duckdb/planner/statement_preprocessor.hpp -// -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include "duckdb/common/common.hpp" -#include "duckdb/common/vector.hpp" -#include "duckdb/parser/statement/pragma_statement.hpp" -#include "duckdb/transaction/transaction_context.hpp" -#include "duckdb/common/enums/current_transaction_state.hpp" - -namespace duckdb { -class ClientContext; -class ClientContextLock; -class SQLStatement; -struct PragmaInfo; -//! Preprocesses parsed statements: expands pragmas, unpacks multi-statements, and wraps in transactions -class StatementPreprocessor { -public: - explicit StatementPreprocessor(ClientContext &context); - void Preprocess(ClientContextLock &lock, vector> &statements, - CurrentTransactionState transaction_context_state); - void PreprocessInternal(ClientContextLock &lock, vector> &statements, - CurrentTransactionState transaction_context_state); - -private: - ClientContext &context; - -private: - //! Handles a pragma statement, determines whether the statement needs reparsing, if it does, it returns the - //! statement(s) to replace the current one. Otherwise, it just returns back the original statement in a vector. - vector> TryReparsePragma(unique_ptr statement) const; -}; -} // namespace duckdb diff --git a/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp b/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp index 191c59b0b..52ed376c4 100644 --- a/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +++ b/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp @@ -192,31 +192,6 @@ struct UncompressedStringStorage { return count; } - static void StringRevertAppend(ColumnSegment &segment, idx_t new_count) { - if (new_count >= segment.count) { - return; - } - // we need to decrement the dictionary size by all of the strings we are erasing - auto &buffer_manager = BufferManager::GetBufferManager(segment.db); - auto handle = buffer_manager.Pin(segment.block); - auto handle_ptr = handle.Ptr(); - auto result_data = reinterpret_cast(handle_ptr + DICTIONARY_HEADER_SIZE); - auto dictionary_size = reinterpret_cast(handle_ptr); - uint32_t new_dictionary_size; - if (new_count == 0) { - new_dictionary_size = 0; - } else { - auto entry_offset = result_data[new_count - 1]; - if (entry_offset < 0) { - // overflow strings store the dict offset negatively - invert size - new_dictionary_size = -entry_offset; - } else { - new_dictionary_size = entry_offset; - } - } - *dictionary_size = new_dictionary_size; - } - static idx_t FinalizeAppend(ColumnSegment &segment, SegmentStatistics &stats); public: diff --git a/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp b/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp index bb9016145..4c09fb7a9 100644 --- a/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +++ b/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp @@ -13,7 +13,6 @@ #include "duckdb/common/error_data.hpp" #include "duckdb/common/exception.hpp" #include "duckdb/common/optional_ptr.hpp" -#include "duckdb/parser/parsed_data/transaction_info.hpp" namespace duckdb { @@ -56,24 +55,9 @@ class TransactionContext { void ResetActiveQuery(); void SetActiveQuery(transaction_t query_number); - void SetInvalidationPolicy(TransactionInvalidationPolicy new_invalidation_policy) { - invalidation_policy = new_invalidation_policy; - }; - TransactionInvalidationPolicy GetInvalidationPolicy() { - return invalidation_policy; - }; - void SetAutoRollback(bool new_auto_rollback) { - auto_rollback = new_auto_rollback; - }; - bool GetAutoRollback() { - return auto_rollback; - }; - private: ClientContext &context; bool auto_commit; - TransactionInvalidationPolicy invalidation_policy; - bool auto_rollback; unique_ptr current_transaction; diff --git a/src/duckdb/src/main/client_context.cpp b/src/duckdb/src/main/client_context.cpp index 073ef1bfe..0c9b1b5d6 100644 --- a/src/duckdb/src/main/client_context.cpp +++ b/src/duckdb/src/main/client_context.cpp @@ -43,7 +43,7 @@ #include "duckdb/parser/tableref/column_data_ref.hpp" #include "duckdb/planner/operator/logical_execute.hpp" #include "duckdb/planner/planner.hpp" -#include "duckdb/planner/statement_preprocessor.hpp" +#include "duckdb/planner/pragma_handler.hpp" #include "duckdb/storage/data_table.hpp" #include "duckdb/transaction/meta_transaction.hpp" #include "duckdb/transaction/transaction_context.hpp" @@ -52,7 +52,6 @@ #include "duckdb/logging/log_manager.hpp" #include "duckdb/main/settings.hpp" #include "duckdb/main/result_set_manager.hpp" -#include "duckdb/parser/statement/transaction_statement.hpp" #ifdef __APPLE__ #include @@ -591,9 +590,9 @@ ClientContext::PendingPreparedStatementInternal(ClientContextLock &lock, statement_data.memory_type = parameters.query_parameters.memory_type; // Get the result collector and initialize the executor. - auto collector = get_collector(*this, statement_data); - D_ASSERT(collector->type == PhysicalOperatorType::RESULT_COLLECTOR); - executor.Initialize(std::move(collector)); + auto &collector = get_collector(*this, statement_data); + D_ASSERT(collector.type == PhysicalOperatorType::RESULT_COLLECTOR); + executor.Initialize(collector); auto types = executor.GetTypes(); D_ASSERT(types == statement_data.types); @@ -634,15 +633,6 @@ void ClientContext::WaitForTask(ClientContextLock &lock, BaseQueryResult &result active_query->executor->WaitForTask(); } -bool ClientContext::ErrorInvalidatesTransaction(ExceptionType type) { - switch (transaction.GetInvalidationPolicy()) { - case TransactionInvalidationPolicy::ALL_ERRORS_INVALIDATE_TRANSACTION: - return true; - default: - return Exception::InvalidatesTransaction(type); - } -} - PendingExecutionResult ClientContext::ExecuteTaskInternal(ClientContextLock &lock, BaseQueryResult &result, bool dry_run) { D_ASSERT(active_query); @@ -667,10 +657,10 @@ PendingExecutionResult ClientContext::ExecuteTaskInternal(ClientContextLock &loc } else { // Interrupted by an exception caused in a worker thread error = executor.GetError(); - invalidate_transaction = ErrorInvalidatesTransaction(error.Type()); + invalidate_transaction = Exception::InvalidatesTransaction(error.Type()); result.SetError(error); } - } else if (!ErrorInvalidatesTransaction(error.Type())) { + } else if (!Exception::InvalidatesTransaction(error.Type())) { invalidate_transaction = false; } else if (Exception::InvalidatesDatabase(error.Type()) || error.Type() == ExceptionType::INTERNAL) { // fatal exceptions invalidate the entire database @@ -702,11 +692,8 @@ vector> ClientContext::ParseStatementsInternal(ClientCo Parser parser(GetParserOptions()); parser.ParseQuery(query); - StatementPreprocessor preprocessor(*this); - - const CurrentTransactionState transaction_context_state = - transaction.HasActiveTransaction() ? IN_ACTIVE_TRANSACTION : NOT_IN_ACTIVE_TRANSACTION; - preprocessor.Preprocess(lock, parser.statements, transaction_context_state); + PragmaHandler handler(*this); + handler.HandlePragmaStatements(lock, parser.statements); return std::move(parser.statements); } catch (std::exception &ex) { @@ -716,13 +703,11 @@ vector> ClientContext::ParseStatementsInternal(ClientCo } } -void ClientContext::PreprocessStatements(vector> &statements) { +void ClientContext::HandlePragmaStatements(vector> &statements) { auto lock = LockContext(); - StatementPreprocessor preprocessor(*this); - const CurrentTransactionState transaction_context_state = - transaction.HasActiveTransaction() ? IN_ACTIVE_TRANSACTION : NOT_IN_ACTIVE_TRANSACTION; - preprocessor.Preprocess(*lock, statements, transaction_context_state); + PragmaHandler handler(*this); + handler.HandlePragmaStatements(*lock, statements); } unique_ptr ClientContext::ExtractPlan(const string &query) { @@ -928,20 +913,10 @@ unique_ptr ClientContext::PendingStatementOrPreparedStatemen Parser parser(GetParserOptions()); ErrorData error; parser.ParseQuery(statement->ToString()); - // FIXME: these properties don't round-trip in ToString(), so we overwrite them manually if (statement->type == StatementType::UPDATE_STATEMENT) { // re-apply `prioritize_table_when_binding` (which is normally set during transform) parser.statements[0]->Cast().prioritize_table_when_binding = statement->Cast().prioritize_table_when_binding; - } else if (statement->type == StatementType::TRANSACTION_STATEMENT) { - // re-apply invalidation policy - auto &reparsed_transaction_stmt = parser.statements[0]->Cast(); - auto &previous_transaction_stmt = statement->Cast(); - reparsed_transaction_stmt.info->invalidation_policy = - previous_transaction_stmt.info->invalidation_policy; - // re-apply auto rollback - parser.statements[0]->Cast().info->auto_rollback = - statement->Cast().info->auto_rollback; } statement = std::move(parser.statements[0]); } catch (const NotImplementedException &) { @@ -985,7 +960,7 @@ unique_ptr ClientContext::PendingStatementOrPreparedStatemen } } catch (std::exception &ex) { ErrorData error(ex); - if (!ErrorInvalidatesTransaction(error.Type())) { + if (!Exception::InvalidatesTransaction(error.Type())) { // standard exceptions do not invalidate the current transaction invalidate_query = false; } else if (Exception::InvalidatesDatabase(error.Type())) { @@ -1038,6 +1013,7 @@ unique_ptr ClientContext::Query(unique_ptr statement, unique_ptr ClientContext::Query(const string &query, QueryParameters query_parameters) { auto lock = LockContext(); + vector> statements; try { statements = ParseStatements(*lock, query); @@ -1073,9 +1049,6 @@ unique_ptr ClientContext::Query(const string &query, QueryParameter current_result = ExecutePendingQueryInternal(*lock, *pending_query); } if (current_result->HasError()) { - if (transaction.HasActiveTransaction() && transaction.GetAutoRollback()) { - transaction.Rollback(current_result->GetErrorObject()); - } // Reset the interrupted flag, this was set by the task that found the error // Next statements should not be bothered by that interruption interrupted = false; @@ -1249,7 +1222,7 @@ void ClientContext::RunFunctionInTransactionInternal(ClientContextLock &lock, co } catch (std::exception &ex) { ErrorData error(ex); bool invalidates_transaction = true; - if (!ErrorInvalidatesTransaction(error.Type())) { + if (!Exception::InvalidatesTransaction(error.Type())) { // standard exceptions don't invalidate the transaction invalidates_transaction = false; } else if (Exception::InvalidatesDatabase(error.Type())) { diff --git a/src/duckdb/src/main/config.cpp b/src/duckdb/src/main/config.cpp index 3f27c726a..0401d62f9 100644 --- a/src/duckdb/src/main/config.cpp +++ b/src/duckdb/src/main/config.cpp @@ -11,7 +11,6 @@ #include "duckdb/storage/storage_extension.hpp" #include "duckdb/common/serializer/serializer.hpp" #include "duckdb/common/exception/parser_exception.hpp" -#include "duckdb/common/path.hpp" #ifndef DUCKDB_NO_THREADS #include "duckdb/common/thread.hpp" @@ -90,7 +89,6 @@ static const ConfigurationOption internal_options[] = { DUCKDB_GLOBAL(BlockAllocatorMemorySetting), DUCKDB_SETTING(CatalogErrorMaxSchemasSetting), DUCKDB_GLOBAL(CheckpointThresholdSetting), - DUCKDB_SETTING_CALLBACK(CurrentTransactionInvalidationPolicySetting), DUCKDB_SETTING(CustomExtensionRepositorySetting), DUCKDB_LOCAL(CustomProfilingSettingsSetting), DUCKDB_GLOBAL(CustomUserAgentSetting), @@ -206,12 +204,12 @@ static const ConfigurationOption internal_options[] = { DUCKDB_SETTING(ZstdMinStringLengthSetting), FINAL_SETTING}; -static const ConfigurationAlias setting_aliases[] = {DUCKDB_SETTING_ALIAS("memory_limit", 98), - DUCKDB_SETTING_ALIAS("null_order", 42), - DUCKDB_SETTING_ALIAS("profiling_output", 117), - DUCKDB_SETTING_ALIAS("user", 132), +static const ConfigurationAlias setting_aliases[] = {DUCKDB_SETTING_ALIAS("memory_limit", 97), + DUCKDB_SETTING_ALIAS("null_order", 41), + DUCKDB_SETTING_ALIAS("profiling_output", 116), + DUCKDB_SETTING_ALIAS("user", 131), DUCKDB_SETTING_ALIAS("wal_autocheckpoint", 24), - DUCKDB_SETTING_ALIAS("worker_threads", 131), + DUCKDB_SETTING_ALIAS("worker_threads", 130), FINAL_ALIAS}; vector DBConfig::GetOptions() { @@ -548,8 +546,10 @@ void DBConfig::SetDefaultTempDirectory() { options.temporary_directory = string(); } else if (DBConfig::IsInMemoryDatabase(options.database_path.c_str())) { options.temporary_directory = ".tmp"; + } else if (StringUtil::Contains(options.database_path, "?")) { + options.temporary_directory = StringUtil::Split(options.database_path, "?")[0] + ".tmp"; } else { - options.temporary_directory = Path::AddSuffixToPath(options.database_path, ".tmp"); + options.temporary_directory = options.database_path + ".tmp"; } } diff --git a/src/duckdb/src/main/extension/extension_helper.cpp b/src/duckdb/src/main/extension/extension_helper.cpp index f29532665..8907b833e 100644 --- a/src/duckdb/src/main/extension/extension_helper.cpp +++ b/src/duckdb/src/main/extension/extension_helper.cpp @@ -126,8 +126,6 @@ static const DefaultExtension internal_extensions[] = { {"fts", "Adds support for Full-Text Search Indexes", false}, {"ui", "Adds local UI for DuckDB", false}, {"ducklake", "Adds support for DuckLake, SQL as a Lakehouse Format", false}, - {"vortex", "Adds support for reading and writing files using the Vortex file format", false}, - {"lance", "Adds support for querying Lance datasets", false}, {nullptr, nullptr, false}}; idx_t ExtensionHelper::DefaultExtensionCount() { diff --git a/src/duckdb/src/main/settings/custom_settings.cpp b/src/duckdb/src/main/settings/custom_settings.cpp index 91ef2d454..853abd69f 100644 --- a/src/duckdb/src/main/settings/custom_settings.cpp +++ b/src/duckdb/src/main/settings/custom_settings.cpp @@ -1662,12 +1662,4 @@ void WarningsAsErrorsSetting::OnSet(SettingCallbackInfo &info, Value &input) { } } -void CurrentTransactionInvalidationPolicySetting::OnSet(SettingCallbackInfo &info, Value &input) { - if (!info.context) { - throw InvalidInputException( - "current_transaction_invalidaton_policy can only be set when there is an active client context"); - } - info.context->transaction.SetInvalidationPolicy( - EnumUtil::FromString(input.GetValue())); -} } // namespace duckdb diff --git a/src/duckdb/src/parallel/executor.cpp b/src/duckdb/src/parallel/executor.cpp index b9cafc8c7..9ab72c3c7 100644 --- a/src/duckdb/src/parallel/executor.cpp +++ b/src/duckdb/src/parallel/executor.cpp @@ -374,12 +374,6 @@ void Executor::VerifyPipelines() { #endif } -void Executor::Initialize(unique_ptr physical_plan_p) { - Reset(); - owned_plan = std::move(physical_plan_p); - InitializeInternal(*owned_plan); -} - void Executor::Initialize(PhysicalOperator &plan) { Reset(); InitializeInternal(plan); diff --git a/src/duckdb/src/parser/parsed_data/transaction_info.cpp b/src/duckdb/src/parser/parsed_data/transaction_info.cpp index 5d5e2e4cf..af102e6e3 100644 --- a/src/duckdb/src/parser/parsed_data/transaction_info.cpp +++ b/src/duckdb/src/parser/parsed_data/transaction_info.cpp @@ -6,10 +6,8 @@ namespace duckdb { TransactionInfo::TransactionInfo() : ParseInfo(TYPE) { } -TransactionInfo::TransactionInfo(TransactionType type, TransactionInvalidationPolicy invalidation_policy, - bool auto_rollback) - : ParseInfo(TYPE), type(type), modifier(TransactionModifierType::TRANSACTION_DEFAULT_MODIFIER), - invalidation_policy(invalidation_policy), auto_rollback(auto_rollback) { +TransactionInfo::TransactionInfo(TransactionType type) + : ParseInfo(TYPE), type(type), modifier(TransactionModifierType::TRANSACTION_DEFAULT_MODIFIER) { } string TransactionInfo::ToString() const { @@ -49,8 +47,6 @@ string TransactionInfo::ToString() const { unique_ptr TransactionInfo::Copy() const { auto result = make_uniq(type); result->modifier = modifier; - result->invalidation_policy = invalidation_policy; - result->auto_rollback = auto_rollback; return result; } diff --git a/src/duckdb/src/planner/pragma_handler.cpp b/src/duckdb/src/planner/pragma_handler.cpp new file mode 100644 index 000000000..dda722200 --- /dev/null +++ b/src/duckdb/src/planner/pragma_handler.cpp @@ -0,0 +1,84 @@ +#include "duckdb/planner/pragma_handler.hpp" +#include "duckdb/planner/binder.hpp" +#include "duckdb/parser/parser.hpp" + +#include "duckdb/catalog/catalog.hpp" +#include "duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp" +#include "duckdb/parser/statement/multi_statement.hpp" +#include "duckdb/parser/parsed_data/bound_pragma_info.hpp" +#include "duckdb/function/function.hpp" + +#include "duckdb/main/client_context.hpp" + +#include "duckdb/common/string_util.hpp" +#include "duckdb/common/file_system.hpp" +#include "duckdb/function/function_binder.hpp" + +namespace duckdb { + +PragmaHandler::PragmaHandler(ClientContext &context) : context(context) { +} + +void PragmaHandler::HandlePragmaStatementsInternal(vector> &statements) { + vector> new_statements; + for (idx_t i = 0; i < statements.size(); i++) { + if (statements[i]->type == StatementType::MULTI_STATEMENT) { + auto &multi_statement = statements[i]->Cast(); + for (auto &stmt : multi_statement.statements) { + new_statements.push_back(std::move(stmt)); + } + continue; + } + if (statements[i]->type == StatementType::PRAGMA_STATEMENT) { + // PRAGMA statement: check if we need to replace it by a new set of statements + PragmaHandler handler(context); + string new_query; + bool expanded = handler.HandlePragma(*statements[i], new_query); + if (expanded) { + // this PRAGMA statement gets replaced by a new query string + // push the new query string through the parser again and add it to the transformer + Parser parser(context.GetParserOptions()); + parser.ParseQuery(new_query); + // insert the new statements and remove the old statement + for (idx_t j = 0; j < parser.statements.size(); j++) { + new_statements.push_back(std::move(parser.statements[j])); + } + continue; + } + } + new_statements.push_back(std::move(statements[i])); + } + statements = std::move(new_statements); +} + +void PragmaHandler::HandlePragmaStatements(ClientContextLock &lock, vector> &statements) { + // first check if there are any pragma statements + bool found_pragma = false; + for (idx_t i = 0; i < statements.size(); i++) { + if (statements[i]->type == StatementType::PRAGMA_STATEMENT || + statements[i]->type == StatementType::MULTI_STATEMENT) { + found_pragma = true; + break; + } + } + if (!found_pragma) { + // no pragmas: skip this step + return; + } + context.RunFunctionInTransactionInternal(lock, [&]() { HandlePragmaStatementsInternal(statements); }); +} + +bool PragmaHandler::HandlePragma(SQLStatement &statement, string &resulting_query) { + auto info = statement.Cast().info->Copy(); + QueryErrorContext error_context(statement.stmt_location); + auto binder = Binder::CreateBinder(context); + auto bound_info = binder->BindPragma(*info, error_context); + if (bound_info->function.query) { + FunctionParameters parameters {bound_info->parameters, bound_info->named_parameters}; + resulting_query = bound_info->function.query(context, parameters); + return true; + } + return false; +} + +} // namespace duckdb diff --git a/src/duckdb/src/planner/statement_preprocessor.cpp b/src/duckdb/src/planner/statement_preprocessor.cpp deleted file mode 100644 index 6c541cb68..000000000 --- a/src/duckdb/src/planner/statement_preprocessor.cpp +++ /dev/null @@ -1,182 +0,0 @@ -#include "duckdb/planner/statement_preprocessor.hpp" -#include "duckdb/planner/binder.hpp" -#include "duckdb/parser/parser.hpp" - -#include "duckdb/catalog/catalog.hpp" -#include "duckdb/catalog/catalog_entry/pragma_function_catalog_entry.hpp" -#include "duckdb/parser/statement/multi_statement.hpp" -#include "duckdb/parser/parsed_data/bound_pragma_info.hpp" -#include "duckdb/function/function.hpp" - -#include "duckdb/main/client_context.hpp" - -#include "duckdb/common/string_util.hpp" -#include "duckdb/common/file_system.hpp" -#include "duckdb/function/function_binder.hpp" -#include "duckdb/parser/statement/transaction_statement.hpp" -#include "duckdb/parser/expression/constant_expression.hpp" -#include "duckdb/parser/statement/set_statement.hpp" -#include "duckdb/common/enums/current_transaction_state.hpp" - -namespace duckdb { - -enum class PreprocessingTransactionHandling : uint8_t { - // Not in a transaction and should wrap in an implicit BEGIN/COMMIT - WRAP_IN_TRANSACTION, - // Already in an active transaction — set invalidation policy for multi-statement bodies - SET_INVALIDATION_POLICY, - // No transaction handling needed (single statement, or no transaction context applies) - NONE -}; - -void AddStatements(vector> &body_statements, - const PreprocessingTransactionHandling transaction_handling, - vector> &result_statements) { - if (transaction_handling == PreprocessingTransactionHandling::WRAP_IN_TRANSACTION) { - auto begin_info = make_uniq( - TransactionType::BEGIN_TRANSACTION, TransactionInvalidationPolicy::ALL_ERRORS_INVALIDATE_TRANSACTION, true); - result_statements.push_back(make_uniq(std::move(begin_info))); - } else if (transaction_handling == PreprocessingTransactionHandling::SET_INVALIDATION_POLICY) { - // Here we do a `SET current_transaction_invalidation_policy='ALL_ERRORS_INVALIDATE_TRANSACTION';`, for the - // current transaction, to make sure multistatements/pragmas are fully transactional, and invalidate even with - // minor errors such as binder, parser, etc. - result_statements.push_back(make_uniq( - "current_transaction_invalidation_policy", - make_uniq(Value("ALL_ERRORS_INVALIDATE_TRANSACTION")), SetScope::GLOBAL)); - } - // insert body_statements into result_statements - result_statements.insert(result_statements.end(), std::make_move_iterator(body_statements.begin()), - std::make_move_iterator(body_statements.end())); - if (transaction_handling == PreprocessingTransactionHandling::WRAP_IN_TRANSACTION) { - auto commit_info = make_uniq( - TransactionType::COMMIT, TransactionInvalidationPolicy::ALL_ERRORS_INVALIDATE_TRANSACTION, true); - result_statements.push_back(make_uniq(std::move(commit_info))); - } else if (transaction_handling == PreprocessingTransactionHandling::SET_INVALIDATION_POLICY) { - result_statements.push_back( - make_uniq("current_transaction_invalidation_policy", - make_uniq(Value("STANDARD_POLICY")), SetScope::GLOBAL)); - } -} - -StatementPreprocessor::StatementPreprocessor(ClientContext &context) : context(context) { -} - -PreprocessingTransactionHandling GetTransactionHandling(vector> &body_statements, - CurrentTransactionState full_transaction_state, - bool can_wrap = true) { - if (body_statements.size() <= 1) { - return PreprocessingTransactionHandling::NONE; - } - if (full_transaction_state == NOT_IN_ACTIVE_TRANSACTION && can_wrap) { - return PreprocessingTransactionHandling::WRAP_IN_TRANSACTION; - } - if (full_transaction_state == IN_ACTIVE_TRANSACTION) { - return PreprocessingTransactionHandling::SET_INVALIDATION_POLICY; - } - return PreprocessingTransactionHandling::NONE; -} - -void UnpackMultiStatement(MultiStatement &multi_statement, const CurrentTransactionState current_transaction_state, - vector> &new_statements) { -#ifdef DEBUG // MultiStatement should not contain transaction statements - for (auto &sub_statement : multi_statement.statements) { - D_ASSERT(sub_statement->type != StatementType::TRANSACTION_STATEMENT); - } -#endif - bool has_select = false; - for (auto &stmt : multi_statement.statements) { - if (stmt->type == StatementType::SELECT_STATEMENT) { - // Pivot statements have select, and we don't want to wrap those in transactions. - has_select = true; - } - } - bool can_wrap_in_transaction = !has_select; - auto handling = - GetTransactionHandling(multi_statement.statements, current_transaction_state, can_wrap_in_transaction); - AddStatements(multi_statement.statements, handling, new_statements); -} - -vector> StatementPreprocessor::TryReparsePragma(unique_ptr statement) const { - // Try reparsing - const auto info = statement->Cast().info->Copy(); - QueryErrorContext error_context(statement->stmt_location); - const auto binder = Binder::CreateBinder(context); - const auto bound_info = binder->BindPragma(*info, error_context); - if (bound_info->function.query) { - // Needs reparsing - FunctionParameters parameters {bound_info->parameters, bound_info->named_parameters}; - const auto query_to_reparse = bound_info->function.query(context, parameters); - Parser parser(context.GetParserOptions()); - parser.ParseQuery(query_to_reparse); - return std::move(parser.statements); - } - vector> res; - res.push_back(std::move(statement)); - return res; -} - -void StatementPreprocessor::Preprocess(ClientContextLock &lock, vector> &statements, - CurrentTransactionState transaction_context_state) { - // Quick check: do we need preprocessing at all? - bool needs_preprocessing = false; - for (auto &stmt : statements) { - if (stmt->type == StatementType::PRAGMA_STATEMENT || stmt->type == StatementType::MULTI_STATEMENT) { - needs_preprocessing = true; - break; - } - } - if (!needs_preprocessing) { - return; - } - - context.RunFunctionInTransactionInternal(lock, - [&] { PreprocessInternal(lock, statements, transaction_context_state); }); -} - -void StatementPreprocessor::PreprocessInternal(ClientContextLock &lock, vector> &statements, - const CurrentTransactionState transaction_context_state) { - CurrentTransactionState chained_transaction_state = NOT_IN_ACTIVE_TRANSACTION; - vector> new_statements; - for (idx_t i = 0; i < statements.size(); i++) { - auto query = statements[i]->query; - const CurrentTransactionState full_transaction_state = - (transaction_context_state == IN_ACTIVE_TRANSACTION || chained_transaction_state == IN_ACTIVE_TRANSACTION) - ? IN_ACTIVE_TRANSACTION - : NOT_IN_ACTIVE_TRANSACTION; - - switch (statements[i]->type) { - case StatementType::PRAGMA_STATEMENT: { - auto reparsed_statements = TryReparsePragma(std::move(statements[i])); - const auto handling = GetTransactionHandling(reparsed_statements, full_transaction_state); - AddStatements(reparsed_statements, handling, new_statements); - break; - } - case StatementType::MULTI_STATEMENT: { - auto &multi_statement = statements[i]->Cast(); - UnpackMultiStatement(multi_statement, full_transaction_state, new_statements); - break; - } - case StatementType::TRANSACTION_STATEMENT: { - auto &transaction_stmt = statements[i]->Cast(); - - if (transaction_stmt.info->type == TransactionType::BEGIN_TRANSACTION) { - new_statements.push_back(std::move(statements[i])); - chained_transaction_state = IN_ACTIVE_TRANSACTION; - break; - } - if (transaction_stmt.info->type == TransactionType::COMMIT || - transaction_stmt.info->type == TransactionType::ROLLBACK) { - chained_transaction_state = NOT_IN_ACTIVE_TRANSACTION; - } - new_statements.push_back(std::move(statements[i])); - break; - } - default: { - new_statements.push_back(std::move(statements[i])); - } - } - } - - statements = std::move(new_statements); -} -} // namespace duckdb diff --git a/src/duckdb/src/storage/compression/string_uncompressed.cpp b/src/duckdb/src/storage/compression/string_uncompressed.cpp index a571070cb..4b9dc8519 100644 --- a/src/duckdb/src/storage/compression/string_uncompressed.cpp +++ b/src/duckdb/src/storage/compression/string_uncompressed.cpp @@ -269,18 +269,17 @@ void UncompressedStringStorage::VisitBlockIds(const ColumnSegment &segment, Bloc //===--------------------------------------------------------------------===// CompressionFunction StringUncompressed::GetFunction(PhysicalType data_type) { D_ASSERT(data_type == PhysicalType::VARCHAR); - return CompressionFunction(CompressionType::COMPRESSION_UNCOMPRESSED, data_type, - UncompressedStringStorage::StringInitAnalyze, UncompressedStringStorage::StringAnalyze, - UncompressedStringStorage::StringFinalAnalyze, UncompressedFunctions::InitCompression, - UncompressedFunctions::Compress, UncompressedFunctions::FinalizeCompress, - UncompressedStringStorage::StringInitScan, UncompressedStringStorage::StringScan, - UncompressedStringStorage::StringScanPartial, UncompressedStringStorage::StringFetchRow, - UncompressedFunctions::EmptySkip, UncompressedStringStorage::StringInitSegment, - UncompressedStringStorage::StringInitAppend, UncompressedStringStorage::StringAppend, - UncompressedStringStorage::FinalizeAppend, UncompressedStringStorage::StringRevertAppend, - UncompressedStringStorage::SerializeState, UncompressedStringStorage::DeserializeState, - UncompressedStringStorage::VisitBlockIds, UncompressedStringInitPrefetch, - UncompressedStringStorage::Select); + return CompressionFunction( + CompressionType::COMPRESSION_UNCOMPRESSED, data_type, UncompressedStringStorage::StringInitAnalyze, + UncompressedStringStorage::StringAnalyze, UncompressedStringStorage::StringFinalAnalyze, + UncompressedFunctions::InitCompression, UncompressedFunctions::Compress, + UncompressedFunctions::FinalizeCompress, UncompressedStringStorage::StringInitScan, + UncompressedStringStorage::StringScan, UncompressedStringStorage::StringScanPartial, + UncompressedStringStorage::StringFetchRow, UncompressedFunctions::EmptySkip, + UncompressedStringStorage::StringInitSegment, UncompressedStringStorage::StringInitAppend, + UncompressedStringStorage::StringAppend, UncompressedStringStorage::FinalizeAppend, nullptr, + UncompressedStringStorage::SerializeState, UncompressedStringStorage::DeserializeState, + UncompressedStringStorage::VisitBlockIds, UncompressedStringInitPrefetch, UncompressedStringStorage::Select); } //===--------------------------------------------------------------------===// diff --git a/src/duckdb/src/storage/serialization/serialize_parse_info.cpp b/src/duckdb/src/storage/serialization/serialize_parse_info.cpp index a0f5edd30..e5ffc2c45 100644 --- a/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +++ b/src/duckdb/src/storage/serialization/serialize_parse_info.cpp @@ -656,16 +656,12 @@ void TransactionInfo::Serialize(Serializer &serializer) const { ParseInfo::Serialize(serializer); serializer.WriteProperty(200, "type", type); serializer.WriteProperty(201, "modifier", modifier); - serializer.WritePropertyWithDefault(202, "invalidation_policy", invalidation_policy, TransactionInvalidationPolicy::STANDARD_POLICY); - serializer.WritePropertyWithDefault(203, "auto_rollback", auto_rollback); } unique_ptr TransactionInfo::Deserialize(Deserializer &deserializer) { auto result = duckdb::unique_ptr(new TransactionInfo()); deserializer.ReadProperty(200, "type", result->type); deserializer.ReadProperty(201, "modifier", result->modifier); - deserializer.ReadPropertyWithExplicitDefault(202, "invalidation_policy", result->invalidation_policy, TransactionInvalidationPolicy::STANDARD_POLICY); - deserializer.ReadPropertyWithDefault(203, "auto_rollback", result->auto_rollback); return std::move(result); } diff --git a/src/duckdb/src/storage/storage_manager.cpp b/src/duckdb/src/storage/storage_manager.cpp index 6ea32cb90..ea179bc1a 100644 --- a/src/duckdb/src/storage/storage_manager.cpp +++ b/src/duckdb/src/storage/storage_manager.cpp @@ -19,7 +19,6 @@ #include "duckdb/catalog/catalog_entry/duck_table_entry.hpp" #include "duckdb/transaction/duck_transaction_manager.hpp" #include "mbedtls_wrapper.hpp" -#include "duckdb/common/path.hpp" namespace duckdb { using SHA256State = duckdb_mbedtls::MbedTlsWrapper::SHA256State; @@ -286,7 +285,19 @@ unique_ptr> StorageManager::GetWALLock() { } string StorageManager::GetWALPath(const string &suffix) { - return Path::AddSuffixToPath(path, suffix); + // we append the ".wal" **before** a question mark in case of GET parameters + // but only if we are not in a windows long path (which starts with \\?\) + std::size_t question_mark_pos = std::string::npos; + if (!StringUtil::StartsWith(path, "\\\\?\\")) { + question_mark_pos = path.find('?'); + } + auto result = path; + if (question_mark_pos != std::string::npos) { + result.insert(question_mark_pos, suffix); + } else { + result += suffix; + } + return result; } string StorageManager::GetCheckpointWALPath() { diff --git a/src/duckdb/ub_src_planner.cpp b/src/duckdb/ub_src_planner.cpp index fa5f6346d..729cee88e 100644 --- a/src/duckdb/ub_src_planner.cpp +++ b/src/duckdb/ub_src_planner.cpp @@ -24,7 +24,7 @@ #include "src/planner/planner.cpp" -#include "src/planner/statement_preprocessor.cpp" +#include "src/planner/pragma_handler.cpp" #include "src/planner/logical_operator_deep_copy.cpp"