Skip to content

Commit 7ca78cf

Browse files
committed
* src/__octave_odbc__.cc: Use dynamic statement size (Issue #3)
1 parent f3030e8 commit 7ca78cf

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/__octave_odbc__.cc

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,8 @@ octave_odbc::run (const std::string &query, octave_value &v)
481481

482482
rc = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &hstmt);
483483

484-
SQLCHAR SQLStatement[1024];
484+
unsigned int statement_size = query.length();
485+
SQLCHAR SQLStatement[statement_size+1];
485486
strcpy((char *)SQLStatement, query.c_str());
486487

487488
// Execute the statement.
@@ -511,6 +512,27 @@ octave_odbc::run (const std::string &query, octave_value &v)
511512
SQLSMALLINT cols = 0;
512513
rc = SQLNumResultCols(hstmt, &cols);
513514

515+
if (rc == SQL_SUCCESS_WITH_INFO || rc == SQL_ERROR)
516+
{
517+
SQLCHAR SqlState[6], Msg[SQL_MAX_MESSAGE_LENGTH];
518+
SQLINTEGER NativeError;
519+
SQLSMALLINT i, MsgLen;
520+
SQLRETURN rc2;
521+
522+
i = 1;
523+
while ((rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen)) == SQL_SUCCESS || rc2 == SQL_SUCCESS_WITH_INFO)
524+
{
525+
i++;
526+
message = (char*)Msg;
527+
}
528+
}
529+
530+
if (rc == SQL_ERROR)
531+
{
532+
SQLFreeHandle( SQL_HANDLE_STMT, hstmt);
533+
return false;
534+
}
535+
514536
if (cols != 0)
515537
{
516538
octave_map om;

0 commit comments

Comments
 (0)