~ubuntu-branches/ubuntu/oneiric/mdbtools/oneiric

« back to all changes in this revision

Viewing changes to .pc/001-previous-debian-diff.patch/include/mdbtools.h

  • Committer: Bazaar Package Importer
  • Author(s): Tim Retout
  • Date: 2010-04-18 03:33:23 UTC
  • Revision ID: james.westby@ubuntu.com-20100418033323-j8u1j2b1swymal9j
Tags: 0.5.99.0.6pre1.0.20051109-7
* debian/control:
  + Update maintainer address.
  + Bump Standards-Version to 3.8.4. (No changes needed.)
  + Remove quilt from Build-Depends.
* debian/rules: Remove '--with quilt' dh option.
* debian/source/format: Switch to 3.0 (quilt).
* debian/patches/035-filelocals.patch: Refresh patch.
* debian/patches/070-unixodbc-api.patch: Update for changes to unixodbc
  API. (Closes: #577353)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* MDB Tools - A library for reading MS Access database files
 
2
 * Copyright (C) 2000 Brian Bruns
 
3
 *
 
4
 * This library is free software; you can redistribute it and/or
 
5
 * modify it under the terms of the GNU Library General Public
 
6
 * License as published by the Free Software Foundation; either
 
7
 * version 2 of the License, or (at your option) any later version.
 
8
 *
 
9
 * This library is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
 * Library General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU Library General Public
 
15
 * License along with this library; if not, write to the
 
16
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 
17
 * Boston, MA 02111-1307, USA.
 
18
 */
 
19
#ifndef _mdbtools_h_
 
20
#define _mdbtools_h_
 
21
 
 
22
#ifdef __cplusplus
 
23
  extern "C" {
 
24
#endif
 
25
#include <stdio.h>
 
26
#include <stdlib.h>
 
27
#include <stdarg.h>
 
28
#include <sys/types.h>
 
29
#include <sys/stat.h>
 
30
#include <fcntl.h>
 
31
#include <unistd.h>
 
32
#include <ctype.h>
 
33
#include <string.h>
 
34
#include <glib.h>
 
35
#include <config.h>
 
36
 
 
37
#ifdef HAVE_ICONV
 
38
#include <iconv.h>
 
39
#endif
 
40
 
 
41
#define MDB_DEBUG 0
 
42
 
 
43
#define MDB_PGSIZE 4096
 
44
#define MDB_MAX_OBJ_NAME 256
 
45
#define MDB_MAX_COLS 256
 
46
#define MDB_MAX_IDX_COLS 10
 
47
#define MDB_CATALOG_PG 18
 
48
#define MDB_MEMO_OVERHEAD 12
 
49
#define MDB_BIND_SIZE 16384
 
50
 
 
51
enum {
 
52
        MDB_PAGE_DB = 0,
 
53
        MDB_PAGE_DATA,
 
54
        MDB_PAGE_TABLE,
 
55
        MDB_PAGE_INDEX,
 
56
        MDB_PAGE_LEAF,
 
57
        MDB_PAGE_MAP
 
58
};
 
59
enum {
 
60
        MDB_VER_JET3 = 0,
 
61
        MDB_VER_JET4 = 1
 
62
};
 
63
enum {
 
64
        MDB_FORM = 0,
 
65
        MDB_TABLE,
 
66
        MDB_MACRO,
 
67
        MDB_SYSTEM_TABLE,
 
68
        MDB_REPORT,
 
69
        MDB_QUERY,
 
70
        MDB_LINKED_TABLE,
 
71
        MDB_MODULE,
 
72
        MDB_RELATIONSHIP,
 
73
        MDB_UNKNOWN_09,
 
74
        MDB_UNKNOWN_0A,
 
75
        MDB_DATABASE_PROPERTY,
 
76
        MDB_ANY = -1
 
77
};
 
78
enum {
 
79
        MDB_BOOL = 0x01,
 
80
        MDB_BYTE = 0x02,
 
81
        MDB_INT = 0x03,
 
82
        MDB_LONGINT = 0x04,
 
83
        MDB_MONEY = 0x05,
 
84
        MDB_FLOAT = 0x06,
 
85
        MDB_DOUBLE = 0x07,
 
86
        MDB_SDATETIME = 0x08,
 
87
        MDB_TEXT = 0x0a,
 
88
        MDB_OLE = 0x0b,
 
89
        MDB_MEMO = 0x0c,
 
90
        MDB_REPID = 0x0f,
 
91
        MDB_NUMERIC = 0x10
 
92
};
 
93
 
 
94
/* SARG operators */
 
95
enum {
 
96
        MDB_OR = 1,
 
97
        MDB_AND,
 
98
        MDB_NOT,
 
99
        MDB_EQUAL,
 
100
        MDB_GT,
 
101
        MDB_LT,
 
102
        MDB_GTEQ,
 
103
        MDB_LTEQ,
 
104
        MDB_LIKE,
 
105
        MDB_ISNULL,
 
106
        MDB_NOTNULL
 
107
};
 
108
 
 
109
typedef enum {
 
110
        MDB_TABLE_SCAN,
 
111
        MDB_LEAF_SCAN,
 
112
        MDB_INDEX_SCAN
 
113
} MdbStrategy;
 
114
 
 
115
typedef enum {
 
116
        MDB_NOFLAGS = 0x00,
 
117
        MDB_WRITABLE = 0x01
 
118
} MdbFileFlags;
 
119
 
 
120
enum {
 
121
        MDB_DEBUG_LIKE = 0x0001,
 
122
        MDB_DEBUG_WRITE = 0x0002,
 
123
        MDB_DEBUG_USAGE = 0x0004,
 
124
        MDB_DEBUG_OLE = 0x0008,
 
125
        MDB_DEBUG_ROW = 0x0010,
 
126
        MDB_USE_INDEX = 0x0020,
 
127
        MDB_NO_MEMO = 0x0040 /* don't follow memo fields */
 
128
};
 
129
 
 
130
#define mdb_is_logical_op(x) (x == MDB_OR || \
 
131
                                x == MDB_AND || \
 
132
                                x == MDB_NOT )
 
133
 
 
134
#define mdb_is_relational_op(x) (x == MDB_EQUAL || \
 
135
                                x == MDB_GT || \
 
136
                                x == MDB_LT || \
 
137
                                x == MDB_GTEQ || \
 
138
                                x == MDB_LTEQ || \
 
139
                                x == MDB_LIKE || \
 
140
                                x == MDB_ISNULL || \
 
141
                                x == MDB_NOTNULL )
 
