Changeset: ef11e287362e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ef11e287362e
Modified Files:
clients/mapilib/msettings.c
clients/mapilib/msettings.h
clients/odbc/driver/ODBCDbc.c
Branch: odbc-tls
Log Message:
Use ODBC attr names in ODBC errors
diffs (135 lines):
diff --git a/clients/mapilib/msettings.c b/clients/mapilib/msettings.c
--- a/clients/mapilib/msettings.c
+++ b/clients/mapilib/msettings.c
@@ -232,6 +232,8 @@ struct msettings {
char *unix_sock_name_buffer;
char certhash_digits_buffer[64 + 2 + 1]; // fit more than required plus
trailing '\0'
bool validated;
+ const char* (*localizer)(const void *data, mparm parm);
+ void *localizer_data;
char error_message[256];
};
@@ -356,6 +358,22 @@ format_error(msettings *mp, const char *
return mp->error_message;
}
+const char *msetting_parm_name(const msettings *mp, mparm parm)
+{
+ const char *localized = NULL;
+ if (mp->localizer)
+ localized = (mp->localizer)(mp->localizer_data, parm);
+ return localized ? localized : mparm_name(parm);
+}
+
+void msettings_set_localizer(msettings *mp, const char* (*localizer)(const
void *data, mparm parm), void *data)
+{
+ mp->localizer = localizer;
+ mp->localizer_data = data;
+}
+
+
+
const char*
msetting_string(const msettings *mp, mparm parm)
{
@@ -492,15 +510,15 @@ msetting_parse(msettings *mp, mparm parm
case MPCLASS_BOOL:
b = msetting_parse_bool(text);
if (b < 0)
- return format_error(mp, "%s: invalid boolean
value", mparm_name(parm));
+ return format_error(mp, "%s: invalid boolean
value", msetting_parm_name(mp, parm));
return msetting_set_bool(mp, parm, b);
case MPCLASS_LONG:
if (text[0] == '\0')
- return format_error(mp, "%s: integer parameter
cannot be empty string", mparm_name(parm));
+ return format_error(mp, "%s: integer parameter
cannot be empty string", msetting_parm_name(mp, parm));
char *end;
long l = strtol(text, &end, 10);
if (*end != '\0')
- return format_error(mp, "%s: invalid integer",
mparm_name(parm));
+ return format_error(mp, "%s: invalid integer",
msetting_parm_name(mp, parm));
return msetting_set_long(mp, parm, l);
case MPCLASS_STRING:
return msetting_set_string(mp, parm, text);
@@ -574,7 +592,7 @@ msetting_set_named(msettings *mp, bool a
return msetting_set_ignored(mp, key, value);
if (!allow_core && mparm_is_core(parm))
- return format_error(mp, "%s: parameter not allowed here",
mparm_name(parm));
+ return format_error(mp, "%s: parameter not allowed here",
msetting_parm_name(mp, parm));
return msetting_parse(mp, parm, value);
}
@@ -607,7 +625,7 @@ validate_certhash(msettings *mp)
if (strncmp(certhash, "sha256:", 7) == 0) {
certhash += 7;
} else {
- return "certhash: expected to start with 'sha256:'";
+ return format_error(mp, "%s: expected to start with 'sha256:'",
msetting_parm_name(mp, MP_CERTHASH));
}
size_t i = 0;
@@ -615,13 +633,13 @@ validate_certhash(msettings *mp)
if (*r == ':')
continue;
if (!isxdigit(*r))
- return "certhash: invalid hex digit";
+ return format_error(mp, "%s: invalid hex digit",
msetting_parm_name(mp, MP_CERTHASH));
if (i < sizeof(mp->certhash_digits_buffer) - 1)
mp->certhash_digits_buffer[i++] = tolower(*r);
}
mp->certhash_digits_buffer[i] = '\0';
if (i == 0)
- return "certhash: need at least one digit";
+ return format_error(mp, "%s: need at least one digit",
msetting_parm_name(mp, MP_CERTHASH));
return NULL;
}
diff --git a/clients/mapilib/msettings.h b/clients/mapilib/msettings.h
--- a/clients/mapilib/msettings.h
+++ b/clients/mapilib/msettings.h
@@ -131,6 +131,9 @@ mapi_export const msettings *msettings_d
/* always returns NULL */
mapi_export msettings *msettings_destroy(msettings *mp);
+mapi_export const char *msetting_parm_name(const msettings *mp, mparm parm);
+mapi_export void msettings_set_localizer(msettings *mp, const char*
(*localizer)(const void *data, mparm parm), void *data);
+
/* retrieve and set; call abort() on type error */
mapi_export const char* msetting_string(const msettings *mp, mparm parm);
diff --git a/clients/odbc/driver/ODBCDbc.c b/clients/odbc/driver/ODBCDbc.c
--- a/clients/odbc/driver/ODBCDbc.c
+++ b/clients/odbc/driver/ODBCDbc.c
@@ -34,9 +34,21 @@
#include "ODBCGlobal.h"
#include "ODBCDbc.h"
+#include "ODBCAttrs.h"
#define ODBC_DBC_MAGIC_NR 1365 /* for internal sanity check only */
+static const char*
+parm_localizer(const void *data, mparm parm)
+{
+ (void)data;
+ for (int i = 0; i < attr_setting_count; i++) {
+ const struct attr_setting *entry = &attr_settings[i];
+ if (entry->parm == parm)
+ return entry->name;
+ }
+ return NULL;
+}
/*
* Creates a new allocated ODBCDbc object and initializes it.
@@ -63,6 +75,8 @@ newODBCDbc(ODBCEnv *env)
return NULL;
}
+ msettings_set_localizer(settings, parm_localizer, NULL);
+
*dbc = (ODBCDbc) {
.Env = env,
.settings = settings,
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]