diff --git a/ma_statement.c b/ma_statement.c index 2844979a..a281ecf3 100644 --- a/ma_statement.c +++ b/ma_statement.c @@ -352,7 +352,6 @@ MYSQL_RES* FetchMetadata(MADB_Stmt *Stmt) /* {{{ MADB_StmtReset - reseting Stmt handler for new use */ void MADB_StmtReset(MADB_Stmt *Stmt) { - /* TODO: These all stuff has to be moved to a separate function, smth like MADB_StmtReset */ MADB_StmtFree(Stmt, SQL_CLOSE); MADB_CLEAR_ERROR(&Stmt->Error); MADB_FREE(Stmt->NativeSql); @@ -686,16 +685,6 @@ SQLRETURN MADB_StmtPutData(MADB_Stmt *Stmt, SQLPOINTER DataPtr, SQLLEN StrLen_or } /* }}} */ -/* TODO: This function doesn't seem to be used anywhere */ -SQLULEN GetOffset(MADB_Stmt *Stmt, SQLUINTEGER Count, MADB_DescRecord *Record, SQLUINTEGER Size) -{ - if (Stmt->Ard->Header.BindType) - return Stmt->Ard->Header.BindType * Count; - if (Size) - return Count * Size; - return Count * Record->OctetLength; -} - /* {{{ MADB_ExecutePositionedUpdate */ SQLRETURN MADB_ExecutePositionedUpdate(MADB_Stmt *Stmt) { @@ -1221,9 +1210,7 @@ SQLRETURN MADB_StmtExecute(MADB_Stmt *Stmt) } if (Stmt->ParamCount) { - //TODO: mysql_stmt_bind_param(Stmt->stmt, Stmt->params); - memcpy(Stmt->stmt->params, Stmt->params, sizeof(MYSQL_BIND) * Stmt->ParamCount); - Stmt->stmt->send_types_to_server= 1; + mysql_stmt_bind_param(Stmt->stmt, Stmt->params); } ret= SQL_SUCCESS; @@ -1654,7 +1641,7 @@ void SwitchEndianness(char *Src, SQLLEN SrcBytes, char *Dst, SQLLEN DstBytes) /* {{{ MADB_FixFetchedValues Converting and/or fixing fetched values if needed */ -SQLRETURN MADB_FixFetchedValues(MADB_Stmt *Stmt, int RowNumber, MYSQL_ROWS *SaveCursor) +SQLRETURN MADB_FixFetchedValues(MADB_Stmt *Stmt, int RowNumber, MYSQL_ROW_OFFSET SaveCursor) { MADB_DescRecord *IrdRec, *ArdRec; int i; @@ -1684,7 +1671,7 @@ SQLRETURN MADB_FixFetchedValues(MADB_Stmt *Stmt, int RowNumber, MYSQL_ROWS *Save { MADB_SetError(&Stmt->Error, MADB_ERR_22002, NULL, 0); if (SaveCursor) - Stmt->stmt->result_cursor= SaveCursor; + mysql_stmt_row_seek(Stmt->stmt, SaveCursor); return Stmt->Error.ReturnValue; } } @@ -1811,10 +1798,10 @@ SQLRETURN MADB_FixFetchedValues(MADB_Stmt *Stmt, int RowNumber, MYSQL_ROWS *Save /* {{{ MADB_StmtFetch */ SQLRETURN MADB_StmtFetch(MADB_Stmt *Stmt, my_bool KeepPosition) { - unsigned int j, rc; - SQLULEN ArraySize= Stmt->Ard->Header.ArraySize; - MADB_Desc *ArdDesc= Stmt->Ard; - MYSQL_ROWS *SaveCursor= NULL; + unsigned int j, rc; + SQLULEN ArraySize= Stmt->Ard->Header.ArraySize; + MADB_Desc *ArdDesc= Stmt->Ard; + MYSQL_ROW_OFFSET SaveCursor= NULL; if (!Stmt->stmt) return SQL_INVALID_HANDLE; @@ -1831,7 +1818,7 @@ SQLRETURN MADB_StmtFetch(MADB_Stmt *Stmt, my_bool KeepPosition) /* We don't know if any of the ARD parameter changed, so we need to rebind */ MADB_FREE(Stmt->result); if (KeepPosition && Stmt->Options.CursorType != SQL_CURSOR_FORWARD_ONLY) - SaveCursor= Stmt->stmt->result_cursor; + SaveCursor= mysql_stmt_row_tell(Stmt->stmt); if (Stmt->Ird->Header.ArrayStatusPtr) { @@ -1937,7 +1924,7 @@ SQLRETURN MADB_StmtFetch(MADB_Stmt *Stmt, my_bool KeepPosition) } if (KeepPosition && Stmt->Options.CursorType != SQL_CURSOR_FORWARD_ONLY && SaveCursor) - Stmt->stmt->result_cursor= SaveCursor; + mysql_stmt_row_seek(Stmt->stmt, SaveCursor); return Stmt->Error.ReturnValue; } /* }}} */ diff --git a/test/dyn_cursor.c b/test/dyn_cursor.c index 30cc2d52..f8fc8ec5 100644 --- a/test/dyn_cursor.c +++ b/test/dyn_cursor.c @@ -183,28 +183,25 @@ ODBC_TEST(my_dynamic_pos_cursor1) (SQLPOINTER)SQL_CURSOR_STATIC, 0)); /* set the cursor name as 'mysqlcur' on Stmt */ - rc = SQLSetCursorName(Stmt, (SQLCHAR *)"mysqlcur", SQL_NTS); - CHECK_STMT_RC(Stmt, rc); + CHECK_STMT_RC(Stmt, SQLSetCursorName(Stmt, (SQLCHAR *)"mysqlcur", SQL_NTS)); - rc = SQLBindCol(Stmt,1,SQL_C_LONG,&nData,0,NULL); - CHECK_STMT_RC(Stmt,rc); + CHECK_STMT_RC(Stmt, SQLBindCol(Stmt, 1, SQL_C_LONG, &nData, 0, NULL)); - rc = SQLBindCol(Stmt,2,SQL_C_CHAR,szData,20,NULL); - CHECK_STMT_RC(Stmt,rc); + CHECK_STMT_RC(Stmt, SQLBindCol(Stmt, 2, SQL_C_CHAR, szData, sizeof(szData[0]), NULL)); - rc = SQLSetStmtAttr(Stmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)3,0); - CHECK_STMT_RC(Stmt,rc); + CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt,SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)3,0)); /* Open the resultset of table 'my_demo_cursor' */ OK_SIMPLE_STMT(Stmt, "SELECT * FROM my_dynamic_cursor"); - /* goto the last row */ - rc = SQLFetchScroll(Stmt, SQL_FETCH_ABSOLUTE, 5L); - CHECK_STMT_RC(Stmt,rc); + /* goto the last row + TODO: This does not really go to the last row - it fetches 3 rows(SQL_ATTR_ROW_ARRAY_SIZE) starting from 5th, and then cursor should be on 5th after the command */ + CHECK_STMT_RC(Stmt, SQLFetchScroll(Stmt, SQL_FETCH_ABSOLUTE, 5L)); - for (i=0; i < 5; i++) + for (i= 5; i < 5 + 3; i++) { - diag("i %d nData: %d szData: %s", i, nData[i], szData[i]); + diag("i %d nData: %d szData: %s", i, nData[i - 5], szData[i - 5]); + is_num(i, nData[i - 5]); } /*rc = SQLSetPos(Stmt,SQL_POSITION,2,SQL_LOCK_NO_CHANGE); @@ -213,19 +210,15 @@ ODBC_TEST(my_dynamic_pos_cursor1) /* now update the name field to 'update' using positioned cursor */ OK_SIMPLE_STMT(hstmt_pos, "UPDATE my_dynamic_cursor SET id=999, name='updated' WHERE CURRENT OF mysqlcur"); - rc = SQLRowCount(hstmt_pos, &nRowCount); - CHECK_STMT_RC(hstmt_pos, rc); + CHECK_STMT_RC(hstmt_pos, SQLRowCount(hstmt_pos, &nRowCount)); diag(" total rows updated:%d\n",nRowCount); is_num(nRowCount, 1); strcpy(szData[1],"updated"); nData[1] = 999; - rc = SQLSetPos(Stmt,2,SQL_DELETE,SQL_LOCK_NO_CHANGE); - CHECK_STMT_RC(Stmt,rc); - - rc = SQLRowCount(Stmt, &nRowCount); - CHECK_STMT_RC(Stmt, rc); + CHECK_STMT_RC(Stmt,SQLSetPos(Stmt,2,SQL_DELETE,SQL_LOCK_NO_CHANGE)); + CHECK_STMT_RC(Stmt, SQLRowCount(Stmt, &nRowCount)); diag(" total rows deleted:%d\n",nRowCount); is_num(nRowCount, 1);