Restore previous mdb_register_backend API

Add new mdbi_register_backend2 function with the features introduced in
PRs #321 and #322. The purpose is to prevent API/ABI breakage in the
1.0 release.
This commit is contained in:
Evan Miller
2021-08-19 06:23:16 -04:00
parent cfbca2af03
commit 7fb7660b09
3 changed files with 57 additions and 27 deletions

View File

@@ -35,6 +35,18 @@
#endif #endif
void mdbi_rc4(unsigned char *key, guint32 key_len, unsigned char *buf, guint32 buf_len); void mdbi_rc4(unsigned char *key, guint32 key_len, unsigned char *buf, guint32 buf_len);
MdbBackend *mdbi_register_backend2(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 *date_fmt, const char *shortdate_fmt,
const char *charset_statement, const char *create_table_statement,
const char *drop_statement, const char *constaint_not_empty_statement,
const char *column_comment_statement, const char *per_column_comment_statement,
const char *table_comment_statement, const char *per_table_comment_statement,
gchar* (*quote_schema_name)(const gchar*, const gchar*),
gchar* (*normalise_case)(const gchar*));
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -220,7 +220,6 @@ typedef struct {
const char *date_fmt; const char *date_fmt;
const char *shortdate_fmt; const char *shortdate_fmt;
const char *charset_statement; const char *charset_statement;
const char *create_table_statement;
const char *drop_statement; const char *drop_statement;
const char *constaint_not_empty_statement; const char *constaint_not_empty_statement;
const char *column_comment_statement; const char *column_comment_statement;
@@ -228,6 +227,7 @@ typedef struct {
const char *table_comment_statement; const char *table_comment_statement;
const char *per_table_comment_statement; const char *per_table_comment_statement;
gchar* (*quote_schema_name)(const gchar*, const gchar*); gchar* (*quote_schema_name)(const gchar*, const gchar*);
const char *create_table_statement;
gchar* (*normalise_case)(const gchar*); gchar* (*normalise_case)(const gchar*);
} MdbBackend; } MdbBackend;
@@ -559,12 +559,10 @@ void mdb_register_backend(MdbHandle *mdb, char *backend_name, guint32 capabiliti
const MdbBackendType *type_autonum, const MdbBackendType *type_autonum,
const char *short_now, const char *long_now, const char *short_now, const char *long_now,
const char *date_fmt, const char *shortdate_fmt, const char *date_fmt, const char *shortdate_fmt,
const char *charset_statement, const char *create_table_statement, const char *charset_statement, const char *drop_statement, const char *constaint_not_empty_statement,
const char *drop_statement, const char *constaint_not_empty_statement,
const char *column_comment_statement, const char *per_column_comment_statement, const char *column_comment_statement, const char *per_column_comment_statement,
const char *table_comment_statement, const char *per_table_comment_statement, const char *table_comment_statement, const char *per_table_comment_statement,
gchar* (*quote_schema_name)(const gchar*, const gchar*), gchar* (*quote_schema_name)(const gchar*, const gchar*));
gchar* (*normalise_case)(const gchar*));
int mdb_set_default_backend(MdbHandle *mdb, const char *backend_name); int mdb_set_default_backend(MdbHandle *mdb, const char *backend_name);
int mdb_print_schema(MdbHandle *mdb, FILE *outfile, char *tabname, char *dbnamespace, guint32 export_options); int mdb_print_schema(MdbHandle *mdb, FILE *outfile, char *tabname, char *dbnamespace, guint32 export_options);
void mdb_print_col(FILE *outfile, gchar *col_val, int quote_text, int col_type, int bin_len, char *quote_char, char *escape_char, int flags); void mdb_print_col(FILE *outfile, gchar *col_val, int quote_text, int col_type, int bin_len, char *quote_char, char *escape_char, int flags);

View File

