MCPcopy Create free account
hub / github.com/activeloopai/deeplake / update_tuple

Method update_tuple

cpp/deeplake_pg/table_storage.cpp:1058–1089  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1056}
1057
1058bool table_storage::update_tuple(Oid table_id, ItemPointer tid, HeapTuple new_tuple)
1059{
1060 auto& table_data = get_table_data(table_id);
1061 TupleDesc tupdesc = table_data.get_tuple_descriptor();
1062
1063 try {
1064 const auto row_number = utils::tid_to_row_number(tid);
1065
1066 // Verify row exists
1067 if (row_number >= table_data.num_rows()) {
1068 ereport(
1069 ERROR,
1070 (errcode(ERRCODE_INTERNAL_ERROR),
1071 errmsg("Row number %zu out of range for table %s", row_number, table_data.get_table_name().c_str())));
1072 return false;
1073 }
1074
1075 // Extract values from HeapTuple
1076 std::vector<Datum> values(tupdesc->natts, 0);
1077 std::vector<uint8_t> nulls(tupdesc->natts, 0);
1078 heap_deform_tuple(new_tuple, tupdesc, values.data(), reinterpret_cast<bool*>(nulls.data()));
1079
1080 icm::string_map<nd::array> row;
1081 ::convert_pg_to_nd(table_data, values, nulls, new_tuple->t_len, row);
1082 table_data.add_update_row(row_number, std::move(row));
1083
1084 return true;
1085 } catch (const base::exception& e) {
1086 ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), errmsg("Failed to update tuple: %s", e.what())));
1087 return false;
1088 }
1089}
1090
1091bool table_storage::fetch_tuple(Oid table_id, ItemPointer tid, TupleTableSlot* slot)
1092{

Callers 1

tuple_updateMethod · 0.80

Calls 7

tid_to_row_numberFunction · 0.85
convert_pg_to_ndFunction · 0.85
get_tuple_descriptorMethod · 0.80
add_update_rowMethod · 0.80
whatMethod · 0.80
num_rowsMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected