Skip to content

Commit ef54c8c

Browse files
committed
add pg types to TQueryPlan
1 parent 8579425 commit ef54c8c

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

ydb/core/kqp/opt/kqp_query_plan.cpp

+16-10
Original file line numberDiff line numberDiff line change
@@ -515,17 +515,23 @@ class TxPlanSerializer {
515515
}
516516

517517
TString DescribeValue(const NKikimr::NClient::TValue& value) {
518-
auto str = value.GetDataText();
519-
switch (value.GetType().GetData().GetScheme()) {
520-
case NScheme::NTypeIds::Utf8:
521-
case NScheme::NTypeIds::Json:
522-
case NScheme::NTypeIds::String:
523-
case NScheme::NTypeIds::String4k:
524-
case NScheme::NTypeIds::String2m:
525-
return "«" + str + "»";
526-
default:
527-
return str;
518+
if (value.GetType().GetKind() == NKikimrMiniKQL::ETypeKind::Data) {
519+
auto str = value.GetDataText();
520+
switch (value.GetType().GetData().GetScheme()) {
521+
case NScheme::NTypeIds::Utf8:
522+
case NScheme::NTypeIds::Json:
523+
case NScheme::NTypeIds::String:
524+
case NScheme::NTypeIds::String4k:
525+
case NScheme::NTypeIds::String2m:
526+
return "«" + str + "»";
527+
default:
528+
return str;
529+
}
530+
}
531+
if (value.GetType().GetKind() == NKikimrMiniKQL::ETypeKind::Pg) {
532+
return value.GetPgText();
528533
}
534+
Y_ENSURE(false, TStringBuilder() << "unexpected NKikimrMiniKQL::ETypeKind" << ETypeKind_Name(value.GetType().GetKind()));
529535
}
530536

531537
void Visit(const TKqpReadRangesSourceSettings& sourceSettings, TQueryPlanNode& planNode) {

ydb/core/kqp/ut/opt/kqp_not_null_ut.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -1653,8 +1653,6 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
16531653
}
16541654
}
16551655

1656-
#if 0
1657-
// TODO: fix TxPlanSerializer with PG keys
16581656
Y_UNIT_TEST(SecondaryIndexWithNotNullDataColumnPg) {
16591657
auto settings = TKikimrSettings()
16601658
.SetWithSampleTables(false)
@@ -1759,7 +1757,7 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
17591757
result.GetIssues().ToString());
17601758
}
17611759
}
1762-
#endif
1760+
17631761

17641762
Y_UNIT_TEST_TWIN(JoinBothTablesWithNotNullPk, StreamLookup) {
17651763
NKikimrConfig::TAppConfig appConfig;

ydb/public/lib/value/value.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "value.h"
22

33
#include <ydb/library/yql/public/decimal/yql_decimal.h>
4+
#include <ydb/library/yql/parser/pg_wrapper/interface/type_desc.h>
45

56
#include <library/cpp/string_utils/base64/base64.h>
67

@@ -432,6 +433,20 @@ TString TValue::GetDataText() const {
432433
return TStringBuilder() << "\"<unknown type " << Type.GetData().GetScheme() << ">\"";
433434
}
434435

436+
TString TValue::GetPgText() const {
437+
Y_ASSERT(Type.GetKind() == NKikimrMiniKQL::ETypeKind::Pg);
438+
if (Value.HasNullFlagValue()) {
439+
return TString("null");
440+
}
441+
if (Value.HasText()) {
442+
return Value.GetText();
443+
}
444+
auto pgType = Type.GetPg();
445+
auto convertResult = NPg::PgNativeTextFromNativeBinary(Value.GetBytes(), NPg::TypeDescFromPgTypeId(pgType.Getoid()));
446+
Y_ENSURE(!convertResult.Error, convertResult.Error);
447+
return convertResult.Str;
448+
}
449+
435450
template <> TString TValue::GetTypeText<TFormatCxx>(const TFormatCxx& format) const {
436451
switch(Type.GetKind()) {
437452
case NKikimrMiniKQL::ETypeKind::Void:

ydb/public/lib/value/value.h

+2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ class TValue {
8989
NScheme::TTypeId GetDataType() const;
9090
// gets text representation of simple 'Data' types
9191
TString GetDataText() const;
92+
// gets text representation of 'Pg' types
93+
TString GetPgText() const;
9294
// returns text representation of value's type
9395
template <typename Format> TString GetTypeText(const Format& format = Format()) const;
9496
// returns text representation of value itself

ydb/public/lib/value/ya.make

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ PEERDIR(
99
library/cpp/string_utils/base64
1010
ydb/core/protos
1111
ydb/library/mkql_proto/protos
12+
ydb/library/yql/parser/pg_wrapper/interface
1213
ydb/public/lib/scheme_types
1314
ydb/public/sdk/cpp/client/ydb_value
1415
)

0 commit comments

Comments
 (0)