142
 
 
143
enum {
 
144
        MDB_ASC,
 
145
        MDB_DESC
 
146
};
 
147
 
 
148
enum {
 
149
        MDB_IDX_UNIQUE = 0x01,
 
150
        MDB_IDX_IGNORENULLS = 0x02,
 
151
        MDB_IDX_REQUIRED = 0x08 
 
152
};
 
153
 
 
154
#define IS_JET4(mdb) (mdb->f->jet_version==MDB_VER_JET4)
 
155
#define IS_JET3(mdb) (mdb->f->jet_version==MDB_VER_JET3)
 
156
 
 
157
/* hash to store registered backends */
 
158
extern GHashTable       *mdb_backends;
 
159
 
 
160
/* forward declarations */
 
161
typedef struct mdbindex MdbIndex;
 
162
typedef struct mdbsargtree MdbSargNode;
 
163
 
 
164
typedef struct {
 
165
        char *name;
 
166
        unsigned char needs_length; /* or precision */
 
167
        unsigned char needs_scale;
 
168
        unsigned char needs_quotes;
 
169
} MdbBackendType;
 
170
                
 
171
typedef struct {
 
172
         MdbBackendType *types_table;
 
173
} MdbBackend;
 
174
 
 
175
typedef struct {
 
176
        gboolean collect;
 
177
        unsigned long pg_reads;
 
178
} MdbStatistics;
 
179
 
 
180
typedef struct {
 
181
        int           fd;
 
182
        gboolean      writable;
 
183
        char          *filename;
 
184
        guint32         jet_version;
 
185
        guint32         db_key;
 
186
        char            db_passwd[14];
 
187
        MdbBackend      *default_backend;
 
188
        char                    *backend_name;
 
189
        MdbStatistics   *stats;
 
190
        /* free map */
 
191
        int  map_sz;
 
192
        unsigned char *free_map;
 
193
        /* reference count */
 
194
        int refs;
 
195
} MdbFile; 
 
196
 
 
197
/* offset to row count on data pages...version dependant */
 
