TD-90
This commit is contained in:
parent
d5e6947202
commit
0211243730
|
@ -484,35 +484,44 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
||||||
void * ptr = taosbsearch(&colId, kvRowColIdx(row), kvRowNCols(row), sizeof(SColIdx), comparTagId, TD_GE);
|
void * ptr = taosbsearch(&colId, kvRowColIdx(row), kvRowNCols(row), sizeof(SColIdx), comparTagId, TD_GE);
|
||||||
|
|
||||||
if (ptr == NULL || ((SColIdx *)ptr)->colId < colId) { // need to add a column value to the row
|
if (ptr == NULL || ((SColIdx *)ptr)->colId < colId) { // need to add a column value to the row
|
||||||
// int tlen = kvDataRowLen(row) + sizeof(SColIdx) + (IS_VAR_DATA_TYPE(type) ? varDataTLen(value) :
|
int diff = IS_VAR_DATA_TYPE(type) ? varDataTLen(value) : TYPE_BYTES[type];
|
||||||
// TYPE_BYTES[type]); nrow = malloc(tlen); if (nrow == NULL) return NULL;
|
nrow = malloc(kvRowLen(row) + sizeof(SColIdx) + diff);
|
||||||
|
if (nrow == NULL) return -1;
|
||||||
|
|
||||||
// kvDataRowSetNCols(nrow, kvDataRowNCols(row)+1);
|
kvRowSetLen(nrow, kvRowLen(row) + sizeof(SColIdx) + diff);
|
||||||
// kvDataRowSetLen(nrow, tlen);
|
kvRowSetNCols(nrow, kvRowNCols(row) + 1);
|
||||||
|
|
||||||
// if (ptr == NULL) ptr = kvDataRowValues(row);
|
if (ptr == NULL) {
|
||||||
|
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), sizeof(SColIdx) * kvRowNCols(row));
|
||||||
|
memcpy(kvRowValues(nrow), kvRowValues(row), POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row)));
|
||||||
|
int colIdx = kvRowNCols(nrow) - 1;
|
||||||
|
kvRowColIdxAt(nrow, colIdx)->colId = colId;
|
||||||
|
kvRowColIdxAt(nrow, colIdx)->offset = POINTER_DISTANCE(kvRowEnd(row), kvRowValues(row));
|
||||||
|
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx)), value, diff);
|
||||||
|
} else {
|
||||||
|
int16_t tlen = POINTER_DISTANCE(ptr, kvRowColIdx(row));
|
||||||
|
if (tlen > 0) {
|
||||||
|
memcpy(kvRowColIdx(nrow), kvRowColIdx(row), tlen);
|
||||||
|
memcpy(kvRowValues(nrow), kvRowValues(row), ((SColIdx *)ptr)->offset);
|
||||||
|
}
|
||||||
|
|
||||||
// // Copy the columns before the col
|
int colIdx = tlen / sizeof(SColIdx);
|
||||||
// if (POINTER_DISTANCE(ptr, kvDataRowColIdx(row)) > 0) {
|
kvRowColIdxAt(nrow, colIdx)->colId = colId;
|
||||||
// memcpy(kvDataRowColIdx(nrow), kvDataRowColIdx(row), POINTER_DISTANCE(ptr, kvDataRowColIdx(row)));
|
kvRowColIdxAt(nrow, colIdx)->offset = ((SColIdx *)ptr)->offset;
|
||||||
// memcpy(kvDataRowValues(nrow), kvDataRowValues(row), ((SColIdx *)ptr)->offset); // TODO: here is not correct
|
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx)), value, diff);
|
||||||
// }
|
|
||||||
|
|
||||||
// // Set the new col value
|
for (int i = colIdx; i < kvRowNCols(row); i++) {
|
||||||
// pColIdx = (SColIdx *)POINTER_SHIFT(nrow, POINTER_DISTANCE(ptr, row));
|
kvRowColIdxAt(nrow, i + 1)->colId = kvRowColIdxAt(row, i)->colId;
|
||||||
// pColIdx->colId = colId;
|
kvRowColIdxAt(nrow, i + 1)->offset = kvRowColIdxAt(row, i)->offset + diff;
|
||||||
// pColIdx->offset = ((SColIdx *)ptr)->offset; // TODO: here is not correct
|
}
|
||||||
|
memcpy(kvRowColVal(nrow, kvRowColIdxAt(nrow, colIdx + 1)), kvRowColVal(row, kvRowColIdxAt(row, colIdx)),
|
||||||
|
POINTER_DISTANCE(kvRowEnd(row), kvRowColVal(row, kvRowColIdxAt(row, colIdx)))
|
||||||
|
|
||||||
// if (IS_VAR_DATA_TYPE(type)) {
|
);
|
||||||
// memcpy(POINTER_SHIFT(kvDataRowValues(nrow), pColIdx->offset), value, varDataLen(value));
|
}
|
||||||
// } else {
|
|
||||||
// memcpy(POINTER_SHIFT(kvDataRowValues(nrow), pColIdx->offset), value, TYPE_BYTES[type]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Copy the columns after the col
|
*orow = nrow;
|
||||||
// if (POINTER_DISTANCE(kvDataRowValues(row), ptr) > 0) {
|
free(row);
|
||||||
// // TODO: memcpy();
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
ASSERT(((SColIdx *)ptr)->colId == colId);
|
ASSERT(((SColIdx *)ptr)->colId == colId);
|
||||||
if (IS_VAR_DATA_TYPE(type)) {
|
if (IS_VAR_DATA_TYPE(type)) {
|
||||||
|
@ -525,9 +534,7 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
||||||
int16_t nlen = kvRowLen(row) + diff;
|
int16_t nlen = kvRowLen(row) + diff;
|
||||||
ASSERT(nlen > 0);
|
ASSERT(nlen > 0);
|
||||||
nrow = malloc(nlen);
|
nrow = malloc(nlen);
|
||||||
if (nrow == NULL) {
|
if (nrow == NULL) return -1;
|
||||||
// TODO: deal with the error here
|
|
||||||
}
|
|
||||||
|
|
||||||
kvRowSetLen(nrow, nlen);
|
kvRowSetLen(nrow, nlen);
|
||||||
kvRowSetNCols(nrow, kvRowNCols(row));
|
kvRowSetNCols(nrow, kvRowNCols(row));
|
||||||
|
@ -558,8 +565,8 @@ int tdSetKVRowDataOfCol(SKVRow *orow, int16_t colId, int8_t type, void *value) {
|
||||||
POINTER_DISTANCE(kvRowEnd(row), kvRowColVal(row, kvRowColIdxAt(row, colIdx + 1))));
|
POINTER_DISTANCE(kvRowEnd(row), kvRowColVal(row, kvRowColIdxAt(row, colIdx + 1))));
|
||||||
}
|
}
|
||||||
|
|
||||||
free(row);
|
|
||||||
*orow = nrow;
|
*orow = nrow;
|
||||||
|
free(row);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memcpy(kvRowColVal(row, (SColIdx *)ptr), value, TYPE_BYTES[type]);
|
memcpy(kvRowColVal(row, (SColIdx *)ptr), value, TYPE_BYTES[type]);
|
||||||
|
|
Loading…
Reference in New Issue