diff --git a/extension/httpfs/httpfs.cpp b/extension/httpfs/httpfs.cpp index 20f85a6..50ec717 100644 --- a/extension/httpfs/httpfs.cpp +++ b/extension/httpfs/httpfs.cpp @@ -21,6 +21,53 @@ namespace duckdb { +namespace { +void TimestampToTimeT(timestamp_t timestamp, time_t &result) { + auto components = Timestamp::GetComponents(timestamp); + struct tm tm {}; + tm.tm_year = components.year - 1900; + tm.tm_mon = components.month - 1; + tm.tm_mday = components.day; + tm.tm_hour = components.hour; + tm.tm_min = components.minute; + tm.tm_sec = components.second; + tm.tm_isdst = 0; + result = mktime(&tm); +} + +optional_idx TryParseContentRange(const HTTPHeaders &headers) { + if (!headers.HasHeader("Content-Range")) { + return optional_idx(); + } + string content_range = headers.GetHeaderValue("Content-Range"); + auto range_find = content_range.find("/"); + if (range_find == std::string::npos || content_range.size() < range_find + 1) { + return optional_idx(); + } + string range_length = content_range.substr(range_find + 1); + if (range_length == "*") { + return optional_idx(); + } + try { + return std::stoull(range_length); + } catch (...) { + return optional_idx(); + } +} + +optional_idx TryParseContentLength(const HTTPHeaders &headers) { + if (!headers.HasHeader("Content-Length")) { + return optional_idx(); + } + string content_length = headers.GetHeaderValue("Content-Length"); + try { + return std::stoull(content_length); + } catch (...) { + return optional_idx(); + } +} +} // namespace + shared_ptr HTTPFSUtil::GetHTTPUtil(optional_ptr opener) { if (opener) { return opener->GetHTTPUtil(); @@ -259,19 +306,6 @@ unique_ptr HTTPFileSystem::GetRangeRequest(FileHandle &handle, str return response; } -void TimestampToTimeT(timestamp_t timestamp, time_t &result) { - auto components = Timestamp::GetComponents(timestamp); - struct tm tm {}; - tm.tm_year = components.year - 1900; - tm.tm_mon = components.month - 1; - tm.tm_mday = components.day; - tm.tm_hour = components.hour; - tm.tm_min = components.minute; - tm.tm_sec = components.second; - tm.tm_isdst = 0; - result = mktime(&tm); -} - HTTPFileHandle::HTTPFileHandle(FileSystem &fs, const OpenFileInfo &file, FileOpenFlags flags, unique_ptr params_p) : FileHandle(fs, file.path, flags), params(std::move(params_p)), http_params(params->Cast()), @@ -562,38 +596,6 @@ bool HTTPFileSystem::TryParseLastModifiedTime(const string ×tamp, time_t &r return true; } -optional_idx TryParseContentRange(const HTTPHeaders &headers) { - if (!headers.HasHeader("Content-Range")) { - return optional_idx(); - } - string content_range = headers.GetHeaderValue("Content-Range"); - auto range_find = content_range.find("/"); - if (range_find == std::string::npos || content_range.size() < range_find + 1) { - return optional_idx(); - } - string range_length = content_range.substr(range_find + 1); - if (range_length == "*") { - return optional_idx(); - } - try { - return std::stoull(range_length); - } catch (...) { - return optional_idx(); - } -} - -optional_idx TryParseContentLength(const HTTPHeaders &headers) { - if (!headers.HasHeader("Content-Length")) { - return optional_idx(); - } - string content_length = headers.GetHeaderValue("Content-Length"); - try { - return std::stoull(content_length); - } catch (...) { - return optional_idx(); - } -} - void HTTPFileHandle::LoadFileInfo() { if (initialized || force_full_download) { // already initialized or we specifically do not want to perform a head request and just run a direct download