Changeset: aec239d94c1e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/aec239d94c1e Modified Files: clients/odbc/winsetup/setup.rc sql/backends/monet5/sql.c Branch: default Log Message:
Merge with Aug2024 branch. diffs (truncated from 599 to 300 lines): diff --git a/clients/odbc/ChangeLog.Aug2024 b/clients/odbc/ChangeLog.Aug2024 --- a/clients/odbc/ChangeLog.Aug2024 +++ b/clients/odbc/ChangeLog.Aug2024 @@ -1,6 +1,16 @@ # ChangeLog file for odbc # This file is updated with Maddlog +* Wed Aug 7 2024 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Extended ODBC Data Source Setup program on Windows with fields to specify + optional Client Information such as Application Name and Client Remark. + +* Thu Aug 1 2024 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Extended ODBC Data Source Setup program on Windows with fields to specify + new TLS Connection settings. +- Extended ODBC Data Source Setup program on Windows with a Test-button + to quickly test connectivity to a MonetDB server. + * Fri May 24 2024 Joeri van Ruth <joeri.van.r...@monetdbsolutions.com> - ODBC now supports TLS. It can be configured through the following DSN- or Connection String attributes (canonical name / user friendly name): diff --git a/clients/odbc/winsetup/banner.bmp b/clients/odbc/winsetup/banner.bmp index 55ca8c7c1dfb2244e729d3f8aeb829e9aa753669..128fe2edf3ab2fbfb791c4933a7b5772a6513385 GIT binary patch literal 129654 zc%1Fsd3;P){|E3J39%%t(zHr!MK+Z3<9Ss3RCOeX#QGqpwG9zMY9|^+q7<zqw6u7N zXlsomBvr952^z5_Vo8LM#K=T4lgyIL_xHNaICnBx5u*Bezs{>K`Odj#&b{-;{q~;a zc6FPsH4{V~1wn8S1mS!YLHJM*1T&%Dqj(p?=f(&H1qB5K1qJ1K7XSbN0000000000 z000000DxCZW?I_bHEZtOyjj^D0RRAiS6Te&(<556*uHF;zM!D8`vL#}0I#f5p`kKC zn9`+7T2fMF_XPj|;3cKX&Q_~bc}k^DtK~r!QL9wy++4k0&w}|nU2aZ}7*wfr8cj(J z>NFbTql~F@b6K-_N@c!IS7y9Wvs$fMr7G!D>8n+$g8cmAKh_tJHdp+wp|+aTO46uE zn@1+S&DV-?eR&^QY+0~CCJ6t1`|WcF4wUl{004l0l)3Ki1MAi6Z)3C8*Ov#kFJ0QN zZr!1c8-MohyGfTWv0#ou;nlvqhpnxLt?ic|f1I0>W899upy0qSzsz)T8EI!XtZ7s4 z4jq<^7;${}Zmn9)>m1#&qrZ*Ku%=D>+t_Sbuz<%;?cF=zt+!Zw)7-fxJ&Xztp53$O zC<lk3O`42xa+=YtThOFQXCotx^NMSK{pHuI*YM`ehc<3J#>wf@i4&&hd2Ty>^KY8f zm=?C9&0kRJMM^wM)9cgBM&#F=QVr)waiO%zmFC*h?4~ro4Xt*gh{cp~z4U9S(`bA; zb&?4}4@=8Gw`?irl?MO-_~+QRXpu}1*#Dj@($iTmAtt7qnHh_3^z-ADmy8&}f-*sf z*}vboot56+{3GKs?)~>K9y`YBJh*qSzl{xx4{z2iPpM?_><14#Y;9S5NTWtM3I%WW z=UKCgZB`}-{9!`APB*q~TjP%c1`jTDk_k~XwhDO)QW<AKTgHj`2K)2CGO^mFh(dLE z8E;A3CXy<%l*<@<@F2Tl-OS7)H*S2!9|Zsa;1!d4?V6jF6}wG`1O@T<lrCLZaFo5h zCNGZ#FC9P5@9BX<hVaVg4;?bT-H&l{n$o39uUfU(pU&pyyyYMtA71UyufOsZ)=itn z<9}}6%z}4s+~9qa3Btg7^`^^Y(?0!ljFXd05W;@^kyX>=<qdD%oL3v#q{;jN1B{av z+UzMM4_;O2+y96UI@rHi@VjnewcznmHSg-Qv<rRRT8hlIr#lx)xsnS94PqVWR;9|3 z-+!-=Uk3mH;FaOurw_YP`hN5g4~DN>$M4{$!@^iluh&oL*pUVMzxn2ad-quUw<Sw> z<*8k}ve_NiV`Dwvd(UtSHZx<l;P~ih{^Z23S1<l`$(Jv?)~Lba(`7Oij5~aoH@j@i z7<Fzg@5c4m*c<21^TU^p9?fgA!IVO?IM#beX+yBL7}2Qc_b&@&7m7Qyd$v)v@$8%E z^k$m;h9Nk^meLYRx{L`iG0x`ZtPj0ke?2}rx`KWm004kjLDaTwCO2zw?Bnj;{%^j? zf{TU@<&}3VU(PE>Y}mkpY{Dcf!2toha#~UnA1E1AzrH**m56*l`iMn(R<E9tAl<%s z+T(0)o_OvY5#5N3>sF--3!d7$H!V5&_SLJ3^z@>$MvYG)YTGu`Gu$~tN+gc0m*T(s zO7V!rbnTe*=az9&wX26|LQO+_ac6NhX$fY!xbSX#-m+y*W@$q(00030C=ccGLG|mi zyJV1$505VzHjD-P)ve1?1tOBCruM5_m&Io|JF{R^a4^5mem`!UapMsiHt>&ro;8bz zA~$a2kzeM`<29rA?c;IQ4Xs)|($0=O9&xd-a5gvZUaea1*Iysry!qGt`=1O6;fY6% zLNTOKBX;b9fdfs?@IsiBNbH#-#nnpkcanxnGH)BkSv&=Ca;dRDzn5BwT2<1OjNG)z zcwA}Kgb7dnYXATMys}nJm{4>Y=eYw1_^osMvSqyT;^D(tuzR&?$(Ju19)>)g2s*ey zgRG1UURkYDjk32lOa*ap(ChU%3dP_C4R}PYQn8vkt=6+m8y5GlwPg<nR(N@pG+$Iq zc)E4t-?e(;L>6?nwl>}KGcTKFziY@A{GG%Fu-t*=QX+Bvgg7sh|9L4ws;148=5oxn z7uVGmN0FY+uLDby&L28d5x)-r0Klu@!jU8VE@?aubCiPv&m!*Mxx?aTBO|5JlfXb0 zT<h!0gT_l*jOT(no0}(HyhubpOqs$f|NiZ_ye3b3WP)&F&mJO5Ja?{pwQ4Nl-?wkj zq)7pT2Ya<|&u2>TNg$U_oZ!d)wq%Lv8Ag6<^nhZe6qhH_q}L7c?NcZzTB^n-k#hS2 zj8c*PrtLpAyGIY>jA-g7pFGtM0ssK;3exNK-W@vdWgzUSg}BOf{CIxr^mB7#;}=;O z8GY;2VZlise86fd($hbC_gxlrv9O2^59f_<m@`M3ToD{>vfkF++L|wz-T(8?CW9}= zk2vPIy7HAW2e)qJHDeDRG|XlF*S}cAvrQY*IUYJSE&0%pEljLMSBy61+A!P@pVN$# zatdfK<rVv+xhQn%7b(7bR!LVfI55!UAq<~w3jhEByH>2=w@8nM4Ug~Moug3rxw#b@ zzi@U=Nl1u4eVVUz?O|z|5+Bc6h&_0auQ746vf93ES=Rmg2{ADq4I7$F=FHdWK5yBQ z2i>i$LsqX=WoHKm1n}Ub&YfAa%B(D}_U#RmFk7`cwsWWI;ltRdsP0v(8jtm8)oSBu ztH*cm&QmJ0GBTvZL!KmV?Zpy?2{pxu9BB!Z_mFl>l@f{ggLLGFLYr@F8B6Kc#MLV+ zT%_R7!%Di0CqqI^@{O;0_kIz-9{>Qr-$7bZlDoAv+dhJ&4ZUjB;!h#ioC?>PHM>`> z+QZV)_<qXPk}#*k!ur&%%|CLpvf`s5GC}C`#vAFkZn2tt{H2Gb<-m8|VPEHBVZkep zw6o)Tlcpsn^Qj%(%*@=at$DH`6NK<}>xd}8!-FqokqLrpjT(Jw*Y06yd3@I{=_K#p z6eog88+lbDAL~Nd#b!^+PM1bl_?8`feF`gEy-K=_iRaFl<QuLvYu>(k^*R1>0001g zD|6l5*)8&?nKLJS@PWyFbI+<(M|bQn-hhkk2FB-?GRc=O&v14wc6w*X>eam3#bd{e z<9xF$Ui|y?F>dyuT)t%FNIq?Ym(h-nY|7}7?c0m}(y3j$7CK37uDJAdhHdd%iO#SU zM_x93ChaV`X(UaqZCdS0iSJ2COG<LBS<|Esd`b)e005j03!B%kpMT%JY_4Ybx^;70 zT}L}Qj&XAO;ma@C+=<j{*Vg*_PUzTiM2i;FWwQ9wr;BYW?(pFiUS5+rcOK>7@I~v^ z3kD7}S*fAZXlD25F|<jOLG|lz`syq87M1w}27KPC)hGvtfWd>)l9P)zn|Su@>WLG5 zI&~UlZ$Gwe+ZA4387V33quiXFX`g;NuwFfBnC7+DMmac)c63a=cFnXQbq<~1Lp!F4 zlQ%YwpzmZ-E^#rOt{y71FGtp0adWV5I+0%sTKoZ>`L$@rxQyGkO;R#(1CwDTj=ul^ z005h7QS^<gdcEHGeX^y{X|*N2ur*(&(`ht1jfT$xW&47b_=4BM&FTw^d4FqKax&i@ zWQ>!OIyYDRiZZ*Jb(g+;(~w~N^k|><x%Q9O&pL`vJlI~N`C8LA$rf?z$`#|W9#*{C zwJY<C0002sZ{+*2W2L1lQBmbRY~3J3g5g_N+^=K*BIyxF+}`qkdu&ux(J>v5h7F(c zWB>pF;H8w2lJd*Ed46tg?$*}dd3u)ju$W*e!H5YK_Zs!CZuoOukqt{r7P@wA(R`zC zojOl>G5`Po@azh7R8aQl$<tA0W!=7dRbSQ!$m7~_np)40V61i%BSF0lfBL*e@?s{F z6f1DZkfQlUe;b=;IS~K=0C*;fRQmD16#6wK9;Mu@O70AQjqK#wV)~H~MKc@GIEzOc ze+8DOf$Rql_*U)4Wq7k@&%gHo002<3tzL$^{M5H;c~{!wM{%Lz{#q~InO~(Ll|w=F zXcdjPC)kM%bZ|v^8rZjfeX(nDCx7_ibMHI=005Lio-C~m;bo$gxc>B4A3F0Jr6-p1 z3iyhYb6;AP@}2BSkJf24UhUcyn{TX{Jo)+b7ytkO$}N0h@w;#F?LFt((aqvF`lw)e z55<?)Zy87P+lWs#p2XfYYl=-aWP)&N?-Q(W0RRAi=R%!B^IDaba(D`~M%r#vm7QJQ zS)fl%qawAk9Q6!R;^X<gA10;f7OVgO08ly3hm?_Tu$@02xt*B!QoWHxtx`?u+_|KO z8^Hkq<!A!{003TyO(V<5H|Dh>bvCPeaO>7PiHVinV`5vaE*d(tq-0}AqekrYE&u=k z@KVT5r`b)*NI8BpOuWp_%v?Wx`mHNhD!0o8`T2{74=*X%kO@NMrcIUGLjV8(FclX{ zW6jD)IifeSy7!Wk7Y-T}cldB+b@riLKF8Iylw<?1X#)TNcuDQ?D<j|Vd5x|gV|7z+ z-kjRCYj9xTbDut1#D$|rN7~tyl5BXjZ=ao+`GR`|0002xqA#G8J<CWrro2VB&a&#+ z3WZ;<US93mT|IN=#dI+H!GkrECp(*)my&FZa&Wkp{AdewZJxMiI{*Lxylft(k-t+J zDaX`$lqBuQv1Q>x7YmE|0|uldJlUohPb5#N-1YtU1K)Y4luSb=2%hh~cQ+|XJV34F zc@Y2r0K9bWTo4~(l%8@-u1y!DeYCE`#C*}ZwM-CZ_v{(HZ=WVFuOhpXnD{?`{~?VU zm7ZzH1i{bEElVyp9CmU8-M>+R-2eapfC?7>r?{(m=_!X-RXVVgACa%q?OM6AZ=E`9 zA?iwR?^B_n5ANN2y6@L%G|87QhXe)9baClfy?U9MMh{EN%?lS6<UfAh?H`Nj_)isc zDF6Tf;Q2WpLf+NO-Un=LKgv$y2jwUf|MT}}S%*vz+^np8I(1q-abnnyKc4;LkL1gj z73t}@IXPOjx*$KlAU{7}r_-v{xj8xV)YR*-v8O^qcPwANXz0)pEn2u(Sd^J&url?N zPZDEerJnDZMe7Du&P4+N0DvcTF}&=j9G(JAdxy?!Gd?amGjrF<m1CToOcDbZ3yVIr zYkSz*j%d;1^H#0CXx;krmMurx*$r;cz}?!qTa_y1OfYyE+qUhIojaukGTJ=)$%DRf zAeEwWt{4CS06c}nqvEUT%S<^u1zO=kDd&t2&DZH-4;@<W>FHr>`=p6P>BY514L>)x zlVM@`I-}($$uZ>bNK<UYciI8~0KnhN-796USYc(H1#S3@QZJe`kgHTiM?|dg_4V%1 z!L>$>r%p56tgNPV>9TF{;?x_3CxR;Fv}5X{wYoNR`}_;NH~;_uP*Id}3hG_1l!MJ9 z4eCu-qbOf%(o8`?LE5cb(Gd}w7cTsIzyPoI?L8VcbhEN5b|j^H)vEpK)*bEWIK#zd z{j6Ch!^7ow@0xZjCxartF+72pUY}C_dU4kT0000goL)~6i)nnd@@5_E6>p*Q=-y>2 zVFOaVUZ1N}rr*AOEiNwh$dTyC$dlpWC&I#F{`lkK$&<<P@mX?tp%D|~&LqcBuowB( zef(W5DeWbCYb^i(06e|qGZfhI2~rMEK}=B=yiYr))5TEAN-Zh(D3`p4lz5mz=7<fB zGcUA8Mkz1H@c;k-@He4TQ^YsoeqT?Nb+F=NO#%N$n?{QJW5n$dpHXC76URg}O0n4j z9Tnt@35mWyTxp`pB>7EoBh#3zv}Y!*b`?iVOd6b6iw-P%rW^(U003TEiaWGzLb*2R zDC6meB~5;VW;CR^cH)@G*R9287xUYYUvqKtr+1Cgj$Qt#IF}Uw003TXX;*2hm-y1y zXUsaDwD>#Hncu|6AOHXW@DGuhLi+;6*`Y5W)0p2z+^AfeTiNFf0001$p+F~Y4z_I~ z&9$eoW)+-f_|~EIgXz+Kae@Z`004kaEpECMwUXBM6{lf5^&Ahcs^X-MO(W^AU6gab zvd;<t003TAI*s^J_)8IVcn$5EN$UpD(vQV4kvYx8#U@j1#0@kizajo(R%4p~9xd-G wCK&qy>D&%VODMWy7ytkO00000000000000000000000000000006Y)>4>oTy6#xJL diff --git a/clients/odbc/winsetup/resource.h b/clients/odbc/winsetup/resource.h --- a/clients/odbc/winsetup/resource.h +++ b/clients/odbc/winsetup/resource.h @@ -40,8 +40,13 @@ #define IDC_EDIT_TIMEZONE 2026 #define IDC_EDIT_LOGFILE 2027 -#define IDC_BUTTON_TEST 2031 -#define IDC_BUTTON_HELP 2032 +// Client Info settings +#define IDC_EDIT_CLIENTINFO 2031 +#define IDC_EDIT_APPLICNAME 2032 +#define IDC_EDIT_CLIENTREMARK 2033 + +#define IDC_BUTTON_TEST 2041 +#define IDC_BUTTON_HELP 2042 // Next default values for new objects // diff --git a/clients/odbc/winsetup/setup.c b/clients/odbc/winsetup/setup.c --- a/clients/odbc/winsetup/setup.c +++ b/clients/odbc/winsetup/setup.c @@ -91,6 +91,13 @@ struct data { char *host; char *port; /* positive integer */ char *database; + // TLS settings + char *use_tls; /* only on or off allowed */ + char *servercert; + char *servercerthash; + char *clientkey; + char *clientcert; + // Advanced settings char *schema; char *logintimeout; /* empty, 0 or positive integer (millisecs) */ char *replytimeout; /* empty, 0 or positive integer (millisecs) */ @@ -98,12 +105,10 @@ struct data { char *autocommit; /* only on or off allowed */ char *timezone; /* empty, 0 or signed integer (minutes) */ char *logfile; - // TLS settings - char *use_tls; /* only on or off allowed */ - char *servercert; - char *servercerthash; - char *clientkey; - char *clientcert; + // Client info + char *clientinfo; /* only on or off allowed */ + char *applicationname; + char *clientremark; HWND parent; WORD request; @@ -153,6 +158,7 @@ TestConnection(HWND hwndDlg, struct data } // Only when use_tls is "on", add TLS parameters if (datap->use_tls && strcmp(datap->use_tls, "on") == 0) { + pos += snprintf(inStr + pos, strSize - pos, "TLS=on;"); if (datap->servercert && strlen(datap->servercert) > 0) { pos += snprintf(inStr + pos, strSize - pos, "CERT=%s;", datap->servercert); } @@ -179,9 +185,9 @@ TestConnection(HWND hwndDlg, struct data if (datap->replysize && strlen(datap->replysize) > 0) { pos += snprintf(inStr + pos, strSize - pos, "REPLYSIZE=%s;", datap->replysize); } - // in ODBC autocommit is on by default. Only when set to off, add it to the connection string. + // in ODBC autocommit is on by specification. Only when set to off, add it to the connection string. if (datap->autocommit && strcmp(datap->autocommit, "off") == 0) { - pos += snprintf(inStr + pos, strSize - pos, "AUTOCOMMIT=%s;", datap->autocommit); + pos += snprintf(inStr + pos, strSize - pos, "AUTOCOMMIT=off;"); } if (datap->timezone && strlen(datap->timezone) > 0) { pos += snprintf(inStr + pos, strSize - pos, "TIMEZONE=%s;", datap->timezone); @@ -191,27 +197,21 @@ TestConnection(HWND hwndDlg, struct data } // test the constructed connection string ret = SQLDriverConnect(dbc, hwndDlg, (SQLCHAR *) inStr, SQL_NTS, (SQLCHAR *) outStr, strSize, &outLen, SQL_DRIVER_NOPROMPT); - switch (ret) { - case SQL_SUCCESS: - case SQL_SUCCESS_WITH_INFO: - MessageBox(hwndDlg, "Connection successful", boxtitle, MB_OK); - ret = SQLDisconnect(dbc); - break; - case SQL_ERROR: - default: - { - SQLCHAR state[6]; - SQLINTEGER errnr; - SQLCHAR msg[2560]; - SQLSMALLINT msglen; - char buf[2600 + strSize + strSize]; - // get Error msg - ret = SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, state, &errnr, msg, sizeof(msg), &msglen); - sprintf(buf, "Connection failed!\n\nError message: %s\n\nSQLstate %s, Errnr %d\n\nConnectString used: %s\n\nReturned ConnectString: %s", - (char *) msg, (char *) state, (int) errnr, inStr, outStr); - MessageBox(hwndDlg, buf, boxtitle, MB_ICONERROR); - break; - } + if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { + MessageBox(hwndDlg, "Connection successful", boxtitle, MB_OK); + ret = SQLDisconnect(dbc); + } else { + SQLCHAR state[6]; + SQLINTEGER errnr; + SQLCHAR msg[2560]; + SQLSMALLINT msglen; + char buf[2600 + strSize + strSize]; + + // get Error msg + ret = SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, state, &errnr, msg, sizeof(msg), &msglen); + sprintf(buf, "Connection failed!\n\nError message: %s\n\nSQLstate %s, Errnr %d\n\nConnectString used: %s\n\nReturned ConnectString: %s", + (char *) msg, (char *) state, (int) errnr, inStr, outStr); + MessageBox(hwndDlg, buf, boxtitle, MB_ICONERROR); } ret = SQLFreeHandle(SQL_HANDLE_DBC, dbc); #undef strSize @@ -280,6 +280,10 @@ DialogProc(HWND hwndDlg, UINT uMsg, WPAR SetDlgItemText(hwndDlg, IDC_EDIT_AUTOCOMMIT, datap->autocommit ? datap->autocommit : "on"); SetDlgItemText(hwndDlg, IDC_EDIT_TIMEZONE, datap->timezone ? datap->timezone : ""); SetDlgItemText(hwndDlg, IDC_EDIT_LOGFILE, datap->logfile ? datap->logfile : ""); + // Client Info + SetDlgItemText(hwndDlg, IDC_EDIT_CLIENTINFO, datap->clientinfo ? datap->clientinfo : "off"); + SetDlgItemText(hwndDlg, IDC_EDIT_APPLICNAME, datap->applicationname ? datap->applicationname : ""); + SetDlgItemText(hwndDlg, IDC_EDIT_CLIENTREMARK, datap->clientremark ? datap->clientremark : ""); if (datap->request == ODBC_ADD_DSN && datap->dsn && *datap->dsn) EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT_DSN), FALSE); return TRUE; @@ -300,7 +304,7 @@ DialogProc(HWND hwndDlg, UINT uMsg, WPAR } /* fall through */ case IDC_BUTTON_TEST: - /* validate entered string values */ + /* validate entered string values for on/off fields */ GetDlgItemText(hwndDlg, IDC_EDIT_AUTOCOMMIT, buf, sizeof(buf)); if (strcmp("on", buf) != 0 && strcmp("off", buf) != 0) { MessageBox(hwndDlg, "Autocommit must be set to on or off. Default is on.", NULL, MB_ICONERROR); @@ -311,6 +315,11 @@ DialogProc(HWND hwndDlg, UINT uMsg, WPAR MessageBox(hwndDlg, "TLS Encrypt must be set to on or off. Default is off.", NULL, MB_ICONERROR); return TRUE; } + GetDlgItemText(hwndDlg, IDC_EDIT_CLIENTINFO, buf, sizeof(buf)); + if (strcmp("on", buf) != 0 && strcmp("off", buf) != 0) { + MessageBox(hwndDlg, "Client Info must be set to on or off. Default is off.", NULL, MB_ICONERROR); + return TRUE; + } GetDlgItemText(hwndDlg, IDC_EDIT_DESC, buf, sizeof(buf)); if (datap->desc) @@ -386,6 +395,19 @@ DialogProc(HWND hwndDlg, UINT uMsg, WPAR if (datap->logfile) free(datap->logfile); datap->logfile = strdup(buf); + GetDlgItemText(hwndDlg, IDC_EDIT_CLIENTINFO, buf, sizeof(buf)); + if (datap->clientinfo) + free(datap->clientinfo); + datap->clientinfo = strdup(buf); + GetDlgItemText(hwndDlg, IDC_EDIT_APPLICNAME, buf, sizeof(buf)); + if (datap->applicationname) + free(datap->applicationname); + datap->applicationname = strdup(buf); + GetDlgItemText(hwndDlg, IDC_EDIT_CLIENTREMARK, buf, sizeof(buf)); + if (datap->clientremark) + free(datap->clientremark); + datap->clientremark = strdup(buf); + if (LOWORD(wParam) == IDC_BUTTON_TEST) { TestConnection(hwndDlg, datap); @@ -438,6 +460,12 @@ ConfigDSN(HWND parent, WORD request, LPC data.host = NULL; data.port = NULL; data.database = NULL; + // TLS settings + data.use_tls = NULL; + data.servercert = NULL; + data.servercerthash = NULL; + data.clientkey = NULL; + data.clientcert = NULL; // Advanced settings data.logfile = NULL; data.schema = NULL; @@ -447,12 +475,10 @@ ConfigDSN(HWND parent, WORD request, LPC data.autocommit = NULL; data.timezone = NULL; data.logfile = NULL; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org