summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorqrort <[email protected]>2023-07-11 16:35:15 +0300
committerqrort <[email protected]>2023-07-11 16:35:15 +0300
commit5dedf000fbf44b5a38ab77541dea9599aaa483b8 (patch)
tree3be47269c603fb4425d2319406417a6933010375
parentbdf2a3be397d16655fec75add73e4f4a4a53ec69 (diff)
KIKIMR-18642: Syntax setting in ExecuteSchemeQuery
-rw-r--r--ydb/core/kqp/host/kqp_host.cpp2
-rw-r--r--ydb/core/kqp/host/kqp_host.h18
-rw-r--r--ydb/core/kqp/session_actor/kqp_worker_actor.cpp12
-rw-r--r--ydb/core/kqp/ut/pg/kqp_pg_ut.cpp12
-rw-r--r--ydb/core/kqp/ut/service/kqp_query_service_ut.cpp1
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();