Skip to content

Commit

Permalink
chore: Update vendored sources to duckdb/duckdb@5835084
Browse files Browse the repository at this point in the history
Merge pull request duckdb/duckdb#10650 from hannes/noprintf
Merge pull request duckdb/duckdb#10658 from hannes/csvpathlength
Merge pull request duckdb/duckdb#10612 from samansmink/delay-secret-storage-directory-initialization
Merge pull request duckdb/duckdb#10611 from Mytherin/currenttimealias
Merge pull request duckdb/duckdb#10616 from hannes/jdbctestchanged
Merge pull request duckdb/duckdb#10607 from carlopi/secret_folder
Merge pull request duckdb/duckdb#10603 from carlopi/extensions_patches
Merge pull request duckdb/duckdb#10606 from Mytherin/duckdbmemoryinit
Merge pull request duckdb/duckdb#10604 from Mytherin/aggregatelimit
Merge pull request duckdb/duckdb#10592 from carlopi/error_message_lock
Merge pull request duckdb/duckdb#10600 from samansmink/secret-manager-fixes-2
Merge pull request duckdb/duckdb#10589 from pdet/csv_result_buffer_hold
Merge pull request duckdb/duckdb#10605 from Tishj/julia_remove_dataframe
Merge pull request duckdb/duckdb#10596 from pdet/null_padding_projection_finalize
Merge pull request duckdb/duckdb#10590 from Tmonster/investigate-cardinality-estimates-parquet
Merge pull request duckdb/duckdb#10598 from szarnyasg/add-support-options
Merge pull request duckdb/duckdb#10579 from Tishj/unittest_require_flag
Merge pull request duckdb/duckdb#10202 from Tishj/sorted_aggregate_function_small_vector_size
Merge pull request duckdb/duckdb#10553 from Tmonster/fuzzer_column_binding_issues
Merge pull request duckdb/duckdb#10513 from Maxxen/array-tupledata-fix
Merge pull request duckdb/duckdb#10584 from Mause/datetime-delta
Merge pull request duckdb/duckdb#10582 from carlopi/fix_extension_distribution
Merge pull request duckdb/duckdb#10580 from Maxxen/bump-spatial
Merge pull request duckdb/duckdb#10532 from Tishj/deduplicate_columns
Merge pull request duckdb/duckdb#10573 from carlopi/fixthreads
Merge pull request duckdb/duckdb#10572 from carlopi/noexit
Merge pull request duckdb/duckdb#10571 from Tishj/time_cast_heap_overflow
Merge pull request duckdb/duckdb#10569 from Tishj/fix_export_of_types
Merge pull request duckdb/duckdb#10568 from Tishj/pytest_does_not_throw_httpexception
Merge pull request duckdb/duckdb#10567 from Tishj/require_no_alternative_verify
Merge pull request duckdb/duckdb#10565 from Tishj/arrow_support_time_tz
Merge pull request duckdb/duckdb#10563 from Tishj/python_exception_bug
Merge pull request duckdb/duckdb#10559 from Mytherin/issue10528
Merge pull request duckdb/duckdb#10548 from ywelsch/yw/duckdb-only-server-threads
Merge pull request duckdb/duckdb#10564 from carlopi/fix01init
Merge pull request duckdb/duckdb#10560 from carlopi/rowsorts
Merge pull request duckdb/duckdb#10558 from pdet/bug_9952
Merge pull request duckdb/duckdb#10555 from carlopi/refactorcommit
Merge pull request duckdb/duckdb#10557 from pdet/reset-quoted-proj
Merge pull request duckdb/duckdb#10504 from Mytherin/queryid
Merge pull request duckdb/duckdb#10487 from felipecrv/upper_bound
Merge pull request duckdb/duckdb#10552 from pdet/fix_glob_partition_test
Merge pull request duckdb/duckdb#10551 from pdet/segfault-fix
Merge pull request duckdb/duckdb#10554 from Mytherin/benchmarkerrors
Merge pull request duckdb/duckdb#10485 from Tmonster/list_zip_no_args
Merge pull request duckdb/duckdb#10536 from motherduckdb/flo/add-order-to-tests
Merge pull request duckdb/duckdb#10549 from lnkuiper/radix_ht_reservation
Merge pull request duckdb/duckdb#10525 from Tishj/parallel_checkpoint_error_race
Merge pull request duckdb/duckdb#10541 from Mytherin/arrayextractunnamedstruct
Merge pull request duckdb/duckdb#10538 from Maxxen/copy-file-path-fix
Merge pull request duckdb/duckdb#10544 from hawkfish/tz2024a
Merge pull request duckdb/duckdb#10542 from carlopi/fixes
Merge pull request duckdb/duckdb#10408 from Mause/feature/jdbc-set-date
Merge pull request duckdb/duckdb#10531 from ywelsch/yw/client-context-in-attach
Merge pull request duckdb/duckdb#10537 from Mytherin/structcastoutoforder
Merge pull request duckdb/duckdb#10534 from Mytherin/applypatchesfix
Merge pull request duckdb/duckdb#10488 from Tishj/python_editable_build
Merge pull request duckdb/duckdb#10527 from Mytherin/linenoiseenterbehavior
Merge pull request duckdb/duckdb#10530 from pdet/bug_null_csv_ignore
Merge pull request duckdb/duckdb#10533 from Tishj/python_fixes_2024_2_8
Merge pull request duckdb/duckdb#10526 from lnkuiper/null_to_json_cast
Merge pull request duckdb/duckdb#10529 from philippmd/philippmd/errno-ioexception
Merge pull request duckdb/duckdb#10503 from lnkuiper/temporary_memory_manager_tweaks
Merge pull request duckdb/duckdb#10500 from Mytherin/issue910
Merge pull request duckdb/duckdb#10357 from kryonix/main
Merge pull request duckdb/duckdb#10521 from Mause/patch-4
Merge pull request duckdb/duckdb#10518 from motherduckdb/secrets-changes
Merge pull request duckdb/duckdb#10514 from Mytherin/exceptionstacktrace
Merge pull request duckdb/duckdb#10512 from Tishj/executor_race_condition
Merge pull request duckdb/duckdb#10510 from Tishj/gcc_is_stupid
Merge pull request duckdb/duckdb#10509 from pdet/csv_big_data
Merge pull request duckdb/duckdb#10505 from Mytherin/issue10363
Merge pull request duckdb/duckdb#10507 from carlopi/bundle-libraries
Merge pull request duckdb/duckdb#10459 from Maxxen/copy-tmp-ext
Merge pull request duckdb/duckdb#10483 from Maxxen/array-bugfix
Merge pull request duckdb/duckdb#10502 from Mytherin/autocompletefix
Merge pull request duckdb/duckdb#10499 from Mytherin/issue1164
Merge pull request duckdb/duckdb#10498 from Mytherin/disablecompletionrendering
Merge pull request duckdb/duckdb#10496 from Mytherin/memorymanagement
Merge pull request duckdb/duckdb#10492 from SChakravorti21/fix-empty-normalized-version
Merge pull request duckdb/duckdb#10484 from Flogex/extension-build-script
Merge pull request duckdb/duckdb#10493 from Mytherin/altcommands
Merge pull request duckdb/duckdb#10475 from rdavis120/main
Merge pull request duckdb/duckdb#10480 from Mytherin/autocompletedisplay
Merge pull request duckdb/duckdb#10473 from pdet/bug_10283
Merge pull request duckdb/duckdb#10479 from hannes/windowsarm
Merge pull request duckdb/duckdb#10471 from Maxxen/custom-index-fork
Merge pull request duckdb/duckdb#10474 from Mytherin/gzipfs
Merge pull request duckdb/duckdb#10472 from pdet/bug_10273
Merge pull request duckdb/duckdb#10470 from Mytherin/clearcontinuationmarkers
Merge pull request duckdb/duckdb#10467 from carlopi/fixes
Merge pull request duckdb/duckdb#10465 from pdet/type_misdetection
Merge pull request duckdb/duckdb#10462 from pdet/double_quoted_header
Merge pull request duckdb/duckdb#10461 from Mytherin/linenoisecleanup
Merge pull request duckdb/duckdb#10464 from Tishj/improve_julia_dev_readme
  • Loading branch information
