Skip to content

Commit 178bb85

Browse files
committed
Fixed path pattern validation
1 parent fc7c07c commit 178bb85

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

ydb/core/external_sources/object_storage.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,13 @@ struct TObjectStorageExternalSource : public IExternalSource {
141141
if (TString errorString; !NYql::NS3::ValidateWildcards(location, errorString)) {
142142
issues.AddIssue(MakeErrorIssue(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "Location '" << location << "' contains invalid wildcard: " << errorString));
143143
}
144-
if (objectStorage.partitioned_by_size() && NYql::NS3::HasWildcards(location)) {
145-
issues.AddIssue(MakeErrorIssue(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "Location '" << location << "' contains wildcards"));
146-
}
147-
issues.AddIssues(ValidateFormatSetting(objectStorage.format(), objectStorage.format_setting(), location));
144+
const bool hasPartitioning = objectStorage.projection_size() || objectStorage.partitioned_by_size();
145+
issues.AddIssues(ValidateFormatSetting(objectStorage.format(), objectStorage.format_setting(), location, hasPartitioning));
148146
issues.AddIssues(ValidateRawFormat(objectStorage.format(), schema, objectStorage.partitioned_by()));
149-
if (objectStorage.projection_size() || objectStorage.partitioned_by_size()) {
147+
if (hasPartitioning) {
148+
if (NYql::NS3::HasWildcards(location)) {
149+
issues.AddIssue(MakeErrorIssue(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "Location '" << location << "' contains wildcards"));
150+
}
150151
try {
151152
TVector<TString> partitionedBy{objectStorage.partitioned_by().begin(), objectStorage.partitioned_by().end()};
152153
issues.AddIssues(ValidateProjectionColumns(schema, partitionedBy));
@@ -166,15 +167,15 @@ struct TObjectStorageExternalSource : public IExternalSource {
166167
return issues;
167168
}
168169

169-
static NYql::TIssues ValidateFormatSetting(const TString& format, const google::protobuf::Map<TString, TString>& formatSetting, const TString& location) {
170+
static NYql::TIssues ValidateFormatSetting(const TString& format, const google::protobuf::Map<TString, TString>& formatSetting, const TString& location, bool hasPartitioning) {
170171
NYql::TIssues issues;
171172
issues.AddIssues(ValidateDateFormatSetting(formatSetting));
172173
for (const auto& [key, value]: formatSetting) {
173174
if (key == "file_pattern"sv) {
174175
if (TString errorString; !NYql::NS3::ValidateWildcards(value, errorString)) {
175176
issues.AddIssue(MakeErrorIssue(Ydb::StatusIds::BAD_REQUEST, TStringBuilder() << "File pattern '" << value << "' contains invalid wildcard: " << errorString));
176177
}
177-
if (value && !location.EndsWith("/")) {
178+
if (value && !hasPartitioning && !location.EndsWith("/")) {
178179
issues.AddIssue(MakeErrorIssue(Ydb::StatusIds::BAD_REQUEST, "Path pattern cannot be used with file_pattern"));
179180
}
180181
continue;

0 commit comments

Comments
 (0)