MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / push_ref

Method push_ref

nodedb-columnar/src/memtable/column_data/push.rs:360–476  ·  view source on GitHub ↗

Append a borrowed value (zero-copy for strings). Used by `ingest_row_refs`.

(
        &mut self,
        value: &IngestValue<'_>,
        col_name: &str,
    )

Source from the content-addressed store, hash-verified

358
359 /// Append a borrowed value (zero-copy for strings). Used by `ingest_row_refs`.
360 pub(crate) fn push_ref(
361 &mut self,
362 value: &IngestValue<'_>,
363 col_name: &str,
364 ) -> Result<(), ColumnarError> {
365 match (self, value) {
366 (Self::Int64 { values, valid }, IngestValue::Null) => {
367 values.push(0);
368 Self::push_valid(valid, false);
369 }
370 (Self::Float64 { values, valid }, IngestValue::Null) => {
371 values.push(0.0);
372 Self::push_valid(valid, false);
373 }
374 (Self::Bool { values, valid }, IngestValue::Null) => {
375 values.push(false);
376 Self::push_valid(valid, false);
377 }
378 (Self::Timestamp { values, valid }, IngestValue::Null) => {
379 values.push(0);
380 Self::push_valid(valid, false);
381 }
382 (Self::String { offsets, valid, .. }, IngestValue::Null) => {
383 offsets.push(*offsets.last().unwrap_or(&0));
384 Self::push_valid(valid, false);
385 }
386 (Self::Bytes { offsets, valid, .. }, IngestValue::Null) => {
387 offsets.push(*offsets.last().unwrap_or(&0));
388 Self::push_valid(valid, false);
389 }
390 (Self::Json { offsets, valid, .. }, IngestValue::Null) => {
391 offsets.push(*offsets.last().unwrap_or(&0));
392 Self::push_valid(valid, false);
393 }
394 (Self::DictEncoded { ids, valid, .. }, IngestValue::Null) => {
395 ids.push(0);
396 Self::push_valid(valid, false);
397 }
398 (Self::Int64 { values, valid }, IngestValue::Int64(v)) => {
399 values.push(*v);
400 Self::push_valid(valid, true);
401 }
402 (Self::Float64 { values, valid }, IngestValue::Float64(v)) => {
403 values.push(*v);
404 Self::push_valid(valid, true);
405 }
406 (Self::Float64 { values, valid }, IngestValue::Int64(v)) => {
407 values.push(*v as f64);
408 Self::push_valid(valid, true);
409 }
410 (Self::Bool { values, valid }, IngestValue::Bool(v)) => {
411 values.push(*v);
412 Self::push_valid(valid, true);
413 }
414 (Self::Timestamp { values, valid }, IngestValue::Timestamp(v)) => {
415 values.push(*v);
416 Self::push_valid(valid, true);
417 }

Callers 1

ingest_row_refsMethod · 0.45

Calls 7

to_stringMethod · 0.80
pushMethod · 0.45
lastMethod · 0.45
as_bytesMethod · 0.45
lenMethod · 0.45
getMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected