mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-20 02:57:55 +08:00
handle any object type in mdb-prop
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
Sun May 2 06:31:17 EDT 2004 Brian Bruns <brian@bruns.com>
|
Sun May 2 06:31:17 EDT 2004 Brian Bruns <brian@bruns.com>
|
||||||
* src/libmdb/mdb-tables.c: Add -t flag to specify object type
|
* src/util/mdb-tables.c: Add -t flag to specify object type
|
||||||
|
* src/util/mdb-props.c: Handle any object type, not just tables
|
||||||
|
|
||||||
Sat May 1 00:02:09 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
|
Sat May 1 00:02:09 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
|
||||||
* doc/reference/libmdb/libmdb-sections.txt:
|
* doc/reference/libmdb/libmdb-sections.txt:
|
||||||
|
@@ -26,7 +26,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static int mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg);
|
//static int mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg);
|
||||||
|
static int mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbField *idx_fields);
|
||||||
|
|
||||||
void
|
void
|
||||||
_mdb_put_int16(unsigned char *buf, guint32 offset, guint32 value)
|
_mdb_put_int16(unsigned char *buf, guint32 offset, guint32 value)
|
||||||
@@ -615,12 +616,15 @@ mdb_update_index(MdbTableDef *table, MdbIndex *idx, int num_fields, MdbField *fi
|
|||||||
int idx_xref[16];
|
int idx_xref[16];
|
||||||
int i, j;
|
int i, j;
|
||||||
MdbIndexChain *chain;
|
MdbIndexChain *chain;
|
||||||
|
MdbField idx_fields[10];
|
||||||
|
|
||||||
for (i = 0; i < idx->num_keys; i++) {
|
for (i = 0; i < idx->num_keys; i++) {
|
||||||
for (j = 0; j < num_fields; j++) {
|
for (j = 0; j < num_fields; j++) {
|
||||||
// key_col_num is 1 based, can't remember why though
|
// key_col_num is 1 based, can't remember why though
|
||||||
if (fields[j].colnum == idx->key_col_num[i]-1)
|
if (fields[j].colnum == idx->key_col_num[i]-1) {
|
||||||
idx_xref[i] = j;
|
idx_xref[i] = j;
|
||||||
|
idx_fields[i] = fields[j];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i = 0; i < idx->num_keys; i++) {
|
for (i = 0; i < idx->num_keys; i++) {
|
||||||
@@ -639,7 +643,8 @@ mdb_update_index(MdbTableDef *table, MdbIndex *idx, int num_fields, MdbField *fi
|
|||||||
mdb_index_find_row(mdb, idx, chain, pgnum, rownum);
|
mdb_index_find_row(mdb, idx, chain, pgnum, rownum);
|
||||||
printf("chain depth = %d\n", chain->cur_depth);
|
printf("chain depth = %d\n", chain->cur_depth);
|
||||||
printf("pg = %lu\n", chain->pages[chain->cur_depth-1].pg);
|
printf("pg = %lu\n", chain->pages[chain->cur_depth-1].pg);
|
||||||
mdb_copy_index_pg(table, idx, &chain->pages[chain->cur_depth-1]);
|
//mdb_copy_index_pg(table, idx, &chain->pages[chain->cur_depth-1]);
|
||||||
|
mdb_add_row_to_leaf_pg(table, idx, &chain->pages[chain->cur_depth-1], idx_fields);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -859,9 +864,12 @@ int i, pos;
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbRow row, guint32 pgnum, guint16 rownum) */
|
static int
|
||||||
|
mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbField *idx_fields)
|
||||||
|
/*, guint32 pgnum, guint16 rownum)
|
||||||
static int
|
static int
|
||||||
mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
MdbCatalogEntry *entry = table->entry;
|
MdbCatalogEntry *entry = table->entry;
|
||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
@@ -894,10 +902,12 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
|||||||
|
|
||||||
while (mdb_index_find_next_on_page(mdb, ipg)) {
|
while (mdb_index_find_next_on_page(mdb, ipg)) {
|
||||||
|
|
||||||
|
/* check for compressed indexes. */
|
||||||
if (ipg->len < col->col_size + 1) {
|
if (ipg->len < col->col_size + 1) {
|
||||||
fprintf(stderr,"compressed indexes not yet supported, aborting\n");
|
fprintf(stderr,"compressed indexes not yet supported, aborting\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
pg = mdb_pg_get_int24_msb(mdb, ipg->offset + ipg->len - 4);
|
pg = mdb_pg_get_int24_msb(mdb, ipg->offset + ipg->len - 4);
|
||||||
row = mdb->pg_buf[ipg->offset + ipg->len - 1];
|
row = mdb->pg_buf[ipg->offset + ipg->len - 1];
|
||||||
iflag = mdb->pg_buf[ipg->offset];
|
iflag = mdb->pg_buf[ipg->offset];
|
||||||
|
@@ -57,7 +57,7 @@ main(int argc, char **argv)
|
|||||||
if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) {
|
if (!(mdb = mdb_open(argv[optind], MDB_NOFLAGS))) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
mdb_read_catalog(mdb, MDB_TABLE);
|
mdb_read_catalog(mdb, MDB_ANY);
|
||||||
|
|
||||||
for (i=0;i<mdb->num_catalog;i++) {
|
for (i=0;i<mdb->num_catalog;i++) {
|
||||||
entry = g_ptr_array_index(mdb->catalog,i);
|
entry = g_ptr_array_index(mdb->catalog,i);
|
||||||
|
@@ -108,7 +108,6 @@ main (int argc, char **argv)
|
|||||||
fprintf (stderr, "Valid types are: %s\n",valid_types());
|
fprintf (stderr, "Valid types are: %s\n",valid_types());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("objtype is %d\n", objtype);
|
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
delimiter = (char *) malloc(strlen(optarg)+1);
|
delimiter = (char *) malloc(strlen(optarg)+1);
|
||||||
|
Reference in New Issue
Block a user