@@ -149,7 +149,29 @@ SQLRETURN SQL_API SQLExecDirect(SQLHSTMT statementHandle,
149149 return SQL_INVALID_HANDLE;
150150 }
151151
152- return stmt->ExecDirect (NYdb::NOdbc::GetString (statementText, textLength));
152+ auto ret = stmt->Prepare (NYdb::NOdbc::GetString (statementText, textLength));
153+ if (ret != SQL_SUCCESS) {
154+ return ret;
155+ }
156+ return stmt->Execute ();
157+ }
158+
159+ SQLRETURN SQL_API SQLPrepare (SQLHSTMT statementHandle,
160+ SQLCHAR* statementText,
161+ SQLINTEGER textLength) {
162+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
163+ if (!stmt) {
164+ return SQL_INVALID_HANDLE;
165+ }
166+ return stmt->Prepare (NYdb::NOdbc::GetString (statementText, textLength));
167+ }
168+
169+ SQLRETURN SQL_API SQLExecute (SQLHSTMT statementHandle) {
170+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
171+ if (!stmt) {
172+ return SQL_INVALID_HANDLE;
173+ }
174+ return stmt->Execute ();
153175}
154176
155177SQLRETURN SQL_API SQLFetch (SQLHSTMT statementHandle) {
@@ -333,4 +355,63 @@ SQLRETURN SQL_API SQLTables(SQLHSTMT statementHandle,
333355 NYdb::NOdbc::GetString (tableType, nameLength4));
334356}
335357
358+ SQLRETURN SQL_API SQLCloseCursor (SQLHSTMT statementHandle) {
359+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
360+ if (!stmt) {
361+ return SQL_INVALID_HANDLE;
362+ }
363+
364+ return stmt->Close (false );
365+ }
366+
367+ SQLRETURN SQL_API SQLFreeStmt (SQLHSTMT statementHandle, SQLUSMALLINT option) {
368+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
369+ if (!stmt) {
370+ return SQL_INVALID_HANDLE;
371+ }
372+ switch (option) {
373+ case SQL_CLOSE:
374+ return stmt->Close (true );
375+ case SQL_DROP:
376+ return SQLFreeHandle (SQL_HANDLE_STMT, statementHandle);
377+ case SQL_UNBIND:
378+ stmt->UnbindColumns ();
379+ return SQL_SUCCESS;
380+ case SQL_RESET_PARAMS:
381+ stmt->ResetParams ();
382+ return SQL_SUCCESS;
383+ default :
384+ return SQL_ERROR;
385+ }
386+ }
387+
388+ SQLRETURN SQL_API SQLFetchScroll (SQLHSTMT statementHandle, SQLSMALLINT fetchOrientation, SQLLEN fetchOffset) {
389+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
390+ if (!stmt) {
391+ return SQL_INVALID_HANDLE;
392+ }
393+ if (fetchOrientation == SQL_FETCH_NEXT) {
394+ return stmt->Fetch ();
395+ } else {
396+ stmt->AddError (" HYC00" , 0 , " Only SQL_FETCH_NEXT is supported" );
397+ return SQL_ERROR;
398+ }
399+ }
400+
401+ SQLRETURN SQL_API SQLRowCount (SQLHSTMT statementHandle, SQLLEN* rowCount) {
402+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
403+ if (!stmt) {
404+ return SQL_INVALID_HANDLE;
405+ }
406+ return stmt->RowCount (rowCount);
407+ }
408+
409+ SQLRETURN SQL_API SQLNumResultCols (SQLHSTMT statementHandle, SQLSMALLINT* colCount) {
410+ auto stmt = static_cast <NYdb::NOdbc::TStatement*>(statementHandle);
411+ if (!stmt) {
412+ return SQL_INVALID_HANDLE;
413+ }
414+ return stmt->NumResultCols (colCount);
415+ }
416+
336417}
0 commit comments