198
typedef struct {
 
199
        ssize_t         pg_size;
 
200
        guint16         row_count_offset; 
 
201
        guint16         tab_num_rows_offset;
 
202
        guint16         tab_num_cols_offset;
 
203
        guint16         tab_num_idxs_offset;
 
204
        guint16         tab_num_ridxs_offset;
 
205
        guint16         tab_usage_map_offset;
 
206
        guint16         tab_first_dpg_offset;
 
207
        guint16         tab_cols_start_offset;
 
208
        guint16         tab_ridx_entry_size;
 
209
        guint16         col_fixed_offset;
 
210
        guint16         col_size_offset;
 
211
        guint16         col_num_offset;
 
212
        guint16         tab_col_entry_size;
 
213
        guint16         tab_free_map_offset;
 
214
        guint16         tab_col_offset_var;
 
215
        guint16         tab_col_offset_fixed;
 
216
        guint16         tab_row_col_num_offset;
 
217
} MdbFormatConstants; 
 
218
 
 
219
typedef struct {
 
220
        MdbFile       *f;
 
221
        guint32       cur_pg;
 
222
        guint16       row_num;
 
223
        unsigned int  cur_pos;
 
224
        unsigned char pg_buf[MDB_PGSIZE];
 
225
        unsigned char alt_pg_buf[MDB_PGSIZE];
 
226
        unsigned int  num_catalog;
 
227
        GPtrArray       *catalog;
 
228
        MdbBackend      *default_backend;
 
229
        char            *backend_name;
 
230
        MdbFormatConstants *fmt;
 
231
        MdbStatistics *stats;
 
232
#ifdef HAVE_ICONV
 
233
        iconv_t iconv_in;
 
234
        iconv_t iconv_out;
 
235
#endif
 
236
} MdbHandle; 
 
237
 
 
238
typedef struct {
 
239
        MdbHandle       *mdb;
 
240
        char           object_name[MDB_MAX_OBJ_NAME+1];
 
241
        int            object_type;
 
242
        unsigned long  table_pg; /* misnomer since object may not be a table */
 
243
        unsigned long  kkd_pg;
 
244
        unsigned int   kkd_rowid;
 
245
        int                     num_props;
 
246
        GArray          *props;
 
247
        GArray          *columns;
 
248
        int             flags;
 
249
} MdbCatalogEntry;
 
250
 
 
251
typedef struct {
 
252
        gchar *name;
 
253
        GHashTable      *hash;
 
254
} MdbProperties;
 
255
 
 
256
typedef union {
 
257
        int     i;
 
258
        double  d;
 
259
        char    s[256];
 
260
} MdbAny;
 
261
 
 
262
typedef struct {
 
263
        char            name[MDB_MAX_OBJ_NAME+1];
 
264
        int             col_type;
 
265
        int             col_size;
 
266
        void    *bind_ptr;
 
267
        int             *len_ptr;
 
268
        GHashTable      *properties;
 
269
        unsigned int    num_sargs;
 
270
        GPtrArray       *sargs;
 
271
        GPtrArray       *idx_sarg_cache;
 
272
        unsigned char   is_fixed;
 
273
        int             query_order;
 
274
        /* col_num is the current column order, 
 
275
         * does not include deletes */
 
276
        int             col_num;        
 
277
        int             cur_value_start;
 
278
        int             cur_value_len;
 
279
        /* MEMO/OLE readers */
 
280
        guint32         cur_blob_pg_row;
 
281
        int             chunk_size;
 
282
        /* numerics only */
 
283
        int             col_prec;
 
284
        int             col_scale;
 
285
        MdbProperties   *props;
 
286
        /* info needed for handling deleted/added columns */
 
287
        int             fixed_offset;
 
288
        unsigned int    var_col_num;
 
289
        /* row_col_num is the row column number order, 
 
290
         * including deleted columns */
 
291
        int             row_col_num;
 
292
} MdbColumn;
 
293
 
 
294
struct mdbsargtree {
 
295
        int       op;
 
296
        MdbColumn *col;
 
297
        MdbAny    value;
 
298
        void      *parent;
 
299
        MdbSargNode *left;
 
300
        MdbSargNode *right;
 
301
};
 
302
 
 
303
typedef struct {
 
304
        guint32 pg;
 
305
        int start_pos;
 
306
        int offset;
 
307
        int len;
 
308
        guint16 idx_starts[2000];       
 
309
        unsigned char cache_value[256];
 
310
} MdbIndexPage;
 
