Skip to content

Commit d236fea

Browse files
committed
fix issues
1 parent 386d48e commit d236fea

File tree

6 files changed

+225
-161
lines changed

6 files changed

+225
-161
lines changed

ydb/core/kqp/provider/yql_kikimr_exec.cpp

Lines changed: 78 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,82 @@ namespace {
505505
}
506506
}
507507
}
508+
509+
bool ParseAsyncReplicationSettings(
510+
TReplicationSettings& dstSettings, const TCoNameValueTupleList& srcSettings, TExprContext& ctx, TPositionHandle pos
511+
) {
512+
for (auto setting : srcSettings) {
513+
auto name = setting.Name().Value();
514+
if (name == "connection_string") {
515+
dstSettings.ConnectionString = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
516+
} else if (name == "endpoint") {
517+
dstSettings.Endpoint = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
518+
} else if (name == "database") {
519+
dstSettings.Database = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
520+
} else if (name == "token") {
521+
dstSettings.EnsureOAuthToken().Token =
522+
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
523+
} else if (name == "token_secret_name") {
524+
dstSettings.EnsureOAuthToken().TokenSecretName =
525+
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
526+
} else if (name == "user") {
527+
dstSettings.EnsureStaticCredentials().UserName =
528+
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
529+
} else if (name == "password") {
530+
dstSettings.EnsureStaticCredentials().Password =
531+
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
532+
} else if (name == "password_secret_name") {
533+
dstSettings.EnsureStaticCredentials().PasswordSecretName =
534+
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
535+
} else if (name == "state") {
536+
auto value = ToString(setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
537+
if (to_lower(value) == "done") {
538+
dstSettings.EnsureStateDone();
539+
} else {
540+
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
541+
TStringBuilder() << "Unknown replication state: " << value));
542+
return false;
543+
}
544+
} else if (name == "failover_mode") {
545+
auto value = ToString(setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
546+
if (to_lower(value) == "consistent") {
547+
dstSettings.EnsureStateDone(TReplicationSettings::EFailoverMode::Consistent);
548+
} else if (to_lower(value) == "force") {
549+
dstSettings.EnsureStateDone(TReplicationSettings::EFailoverMode::Force);
550+
} else {
551+
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
552+
TStringBuilder() << "Unknown failover mode: " << value));
553+
return false;
554+
}
555+
}
556+
}
557+
558+
if (dstSettings.ConnectionString && (dstSettings.Endpoint || dstSettings.Database)) {
559+
ctx.AddError(TIssue(ctx.GetPosition(pos),
560+
TStringBuilder() << "Connection string and Endpoint/Database are mutually exclusive"));
561+
return false;
562+
}
563+
564+
if (dstSettings.OAuthToken && dstSettings.StaticCredentials) {
565+
ctx.AddError(TIssue(ctx.GetPosition(pos),
566+
TStringBuilder() << "Token and User/Password are mutually exclusive"));
567+
return false;
568+
}
569+
570+
if (const auto& x = dstSettings.OAuthToken; x && x->Token && x->TokenSecretName) {
571+
ctx.AddError(TIssue(ctx.GetPosition(pos),
572+
TStringBuilder() << "TOKEN and TOKEN_SECRET_NAME are mutually exclusive"));
573+
return false;
574+
}
575+
576+
if (const auto& x = dstSettings.StaticCredentials; x && x->Password && x->PasswordSecretName) {
577+
ctx.AddError(TIssue(ctx.GetPosition(pos),
578+
TStringBuilder() << "PASSWORD and PASSWORD_SECRET_NAME are mutually exclusive"));
579+
return false;
580+
}
581+
582+
return true;
583+
}
508584
}
509585

510586
class TKiSinkPlanInfoTransformer : public TGraphTransformerBase {
@@ -1842,35 +1918,7 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
18421918
);
18431919
}
18441920

1845-
for (auto setting : createReplication.ReplicationSettings()) {
1846-
auto name = setting.Name().Value();
1847-
if (name == "connection_string") {
1848-
settings.Settings.ConnectionString = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1849-
} else if (name == "endpoint") {
1850-
settings.Settings.Endpoint = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1851-
} else if (name == "database") {
1852-
settings.Settings.Database = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1853-
} else if (name == "token") {
1854-
settings.Settings.EnsureOAuthToken().Token =
1855-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1856-
} else if (name == "token_secret_name") {
1857-
settings.Settings.EnsureOAuthToken().TokenSecretName =
1858-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1859-
} else if (name == "user") {
1860-
settings.Settings.EnsureStaticCredentials().UserName =
1861-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1862-
} else if (name == "password") {
1863-
settings.Settings.EnsureStaticCredentials().Password =
1864-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1865-
} else if (name == "password_secret_name") {
1866-
settings.Settings.EnsureStaticCredentials().PasswordSecretName =
1867-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1868-
}
1869-
}
1870-
1871-
if (settings.Settings.ConnectionString && (settings.Settings.Endpoint || settings.Settings.Database)) {
1872-
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
1873-
TStringBuilder() << "Connection string and Endpoint/Database are mutually exclusive"));
1921+
if (!ParseAsyncReplicationSettings(settings.Settings, createReplication.ReplicationSettings(), ctx, createReplication.Pos())) {
18741922
return SyncError();
18751923
}
18761924

@@ -1880,30 +1928,12 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
18801928
return SyncError();
18811929
}
18821930

