Changeset: 78f1b360b7af for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=78f1b360b7af Modified Files: clients/odbc/driver/ODBCConvert.c clients/odbc/driver/ODBCDbc.h clients/odbc/driver/ODBCDesc.h clients/odbc/driver/ODBCError.c clients/odbc/driver/ODBCStmt.h clients/odbc/driver/ODBCUtil.c clients/odbc/driver/SQLColAttribute.c clients/odbc/driver/SQLColAttributes.c clients/odbc/driver/SQLExecute.c clients/odbc/driver/SQLFetch.c clients/odbc/driver/SQLGetConnectAttr.c clients/odbc/driver/SQLGetConnectOption.c clients/odbc/driver/SQLGetDescField.c clients/odbc/driver/SQLGetDiagField.c clients/odbc/driver/SQLGetDiagRec.c clients/odbc/driver/SQLGetInfo.c clients/odbc/driver/SQLGetStmtAttr.c clients/odbc/driver/SQLGetStmtOption.c clients/odbc/driver/SQLSetConnectAttr.c clients/odbc/driver/SQLSetDescField.c clients/odbc/driver/SQLSetDescRec.c clients/odbc/driver/SQLSetEnvAttr.c clients/odbc/driver/SQLSetStmtAttr.c Branch: default Log Message:
Merge with Oct2014 branch. diffs (truncated from 2087 to 300 lines): diff --git a/clients/odbc/driver/ODBCConvert.c b/clients/odbc/driver/ODBCConvert.c --- a/clients/odbc/driver/ODBCConvert.c +++ b/clients/odbc/driver/ODBCConvert.c @@ -989,7 +989,7 @@ ODBCFetch(ODBCStmt *stmt, SQLSMALLINT precision, SQLSMALLINT scale, SQLINTEGER datetime_interval_precision, - SQLINTEGER offset, + SQLLEN offset, SQLULEN row) { char *data; @@ -998,7 +998,7 @@ ODBCFetch(ODBCStmt *stmt, SQLUINTEGER maxdatetimeval; ODBCDesc *ard, *ird; ODBCDescRec *irdrec, *ardrec; - SQLUINTEGER bind_type; + SQLINTEGER bind_type; /* various interpretations of the input data */ bignum_t nval; @@ -1029,9 +1029,9 @@ ODBCFetch(ODBCStmt *stmt, ptr = (SQLPOINTER) ((char *) ptr + offset); if (lenp) - lenp = (SQLLEN *) ((char *) lenp + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(*lenp) : bind_type)); + lenp = (SQLLEN *) ((char *) lenp + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(*lenp) : bind_type)); if (nullp) - nullp = (SQLLEN *) ((char *) nullp + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(*nullp) : bind_type)); + nullp = (SQLLEN *) ((char *) nullp + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(*nullp) : bind_type)); /* translate default type */ /* note, type can't be SQL_ARD_TYPE since when this function @@ -1901,7 +1901,7 @@ ODBCFetch(ODBCStmt *stmt, /* break; -- not reached */ case SQL_C_BIT: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(unsigned char) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(unsigned char) : bind_type)); if (lenp) *lenp = 1; @@ -1979,7 +1979,7 @@ ODBCFetch(ODBCStmt *stmt, if (lenp) *lenp = sizeof(signed char); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(signed char) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(signed char) : bind_type)); break; case SQL_C_SSHORT: case SQL_C_SHORT: @@ -1987,7 +1987,7 @@ ODBCFetch(ODBCStmt *stmt, if (lenp) *lenp = sizeof(short); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(short) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(short) : bind_type)); break; case SQL_C_SLONG: case SQL_C_LONG: @@ -1995,14 +1995,14 @@ ODBCFetch(ODBCStmt *stmt, if (lenp) *lenp = sizeof(int); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(int) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(int) : bind_type)); break; case SQL_C_SBIGINT: maxval <<= 63; if (lenp) *lenp = sizeof(SQLBIGINT); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLBIGINT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQLBIGINT) : bind_type)); break; } switch (sql_type) { @@ -2082,27 +2082,27 @@ ODBCFetch(ODBCStmt *stmt, if (lenp) *lenp = sizeof(unsigned char); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(unsigned char) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(unsigned char) : bind_type)); break; case SQL_C_USHORT: maxval <<= 16; if (lenp) *lenp = sizeof(unsigned short); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(unsigned short) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(unsigned short) : bind_type)); break; case SQL_C_ULONG: maxval <<= 32; if (lenp) *lenp = sizeof(unsigned int); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(unsigned int) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(unsigned int) : bind_type)); break; case SQL_C_UBIGINT: if (lenp) *lenp = sizeof(SQLUBIGINT); if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLUBIGINT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQLUBIGINT) : bind_type)); break; } maxval--; @@ -2170,7 +2170,7 @@ ODBCFetch(ODBCStmt *stmt, } case SQL_C_NUMERIC: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQL_NUMERIC_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQL_NUMERIC_STRUCT) : bind_type)); switch (sql_type) { case SQL_CHAR: @@ -2274,7 +2274,7 @@ ODBCFetch(ODBCStmt *stmt, } if (type == SQL_C_FLOAT) { if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(float) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(float) : bind_type)); if (fval < -FLT_MAX || fval > FLT_MAX) { /* Numeric value out of range */ addStmtError(stmt, "22003", NULL, 0); @@ -2285,7 +2285,7 @@ ODBCFetch(ODBCStmt *stmt, *lenp = sizeof(float); } else { if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(double) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(double) : bind_type)); *(double *) ptr = fval; if (lenp) @@ -2294,7 +2294,7 @@ ODBCFetch(ODBCStmt *stmt, break; case SQL_C_TYPE_DATE: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(DATE_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(DATE_STRUCT) : bind_type)); i = 1; switch (sql_type) { @@ -2333,7 +2333,7 @@ ODBCFetch(ODBCStmt *stmt, break; case SQL_C_TYPE_TIME: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(TIME_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(TIME_STRUCT) : bind_type)); i = 1; switch (sql_type) { @@ -2372,7 +2372,7 @@ ODBCFetch(ODBCStmt *stmt, break; case SQL_C_TYPE_TIMESTAMP: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(TIMESTAMP_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(TIMESTAMP_STRUCT) : bind_type)); i = 1; switch (sql_type) { @@ -2437,7 +2437,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_C_INTERVAL_MONTH: case SQL_C_INTERVAL_YEAR_TO_MONTH: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQL_INTERVAL_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQL_INTERVAL_STRUCT) : bind_type)); switch (sql_type) { case SQL_CHAR: @@ -2517,7 +2517,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_C_INTERVAL_HOUR_TO_SECOND: case SQL_C_INTERVAL_MINUTE_TO_SECOND: if (ardrec && row > 0) - ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQL_INTERVAL_STRUCT) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQL_INTERVAL_STRUCT) : bind_type)); switch (sql_type) { case SQL_CHAR: @@ -2793,7 +2793,7 @@ ODBCFetch(ODBCStmt *stmt, SQLRETURN ODBCStore(ODBCStmt *stmt, SQLUSMALLINT param, - SQLINTEGER offset, + SQLLEN offset, SQLULEN row, char **bufp, size_t *bufposp, @@ -2803,7 +2803,7 @@ ODBCStore(ODBCStmt *stmt, ODBCDescRec *ipdrec, *apdrec; SQLPOINTER ptr; SQLLEN *strlen_or_ind_ptr; - SQLUINTEGER bind_type; + SQLINTEGER bind_type; SQLSMALLINT ctype, sqltype; char *sval = NULL; SQLLEN slen = 0; @@ -2828,10 +2828,10 @@ ODBCStore(ODBCStmt *stmt, bind_type = stmt->ApplParamDescr->sql_desc_bind_type; ptr = apdrec->sql_desc_data_ptr; if (ptr && offset) - ptr = (SQLPOINTER) ((char *) ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLPOINTER) : bind_type)); + ptr = (SQLPOINTER) ((char *) ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQLPOINTER) : bind_type)); strlen_or_ind_ptr = apdrec->sql_desc_indicator_ptr; if (strlen_or_ind_ptr && offset) - strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLINTEGER) : bind_type)); + strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQLINTEGER) : bind_type)); if (ptr == NULL && (strlen_or_ind_ptr == NULL || *strlen_or_ind_ptr != SQL_NULL_DATA)) { /* COUNT field incorrect */ @@ -2868,7 +2868,7 @@ ODBCStore(ODBCStmt *stmt, strlen_or_ind_ptr = apdrec->sql_desc_octet_length_ptr; if (strlen_or_ind_ptr && offset) - strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLINTEGER) : bind_type)); + strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + offset + row * (bind_type == SQL_BIND_BY_COLUMN ? (SQLINTEGER) sizeof(SQLINTEGER) : bind_type)); switch (ctype) { case SQL_C_CHAR: 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 @@ -163,6 +163,6 @@ SQLRETURN SQLSetConnectAttr_(ODBCDbc *db * Function to translate an ODBC SQL query to native format. * The return value is a freshly allocated null-terminated string. */ -extern char *ODBCTranslateSQL(ODBCDbc *dbc, const SQLCHAR *query, size_t length, SQLUINTEGER noscan); +extern char *ODBCTranslateSQL(ODBCDbc *dbc, const SQLCHAR *query, size_t length, SQLULEN noscan); #endif diff --git a/clients/odbc/driver/ODBCDesc.h b/clients/odbc/driver/ODBCDesc.h --- a/clients/odbc/driver/ODBCDesc.h +++ b/clients/odbc/driver/ODBCDesc.h @@ -45,9 +45,9 @@ typedef struct { SQLCHAR *sql_desc_name; SQLSMALLINT sql_desc_nullable; SQLINTEGER sql_desc_num_prec_radix; - SQLULEN sql_desc_octet_length; + SQLLEN sql_desc_octet_length; SQLLEN *sql_desc_octet_length_ptr; - SQLINTEGER sql_desc_parameter_type; + SQLSMALLINT sql_desc_parameter_type; SQLSMALLINT sql_desc_precision; SQLSMALLINT sql_desc_rowver; SQLSMALLINT sql_desc_scale; @@ -74,8 +74,8 @@ typedef struct { SQLSMALLINT sql_desc_alloc_type; SQLULEN sql_desc_array_size; SQLUSMALLINT *sql_desc_array_status_ptr; - SQLINTEGER *sql_desc_bind_offset_ptr; - SQLUINTEGER sql_desc_bind_type; + SQLLEN *sql_desc_bind_offset_ptr; + SQLINTEGER sql_desc_bind_type; SQLSMALLINT sql_desc_count; SQLULEN *sql_desc_rows_processed_ptr; } ODBCDesc; diff --git a/clients/odbc/driver/ODBCError.c b/clients/odbc/driver/ODBCError.c --- a/clients/odbc/driver/ODBCError.c +++ b/clients/odbc/driver/ODBCError.c @@ -351,11 +351,8 @@ getNativeErrorCode(ODBCError *error) ODBCError * getErrorRec(ODBCError *error, int recNumber) { - while (error && --recNumber > 0) { + while (error && --recNumber > 0) error = error->next; - if (!error) - return NULL; - } return error; } diff --git a/clients/odbc/driver/ODBCStmt.h b/clients/odbc/driver/ODBCStmt.h --- a/clients/odbc/driver/ODBCStmt.h +++ b/clients/odbc/driver/ODBCStmt.h @@ -92,9 +92,9 @@ typedef struct tODBCDRIVERSTMT { int querytype; /* query type as returned by server */ SQLUINTEGER cursorType; - SQLUINTEGER cursorScrollable; - SQLUINTEGER retrieveData; - SQLUINTEGER noScan; + SQLULEN cursorScrollable; + SQLULEN retrieveData; + SQLULEN noScan; ODBCDesc *ApplRowDescr; /* Application Row Descriptor (ARD) */ ODBCDesc *ApplParamDescr; /* Application Parameter Descriptor (APD) */ @@ -185,9 +185,9 @@ SQLRETURN ODBCGetData(ODBCStmt *stmt, SQ SQLRETURN ODBCFetch(ODBCStmt *stmt, SQLUSMALLINT col, SQLSMALLINT type, SQLPOINTER ptr, SQLLEN buflen, SQLLEN *lenp, SQLLEN *nullp, SQLSMALLINT precision, SQLSMALLINT scale, - SQLINTEGER datetime_interval_precision, SQLINTEGER offset, + SQLINTEGER datetime_interval_precision, SQLLEN offset, SQLULEN row); -SQLRETURN ODBCStore(ODBCStmt *stmt, SQLUSMALLINT param, SQLINTEGER offset, +SQLRETURN ODBCStore(ODBCStmt *stmt, SQLUSMALLINT param, SQLLEN offset, SQLULEN row, char **bufp, size_t *bufposp, size_t *buflenp, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list