311
 
 
312
typedef int (*MdbSargTreeFunc)(MdbSargNode *, gpointer data);
 
313
 
 
314
#define MDB_MAX_INDEX_DEPTH 10
 
315
 
 
316
typedef struct {
 
317
        int cur_depth;
 
318
        guint32 last_leaf_found;
 
319
        int clean_up_mode;
 
320
        MdbIndexPage pages[MDB_MAX_INDEX_DEPTH];
 
321
} MdbIndexChain;
 
322
 
 
323
typedef struct {
 
324
        MdbCatalogEntry *entry;
 
325
        char    name[MDB_MAX_OBJ_NAME+1];
 
326
        unsigned int    num_cols;
 
327
        GPtrArray       *columns;
 
328
        unsigned int    num_rows;
 
329
        int     index_start;
 
330
        unsigned int    num_real_idxs;
 
331
        unsigned int    num_idxs;
 
332
        GPtrArray       *indices;
 
333
        guint32 first_data_pg;
 
334
        guint32 cur_pg_num;
 
335
        guint32 cur_phys_pg;
 
336
        unsigned int    cur_row;
 
337
        int  noskip_del;  /* don't skip deleted rows */
 
338
        /* object allocation map */
 
339
        guint32  map_base_pg;
 
340
        unsigned int  map_sz;
 
341
        unsigned char *usage_map;
 
342
        /* pages with free space left */
 
343
        guint32  freemap_base_pg;
 
344
        unsigned int  freemap_sz;
 
345
        unsigned char *free_usage_map;
 
346
        /* query planner */
 
347
        MdbSargNode *sarg_tree;
 
348
        MdbStrategy strategy;
 
349
        MdbIndex *scan_idx;
 
350
        MdbHandle *mdbidx;
 
351
        MdbIndexChain *chain;
 
352
        MdbProperties   *props;
 
353
        unsigned int num_var_cols;  /* to know if row has variable columns */
 
354
        /* temp table */
 
355
        unsigned int  is_temp_table;
 
356
        GPtrArray     *temp_table_pages;
 
357
} MdbTableDef;
 
358
 
 
359
struct mdbindex {
 
360
        int             index_num;
 
361
        char            name[MDB_MAX_OBJ_NAME+1];
 
362
        unsigned char   index_type;
 
363
        guint32         first_pg;
 
364
        int             num_rows;  /* number rows in index */
 
365
        unsigned int    num_keys;
 
366
        short   key_col_num[MDB_MAX_IDX_COLS];
 
367
        unsigned char   key_col_order[MDB_MAX_IDX_COLS];
 
368
        unsigned char   flags;
 
369
        MdbTableDef     *table;
 
370
};
 
371
 
 
372
typedef struct {
 
373
        char            name[MDB_MAX_OBJ_NAME+1];
 
374
} MdbColumnProp;
 
375
 
 
376
typedef struct {
 
377
        void *value;
 
378
        int siz;
 
379
        int start;
 
380
        unsigned char is_null;
 
381
        unsigned char is_fixed;
 
382
        int colnum;
 
383
        int offset;
 
384
} MdbField;
 
385
 
 
386
typedef struct {
 
387
        int     op;
 
388
        MdbAny  value;
 
389
} MdbSarg;
 
390
 
 
391
/* mem.c */
 
392
extern void mdb_init();
 
393
extern void mdb_exit();
 
394
 
 
395
/* file.c */
 
396
extern ssize_t mdb_read_pg(MdbHandle *mdb, unsigned long pg);
 
397
extern ssize_t mdb_read_alt_pg(MdbHandle *mdb, unsigned long pg);
 
398
extern unsigned char mdb_get_byte(unsigned char *buf, int offset);
 
399
extern int    mdb_get_int16(unsigned char *buf, int offset);
 
400
extern gint32   mdb_get_int24(unsigned char *buf, int offset);
 
401
extern long   mdb_get_int32(unsigned char *buf, int offset);
 
402
extern float  mdb_get_single(unsigned char *buf, int offset);
 
403
extern double mdb_get_double(unsigned char *buf, int offset);
 
404
extern unsigned char mdb_pg_get_byte(MdbHandle *mdb, int offset);
 
405
extern int    mdb_pg_get_int16(MdbHandle *mdb, int offset);
 
406
extern gint32   mdb_pg_get_int24(MdbHandle *mdb, int offset);
 