1883-
if (settings.Settings.OAuthToken && settings.Settings.StaticCredentials) {
1884-
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
1885-
TStringBuilder() << "Token and User/Password are mutually exclusive"));
1886-
return SyncError();
1887-
}
1888-
18891931
if (!settings.Settings.OAuthToken && !settings.Settings.StaticCredentials) {
18901932
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
18911933
TStringBuilder() << "Neither Token nor User/Password are provided"));
18921934
return SyncError();
18931935
}
18941936

1895-
if (const auto& x = settings.Settings.OAuthToken; x && x->Token && x->TokenSecretName) {
1896-
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
1897-
TStringBuilder() << "TOKEN and TOKEN_SECRET_NAME are mutually exclusive"));
1898-
return SyncError();
1899-
}
1900-
1901-
if (const auto& x = settings.Settings.StaticCredentials; x && x->Password && x->PasswordSecretName) {
1902-
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
1903-
TStringBuilder() << "PASSWORD and PASSWORD_SECRET_NAME are mutually exclusive"));
1904-
return SyncError();
1905-
}
1906-
19071937
if (const auto& x = settings.Settings.StaticCredentials; x && (!x->UserName && x->Password || !x->UserName && x->PasswordSecretName)) {
19081938
ctx.AddError(TIssue(ctx.GetPosition(createReplication.Pos()),
19091939
TStringBuilder() << "USER for PASSWORD or PASSWORD_SECRET_NAME are not provided"));
@@ -1932,73 +1962,7 @@ class TKiSinkCallableExecutionTransformer : public TAsyncCallbackTransformer<TKi
19321962
TAlterReplicationSettings settings;
19331963
settings.Name = TString(alterReplication.Replication());
19341964

1935-
for (auto setting : alterReplication.ReplicationSettings()) {
1936-
auto name = setting.Name().Value();
1937-
if (name == "connection_string") {
1938-
settings.Settings.ConnectionString = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1939-
} else if (name == "endpoint") {
1940-
settings.Settings.Endpoint = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1941-
} else if (name == "database") {
1942-
settings.Settings.Database = setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1943-
} else if (name == "token") {
1944-
settings.Settings.EnsureOAuthToken().Token =
1945-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1946-
} else if (name == "token_secret_name") {
1947-
settings.Settings.EnsureOAuthToken().TokenSecretName =
1948-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1949-
} else if (name == "user") {
1950-
settings.Settings.EnsureStaticCredentials().UserName =
1951-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1952-
} else if (name == "password") {
1953-
settings.Settings.EnsureStaticCredentials().Password =
1954-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1955-
} else if (name == "password_secret_name") {
1956-
settings.Settings.EnsureStaticCredentials().PasswordSecretName =
1957-
setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value();
1958-
} else if (name == "state") {
1959-
auto value = ToString(setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
1960-
if (to_lower(value) == "done") {
1961-
settings.Settings.EnsureStateDone();
1962-
} else {
1963-
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
1964-
TStringBuilder() << "Unknown replication state: " << value));
1965-
return SyncError();
1966-
}
1967-
} else if (name == "failover_mode") {
1968-
auto value = ToString(setting.Value().Cast<TCoDataCtor>().Literal().Cast<TCoAtom>().Value());
1969-
if (to_lower(value) == "consistent") {
1970-
settings.Settings.EnsureStateDone(TReplicationSettings::EFailoverMode::Consistent);
1971-
} else if (to_lower(value) == "force") {
1972-
settings.Settings.EnsureStateDone(TReplicationSettings::EFailoverMode::Force);
1973-
} else {
1974-
ctx.AddError(TIssue(ctx.GetPosition(setting.Name().Pos()),
1975-
TStringBuilder() << "Unknown failover mode: " << value));
1976-
return SyncError();
1977-
}
1978-
}
1979-
}
1980-
1981-
if (settings.Settings.ConnectionString && (settings.Settings.Endpoint || settings.Settings.Database)) {
1982-
ctx.AddError(TIssue(ctx.GetPosition(alterReplication.Pos()),
1983-
TStringBuilder() << "Connection string and Endpoint/Database are mutually exclusive"));
1984-
return SyncError();
1985-
}
1986-
1987-
if (settings.Settings.OAuthToken && settings.Settings.StaticCredentials) {
1988-
ctx.AddError(TIssue(ctx.GetPosition(alterReplication.Pos()),
1989-
TStringBuilder() << "Token and User/Password are mutually exclusive"));
1990-
return SyncError();
1991-
}
1992-
1993-
if (const auto& x = settings.Settings.OAuthToken; x && x->Token && x->TokenSecretName) {
1994-
ctx.AddError(TIssue(ctx.GetPosition(alterReplication.Pos()),
1995-
TStringBuilder() << "TOKEN and TOKEN_SECRET_NAME are mutually exclusive"));
1996-
return SyncError();
1997-
}
1998-
1999-
if (const auto& x = settings.Settings.StaticCredentials; x && x->Password && x->PasswordSecretName) {
2000-
ctx.AddError(TIssue(ctx.GetPosition(alterReplication.Pos()),
2001-
TStringBuilder() << "PASSWORD and PASSWORD_SECRET_NAME are mutually exclusive"));
1965+
if (!ParseAsyncReplicationSettings(settings.Settings, alterReplication.ReplicationSettings(), ctx, alterReplication.Pos())) {
20021966
return SyncError();
20031967
}
20041968

0 commit comments

Comments
 (0)