@@ -60,25 +60,26 @@ class TWriteUnit : public TExecutionUnit {
60
60
TVector<TRawTypeValue> key;
61
61
TVector<NTable::TUpdateOp> value;
62
62
63
+ TVector<TCell> keyCells;
64
+
63
65
const TSerializedCellMatrix& matrix = writeTx->Matrix ();
64
- TConstArrayRef<TCell> cells = matrix.GetCells ();
65
- const ui32 rowCount = matrix.GetRowCount ();
66
- const ui16 colCount = matrix.GetColCount ();
67
66
68
- for (ui32 rowIdx = 0 ; rowIdx < rowCount ; ++rowIdx)
67
+ for (ui32 rowIdx = 0 ; rowIdx < matrix. GetRowCount () ; ++rowIdx)
69
68
{
70
69
key.clear ();
70
+ keyCells.clear ();
71
71
ui64 keyBytes = 0 ;
72
72
for (ui16 keyColIdx = 0 ; keyColIdx < TableInfo_.KeyColumnIds .size (); ++keyColIdx) {
73
73
const auto & cellType = TableInfo_.KeyColumnTypes [keyColIdx];
74
- const TCell& cell = cells[ rowIdx * colCount + keyColIdx] ;
74
+ const TCell& cell = matrix. GetCell ( rowIdx, keyColIdx) ;
75
75
if (cellType.GetTypeId () == NScheme::NTypeIds::Uint8 && !cell.IsNull () && cell.AsValue <ui8>() > 127 ) {
76
76
tx->SetError (NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, " Keys with Uint8 column values >127 are currently prohibited" );
77
77
return ;
78
78
}
79
79
80
80
keyBytes += cell.Size ();
81
81
key.emplace_back (TRawTypeValue (cell.AsRef (), cellType));
82
+ keyCells.emplace_back (cell);
82
83
}
83
84
84
85
if (keyBytes > NLimits::MaxWriteKeySize) {
@@ -87,9 +88,9 @@ class TWriteUnit : public TExecutionUnit {
87
88
}
88
89
89
90
value.clear ();
90
- for (ui16 valueColIdx = TableInfo_.KeyColumnIds .size (); valueColIdx < colCount ; ++valueColIdx) {
91
+ for (ui16 valueColIdx = TableInfo_.KeyColumnIds .size (); valueColIdx < matrix. GetColCount () ; ++valueColIdx) {
91
92
ui32 columnTag = writeTx->RecordOperation ().GetColumnIds (valueColIdx);
92
- const TCell& cell = cells[ rowIdx * colCount + valueColIdx] ;
93
+ const TCell& cell = matrix. GetCell ( rowIdx, valueColIdx) ;
93
94
if (cell.Size () > NLimits::MaxWriteValueSize) {
94
95
tx->SetError (NKikimrDataEvents::TEvWriteResult::STATUS_BAD_REQUEST, TStringBuilder () << " Row cell size of " << cell.Size () << " bytes is larger than the allowed threshold " << NLimits::MaxWriteValueSize);
95
96
return ;
@@ -102,7 +103,7 @@ class TWriteUnit : public TExecutionUnit {
102
103
}
103
104
104
105
txc.DB .Update (writeTableId, NTable::ERowOp::Upsert, key, value, writeVersion);
105
- self->GetConflictsCache ().GetTableCache (writeTableId).RemoveUncommittedWrites (writeTx-> KeyCells () , txc.DB );
106
+ self->GetConflictsCache ().GetTableCache (writeTableId).RemoveUncommittedWrites (keyCells , txc.DB );
106
107
}
107
108
// TODO: Counters
108
109
// self->IncCounter(COUNTER_UPLOAD_ROWS, rowCount);
0 commit comments