407
extern long   mdb_pg_get_int32(MdbHandle *mdb, int offset);
 
408
extern float  mdb_pg_get_single(MdbHandle *mdb, int offset);
 
409
extern double mdb_pg_get_double(MdbHandle *mdb, int offset);
 
410
extern gint32 mdb_pg_get_int24_msb(MdbHandle *mdb, int offset);
 
411
extern MdbHandle *mdb_open(const char *filename, MdbFileFlags flags);
 
412
extern void mdb_close(MdbHandle *mdb);
 
413
extern MdbHandle *mdb_clone_handle(MdbHandle *mdb);
 
414
extern void mdb_swap_pgbuf(MdbHandle *mdb);
 
415
extern long _mdb_get_int32(unsigned char *buf, int offset);
 
416
 
 
417
/* catalog.c */
 
418
extern void mdb_free_catalog(MdbHandle *mdb);
 
419
extern GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type);
 
420
extern void mdb_dump_catalog(MdbHandle *mdb, int obj_type);
 
421
extern char *mdb_get_objtype_string(int obj_type);
 
422
 
 
423
/* table.c */
 
424
extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry);
 
425
extern void mdb_free_tabledef(MdbTableDef *table);
 
426
extern MdbTableDef *mdb_read_table(MdbCatalogEntry *entry);
 
427
extern MdbTableDef *mdb_read_table_by_name(MdbHandle *mdb, gchar *table_name, int obj_type);
 
428
extern void mdb_append_column(GPtrArray *columns, MdbColumn *in_col);
 
429
extern void mdb_free_columns(GPtrArray *columns);
 
430
extern GPtrArray *mdb_read_columns(MdbTableDef *table);
 
431
extern void mdb_table_dump(MdbCatalogEntry *entry);
 
432
extern guint16 read_pg_if_16(MdbHandle *mdb, int *cur_pos);
 
433
extern guint32 read_pg_if_32(MdbHandle *mdb, int *cur_pos);
 
434
extern int read_pg_if(MdbHandle *mdb, int *cur_pos, int offset);
 
435
extern guint16 read_pg_if_n(MdbHandle *mdb, unsigned char *buf, int *cur_pos, int len);
 
436
extern int mdb_is_user_table(MdbCatalogEntry *entry);
 
437
extern int mdb_is_system_table(MdbCatalogEntry *entry);
 
438
 
 
439
/* data.c */
 
440
extern int mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr);
 
441
extern void mdb_data_dump(MdbTableDef *table);
 
442
extern void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr, int *len_ptr);
 
443
extern int mdb_rewind_table(MdbTableDef *table);
 
444
extern int mdb_fetch_row(MdbTableDef *table);
 
445
extern int mdb_is_fixed_col(MdbColumn *col);
 
446
extern char *mdb_col_to_string(MdbHandle *mdb, unsigned char *buf, int start, int datatype, int size);
 
447
extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, char **buf, int *off, int *len);
 
448
extern int mdb_find_row(MdbHandle *mdb, int row, int *start, int *len);
 
449
extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
 
450
extern int mdb_col_fixed_size(MdbColumn *col);
 
451
extern int mdb_col_disp_size(MdbColumn *col);
 
452
extern int mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
 
453
extern int mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
 
454
extern void mdb_set_date_fmt(const char *);
 
455
extern int mdb_read_row(MdbTableDef *table, unsigned int row);
 
456
 
 
457
/* dump.c */
 
458
extern void buffer_dump(const unsigned char* buf, int start, int end);
 
459
 
 
460
/* backend.c */
 
461
extern char *mdb_get_coltype_string(MdbBackend *backend, int col_type);
 
462
extern int  mdb_coltype_takes_length(MdbBackend *backend, int col_type);
 
463
extern void mdb_init_backends();
 
464
extern void mdb_register_backend(MdbBackendType *backend, char *backend_name);
 
465
extern void mdb_remove_backends();
 
466
extern int  mdb_set_default_backend(MdbHandle *mdb, char *backend_name);
 
467
extern char *mdb_get_relationships(MdbHandle *mdb);
 
468
 
 
469
/* sargs.c */
 
470
extern int mdb_test_sargs(MdbTableDef *table, MdbField *fields, int num_fields);
 
471
extern int mdb_test_sarg(MdbHandle *mdb, MdbColumn *col, MdbSargNode *node, MdbField *field);
 