krlmlr committed Feb 27, 2024
1 parent ac12329 commit 812f97d
Show file tree
Hide file tree
Showing 181 changed files with 2,277 additions and 1,660 deletions.
5 changes: 4 additions & 1 deletion src/duckdb/extension/parquet/parquet_extension.cpp
Expand Up @@ -628,7 +628,10 @@ class ParquetScanFunction {

static idx_t ParquetScanMaxThreads(ClientContext &context, const FunctionData *bind_data) {
auto &data = bind_data->Cast<ParquetReadBindData>();
return std::max(data.initial_file_row_groups, idx_t(1)) * data.files.size();
if (data.files.size() > 1) {
return TaskScheduler::GetScheduler(context).NumberOfThreads();
}
return MaxValue(data.initial_file_row_groups, (idx_t)1);
}

// This function looks for the next available row group. If not available, it will open files from bind_data.files
Expand Down
22 changes: 14 additions & 8 deletions src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp
Expand Up @@ -34,14 +34,20 @@ unique_ptr<CreateInfo> TypeCatalogEntry::GetInfo() const {
}

string TypeCatalogEntry::ToSQL() const {
switch (user_type.id()) {
case (LogicalTypeId::ENUM): {
auto create_type_info = GetInfo();
return create_type_info->ToString();
}
default:
throw InternalException("Logical Type can't be used as a User Defined Type");
}
std::stringstream ss;
ss << "CREATE TYPE ";
ss << KeywordHelper::WriteOptionallyQuoted(name);
ss << " AS ";

auto user_type_copy = user_type;

// Strip off the potential alias so ToString doesn't just output the alias
user_type_copy.SetAlias("");
D_ASSERT(user_type_copy.GetAlias().empty());

ss << user_type_copy.ToString();
ss << ";";
return ss.str();
}

} // namespace duckdb
2 changes: 2 additions & 0 deletions src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp
Expand Up @@ -14,6 +14,7 @@ void ViewCatalogEntry::Initialize(CreateViewInfo &info) {
query = std::move(info.query);
this->aliases = info.aliases;
this->types = info.types;
this->names = info.names;
this->temporary = info.temporary;
this->sql = info.sql;
this->internal = info.internal;
Expand All @@ -32,6 +33,7 @@ unique_ptr<CreateInfo> ViewCatalogEntry::GetInfo() const {
result->sql = sql;
result->query = unique_ptr_cast<SQLStatement, SelectStatement>(query->Copy());
result->aliases = aliases;
result->names = names;
result->types = types;
result->temporary = temporary;
result->comment = comment;
Expand Down
19 changes: 15 additions & 4 deletions src/duckdb/src/common/arrow/arrow_wrapper.cpp
Expand Up @@ -66,10 +66,16 @@ int ResultArrowArrayStreamWrapper::MyStreamGetSchema(struct ArrowArrayStream *st
if (!stream->release) {
return -1;
}
out->release = nullptr;
auto my_stream = reinterpret_cast<ResultArrowArrayStreamWrapper *>(stream->private_data);
if (!my_stream->column_types.empty()) {
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
my_stream->result->client_properties);
try {
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
my_stream->result->client_properties);
} catch (std::runtime_error &e) {
my_stream->last_error = ErrorData(e);
return -1;
}
return 0;
}

Expand All @@ -89,8 +95,13 @@ int ResultArrowArrayStreamWrapper::MyStreamGetSchema(struct ArrowArrayStream *st
my_stream->column_types = result.types;
my_stream->column_names = result.names;
}
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
my_stream->result->client_properties);
try {
ArrowConverter::ToArrowSchema(out, my_stream->column_types, my_stream->column_names,
my_stream->result->client_properties);
} catch (std::runtime_error &e) {
my_stream->last_error = ErrorData(e);
return -1;
}
return 0;
}

