@@ -1078,83 +1078,6 @@ void blob_free(dict_index_t *index, buf_block_t *block, bool all, mtr_t *mtr) {
10781078 }
10791079}
10801080
1081- /* * Flags the data tuple fields that are marked as extern storage in the
1082- update vector. We use this function to remember which fields we must
1083- mark as extern storage in a record inserted for an update.
1084- @param[in,out] tuple data tuple
1085- @param[in] update update vector
1086- @param[in] heap memory heap
1087- @return number of flagged external columns */
1088- ulint btr_push_update_extern_fields (dtuple_t *tuple, const upd_t *update,
1089- mem_heap_t *heap) {
1090- DBUG_TRACE;
1091-
1092- ulint n_pushed = 0 ;
1093- ulint n;
1094- upd_field_t *uf;
1095-
1096- ut_ad (tuple);
1097- ut_ad (update);
1098-
1099- uf = update->fields ;
1100- n = upd_get_n_fields (update);
1101-
1102- for (; n--; uf++) {
1103- if (dfield_is_ext (&uf->new_val )) {
1104- dfield_t *field = dtuple_get_nth_field (tuple, uf->field_no );
1105-
1106- if (dfield_is_ext (field)) {
1107- uf->ext_in_old = true ;
1108- } else {
1109- uf->ext_in_old = false ;
1110- dfield_set_ext (field);
1111- n_pushed++;
1112- }
1113-
1114- switch (uf->orig_len ) {
1115- byte *data;
1116- ulint len;
1117- byte *buf;
1118- case 0 :
1119- break ;
1120- case BTR_EXTERN_FIELD_REF_SIZE:
1121- /* Restore the original locally stored
1122- part of the column. In the undo log,
1123- InnoDB writes a longer prefix of externally
1124- stored columns, so that column prefixes
1125- in secondary indexes can be reconstructed. */
1126- dfield_set_data (field,
1127- (byte *)dfield_get_data (field) +
1128- dfield_get_len (field) - BTR_EXTERN_FIELD_REF_SIZE,
1129- BTR_EXTERN_FIELD_REF_SIZE);
1130- dfield_set_ext (field);
1131- break ;
1132- default :
1133- /* Reconstruct the original locally
1134- stored part of the column. The data
1135- will have to be copied. */
1136- ut_a (uf->orig_len > BTR_EXTERN_FIELD_REF_SIZE);
1137-
1138- data = (byte *)dfield_get_data (field);
1139- len = dfield_get_len (field);
1140-
1141- buf = (byte *)mem_heap_alloc (heap, uf->orig_len );
1142- /* Copy the locally stored prefix. */
1143- memcpy (buf, data, uf->orig_len - BTR_EXTERN_FIELD_REF_SIZE);
1144- /* Copy the BLOB pointer. */
1145- memcpy (buf + uf->orig_len - BTR_EXTERN_FIELD_REF_SIZE,
1146- data + len - BTR_EXTERN_FIELD_REF_SIZE,
1147- BTR_EXTERN_FIELD_REF_SIZE);
1148-
1149- dfield_set_data (field, buf, uf->orig_len );
1150- dfield_set_ext (field);
1151- }
1152- }
1153- }
1154-
1155- return n_pushed;
1156- }
1157-
11581081/* * Gets the externally stored size of a record, in units of a database page.
11591082@param[in] rec record
11601083@param[in] offsets array returned by rec_get_offsets()
0 commit comments