472
extern void mdb_sql_walk_tree(MdbSargNode *node, MdbSargTreeFunc func, gpointer data);
 
473
extern int mdb_find_indexable_sargs(MdbSargNode *node, gpointer data);
 
474
extern int mdb_add_sarg_by_name(MdbTableDef *table, char *colname, MdbSarg *in_sarg);
 
475
extern int mdb_test_string(MdbSargNode *node, char *s);
 
476
extern int mdb_test_int(MdbSargNode *node, gint32 i);
 
477
extern int mdb_add_sarg(MdbColumn *col, MdbSarg *in_sarg);
 
478
 
 
479
 
 
480
 
 
481
/* index.c */
 
482
extern GPtrArray *mdb_read_indices(MdbTableDef *table);
 
483
extern void mdb_index_dump(MdbTableDef *table, MdbIndex *idx);
 
484
extern void mdb_index_scan_free(MdbTableDef *table);
 
485
extern int mdb_index_find_next_on_page(MdbHandle *mdb, MdbIndexPage *ipg);
 
486
extern int mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32 *pg, guint16 *row);
 
487
extern void mdb_index_hash_text(guchar *text, guchar *hash);
 
488
extern void mdb_index_scan_init(MdbHandle *mdb, MdbTableDef *table);
 
489
extern int mdb_index_find_row(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32 pg, guint16 row);
 
490
extern void mdb_index_swap_n(unsigned char *src, int sz, unsigned char *dest);
 
491
extern void mdb_free_indices(GPtrArray *indices);
 
492
void mdb_index_page_reset(MdbIndexPage *ipg);
 
493
extern int mdb_index_pack_bitmap(MdbHandle *mdb, MdbIndexPage *ipg);
 
494
 
 
495
/* stats.c */
 
496
extern void mdb_stats_on(MdbHandle *mdb);
 
497
extern void mdb_stats_off(MdbHandle *mdb);
 
498
extern void mdb_dump_stats(MdbHandle *mdb);
 
499
 
 
500
/* like.c */
 
501
extern int mdb_like_cmp(char *s, char *r);
 
502
 
 
503
/* write.c */
 
504
extern int mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields);
 
505
extern guint16 mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size);
 
506
extern int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum);
 
507
extern int mdb_pack_row(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fields, MdbField *fields);
 
508
extern int mdb_replace_row(MdbTableDef *table, int row, unsigned char *new_row, int new_row_size);
 
509
extern int mdb_pg_get_freespace(MdbHandle *mdb);
 
510
extern int mdb_update_row(MdbTableDef *table);
 
511
extern unsigned char *mdb_new_data_pg(MdbCatalogEntry *entry);
 
512
 
 
513
/* map.c */
 
514
extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size);
 
515
extern guint32 mdb_map_find_next(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg);
 
516
 
 
517
/* props.c */
 
518
extern GPtrArray *mdb_read_props_list(gchar *kkd, int len);
 
519
extern void mdb_free_props(MdbProperties *props);
 
520
extern MdbProperties *mdb_read_props(MdbHandle *mdb, GPtrArray *names, gchar *kkd, int len);
 
521
 
 
522
/* worktable.c */
 
523
extern MdbTableDef *mdb_create_temp_table(MdbHandle *mdb, char *name);
 
524
extern void mdb_temp_table_add_col(MdbTableDef *table, MdbColumn *col);
 
525
extern void mdb_fill_temp_col(MdbColumn *tcol, char *col_name, int col_size, int col_type, int is_fixed);
 
526
extern void mdb_fill_temp_field(MdbField *field, void *value, int siz, int is_fixed, int is_null, int start, int column);
 
527
extern void mdb_temp_columns_end(MdbTableDef *table);
 
528
 
 
529
/* options.c */
 
530
extern int mdb_get_option(unsigned long optnum);
 
531
extern void mdb_debug(int klass, char *fmt, ...);
 
532
 
 
533
/* iconv.c */
 
534
extern int mdb_unicode2ascii(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigned char *dest, unsigned int dlen);
 
535
extern int mdb_ascii2unicode(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigned char *dest, unsigned int dlen);
 
536
extern void mdb_iconv_init(MdbHandle *mdb);
 
537
extern void mdb_iconv_close(MdbHandle *mdb);
 
538
 
 
539
#ifdef __cplusplus
 
540
  }
 
541
#endif
 
542
 
 
543
#endif /* _mdbtools_h_ */