Move backend dictionary and state to MdbHandle

Attempt to make the backend handling logic thread-safe. This removes the
last MDB_CONSTRUCTOR. Also get rid of some JAVA junk and make the
remaining static variables in backend.c constant. Finally remove some
obsolete fields from MdbFile.
This commit is contained in:
Evan Miller
2020-08-20 07:58:53 -04:00
parent c2087a95cc
commit 588663675e
3 changed files with 56 additions and 72 deletions

View File

@@ -56,10 +56,9 @@
#define MDB_MEMO_OVERHEAD 12
#define MDB_BIND_SIZE 16384
// Theses 2 atrbutes are not supported by all compilers:
// This attribute is not supported by all compilers:
// M$VC see http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc
#define MDB_DEPRECATED(type, funcname) type __attribute__((deprecated)) funcname
#define MDB_CONSTRUCTOR(funcname) void __attribute__((constructor)) funcname(void)
enum {
MDB_PAGE_DB = 0,
@@ -207,9 +206,9 @@ typedef struct {
typedef struct {
guint32 capabilities; /* see MDB_SHEXP_* */
MdbBackendType *types_table;
MdbBackendType *type_shortdate;
MdbBackendType *type_autonum;
const MdbBackendType *types_table;
const MdbBackendType *type_shortdate;
const MdbBackendType *type_autonum;
const char *short_now;
const char *long_now;
const char *charset_statement;
@@ -232,8 +231,6 @@ typedef struct {
guint32 jet_version;
guint32 db_key;
char db_passwd[14];
MdbBackend *default_backend;
char *backend_name;
MdbStatistics *stats;
/* free map */
int map_sz;
@@ -275,11 +272,13 @@ typedef struct {
GPtrArray *catalog;
MdbBackend *default_backend;
char *backend_name;
int backend_is_init;
MdbFormatConstants *fmt;
MdbStatistics *stats;
char date_fmt[64];
const char *boolean_false_value;
const char *boolean_true_value;
GHashTable *backends;
#ifdef HAVE_ICONV
iconv_t iconv_in;
iconv_t iconv_out;
@@ -520,12 +519,12 @@ void mdb_buffer_dump(const void *buf, off_t start, size_t len);
/* backend.c */
MDB_DEPRECATED(char*, mdb_get_coltype_string(MdbBackend *backend, int col_type));
MDB_DEPRECATED(int, mdb_coltype_takes_length(MdbBackend *backend, int col_type));
void mdb_init_backends(MdbHandle *mdb);
void mdb_remove_backends(MdbHandle *mdb);
const MdbBackendType* mdb_get_colbacktype(const MdbColumn *col);
const char* mdb_get_colbacktype_string(const MdbColumn *col);
int mdb_colbacktype_takes_length(const MdbColumn *col);
MDB_DEPRECATED(void, mdb_init_backends(void));
void mdb_register_backend(char *backend_name, guint32 capabilities, MdbBackendType *backend_type, MdbBackendType *type_shortdate, MdbBackendType *type_autonum, const char *short_now, const char *long_now, const char *charset_statement, const char *drop_statement, const char *constaint_not_empty_statement, const char *column_comment_statement, const char *table_comment_statement, gchar* (*quote_schema_name)(const gchar*, const gchar*));
MDB_DEPRECATED(void, mdb_remove_backends(void));
void mdb_register_backend(MdbHandle *mdb, char *backend_name, guint32 capabilities, const MdbBackendType *backend_type, const MdbBackendType *type_shortdate, const MdbBackendType *type_autonum, const char *short_now, const char *long_now, const char *charset_statement, const char *drop_statement, const char *constaint_not_empty_statement, const char *column_comment_statement, const char *table_comment_statement, gchar* (*quote_schema_name)(const gchar*, const gchar*));
int mdb_set_default_backend(MdbHandle *mdb, const char *backend_name);
void mdb_print_schema(MdbHandle *mdb, FILE *outfile, char *tabname, char *dbnamespace, guint32 export_options);