@@ -21,6 +21,7 @@
*/ */
#include "mdbtools.h" #include "mdbtools.h"
#include "mdbprivate.h"
/* Access data types */ /* Access data types */
static const MdbBackendType mdb_access_types[] = { static const MdbBackendType mdb_access_types[] = {
@@ -334,15 +335,13 @@ void mdb_init_backends(MdbHandle *mdb)
NULL, NULL,
NULL, NULL,
"-- That file uses encoding %s\n", "-- That file uses encoding %s\n",
"CREATE TABLE %s\n",
"DROP TABLE %s;\n", "DROP TABLE %s;\n",
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
quote_schema_name_bracket_merge, quote_schema_name_bracket_merge);
passthrough_unchanged);
mdb_register_backend(mdb, "sybase", mdb_register_backend(mdb, "sybase",
MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_CST_NOTEMPTY|MDB_SHEXP_COMMENTS|MDB_SHEXP_DEFVALUES, MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_CST_NOTEMPTY|MDB_SHEXP_COMMENTS|MDB_SHEXP_DEFVALUES,
mdb_sybase_types, &mdb_sybase_shortdate_type, NULL, mdb_sybase_types, &mdb_sybase_shortdate_type, NULL,
@@ -350,15 +349,13 @@ void mdb_init_backends(MdbHandle *mdb)
NULL, NULL,
NULL, NULL,
"-- That file uses encoding %s\n", "-- That file uses encoding %s\n",
"CREATE TABLE %s\n",
"DROP TABLE %s;\n", "DROP TABLE %s;\n",
"ALTER TABLE %s ADD CHECK (%s <>'');\n", "ALTER TABLE %s ADD CHECK (%s <>'');\n",
"COMMENT ON COLUMN %s.%s IS %s;\n", "COMMENT ON COLUMN %s.%s IS %s;\n",
NULL, NULL,
"COMMENT ON TABLE %s IS %s;\n", "COMMENT ON TABLE %s IS %s;\n",
NULL, NULL,
quote_schema_name_dquote, quote_schema_name_dquote);
passthrough_unchanged);
mdb_register_backend(mdb, "oracle", mdb_register_backend(mdb, "oracle",
MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_COMMENTS|MDB_SHEXP_INDEXES|MDB_SHEXP_RELATIONS|MDB_SHEXP_DEFVALUES, MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_COMMENTS|MDB_SHEXP_INDEXES|MDB_SHEXP_RELATIONS|MDB_SHEXP_DEFVALUES,
mdb_oracle_types, &mdb_oracle_shortdate_type, NULL, mdb_oracle_types, &mdb_oracle_shortdate_type, NULL,
@@ -366,16 +363,14 @@ void mdb_init_backends(MdbHandle *mdb)
NULL, NULL,
NULL, NULL,
"-- That file uses encoding %s\n", "-- That file uses encoding %s\n",
"CREATE TABLE %s\n",
"DROP TABLE %s;\n", "DROP TABLE %s;\n",
NULL, NULL,
"COMMENT ON COLUMN %s.%s IS %s;\n", "COMMENT ON COLUMN %s.%s IS %s;\n",
NULL, NULL,
"COMMENT ON TABLE %s IS %s;\n", "COMMENT ON TABLE %s IS %s;\n",
NULL, NULL,
quote_schema_name_dquote, quote_schema_name_dquote);
passthrough_unchanged); mdbi_register_backend2(mdb, "postgres",
mdb_register_backend(mdb, "postgres",
MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_CST_NOTEMPTY|MDB_SHEXP_COMMENTS|MDB_SHEXP_INDEXES|MDB_SHEXP_RELATIONS|MDB_SHEXP_DEFVALUES|MDB_SHEXP_BULK_INSERT, MDB_SHEXP_DROPTABLE|MDB_SHEXP_CST_NOTNULL|MDB_SHEXP_CST_NOTEMPTY|MDB_SHEXP_COMMENTS|MDB_SHEXP_INDEXES|MDB_SHEXP_RELATIONS|MDB_SHEXP_DEFVALUES|MDB_SHEXP_BULK_INSERT,
mdb_postgres_types, &mdb_postgres_shortdate_type, &mdb_postgres_serial_type, mdb_postgres_types, &mdb_postgres_shortdate_type, &mdb_postgres_serial_type,
"current_date", "now()", "current_date", "now()",
@@ -398,15 +393,13 @@ void mdb_init_backends(MdbHandle *mdb)
"%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S",
"%Y-%m-%d", "%Y-%m-%d",
"-- That file uses encoding %s\n", "-- That file uses encoding %s\n",
"CREATE TABLE %s\n",
"DROP TABLE IF EXISTS %s;\n", "DROP TABLE IF EXISTS %s;\n",
"ALTER TABLE %s ADD CHECK (%s <>'');\n", "ALTER TABLE %s ADD CHECK (%s <>'');\n",
NULL, NULL,
"COMMENT %s", "COMMENT %s",
NULL, NULL,
"COMMENT %s", "COMMENT %s",
quote_schema_name_rquotes_merge, quote_schema_name_rquotes_merge);
passthrough_unchanged);
mdb_register_backend(mdb, "sqlite", mdb_register_backend(mdb, "sqlite",
MDB_SHEXP_DROPTABLE|MDB_SHEXP_DEFVALUES|MDB_SHEXP_BULK_INSERT, MDB_SHEXP_DROPTABLE|MDB_SHEXP_DEFVALUES|MDB_SHEXP_BULK_INSERT,
mdb_sqlite_types, NULL, NULL, mdb_sqlite_types, NULL, NULL,
@@ -414,32 +407,29 @@ void mdb_init_backends(MdbHandle *mdb)
"%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S",
"%Y-%m-%d", "%Y-%m-%d",
"-- That file uses encoding %s\n", "-- That file uses encoding %s\n",
"CREATE TABLE %s\n",
"DROP TABLE IF EXISTS %s;\n", "DROP TABLE IF EXISTS %s;\n",
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
quote_schema_name_rquotes_merge, quote_schema_name_rquotes_merge);
passthrough_unchanged);
} }
void mdb_register_backend(MdbHandle *mdb, char *backend_name, guint32 capabilities, MdbBackend *mdbi_register_backend2(MdbHandle *mdb, char *backend_name, guint32 capabilities,
const MdbBackendType *backend_type, const MdbBackendType *type_shortdate, const MdbBackendType *type_autonum, const MdbBackendType *backend_type, const MdbBackendType *type_shortdate, const MdbBackendType *type_autonum,
const char *short_now, const char *long_now, const char *short_now, const char *long_now,
const char *date_fmt, const char *shortdate_fmt, const char *date_fmt, const char *shortdate_fmt,
const char *charset_statement, const char *charset_statement,
const char *create_table_statement, const char *create_table_statement,
const char *drop_statement, const char *drop_statement,
const char *constaint_not_empty_statement, const char *constraint_not_empty_statement,
const char *column_comment_statement, const char *column_comment_statement,
const char *per_column_comment_statement, const char *per_column_comment_statement,
const char *table_comment_statement, const char *table_comment_statement,
const char *per_table_comment_statement, const char *per_table_comment_statement,
gchar* (*quote_schema_name)(const gchar*, const gchar*), gchar* (*quote_schema_name)(const gchar*, const gchar*),
gchar* (*normalise_case)(const gchar*)) gchar* (*normalise_case)(const gchar*)) {
{
MdbBackend *backend = g_malloc0(sizeof(MdbBackend)); MdbBackend *backend = g_malloc0(sizeof(MdbBackend));
backend->capabilities = capabilities; backend->capabilities = capabilities;
backend->types_table = backend_type; backend->types_table = backend_type;
@@ -452,7 +442,7 @@ void mdb_register_backend(MdbHandle *mdb, char *backend_name, guint32 capabiliti
backend->charset_statement = charset_statement; backend->charset_statement = charset_statement;
backend->create_table_statement = create_table_statement; backend->create_table_statement = create_table_statement;
backend->drop_statement = drop_statement; backend->drop_statement = drop_statement;
backend->constaint_not_empty_statement = constaint_not_empty_statement; backend->constaint_not_empty_statement = constraint_not_empty_statement;
backend->column_comment_statement = column_comment_statement; backend->column_comment_statement = column_comment_statement;
backend->per_column_comment_statement = per_column_comment_statement; backend->per_column_comment_statement = per_column_comment_statement;
backend->table_comment_statement = table_comment_statement; backend->table_comment_statement = table_comment_statement;
@@ -460,6 +450,36 @@ void mdb_register_backend(MdbHandle *mdb, char *backend_name, guint32 capabiliti
backend->quote_schema_name = quote_schema_name; backend->quote_schema_name = quote_schema_name;
backend->normalise_case = normalise_case; backend->normalise_case = normalise_case;
g_hash_table_insert(mdb->backends, backend_name, backend); g_hash_table_insert(mdb->backends, backend_name, backend);
return backend;
}
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 *date_fmt, const char *shortdate_fmt,
const char *charset_statement,
const char *drop_statement,
const char *constraint_not_empty_statement,
const char *column_comment_statement,
const char *per_column_comment_statement,
const char *table_comment_statement,
const char *per_table_comment_statement,
gchar* (*quote_schema_name)(const gchar*, const gchar*))
{
mdbi_register_backend2(mdb, backend_name, capabilities,
backend_type, type_shortdate, type_autonum,
short_now, long_now,
date_fmt, shortdate_fmt,
charset_statement,
drop_statement,
"CREATE TABLE %s\n",
constraint_not_empty_statement,
column_comment_statement,
per_column_comment_statement,
table_comment_statement,
per_table_comment_statement,
quote_schema_name,
passthrough_unchanged);
} }
/** /**