Expand Down
103 changes: 74 additions & 29 deletions src/duckdb/src/common/enum_util.cpp
Expand Up @@ -28,6 +28,7 @@
#include "duckdb/common/enums/join_type.hpp"
#include "duckdb/common/enums/joinref_type.hpp"
#include "duckdb/common/enums/logical_operator_type.hpp"
#include "duckdb/common/enums/memory_tag.hpp"
#include "duckdb/common/enums/on_create_conflict.hpp"
#include "duckdb/common/enums/on_entry_not_found.hpp"
#include "duckdb/common/enums/operator_result_type.hpp"
Expand Down Expand Up @@ -62,7 +63,6 @@
#include "duckdb/common/types/conflict_manager.hpp"
#include "duckdb/common/types/hyperloglog.hpp"
#include "duckdb/common/types/row/partitioned_tuple_data.hpp"
#include "duckdb/common/types/row/tuple_data_collection.hpp"
#include "duckdb/common/types/row/tuple_data_states.hpp"
#include "duckdb/common/types/timestamp.hpp"
#include "duckdb/common/types/vector.hpp"
Expand Down Expand Up @@ -3483,6 +3483,79 @@ MapInvalidReason EnumUtil::FromString<MapInvalidReason>(const char *value) {
throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value));
}

template<>
const char* EnumUtil::ToChars<MemoryTag>(MemoryTag value) {
switch(value) {
case MemoryTag::BASE_TABLE:
return "BASE_TABLE";
case MemoryTag::HASH_TABLE:
return "HASH_TABLE";
case MemoryTag::PARQUET_READER:
return "PARQUET_READER";
case MemoryTag::CSV_READER:
return "CSV_READER";
case MemoryTag::ORDER_BY:
return "ORDER_BY";
case MemoryTag::ART_INDEX:
return "ART_INDEX";
case MemoryTag::COLUMN_DATA:
return "COLUMN_DATA";
case MemoryTag::METADATA:
return "METADATA";
case MemoryTag::OVERFLOW_STRINGS:
return "OVERFLOW_STRINGS";
case MemoryTag::IN_MEMORY_TABLE:
return "IN_MEMORY_TABLE";
case MemoryTag::ALLOCATOR:
return "ALLOCATOR";
case MemoryTag::EXTENSION:
return "EXTENSION";
default:
throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value));
}
}

