Changeset: 7de45731ff81 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7de45731ff81
Modified Files:
clients/mapiclient/mclient.c
sql/backends/monet5/UDF/pyapi3/pyapi3.c
sql/backends/monet5/sql_scenario.c
Branch: default
Log Message:
merged with sep2022
diffs (truncated from 1617 to 300 lines):
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -15,7 +15,6 @@
void
parse_dotmonetdb(DotMonetdb *dotfile)
{
- char *cfile;
FILE *config = NULL;
char buf[FILENAME_MAX];
@@ -29,10 +28,43 @@ parse_dotmonetdb(DotMonetdb *dotfile)
* (3 is standard shell syntax: use XDG_CONFIG_HOME if set, else use
* $HOME/.config in its place)
*/
+#ifdef NATIVE_WIN32
+ wchar_t *cfile;
+ wchar_t wbuf[FILENAME_MAX];
+#define CF "%ls" /* format to print cfile */
+
+ if ((cfile = _wgetenv(L"DOTMONETDBFILE")) == NULL) {
+ /* no environment variable: use a default */
+ cfile = L".monetdb";
+ if ((config = _wfopen(cfile, L"r")) == NULL) {
+ const wchar_t *xdg = _wgetenv(L"XDG_CONFIG_HOME");
+ const wchar_t *home = _wgetenv(L"HOME");
+ int len = -1;
+ cfile = wbuf;
+ if (xdg != NULL)
+ len = _snwprintf(wbuf, sizeof(wbuf),
L"%ls%lcmonetdb", xdg, DIR_SEP);
+ else if (home != NULL)
+ len = _snwprintf(wbuf, sizeof(wbuf),
L"%ls%lc.config%lcmonetdb", home, DIR_SEP, DIR_SEP);
+ if (len == -1 || len >= FILENAME_MAX || (config =
_wfopen(wbuf, L"r")) == NULL) {
+ if (home) {
+ len = _snwprintf(wbuf, sizeof(wbuf),
L"%ls%lc.monetdb", home, DIR_SEP);
+ if (len >= 0 && len < FILENAME_MAX)
+ config = _wfopen(wbuf, L"r");
+ }
+ }
+ }
+ } else if (*cfile != 0 && (config = _wfopen(cfile, L"r")) == NULL) {
+ fprintf(stderr, "failed to open file '%ls': %s\n",
+ cfile, strerror(errno));
+ }
+#else
+ char *cfile;
+#define CF "%s" /* format to print cfile */
+
if ((cfile = getenv("DOTMONETDBFILE")) == NULL) {
/* no environment variable: use a default */
cfile = ".monetdb";
- if ((config = MT_fopen(cfile, "r")) == NULL) {
+ if ((config = fopen(cfile, "r")) == NULL) {
const char *xdg = getenv("XDG_CONFIG_HOME");
const char *home = getenv("HOME");
int len = -1;
@@ -41,18 +73,19 @@ parse_dotmonetdb(DotMonetdb *dotfile)
len = snprintf(buf, sizeof(buf), "%s%cmonetdb",
xdg, DIR_SEP);
else if (home != NULL)
len = snprintf(buf, sizeof(buf),
"%s%c.config%cmonetdb", home, DIR_SEP, DIR_SEP);
- if (len == -1 || len >= FILENAME_MAX || (config =
MT_fopen(buf, "r")) == NULL) {
+ if (len == -1 || len >= FILENAME_MAX || (config =
fopen(buf, "r")) == NULL) {
if (home) {
len = snprintf(buf, sizeof(buf),
"%s%c.monetdb", home, DIR_SEP);
if (len >= 0 && len < FILENAME_MAX)
- config = MT_fopen(buf, "r");
+ config = fopen(buf, "r");
}
}
}
- } else if (*cfile != 0 && (config = MT_fopen(cfile, "r")) == NULL) {
+ } else if (*cfile != 0 && (config = fopen(cfile, "r")) == NULL) {
fprintf(stderr, "failed to open file '%s': %s\n",
cfile, strerror(errno));
}
+#endif
*dotfile = (DotMonetdb) {0};
@@ -67,7 +100,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
if (buf[0] == '\0' || buf[0] == '#')
continue;
if ((q = strchr(buf, '=')) == NULL) {
- fprintf(stderr, "%s:%d: syntax error: %s\n",
+ fprintf(stderr, CF ":%d: syntax error: %s\n",
cfile, line, buf);
continue;
}
@@ -91,7 +124,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
/* make sure we don't set garbage */
if (strcmp(q, "sql") != 0 &&
strcmp(q, "mal") != 0) {
- fprintf(stderr, "%s:%d: unsupported "
+ fprintf(stderr, CF ":%d: unsupported "
"language: %s\n",
cfile, line, q);
}
@@ -118,7 +151,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
q = NULL;
}
if (q != NULL)
- fprintf(stderr, "%s:%d: unknown property: %s\n",
+ fprintf(stderr, CF ":%d: unknown property:
%s\n",
cfile, line, buf);
}
fclose(config);
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2855,8 +2855,10 @@ doFile(Mapi mid, stream *fp, bool useins
mnstr_printf(toConsole,
"none\n");
break;
}
- } else
+ } else {
setFormatter(line);
+ mapi_set_size_header(mid,
strcmp(line, "raw") == 0);
+ }
continue;
case 't':
while (my_isspace(line[length - 1]))
@@ -3569,12 +3571,15 @@ main(int argc, char **argv)
mapi_trace(mid, trace);
if (output) {
setFormatter(output);
+ mapi_set_size_header(mid, strcmp(output, "raw") == 0);
free(output);
} else {
if (mode == SQL) {
setFormatter("sql");
+ mapi_set_size_header(mid, false);
} else {
setFormatter("raw");
+ mapi_set_size_header(mid, true);
}
}
/* give the user a welcome message with some general info */
diff --git a/clients/odbc/driver/ODBCGlobal.h b/clients/odbc/driver/ODBCGlobal.h
--- a/clients/odbc/driver/ODBCGlobal.h
+++ b/clients/odbc/driver/ODBCGlobal.h
@@ -91,9 +91,33 @@ SQLRETURN MNDBFreeHandle(SQLSMALLINT han
SQLRETURN MNDBGetDiagRec(SQLSMALLINT handleType, SQLHANDLE handle, SQLSMALLINT
recNumber, SQLCHAR *sqlState, SQLINTEGER *nativeErrorPtr, SQLCHAR *messageText,
SQLSMALLINT bufferLength, SQLSMALLINT *textLengthPtr);
#ifdef ODBCDEBUG
+#ifdef NATIVE_WIN32
+extern const wchar_t *ODBCdebug;
+#else
extern const char *ODBCdebug;
+#endif
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901
+#ifdef NATIVE_WIN32
+#define ODBCLOG(...) \
+ do { \
+ if (ODBCdebug == NULL) { \
+ if ((ODBCdebug = _wgetenv(L"ODBCDEBUG")) == NULL) \
+ ODBCdebug = _wcsdup(L""); \
+ else \
+ ODBCdebug = _wcsdup(ODBCdebug); \
+ } \
+ if (ODBCdebug != NULL && *ODBCdebug != 0) { \
+ FILE *_f; \
+ _f = _wfopen(ODBCdebug, L"a"); \
+ if (_f == NULL) \
+ _f = stderr; \
+ fprintf(_f, __VA_ARGS__); \
+ if (_f != stderr) \
+ fclose(_f); \
+ } \
+ } while (0)
+#else
#define ODBCLOG(...) \
do { \
if (ODBCdebug == NULL) { \
@@ -112,6 +136,7 @@ extern const char *ODBCdebug;
fclose(_f); \
} \
} while (0)
+#endif
#else
extern void ODBCLOG(_In_z_ _Printf_format_string_ const char *fmt, ...)
__attribute__((__format__(__printf__, 1, 2)));
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -2140,7 +2140,11 @@ struct sql_types ODBC_c_types[] = {
#ifdef ODBCDEBUG
+#ifdef NATIVE_WIN32
+const wchar_t *ODBCdebug;
+#else
const char *ODBCdebug;
+#endif
static char unknown[32];
char *
@@ -2711,15 +2715,26 @@ ODBCLOG(const char *fmt, ...)
va_start(ap, fmt);
if (ODBCdebug == NULL) {
+#ifdef NATIVE_WIN32
+ if ((ODBCdebug = _wgetenv(L"ODBCDEBUG")) == NULL)
+ ODBCdebug = _wcsdup(L"");
+ else
+ ODBCdebug = _wcsdup(ODBCdebug);
+#else
if ((ODBCdebug = getenv("ODBCDEBUG")) == NULL)
ODBCdebug = strdup("");
else
ODBCdebug = strdup(ODBCdebug);
+#endif
}
if (ODBCdebug != NULL && *ODBCdebug != 0) {
FILE *f;
+#ifdef NATIVE_WIN32
+ f = _wfopen(ODBCdebug, L"a");
+#else
f = fopen(ODBCdebug, "a");
+#endif
if (f) {
vfprintf(f, fmt, ap);
fclose(f);
diff --git a/clients/odbc/driver/SQLBrowseConnect.c
b/clients/odbc/driver/SQLBrowseConnect.c
--- a/clients/odbc/driver/SQLBrowseConnect.c
+++ b/clients/odbc/driver/SQLBrowseConnect.c
@@ -57,7 +57,7 @@ MNDBBrowseConnect(ODBCDbc *dbc,
int n;
SQLRETURN rc;
#ifdef ODBCDEBUG
- int allocated = 0;
+ bool allocated = false;
#endif
fixODBCstring(InConnectionString, StringLength1, SQLSMALLINT,
addDbcError, dbc, return SQL_ERROR);
@@ -106,12 +106,33 @@ MNDBBrowseConnect(ODBCDbc *dbc,
dbname = attr;
#ifdef ODBCDEBUG
} else if (strcasecmp(key, "logfile") == 0 &&
- getenv("ODBCDEBUG") == NULL) {
+#ifdef NATIVE_WIN32
+ _wgetenv(L"ODBCDEBUG")
+#else
+ getenv("ODBCDEBUG")
+#endif
+ == NULL) {
/* environment trumps everything */
if (ODBCdebug)
free((void *) ODBCdebug); /* discard const */
+#ifdef NATIVE_WIN32
+ size_t attrlen = strlen(attr);
+ SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
+ if (ODBCutf82wchar(attr,
+ (SQLINTEGER) attrlen,
+ wattr,
+ (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
+ NULL,
+ NULL)) {
+ free(wattr);
+ wattr = NULL;
+ }
+ ODBCdebug = wattr;
+ free(attr);
+#else
ODBCdebug = attr;
- allocated = 1;
+#endif
+ allocated = true;
#endif
} else
free(attr);
@@ -160,14 +181,35 @@ MNDBBrowseConnect(ODBCDbc *dbc,
}
}
#ifdef ODBCDEBUG
- if (!allocated && getenv("ODBCDEBUG") == NULL) {
+ if (!allocated &&
+#ifdef NATIVE_WIN32
+ _wgetenv(L"ODBCDEBUG")
+#else
+ getenv("ODBCDEBUG")
+#endif
+ == NULL) {
/* if not set from InConnectionString argument
* or environment, look in profile */
n = SQLGetPrivateProfileString(dsn, "logfile", "", buf,
sizeof(buf), "odbc.ini");
if (n > 0 && buf[0]) {
if (ODBCdebug)
free((void *) ODBCdebug); /* discard
const */
+#ifdef NATIVE_WIN32
+ size_t attrlen = strlen(buf);
+ SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
+ if (ODBCutf82wchar(buf,
+ (SQLINTEGER) attrlen,
+ wattr,
+ (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
+ NULL,
+ NULL)) {
+ free(wattr);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]