Changeset: 412c07488843 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=412c07488843 Modified Files: NT/installer32/MonetDB-ODBC-Installer.vdproj NT/installer32/MonetDB5-Geom-Module.vdproj NT/installer32/MonetDB5-SQL-Installer.vdproj NT/installer64/MonetDB-ODBC-Installer.vdproj NT/installer64/MonetDB5-Geom-Module.vdproj NT/installer64/MonetDB5-SQL-Installer.vdproj clients/ChangeLog.Apr2012 clients/Tests/exports.stable.out clients/mapilib/mapi.c clients/mapilib/mapi.h clients/odbc/driver/ODBCDbc.c clients/odbc/driver/ODBCDbc.h clients/odbc/driver/SQLConnect.c clients/odbc/driver/SQLExecDirect.c clients/odbc/driver/SQLExecute.c clients/odbc/driver/SQLFetch.c clients/odbc/driver/SQLGetConnectAttr.c clients/odbc/driver/SQLMoreResults.c clients/odbc/driver/SQLSetConnectAttr.c common/stream/stream.c common/stream/stream.h monetdb5/optimizer/opt_prelude.c sql/backends/monet5/sql_gencode.c sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out sql/test/zones.sql tools/merovingian/ChangeLog.Apr2012 tools/merovingian/daemon/argvcmds.c tools/merovingian/daemon/controlrunner.c tools/mserver/mserver5.1 Branch: jacqueline Log Message:
Merged from default diffs (truncated from 575 to 300 lines): diff --git a/NT/installer32/MonetDB-ODBC-Installer.vdproj b/NT/installer32/MonetDB-ODBC-Installer.vdproj --- a/NT/installer32/MonetDB-ODBC-Installer.vdproj +++ b/NT/installer32/MonetDB-ODBC-Installer.vdproj @@ -566,8 +566,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB ODBC Driver" - "ProductCode" = "8:{F553EDA6-208A-4F89-9783-7ADA935E014A}" - "PackageCode" = "8:{C3CFF53E-BE5C-4C30-B071-847452592499}" + "ProductCode" = "8:{4E161B98-9FC8-4512-97D8-EA76C354DA4D}" + "PackageCode" = "8:{D7B51DE5-F620-464F-89E1-5DE3D9103AB2}" "UpgradeCode" = "8:{C1F69378-3F5C-4120-8224-32F07D3458F3}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" diff --git a/NT/installer32/MonetDB5-Geom-Module.vdproj b/NT/installer32/MonetDB5-Geom-Module.vdproj --- a/NT/installer32/MonetDB5-Geom-Module.vdproj +++ b/NT/installer32/MonetDB5-Geom-Module.vdproj @@ -425,8 +425,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB5 SQL GIS Module" - "ProductCode" = "8:{0EB6FD98-A8BB-4E40-A6AB-D0258F937766}" - "PackageCode" = "8:{28CF4984-296C-4CC3-8049-9CE19CC68F1E}" + "ProductCode" = "8:{A61BE52A-99A2-4503-BB5B-3837B0708862}" + "PackageCode" = "8:{5F8AB146-C5BB-4961-95DE-9848D2AF533A}" "UpgradeCode" = "8:{92C89C36-0E86-45E1-B3D8-0D6C91108F30}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" diff --git a/NT/installer32/MonetDB5-SQL-Installer.vdproj b/NT/installer32/MonetDB5-SQL-Installer.vdproj --- a/NT/installer32/MonetDB5-SQL-Installer.vdproj +++ b/NT/installer32/MonetDB5-SQL-Installer.vdproj @@ -5411,8 +5411,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB5" - "ProductCode" = "8:{3639864D-963F-4E5C-A087-17A25EEEC36F}" - "PackageCode" = "8:{18713244-E915-4623-ABB4-FBA11E0CA986}" + "ProductCode" = "8:{66BABD32-D69D-4A89-A7F3-2655D4CD0641}" + "PackageCode" = "8:{D9B2D386-1461-43BC-9A63-93F1BA0D7921}" "UpgradeCode" = "8:{730C595B-DBA6-48D7-94B8-A98780AC92B6}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" diff --git a/NT/installer64/MonetDB-ODBC-Installer.vdproj b/NT/installer64/MonetDB-ODBC-Installer.vdproj --- a/NT/installer64/MonetDB-ODBC-Installer.vdproj +++ b/NT/installer64/MonetDB-ODBC-Installer.vdproj @@ -566,8 +566,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB ODBC Driver" - "ProductCode" = "8:{BCA28DEE-33C4-4897-85D5-98DA9747054A}" - "PackageCode" = "8:{D107C833-4867-4471-B5E7-36C3A5C26F2E}" + "ProductCode" = "8:{0DD096EA-A791-4D97-AD3C-5EC69F2A495E}" + "PackageCode" = "8:{B6C87B73-7277-46B8-B443-65665B5A634C}" "UpgradeCode" = "8:{95ACBC8C-BC4B-4901-AF70-48B54A5C20F7}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" diff --git a/NT/installer64/MonetDB5-Geom-Module.vdproj b/NT/installer64/MonetDB5-Geom-Module.vdproj --- a/NT/installer64/MonetDB5-Geom-Module.vdproj +++ b/NT/installer64/MonetDB5-Geom-Module.vdproj @@ -425,8 +425,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB5 SQL GIS Module" - "ProductCode" = "8:{ED180113-0260-405D-BE84-051345482E57}" - "PackageCode" = "8:{7B8FF815-E532-4549-A621-10E9481DEED9}" + "ProductCode" = "8:{BD1A3C71-3A8E-421D-922D-2B7A19926B5C}" + "PackageCode" = "8:{471DD1DA-9C69-4289-821D-4CC329A8BA94}" "UpgradeCode" = "8:{8E6CDFDE-39B9-43D9-97B3-2440C012845C}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" diff --git a/NT/installer64/MonetDB5-SQL-Installer.vdproj b/NT/installer64/MonetDB5-SQL-Installer.vdproj --- a/NT/installer64/MonetDB5-SQL-Installer.vdproj +++ b/NT/installer64/MonetDB5-SQL-Installer.vdproj @@ -5411,8 +5411,8 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:MonetDB5" - "ProductCode" = "8:{B90D913B-5C67-4BC7-9FB9-0157309A096D}" - "PackageCode" = "8:{70EC6B53-5D37-4A97-931B-2EA93C126810}" + "ProductCode" = "8:{ACC32EDD-13CE-4079-A6E7-D9DD94DA42EE}" + "PackageCode" = "8:{332EB6D8-73DD-48CA-83E7-BB1922FFE3BD}" "UpgradeCode" = "8:{839D3C90-B578-41E2-A004-431440F9E899}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" diff --git a/clients/ChangeLog.Apr2012 b/clients/ChangeLog.Apr2012 --- a/clients/ChangeLog.Apr2012 +++ b/clients/ChangeLog.Apr2012 @@ -1,6 +1,9 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Fri Mar 9 2012 Sjoerd Mullender <sjo...@acm.org> +- ODBC: Implemented the SQL_ATTR_CONNECTION_TIMEOUT attribute. + * Tue Mar 6 2012 Sjoerd Mullender <sjo...@acm.org> - mclient now has a -a (--autocommit) option to turn off autocommit mode. diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -496,7 +496,7 @@ int mapi_split_line(MapiHdl hdl); MapiMsg mapi_start_talking(Mapi mid); MapiMsg mapi_store_field(MapiHdl hdl, int fnr, int outtype, void *outparam); MapiHdl mapi_stream_query(Mapi mid, const char *cmd, int windowsize); -MapiMsg mapi_timeout(Mapi mid, int time); +MapiMsg mapi_timeout(Mapi mid, unsigned int time); MapiMsg mapi_trace(Mapi mid, int flag); char *mapi_unquote(char *msg); MapiMsg mapi_virtual_result(MapiHdl hdl, int columns, const char **columnnames, const char **columntypes, const int *columnlengths, int tuplecount, const char ***tuples); @@ -6169,6 +6169,7 @@ ssize_t mnstr_read_block(stream *s, void ssize_t mnstr_readline(stream *s, void *buf, size_t maxcnt); stream *mnstr_rstream(stream *s); void mnstr_set_byteorder(stream *s, char bigendian); +void mnstr_settimeout(stream *s, unsigned int secs); int mnstr_type(stream *s); ssize_t mnstr_write(stream *s, const void *buf, size_t elmsize, size_t cnt); int mnstr_writeBte(stream *s, signed char val); diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c --- a/clients/mapilib/mapi.c +++ b/clients/mapilib/mapi.c @@ -3049,12 +3049,14 @@ prepareQuery(MapiHdl hdl, const char *cm MapiMsg -mapi_timeout(Mapi mid, int timeout) +mapi_timeout(Mapi mid, unsigned int timeout) { mapi_check(mid, "mapi_timeout"); if (mid->trace == MAPI_TRACE) - printf("Set timeout to %d\n", timeout); - return mapi_setError(mid, "Operation not yet implemented", "mapi_timeout", MERROR); + printf("Set timeout to %u\n", timeout); + mnstr_settimeout(mid->to, timeout); + mnstr_settimeout(mid->from, timeout); + return MOK; } static MapiMsg diff --git a/clients/mapilib/mapi.h b/clients/mapilib/mapi.h --- a/clients/mapilib/mapi.h +++ b/clients/mapilib/mapi.h @@ -207,7 +207,7 @@ mapi_export MapiMsg mapi_cache_freeup(Ma mapi_export MapiMsg mapi_quick_response(MapiHdl hdl, FILE *fd); mapi_export MapiMsg mapi_seek_row(MapiHdl hdl, mapi_int64 rowne, int whence); -mapi_export MapiMsg mapi_timeout(Mapi mid, int time); +mapi_export MapiMsg mapi_timeout(Mapi mid, unsigned int time); mapi_export int mapi_fetch_row(MapiHdl hdl); mapi_export mapi_int64 mapi_fetch_all_rows(MapiHdl hdl); mapi_export int mapi_get_field_count(MapiHdl hdl); 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 @@ -80,6 +80,7 @@ newODBCDbc(ODBCEnv *env) dbc->Connected = 0; dbc->sql_attr_autocommit = SQL_AUTOCOMMIT_ON; /* default is autocommit */ dbc->sql_attr_metadata_id = SQL_FALSE; + dbc->sql_attr_connection_timeout = 0; dbc->mid = NULL; dbc->major = 0; dbc->minor = 0; diff --git a/clients/odbc/driver/ODBCDbc.h b/clients/odbc/driver/ODBCDbc.h --- a/clients/odbc/driver/ODBCDbc.h +++ b/clients/odbc/driver/ODBCDbc.h @@ -67,6 +67,7 @@ typedef struct tODBCDRIVERDBC { int Connected; /* 1 is Yes, 0 is No */ SQLUINTEGER sql_attr_autocommit; SQLUINTEGER sql_attr_metadata_id; + SQLUINTEGER sql_attr_connection_timeout; /* MonetDB connection handle & status information */ Mapi mid; /* connection with server */ diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c --- a/clients/odbc/driver/SQLConnect.c +++ b/clients/odbc/driver/SQLConnect.c @@ -266,6 +266,8 @@ SQLConnect_(ODBCDbc *dbc, if (dbc->major > 11 || (dbc->major == 11 && dbc->minor >= 5)) mapi_set_size_header(mid, 1); + /* set timeout after we're connected */ + mapi_timeout(mid, dbc->sql_attr_connection_timeout); } return rc; diff --git a/clients/odbc/driver/SQLExecDirect.c b/clients/odbc/driver/SQLExecDirect.c --- a/clients/odbc/driver/SQLExecDirect.c +++ b/clients/odbc/driver/SQLExecDirect.c @@ -124,8 +124,8 @@ ODBCExecDirect(ODBCStmt *stmt, SQLCHAR * case MOK: break; case MTIMEOUT: - /* Communication link failure */ - addStmtError(stmt, "08S01", mapi_error_str(stmt->Dbc->mid), 0); + /* Timeout expired / Communication link failure */ + addStmtError(stmt, stmt->Dbc->sql_attr_connection_timeout ? "HYT00" : "08S01", mapi_error_str(stmt->Dbc->mid), 0); return SQL_ERROR; default: /* reuse variable for error string */ diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c --- a/clients/odbc/driver/SQLExecute.c +++ b/clients/odbc/driver/SQLExecute.c @@ -456,8 +456,8 @@ SQLExecute_(ODBCStmt *stmt) case MOK: break; case MTIMEOUT: - /* Communication link failure */ - addStmtError(stmt, "08S01", mapi_error_str(stmt->Dbc->mid), 0); + /* Timeout expired / Communication link failure */ + addStmtError(stmt, stmt->Dbc->sql_attr_connection_timeout ? "HYT00" : "08S01", mapi_error_str(stmt->Dbc->mid), 0); return SQL_ERROR; default: /* reuse variable query for error message */ diff --git a/clients/odbc/driver/SQLFetch.c b/clients/odbc/driver/SQLFetch.c --- a/clients/odbc/driver/SQLFetch.c +++ b/clients/odbc/driver/SQLFetch.c @@ -110,8 +110,9 @@ SQLFetch_(ODBCStmt *stmt) case MTIMEOUT: if (statusp) *statusp = SQL_ROW_ERROR; - /* Communication link failure */ - addStmtError(stmt, "08S01", mapi_error_str(stmt->Dbc->mid), 0); + /* Timeout expired / Communication + * link failure */ + addStmtError(stmt, stmt->Dbc->sql_attr_connection_timeout ? "HYT00" : "08S01", mapi_error_str(stmt->Dbc->mid), 0); return SQL_ERROR; default: if (statusp) diff --git a/clients/odbc/driver/SQLGetConnectAttr.c b/clients/odbc/driver/SQLGetConnectAttr.c --- a/clients/odbc/driver/SQLGetConnectAttr.c +++ b/clients/odbc/driver/SQLGetConnectAttr.c @@ -74,7 +74,7 @@ SQLGetConnectAttr_(ODBCDbc *dbc, *(SQLUINTEGER *) ValuePtr = dbc->mid && mapi_is_connected(dbc->mid) ? SQL_CD_FALSE : SQL_CD_TRUE; break; case SQL_ATTR_CONNECTION_TIMEOUT: - *(SQLUINTEGER *) ValuePtr = 0; /* no timeout */ + *(SQLUINTEGER *) ValuePtr = dbc->sql_attr_connection_timeout; break; case SQL_ATTR_LOGIN_TIMEOUT: *(SQLUINTEGER *) ValuePtr = 0; /* no timeout */ diff --git a/clients/odbc/driver/SQLMoreResults.c b/clients/odbc/driver/SQLMoreResults.c --- a/clients/odbc/driver/SQLMoreResults.c +++ b/clients/odbc/driver/SQLMoreResults.c @@ -66,8 +66,8 @@ SQLMoreResults(SQLHSTMT StatementHandle) addStmtError(stmt, "HY000", mapi_error_str(stmt->Dbc->mid), 0); return SQL_ERROR; case MTIMEOUT: - /* Communication link failure */ - addStmtError(stmt, "08S01", mapi_error_str(stmt->Dbc->mid), 0); + /* Timeout expired / Communication link failure */ + addStmtError(stmt, stmt->Dbc->sql_attr_connection_timeout ? "HYT00" : "08S01", mapi_error_str(stmt->Dbc->mid), 0); return SQL_ERROR; default: return ODBCInitResult(stmt); diff --git a/clients/odbc/driver/SQLSetConnectAttr.c b/clients/odbc/driver/SQLSetConnectAttr.c --- a/clients/odbc/driver/SQLSetConnectAttr.c +++ b/clients/odbc/driver/SQLSetConnectAttr.c @@ -96,11 +96,15 @@ SQLSetConnectAttr_(ODBCDbc *dbc, free(dbc->dbname); dbc->dbname = dupODBCstring(ValuePtr, StringLength); break; + case SQL_ATTR_CONNECTION_TIMEOUT: + dbc->sql_attr_connection_timeout = (SQLUINTEGER) (size_t) ValuePtr; + if (dbc->mid) + mapi_timeout(dbc->mid, dbc->sql_attr_connection_timeout); + break; /* TODO: implement connection attribute behavior */ case SQL_ATTR_ACCESS_MODE: case SQL_ATTR_ASYNC_ENABLE: - case SQL_ATTR_CONNECTION_TIMEOUT: case SQL_ATTR_LOGIN_TIMEOUT: case SQL_ATTR_ODBC_CURSORS: case SQL_ATTR_PACKET_SIZE: diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -130,6 +130,7 @@ struct stream { short access; /* read/write */ short type; /* ascii/binary */ char *name; + unsigned int timeout; union { void *p; int i; @@ -146,6 +147,7 @@ struct stream { int (*fsync) (stream *s); int (*fgetpos) (stream *s, lng *p); int (*fsetpos) (stream *s, lng p); + void (*update_timeout) (stream *s); }; int @@ -226,6 +228,14 @@ mnstr_write(stream *s, const void *buf, } void +mnstr_settimeout(stream *s, unsigned int secs) +{ + s->timeout = secs; + if (s->update_timeout) _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list