template<>
MemoryTag EnumUtil::FromString<MemoryTag>(const char *value) {
if (StringUtil::Equals(value, "BASE_TABLE")) {
return MemoryTag::BASE_TABLE;
}
if (StringUtil::Equals(value, "HASH_TABLE")) {
return MemoryTag::HASH_TABLE;
}
if (StringUtil::Equals(value, "PARQUET_READER")) {
return MemoryTag::PARQUET_READER;
}
if (StringUtil::Equals(value, "CSV_READER")) {
return MemoryTag::CSV_READER;
}
if (StringUtil::Equals(value, "ORDER_BY")) {
return MemoryTag::ORDER_BY;
}
if (StringUtil::Equals(value, "ART_INDEX")) {
return MemoryTag::ART_INDEX;
}
if (StringUtil::Equals(value, "COLUMN_DATA")) {
return MemoryTag::COLUMN_DATA;
}
if (StringUtil::Equals(value, "METADATA")) {
return MemoryTag::METADATA;
}
if (StringUtil::Equals(value, "OVERFLOW_STRINGS")) {
return MemoryTag::OVERFLOW_STRINGS;
}
if (StringUtil::Equals(value, "IN_MEMORY_TABLE")) {
return MemoryTag::IN_MEMORY_TABLE;
}
if (StringUtil::Equals(value, "ALLOCATOR")) {
return MemoryTag::ALLOCATOR;
}
if (StringUtil::Equals(value, "EXTENSION")) {
return MemoryTag::EXTENSION;
}
throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value));
}

