mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
lots of small fixes (see Changelog)
This commit is contained in:
@@ -1073,7 +1073,7 @@ char *mdb_col_to_string(MdbHandle *mdb, unsigned char *buf, int start, int datat
|
||||
return text;
|
||||
break;
|
||||
case MDB_SDATETIME:
|
||||
td = mdb_get_double(mdb, start);
|
||||
td = mdb_get_double(mdb->pg_buf, start);
|
||||
if (td > 1) {
|
||||
t = (long int)((td - 25569.0) * 86400.0);
|
||||
} else {
|
||||
|
||||
@@ -571,6 +571,7 @@ mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32
|
||||
int passed = 0;
|
||||
int idx_sz;
|
||||
int idx_start = 0;
|
||||
MdbColumn *col;
|
||||
|
||||
ipg = mdb_index_read_bottom_pg(mdb, idx, chain);
|
||||
|
||||
@@ -608,8 +609,10 @@ mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32
|
||||
*row = mdb->pg_buf[ipg->offset + ipg->len - 1];
|
||||
*pg = mdb_pg_get_int24_msb(mdb, ipg->offset + ipg->len - 4);
|
||||
//printf("row = %d pg = %lu ipg->pg = %lu offset = %lu len = %d\n", *row, *pg, ipg->pg, ipg->offset, ipg->len);
|
||||
idx_sz = 4;
|
||||
if (ipg->len - 4 < idx_sz) {
|
||||
col=g_ptr_array_index(idx->table->columns,idx->key_col_num[0]-1);
|
||||
idx_sz = mdb_col_fixed_size(col);
|
||||
/* handle compressed indexes, single key indexes only? */
|
||||
if (idx->num_keys==1 && idx_sz>0 && ipg->len - 4 < idx_sz) {
|
||||
//printf("short index found\n");
|
||||
//buffer_dump(ipg->cache_value, 0, idx_sz);
|
||||
memcpy(&ipg->cache_value[idx_sz - (ipg->len - 4)], &mdb->pg_buf[ipg->offset], ipg->len);
|
||||
|
||||
@@ -215,7 +215,7 @@ mdb_crack_row3(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
||||
int byte_num, bit_num;
|
||||
int num_of_jumps = 0, jumps_used = 0;
|
||||
int eod, len; /* end of data */
|
||||
int row_pos;
|
||||
int row_pos, col_ptr;
|
||||
|
||||
if (mdb_get_option(MDB_DEBUG_ROW)) {
|
||||
buffer_dump(mdb->pg_buf, row_start, row_end+1);
|
||||
@@ -283,7 +283,7 @@ mdb_crack_row3(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
||||
}
|
||||
|
||||
/* if fixed columns add up to more than 256, we need a jump */
|
||||
int col_ptr = row_end - bitmask_sz - num_of_jumps - 1;
|
||||
col_ptr = row_end - bitmask_sz - num_of_jumps - 1;
|
||||
if (col_start >= 256) {
|
||||
num_of_jumps++;
|
||||
jumps_used++;
|
||||
@@ -406,8 +406,10 @@ mdb_pack_row4(MdbTableDef *table, unsigned char *row_buffer, int num_fields, Mdb
|
||||
if (!fields[i].is_fixed) {
|
||||
var_cols++;
|
||||
fields[i].offset = pos;
|
||||
memcpy(&row_buffer[pos], fields[i].value, fields[i].siz);
|
||||
pos += fields[i].siz;
|
||||
if (! fields[i].is_null) {
|
||||
memcpy(&row_buffer[pos], fields[i].value, fields[i].siz);
|
||||
pos += fields[i].siz;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* EOD */
|
||||
@@ -451,8 +453,10 @@ mdb_pack_row3(MdbTableDef *table, unsigned char *row_buffer, int num_fields, Mdb
|
||||
if (!fields[i].is_fixed) {
|
||||
var_cols++;
|
||||
fields[i].offset = pos;
|
||||
memcpy(&row_buffer[pos], fields[i].value, fields[i].siz);
|
||||
pos += fields[i].siz;
|
||||
if (! fields[i].is_null) {
|
||||
memcpy(&row_buffer[pos], fields[i].value, fields[i].siz);
|
||||
pos += fields[i].siz;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* EOD */
|
||||
|
||||
Reference in New Issue
Block a user