Skip to content

Commit 7ad2155

Browse files
authored
Merge 8af3774 into 5299845
2 parents 5299845 + 8af3774 commit 7ad2155

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

ydb/core/kqp/runtime/kqp_write_table.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,14 @@ class TRowBuilder {
278278
? NYql::NUdf::TStringRef(cellInfo.PgBinaryValue)
279279
: cellInfo.Value.AsStringRef();
280280

281-
char* initialPtr = dataPtr;
282-
std::memcpy(initialPtr, ref.Data(), ref.Size());
283-
dataPtr += ref.Size();
284-
return TCell(initialPtr, ref.Size());
281+
if (TCell::CanInline(ref.Size())) {
282+
return TCell(ref.Data(), ref.Size());
283+
} else {
284+
char* initialPtr = dataPtr;
285+
std::memcpy(initialPtr, ref.Data(), ref.Size());
286+
dataPtr += ref.Size();
287+
return TCell(initialPtr, ref.Size());
288+
}
285289
}
286290

287291
size_t GetCellSize(const TCellInfo& cellInfo) const {
@@ -301,7 +305,8 @@ class TRowBuilder {
301305
if (cellInfo.Type.GetTypeId() == NScheme::NTypeIds::Pg) {
302306
return cellInfo.PgBinaryValue.size();
303307
}
304-
return cellInfo.Value.AsStringRef().Size();
308+
const auto s = cellInfo.Value.AsStringRef().Size();
309+
return TCell::CanInline(s) ? 0 : s;
305310
}
306311

307312
TCharVectorPtr Allocate(size_t size) {

ydb/core/kqp/ut/olap/kqp_olap_ut.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3074,6 +3074,43 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
30743074
Y_UNIT_TEST_TWIN(DeleteAbsentMultipleShards, Reboot) {
30753075
TestDeleteAbsent(2, Reboot);
30763076
}
3077+
3078+
Y_UNIT_TEST(InsertEmptyString) {
3079+
NKikimrConfig::TAppConfig appConfig;
3080+
appConfig.MutableColumnShardConfig()->SetAllowNullableColumnsInPK(true);
3081+
auto settings = TKikimrSettings().SetAppConfig(appConfig).SetWithSampleTables(false);
3082+
TTestHelper testHelper(settings);
3083+
3084+
TVector<TTestHelper::TColumnSchema> schema = {
3085+
TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int64).SetNullable(false),
3086+
TTestHelper::TColumnSchema().SetName("value").SetType(NScheme::NTypeIds::String).SetNullable(false),
3087+
};
3088+
TTestHelper::TColumnTable testTable;
3089+
testTable.SetName("/Root/ttt").SetPrimaryKey({ "id", }).SetSharding({ "id" }).SetSchema(schema);
3090+
testHelper.CreateTable(testTable);
3091+
auto client = testHelper.GetKikimr().GetQueryClient();
3092+
const auto result = client
3093+
.ExecuteQuery(
3094+
R"(
3095+
INSERT INTO `/Root/ttt` (id, value) VALUES
3096+
(347, '')
3097+
)",
3098+
NYdb::NQuery::TTxControl::BeginTx().CommitTx())
3099+
.GetValueSync();
3100+
UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
3101+
{
3102+
const auto resultSelect = client
3103+
.ExecuteQuery(
3104+
"SELECT * FROM `/Root/ttt`",
3105+
NYdb::NQuery::TTxControl::BeginTx().CommitTx())
3106+
.GetValueSync();
3107+
UNIT_ASSERT_C(resultSelect.IsSuccess(), resultSelect.GetIssues().ToString());
3108+
const auto resultSets = resultSelect.GetResultSets();
3109+
UNIT_ASSERT_VALUES_EQUAL(resultSets.size(), 1);
3110+
const auto resultSet = resultSets[0];
3111+
UNIT_ASSERT_VALUES_EQUAL(resultSet.RowsCount(), 1);
3112+
}
3113+
}
30773114
}
30783115

30793116
}

0 commit comments

Comments
 (0)