template<>
const char* EnumUtil::ToChars<NType>(NType value) {
switch(value) {
Expand Down Expand Up @@ -6868,33 +6941,5 @@ WindowExcludeMode EnumUtil::FromString<WindowExcludeMode>(const char *value) {
throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value));
}

template<>
const char* EnumUtil::ToChars<WithinCollection>(WithinCollection value) {
switch(value) {
case WithinCollection::NO:
return "NO";
case WithinCollection::LIST:
return "LIST";
case WithinCollection::ARRAY:
return "ARRAY";
default:
throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value));
}
}

template<>
WithinCollection EnumUtil::FromString<WithinCollection>(const char *value) {
if (StringUtil::Equals(value, "NO")) {
return WithinCollection::NO;
}
if (StringUtil::Equals(value, "LIST")) {
return WithinCollection::LIST;
}
if (StringUtil::Equals(value, "ARRAY")) {
return WithinCollection::ARRAY;
}
throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value));
}

}

10 changes: 10 additions & 0 deletions src/duckdb/src/common/exception.cpp
Expand Up @@ -32,7 +32,13 @@ string Exception::ToJSON(ExceptionType type, const string &message) {
}

string Exception::ToJSON(ExceptionType type, const string &message, const unordered_map<string, string> &extra_info) {
#ifdef DUCKDB_DEBUG_STACKTRACE
auto extended_extra_info = extra_info;
extended_extra_info["stack_trace"] = Exception::GetStackTrace();
return StringUtil::ToJSONMap(type, message, extended_extra_info);
#else
return StringUtil::ToJSONMap(type, message, extra_info);
#endif
}

