4
4
#include < ydb/library/yql/core/issue/protos/issue_id.pb.h>
5
5
#include < ydb/library/yql/core/yql_expr_optimize.h>
6
6
#include < ydb/library/yql/core/yql_expr_type_annotation.h>
7
+ #include < ydb/library/yql/core/qplayer/storage/interface/yql_qstorage.h>
7
8
#include < ydb/library/yql/core/issue/yql_issue.h>
8
9
#include < ydb/library/yql/sql/sql.h>
9
10
#include < ydb/library/yql/utils/yql_panic.h>
@@ -15,6 +16,7 @@ namespace NYql {
15
16
namespace {
16
17
17
18
const TString RAW_VIEW_SQL = " select * from self_raw" ;
19
+ const TString YtView_Component = " YtView" ;
18
20
19
21
TExprNode::TPtr BuildProtoRemapper (const TMap<TString, TString>& protoFields, TExprContext& ctx) {
20
22
auto rowArg = ctx.NewArgument (TPosition (), TStringBuf (" row" ));
@@ -150,6 +152,7 @@ TExprNode::TPtr BuildIgnoreTypeV3Remapper(const TStructExprType* rowType, TExprC
150
152
}
151
153
152
154
TExprNode::TPtr CompileViewSql (const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion,
155
+ const TString& viewId, const TQContext& qContext,
153
156
TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager,
154
157
IRandomProvider& randomProvider, bool enableViewIsolation, IUdfResolver::TPtr udfResolver)
155
158
{
@@ -159,9 +162,22 @@ TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster,
159
162
settings.ClusterMapping [settings.DefaultCluster ] = cluster.empty () ? " data" : provider;
160
163
settings.SyntaxVersion = syntaxVersion;
161
164
settings.V0Behavior = NSQLTranslation::EV0Behavior::Disable;
162
- settings.FileAliasPrefix = " view_" + randomProvider.GenUuid4 ().AsGuidString () + " /" ;
163
- if (!enableViewIsolation) {
164
- settings.FileAliasPrefix .clear (); // disable FileAliasPrefix while preserving number of randomProvider calls
165
+ if (qContext.CanRead () && enableViewIsolation) {
166
+ auto res = qContext.GetReader ()->Get ({YtView_Component, viewId}).GetValueSync ();
167
+ if (!res) {
168
+ ythrow yexception () << " Missing replay data" ;
169
+ }
170
+
171
+ settings.FileAliasPrefix = res->Value ;
172
+ } else {
173
+ settings.FileAliasPrefix = " view_" + randomProvider.GenUuid4 ().AsGuidString () + " /" ;
174
+ if (!enableViewIsolation) {
175
+ settings.FileAliasPrefix .clear (); // disable FileAliasPrefix while preserving number of randomProvider calls
176
+ }
177
+
178
+ if (enableViewIsolation && qContext.CanWrite ()) {
179
+ qContext.GetWriter ()->Put ({YtView_Component, viewId}, settings.FileAliasPrefix ).GetValueSync ();
180
+ }
165
181
}
166
182
167
183
NYql::TAstParseResult sqlRes = NSQLTranslation::SqlToYql (sql, settings);
@@ -268,12 +284,14 @@ TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster,
268
284
} // unnamed
269
285
270
286
271
- bool TYtViewDescription::Fill (const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion, TExprContext& ctx,
287
+ bool TYtViewDescription::Fill (const TString& provider, const TString& cluster, const TString& sql, ui16 syntaxVersion,
288
+ const TString& viewId, const TQContext& qContext, TExprContext& ctx,
272
289
IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation,
273
290
IUdfResolver::TPtr udfResolver)
274
291
{
275
292
Sql = sql;
276
- CompiledSql = CompileViewSql (provider, cluster, sql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver);
293
+ CompiledSql = CompileViewSql (provider, cluster, sql, syntaxVersion, viewId, qContext,
294
+ ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver);
277
295
return bool (CompiledSql);
278
296
}
279
297
@@ -283,7 +301,8 @@ void TYtViewDescription::CleanupCompiledSQL()
283
301
}
284
302
285
303
bool TYtTableDescriptionBase::Fill (const TString& provider, const TString& cluster, const TString& table,
286
- const TStructExprType* type, const TString& viewSql, ui16 syntaxVersion, const THashMap<TString, TString>& metaAttrs,
304
+ const TStructExprType* type, const TString& viewSql, ui16 syntaxVersion, const TQContext& qContext,
305
+ const THashMap<TString, TString>& metaAttrs,
287
306
TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager, IRandomProvider& randomProvider, bool enableViewIsolation,
288
307
IUdfResolver::TPtr udfResolver)
289
308
{
@@ -364,13 +383,14 @@ bool TYtTableDescriptionBase::Fill(const TString& provider, const TString& clust
364
383
}
365
384
366
385
// (3) views
367
- if (!FillViews (provider, cluster, table, metaAttrs, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver)) {
386
+ if (!FillViews (provider, cluster, table, metaAttrs, qContext, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver)) {
368
387
return false ;
369
388
}
370
389
371
390
if (viewSql) {
372
391
if (!View) {
373
- if (!View.ConstructInPlace ().Fill (provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver)) {
392
+ auto viewId = cluster + " /" + table;
393
+ if (!View.ConstructInPlace ().Fill (provider, cluster, viewSql, syntaxVersion, viewId, qContext, ctx, moduleResolver, urlListerManager, randomProvider, enableViewIsolation, udfResolver)) {
374
394
ctx.AddError (TIssue (TPosition (),
375
395
TStringBuilder () << " Can't load sql view, table: " << cluster << ' .' << table));
376
396
return false ;
@@ -382,7 +402,7 @@ bool TYtTableDescriptionBase::Fill(const TString& provider, const TString& clust
382
402
}
383
403
384
404
bool TYtTableDescriptionBase::FillViews (const TString& provider, const TString& cluster, const TString& table,
385
- const THashMap<TString, TString>& metaAttrs, TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager,
405
+ const THashMap<TString, TString>& metaAttrs, const TQContext& qContext, TExprContext& ctx, IModuleResolver* moduleResolver, IUrlListerManager* urlListerManager,
386
406
IRandomProvider& randomProvider, bool allowViewIsolation, IUdfResolver::TPtr udfResolver)
387
407
{
388
408
for (auto & view: Views) {
@@ -410,7 +430,8 @@ bool TYtTableDescriptionBase::FillViews(const TString& provider, const TString&
410
430
}
411
431
}
412
432
413
- if (!viewDesc.Fill (provider, cluster, viewSql, syntaxVersion, ctx, moduleResolver, urlListerManager, randomProvider, allowViewIsolation, udfResolver)) {
433
+ auto viewId = cluster + " /" + table + " /" + view.first ;
434
+ if (!viewDesc.Fill (provider, cluster, viewSql, syntaxVersion, viewId, qContext, ctx, moduleResolver, urlListerManager, randomProvider, allowViewIsolation, udfResolver)) {
414
435
ctx.AddError (TIssue (TPosition (),
415
436
TStringBuilder () << " Can't load sql view " << viewSql.Quote ()
416
437
<< " , table: " << cluster << ' .' << table
0 commit comments