@@ -114,7 +114,7 @@ using DataFileMetaInfoPtr = std::shared_ptr<DataFileMetaInfo>;
114114
115115struct DataLakeObjectMetadata ;
116116
117- struct RelativePathWithMetadata
117+ struct PathWithMetadata
118118{
119119 class CommandInTaskResponse
120120 {
@@ -143,28 +143,49 @@ struct RelativePathWithMetadata
143143 std::optional<DataFileMetaInfoPtr> file_meta_info;
144144 // / Retry request after short pause
145145 CommandInTaskResponse command;
146+ std::optional<String> absolute_path;
147+ std::optional<ObjectStoragePtr> object_storage_to_use = std::nullopt ;
146148
147- RelativePathWithMetadata () = default ;
149+ PathWithMetadata () = default ;
148150
149- explicit RelativePathWithMetadata (String command_or_path, std::optional<ObjectMetadata> metadata_ = std::nullopt )
151+ explicit PathWithMetadata (
152+ const String & command_or_path,
153+ std::optional<ObjectMetadata> metadata_ = std::nullopt ,
154+ std::optional<String> absolute_path_ = std::nullopt ,
155+ std::optional<ObjectStoragePtr> object_storage_to_use_ = std::nullopt )
150156 : relative_path(std::move(command_or_path))
151157 , metadata(std::move(metadata_))
152158 , command(relative_path)
159+ , absolute_path(absolute_path_)
160+ , object_storage_to_use(object_storage_to_use_)
153161 {
154162 if (command.is_parsed ())
155163 relative_path = " " ;
156164 }
157165
158- explicit RelativePathWithMetadata (const DataFileInfo & info, std::optional<ObjectMetadata> metadata_ = std::nullopt );
166+ explicit PathWithMetadata (
167+ const DataFileInfo & info,
168+ std::optional<ObjectMetadata> metadata_ = std::nullopt ,
169+ std::optional<String> absolute_path_ = std::nullopt ,
170+ std::optional<ObjectStoragePtr> object_storage_to_use_ = std::nullopt )
171+ : metadata(std::move(metadata_))
172+ , absolute_path(absolute_path_)
173+ , object_storage_to_use(object_storage_to_use_)
174+ {
175+ relative_path = info.file_path ;
176+ file_meta_info = info.file_meta_info ;
177+ }
159178
160- RelativePathWithMetadata (const RelativePathWithMetadata & other) = default ;
179+ PathWithMetadata (const PathWithMetadata & other) = default ;
161180
162- virtual ~RelativePathWithMetadata () = default ;
181+ virtual ~PathWithMetadata () = default ;
182+ // >>>>>>> 53a743ff8c6 (first draft)
163183
164184 virtual std::string getFileName () const { return std::filesystem::path (relative_path).filename (); }
165185 virtual std::string getFileNameWithoutExtension () const { return std::filesystem::path (relative_path).stem (); }
166186
167187 virtual std::string getPath () const { return relative_path; }
188+ virtual std::optional<std::string> getAbsolutePath () const { return absolute_path; }
168189 virtual bool isArchive () const { return false ; }
169190 virtual std::string getPathToArchive () const { throw Exception (ErrorCodes::LOGICAL_ERROR, " Not an archive" ); }
170191 virtual size_t fileSizeInArchive () const { throw Exception (ErrorCodes::LOGICAL_ERROR, " Not an archive" ); }
@@ -174,6 +195,8 @@ struct RelativePathWithMetadata
174195 std::optional<DataFileMetaInfoPtr> getFileMetaInfo () const { return file_meta_info; }
175196
176197 const CommandInTaskResponse & getCommand () const { return command; }
198+
199+ std::optional<ObjectStoragePtr> getObjectStorage () const { return object_storage_to_use; }
177200};
178201
179202struct ObjectKeyWithMetadata
@@ -189,8 +212,8 @@ struct ObjectKeyWithMetadata
189212 {}
190213};
191214
192- using RelativePathWithMetadataPtr = std::shared_ptr<RelativePathWithMetadata >;
193- using RelativePathsWithMetadata = std::vector<RelativePathWithMetadataPtr >;
215+ using PathWithMetadataPtr = std::shared_ptr<PathWithMetadata >;
216+ using PathsWithMetadata = std::vector<PathWithMetadataPtr >;
194217using ObjectKeysWithMetadata = std::vector<ObjectKeyWithMetadata>;
195218
196219class IObjectStorageIterator ;
@@ -231,7 +254,7 @@ class IObjectStorage
231254 virtual bool existsOrHasAnyChild (const std::string & path) const ;
232255
233256 // / List objects recursively by certain prefix.
234- virtual void listObjects (const std::string & path, RelativePathsWithMetadata & children, size_t max_keys) const ;
257+ virtual void listObjects (const std::string & path, PathsWithMetadata & children, size_t max_keys) const ;
235258
236259 // / List objects recursively by certain prefix. Use it instead of listObjects, if you want to list objects lazily.
237260 virtual ObjectStorageIteratorPtr iterate(const std::string & path_prefix, size_t max_keys) const ;
0 commit comments