bool Exception::UncaughtException() {
Expand Down Expand Up @@ -301,6 +307,10 @@ DependencyException::DependencyException(const string &msg) : Exception(Exceptio
IOException::IOException(const string &msg) : Exception(ExceptionType::IO, msg) {
}

IOException::IOException(const string &msg, const unordered_map<string, string> &extra_info)
: Exception(ExceptionType::IO, msg, extra_info) {
}

MissingExtensionException::MissingExtensionException(const string &msg)
: Exception(ExceptionType::MISSING_EXTENSION, msg) {
}
Expand Down
2 changes: 1 addition & 1 deletion src/duckdb/src/common/file_system.cpp
Expand Up @@ -215,7 +215,7 @@ string FileSystem::GetWorkingDirectory() {

string FileSystem::JoinPath(const string &a, const string &b) {
// FIXME: sanitize paths
return a + PathSeparator(a) + b;
return a.empty() ? b : a + PathSeparator(a) + b;
}

string FileSystem::ConvertSeparators(const string &path) {
Expand Down
36 changes: 18 additions & 18 deletions src/duckdb/src/common/gzip_file_system.cpp
Expand Up @@ -68,7 +68,7 @@ struct MiniZStreamWrapper : public StreamWrapper {
~MiniZStreamWrapper() override;

CompressedFile *file = nullptr;
duckdb_miniz::mz_stream *mz_stream_ptr = nullptr;
unique_ptr<duckdb_miniz::mz_stream> mz_stream_ptr;
bool writing = false;
duckdb_miniz::mz_ulong crc;
idx_t total_size;
Expand Down Expand Up @@ -98,8 +98,8 @@ MiniZStreamWrapper::~MiniZStreamWrapper() {
void MiniZStreamWrapper::Initialize(CompressedFile &file, bool write) {
Close();
this->file = &file;
mz_stream_ptr = new duckdb_miniz::mz_stream();
memset(mz_stream_ptr, 0, sizeof(duckdb_miniz::mz_stream));
mz_stream_ptr = make_uniq<duckdb_miniz::mz_stream>();
memset(mz_stream_ptr.get(), 0, sizeof(duckdb_miniz::mz_stream));
this->writing = write;

// TODO use custom alloc/free methods in miniz to throw exceptions on OOM
Expand All @@ -111,7 +111,7 @@ void MiniZStreamWrapper::Initialize(CompressedFile &file, bool write) {
MiniZStream::InitializeGZIPHeader(gzip_hdr);
file.child_handle->Write(gzip_hdr, GZIP_HEADER_MINSIZE);

auto ret = mz_deflateInit2((duckdb_miniz::mz_streamp)mz_stream_ptr, duckdb_miniz::MZ_DEFAULT_LEVEL, MZ_DEFLATED,
auto ret = mz_deflateInit2(mz_stream_ptr.get(), duckdb_miniz::MZ_DEFAULT_LEVEL, MZ_DEFLATED,
-MZ_DEFAULT_WINDOW_BITS, 1, 0);
if (ret != duckdb_miniz::MZ_OK) {
throw InternalException("Failed to initialize miniz");
Expand All @@ -135,7 +135,7 @@ void MiniZStreamWrapper::Initialize(CompressedFile &file, bool write) {
}
file.child_handle->Seek(data_start);
// stream is now set to beginning of payload data
auto ret = duckdb_miniz::mz_inflateInit2((duckdb_miniz::mz_streamp)mz_stream_ptr, -MZ_DEFAULT_WINDOW_BITS);
auto ret = duckdb_miniz::mz_inflateInit2(mz_stream_ptr.get(), -MZ_DEFAULT_WINDOW_BITS);
if (ret != duckdb_miniz::MZ_OK) {
throw InternalException("Failed to initialize miniz");
}
Expand Down Expand Up @@ -182,8 +182,8 @@ bool MiniZStreamWrapper::Read(StreamData &sd) {
Close();
return true;
}
duckdb_miniz::mz_inflateEnd(mz_stream_ptr);
auto sta = duckdb_miniz::mz_inflateInit2((duckdb_miniz::mz_streamp)mz_stream_ptr, -MZ_DEFAULT_WINDOW_BITS);
duckdb_miniz::mz_inflateEnd(mz_stream_ptr.get());
auto sta = duckdb_miniz::mz_inflateInit2(mz_stream_ptr.get(), -MZ_DEFAULT_WINDOW_BITS);
if (sta != duckdb_miniz::MZ_OK) {
throw InternalException("Failed to initialize miniz");
}
Expand All @@ -195,7 +195,7 @@ bool MiniZStreamWrapper::Read(StreamData &sd) {
mz_stream_ptr->avail_in = (uint32_t)(sd.in_buff_end - sd.in_buff_start);
mz_stream_ptr->next_out = data_ptr_cast(sd.out_buff_end);
mz_stream_ptr->avail_out = (uint32_t)((sd.out_buff.get() + sd.out_buf_size) - sd.out_buff_end);
auto ret = duckdb_miniz::mz_inflate(mz_stream_ptr, duckdb_miniz::MZ_NO_FLUSH);
auto ret = duckdb_miniz::mz_inflate(mz_stream_ptr.get(), duckdb_miniz::MZ_NO_FLUSH);
if (ret != duckdb_miniz::MZ_OK && ret != duckdb_miniz::MZ_STREAM_END) {
throw IOException("Failed to decode gzip stream: %s", duckdb_miniz::mz_error(ret));
}
Expand Down Expand Up @@ -228,7 +228,7 @@ void MiniZStreamWrapper::Write(CompressedFile &file, StreamData &sd, data_ptr_t
mz_stream_ptr->next_out = sd.out_buff_start;
mz_stream_ptr->avail_out = output_remaining;

auto res = mz_deflate(mz_stream_ptr, duckdb_miniz::MZ_NO_FLUSH);
auto res = mz_deflate(mz_stream_ptr.get(), duckdb_miniz::MZ_NO_FLUSH);
if (res != duckdb_miniz::MZ_OK) {
D_ASSERT(res != duckdb_miniz::MZ_STREAM_END);
throw InternalException("Failed to compress GZIP block");
Expand All @@ -254,7 +254,7 @@ void MiniZStreamWrapper::FlushStream() {
mz_stream_ptr->next_out = sd.out_buff_start;
mz_stream_ptr->avail_out = output_remaining;

auto res = mz_deflate(mz_stream_ptr, duckdb_miniz::MZ_FINISH);
auto res = mz_deflate(mz_stream_ptr.get(), duckdb_miniz::MZ_FINISH);
sd.out_buff_start += (output_remaining - mz_stream_ptr->avail_out);
if (sd.out_buff_start > sd.out_buff.get()) {
file->child_handle->Write(sd.out_buff.get(), sd.out_buff_start - sd.out_buff.get());
Expand Down Expand Up @@ -282,11 +282,10 @@ void MiniZStreamWrapper::Close() {
MiniZStream::InitializeGZIPFooter(gzip_footer, crc, total_size);
file->child_handle->Write(gzip_footer, MiniZStream::GZIP_FOOTER_SIZE);

duckdb_miniz::mz_deflateEnd(mz_stream_ptr);
duckdb_miniz::mz_deflateEnd(mz_stream_ptr.get());
} else {
duckdb_miniz::mz_inflateEnd(mz_stream_ptr);
duckdb_miniz::mz_inflateEnd(mz_stream_ptr.get());
}
delete mz_stream_ptr;
mz_stream_ptr = nullptr;
file = nullptr;
}
Expand Down Expand Up @@ -321,8 +320,8 @@ string GZipFileSystem::UncompressGZIPString(const string &in) {
// decompress file
auto body_ptr = in.data();

auto mz_stream_ptr = new duckdb_miniz::mz_stream();
memset(mz_stream_ptr, 0, sizeof(duckdb_miniz::mz_stream));
auto mz_stream_ptr = make_uniq<duckdb_miniz::mz_stream>();
memset(mz_stream_ptr.get(), 0, sizeof(duckdb_miniz::mz_stream));

uint8_t gzip_hdr[GZIP_HEADER_MINSIZE];

Expand All @@ -349,7 +348,7 @@ string GZipFileSystem::UncompressGZIPString(const string &in) {
}

// stream is now set to beginning of payload data
auto status = duckdb_miniz::mz_inflateInit2(mz_stream_ptr, -MZ_DEFAULT_WINDOW_BITS);
auto status = duckdb_miniz::mz_inflateInit2(mz_stream_ptr.get(), -MZ_DEFAULT_WINDOW_BITS);
if (status != duckdb_miniz::MZ_OK) {
throw InternalException("Failed to initialize miniz");
}
Expand All @@ -364,13 +363,14 @@ string GZipFileSystem::UncompressGZIPString(const string &in) {
while (status == duckdb_miniz::MZ_OK) {
mz_stream_ptr->next_out = decompress_buffer;
mz_stream_ptr->avail_out = sizeof(decompress_buffer);
status = mz_inflate(mz_stream_ptr, duckdb_miniz::MZ_NO_FLUSH);
status = mz_inflate(mz_stream_ptr.get(), duckdb_miniz::MZ_NO_FLUSH);
if (status != duckdb_miniz::MZ_STREAM_END && status != duckdb_miniz::MZ_OK) {
throw IOException("Failed to uncompress");
}
decompressed.append(char_ptr_cast(decompress_buffer), mz_stream_ptr->total_out - decompressed.size());
}
duckdb_miniz::mz_inflateEnd(mz_stream_ptr);
duckdb_miniz::mz_inflateEnd(mz_stream_ptr.get());

if (decompressed.empty()) {
throw IOException("Failed to uncompress");
}
Expand Down

0 comments on commit 812f97d

Please sign in to comment.