OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
S3FilePathUtil.h
Go to the documentation of this file.
1 #include <optional>
2 #include <string>
3 #include <vector>
4 
5 #include <aws/s3/model/Object.h>
6 
9 
10 namespace foreign_storage {
11 std::vector<Aws::S3::Model::Object> s3_objects_filter_sort_files(
12  const std::vector<Aws::S3::Model::Object>& file_paths,
13  const shared::FilePathOptions& options);
14 
15 using S3ObjectComparator =
16  std::function<bool(const Aws::S3::Model::Object&, const Aws::S3::Model::Object&)>;
17 class FileOrderS3 : public shared::FileOrderBase<S3ObjectComparator> {
18  public:
20  : FileOrderBase<S3ObjectComparator>(options) {}
21 
23  auto comparator_pair = comparator_map_.find(getSortBy());
24  CHECK(comparator_pair != comparator_map_.end());
25  return comparator_pair->second;
26  }
27 
28  protected:
29  const std::map<std::string, S3ObjectComparator> comparator_map_{
31  [](const Aws::S3::Model::Object& lhs, const Aws::S3::Model::Object& rhs) -> bool {
32  return lhs.GetKey() < rhs.GetKey();
33  }},
35  [](const Aws::S3::Model::Object& lhs, const Aws::S3::Model::Object& rhs) -> bool {
36  return lhs.GetLastModified() < rhs.GetLastModified();
37  }},
39  [this](const Aws::S3::Model::Object& lhs,
40  const Aws::S3::Model::Object& rhs) -> bool {
41  auto lhs_name = lhs.GetKey();
42  auto rhs_name = rhs.GetKey();
43  return this->concatCaptureGroups(lhs_name) < this->concatCaptureGroups(rhs_name);
44  }},
46  [this](const Aws::S3::Model::Object& lhs,
47  const Aws::S3::Model::Object& rhs) -> bool {
48  return shared::common_regex_date_comp_(this->concatCaptureGroups(lhs.GetKey()),
49  this->concatCaptureGroups(rhs.GetKey()));
50  }},
52  [this](const Aws::S3::Model::Object& lhs,
53  const Aws::S3::Model::Object& rhs) -> bool {
55  this->concatCaptureGroups(lhs.GetKey()),
56  this->concatCaptureGroups(rhs.GetKey()));
57  }}};
58 };
59 } // namespace foreign_storage
S3ObjectComparator getFileComparator() override
const std::string REGEX_NUMBER_ORDER_TYPE
const std::string REGEX_ORDER_TYPE
shared utility for globbing files, paths can be specified as either a single file, directory or wildcards
const std::map< std::string, S3ObjectComparator > comparator_map_
FileOrderBase(const FilePathOptions &options)
const std::string REGEX_DATE_ORDER_TYPE
std::vector< Aws::S3::Model::Object > s3_objects_filter_sort_files(const std::vector< Aws::S3::Model::Object > &file_paths, const shared::FilePathOptions &options)
std::function< bool(const Aws::S3::Model::Object &, const Aws::S3::Model::Object &)> S3ObjectComparator
const std::string PATHNAME_ORDER_TYPE
FileOrderS3(const shared::FilePathOptions &options)
const std::string DATE_MODIFIED_ORDER_TYPE
virtual std::string concatCaptureGroups(const std::string &file_name) const
#define CHECK(condition)
Definition: Logger.h:291
const std::function< bool(const std::string &, const std::string &)> common_regex_number_comp_
const std::function< bool(const std::string &, const std::string &)> common_regex_date_comp_