diff options
author | qrort <[email protected]> | 2023-07-11 16:35:15 +0300 |
---|---|---|
committer | qrort <[email protected]> | 2023-07-11 16:35:15 +0300 |
commit | 5dedf000fbf44b5a38ab77541dea9599aaa483b8 (patch) | |
tree | 3be47269c603fb4425d2319406417a6933010375 | |
parent | bdf2a3be397d16655fec75add73e4f4a4a53ec69 (diff) |
KIKIMR-18642: Syntax setting in ExecuteSchemeQuery
-rw-r--r-- | ydb/core/kqp/host/kqp_host.cpp | 2 | ||||
-rw-r--r-- | ydb/core/kqp/host/kqp_host.h | 18 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_worker_actor.cpp | 12 | ||||
-rw-r--r-- | ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 12 | ||||
-rw-r--r-- | ydb/core/kqp/ut/service/kqp_query_service_ut.cpp | 1 |
5 files changed, 33 insertions, 12 deletions
diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index f2f26712db4..87387928157 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -1227,7 +1227,7 @@ private: } TMaybe<TSqlVersion> sqlVersion; - auto queryExpr = CompileYqlQuery(query, isSql, false, ctx, sqlVersion, {}); + auto queryExpr = CompileYqlQuery(query, isSql, false, ctx, sqlVersion, settings.UsePgParser); if (!queryExpr) { return nullptr; } diff --git a/ydb/core/kqp/host/kqp_host.h b/ydb/core/kqp/host/kqp_host.h index 6f5cdb0bae4..b5fc46beb92 100644 --- a/ydb/core/kqp/host/kqp_host.h +++ b/ydb/core/kqp/host/kqp_host.h @@ -22,20 +22,30 @@ public: struct TExecSettings { TMaybe<bool> DocumentApiRestricted; + TMaybe<bool> UsePgParser; + TMaybe<TSqlVersion> SyntaxVersion; TString ToString() const { - return TStringBuilder() << "TExecSettings{ DocumentApiRestricted: " << DocumentApiRestricted << " }"; + return TStringBuilder() << "TExecSettings{" + << " DocumentApiRestricted: " << DocumentApiRestricted + << " UsePgParser: " << UsePgParser + << " SyntaxVersion: " << SyntaxVersion + << " }"; } }; struct TPrepareSettings: public TExecSettings { TMaybe<bool> IsInternalCall; - TMaybe<bool> UsePgParser; - TMaybe<TSqlVersion> SyntaxVersion; TMaybe<bool> ConcurrentResults; TString ToString() const { - return TStringBuilder() << "TPrepareSettings{ DocumentApiRestricted: " << DocumentApiRestricted << " IsInternalCall: " << IsInternalCall << " }"; + return TStringBuilder() << "TPrepareSettings{" + << " DocumentApiRestricted: " << DocumentApiRestricted + << " UsePgParser: " << UsePgParser + << " SyntaxVersion: " << SyntaxVersion + << " IsInternalCall: " << IsInternalCall + << " ConcurrentResults: " << ConcurrentResults + << " }"; } }; diff --git a/ydb/core/kqp/session_actor/kqp_worker_actor.cpp b/ydb/core/kqp/session_actor/kqp_worker_actor.cpp index cae1bd5d244..69cb3fdeb01 100644 --- a/ydb/core/kqp/session_actor/kqp_worker_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_worker_actor.cpp @@ -573,6 +573,18 @@ private: switch (type) { case NKikimrKqp::QUERY_TYPE_SQL_DDL: { IKqpHost::TExecSettings execSettings; + switch (QueryState->RequestEv->GetSyntax()) { + case Ydb::Query::Syntax::SYNTAX_YQL_V1: + execSettings.UsePgParser = false; + execSettings.SyntaxVersion = 1; + break; + + case Ydb::Query::Syntax::SYNTAX_PG: + execSettings.UsePgParser = true; + break; + default: + break; + } execSettings.DocumentApiRestricted = IsDocumentApiRestricted(QueryState->RequestEv->GetRequestType()); QueryState->AsyncQueryResult = KqpHost->ExecuteSchemeQuery(query, true, execSettings); break; diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index 87c150d674e..fa580da3575 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -1207,8 +1207,8 @@ Y_UNIT_TEST_SUITE(KqpPg) { TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false)); auto testSingleType = [&kikimr] (const TPgTypeTestSpec& spec, bool isArray) { - NYdb::NScripting::TScriptingClient client(kikimr.GetDriver()); - + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); auto tableName = "Pg" + ToString(spec.TypeId) + (isArray ? "array" : ""); auto typeName = ((isArray) ? "_pg" : "pg") + NYql::NPg::LookupType(spec.TypeId).Name; auto keyEntry = spec.IsKey ? ("key "+ typeName) : "key pgint2"; @@ -1220,7 +1220,7 @@ Y_UNIT_TEST_SUITE(KqpPg) { PRIMARY KEY (key)\n\ );", tableName.Data(), keyEntry.Data(), valueEntry.Data()); Cerr << req << Endl; - auto result = client.ExecuteYqlScript(req).GetValueSync(); + auto result = session.ExecuteSchemeQuery(req).GetValueSync(); UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); if (!isArray) { @@ -1269,8 +1269,8 @@ Y_UNIT_TEST_SUITE(KqpPg) { TKikimrRunner kikimr(NKqp::TKikimrSettings().SetWithSampleTables(false)); auto testSingleType = [&kikimr] (const TPgTypeTestSpec& spec, bool isArray) { - NYdb::NScripting::TScriptingClient client(kikimr.GetDriver()); - + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); auto tableName = "Pg" + ToString(spec.TypeId) + (isArray ? "array" : ""); auto typeName = ((isArray) ? "_" : "") + NYql::NPg::LookupType(spec.TypeId).Name; auto keyEntry = spec.IsKey ? ("key "+ typeName) : "key int2"; @@ -1282,7 +1282,7 @@ Y_UNIT_TEST_SUITE(KqpPg) { %s\n\ );", tableName.Data(), keyEntry.Data(), valueEntry.Data()); Cerr << req << Endl; - auto result = client.ExecuteYqlScript(req).GetValueSync(); + auto result = session.ExecuteSchemeQuery(req).GetValueSync(); UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); if (!isArray) { ExecutePgInsert(kikimr, tableName, spec); diff --git a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp b/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp index 7b33808ec07..550ca5c8c87 100644 --- a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp @@ -130,7 +130,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); auto result = session.ExecuteSchemeQuery(R"( - --!syntax_pg CREATE TABLE test (id int8,PRIMARY KEY (id)))" ).GetValueSync(); |