diff options
author | panikku <[email protected]> | 2025-07-18 21:25:55 +0300 |
---|---|---|
committer | panikku <[email protected]> | 2025-07-18 21:43:51 +0300 |
commit | 0280a2fd6d6901bce8f7296f658d9cd63c1c4b31 (patch) | |
tree | 5cf6f12219ff1071be2dc673053effaea65172ee /yql/essentials/ast/yql_expr.cpp | |
parent | f92ddb3a9ca8a03426a871f7fa1de63a7a128ebd (diff) |
YQL-19448: Change url lister manager
-(Queue+ListUrl) +RecursiveListerUrl
Create recursive func
commit_hash:81c84c7bdd6f8408b4cee15a8b7f10a1acd573a4
Diffstat (limited to 'yql/essentials/ast/yql_expr.cpp')
-rw-r--r-- | yql/essentials/ast/yql_expr.cpp | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/yql/essentials/ast/yql_expr.cpp b/yql/essentials/ast/yql_expr.cpp index c5fa94ca732..4c596895077 100644 --- a/yql/essentials/ast/yql_expr.cpp +++ b/yql/essentials/ast/yql_expr.cpp @@ -1324,56 +1324,25 @@ namespace { packageModuleName << Sep << part; } - auto queue = TVector<std::pair<TString, TString>> { - {packageModuleName, url} - }; - - while (queue) { - auto [prefix, url] = queue.back(); - queue.pop_back(); - - TVector<TUrlListEntry> urlListEntries; - try { - urlListEntries = ctx.UrlListerManager->ListUrl(url, token); - } catch (const std::exception& e) { - ctx.AddError(*nameNode, - TStringBuilder() - << "UrlListerManager: failed to list URL \"" << url - << "\", details: " << e.what() - ); + auto entries = ctx.UrlListerManager->ListUrlRecursive(url, token, TString(Sep), 0); - return false; + for (auto& entry : entries) { + if (ctx.OverrideLibraries.contains( + TStringBuilder() << packageModuleName << entry.Name)) + { + continue; } - for (auto& urlListEntry: urlListEntries) { - switch (urlListEntry.Type) { - case EUrlListEntryType::FILE: { - auto moduleName = TStringBuilder() - << prefix << Sep << urlListEntry.Name; - - if (ctx.OverrideLibraries.contains(moduleName)) { - continue; - } - - if (!ctx.ModuleResolver->AddFromUrl( - moduleName, urlListEntry.Url, token, ctx.Expr, - ctx.SyntaxVersion, 0, nameNode->GetPosition() - )) { - return false; - } - - break; - } - - case EUrlListEntryType::DIRECTORY: { - queue.push_back({ - TStringBuilder() << prefix << Sep << urlListEntry.Name, - urlListEntry.Url - }); - - break; - } - } + if (!ctx.ModuleResolver->AddFromUrl( + TStringBuilder() << packageModuleName << entry.Name, + entry.Url, + token, + ctx.Expr, + ctx.SyntaxVersion, + 0, + nameNode->GetPosition())) + { + return false; } } |