Skip to content

Commit 50b29ba

Browse files
committed
step
1 parent 2687d98 commit 50b29ba

File tree

16 files changed

+417
-272
lines changed

16 files changed

+417
-272
lines changed

odbc/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
add_library(ydb-odbc SHARED
2-
src/utils/result.cpp
2+
src/utils/cursor.cpp
33
src/utils/types.cpp
44
src/utils/util.cpp
55
src/utils/convert.cpp

odbc/examples/basic/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
add_executable(odbc_basic
2-
main.cpp
2+
main.cpp
33
)
44

55
target_link_libraries(odbc_basic
6-
PRIVATE
7-
ODBC::ODBC
6+
PRIVATE
7+
ODBC::ODBC
88
)
99
target_compile_definitions(odbc_basic
10-
PRIVATE
11-
ODBC_DRIVER_PATH="$<TARGET_FILE:ydb-odbc>"
10+
PRIVATE
11+
ODBC_DRIVER_PATH="$<TARGET_FILE:ydb-odbc>"
1212
)
1313

1414
add_dependencies(odbc_basic ydb-odbc)

odbc/examples/basic/main.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,10 @@ int main() {
6363
std::cout << "6. Executing query" << std::endl;
6464
SQLCHAR query[] = R"(
6565
DECLARE $p1 AS Int64?;
66-
SELECT $p1 + 1, 'test1';
67-
SELECT $p1 + 2, 'test2';
68-
SELECT $p1 + 3, 'test3';
69-
SELECT $p1 + 4, 'test4';
70-
SELECT $p1 + 5, 'test5';
71-
SELECT $p1 + 6, 'test6';
72-
SELECT $p1 + 7, 'test7';
73-
SELECT $p1 + 8, 'test8';
74-
SELECT $p1 + 9, 'test9';
66+
SELECT id, data from test_table WHERE id == $p1;
7567
)";
7668

77-
int64_t paramValue = 42;
69+
int64_t paramValue = 1;
7870
SQLLEN paramInd = 0;
7971
ret = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &paramValue, 0, &paramInd);
8072
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
@@ -129,6 +121,8 @@ int main() {
129121
}
130122

131123
std::cout << "8. Cleaning up" << std::endl;
124+
125+
SQLCloseCursor(hstmt);
132126
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
133127
SQLDisconnect(hdbc);
134128
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

odbc/examples/scheme/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
add_executable(odbc_scheme
2-
main.cpp
2+
main.cpp
33
)
44

55
target_link_libraries(odbc_scheme
6-
PRIVATE
7-
ODBC::ODBC
6+
PRIVATE
7+
ODBC::ODBC
88
)
99
target_compile_definitions(odbc_scheme
10-
PRIVATE
11-
ODBC_DRIVER_PATH="$<TARGET_FILE:ydb-odbc>"
10+
PRIVATE
11+
ODBC_DRIVER_PATH="$<TARGET_FILE:ydb-odbc>"
1212
)
1313

1414
add_dependencies(odbc_scheme ydb-odbc)

odbc/examples/scheme/main.cpp

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -60,33 +60,6 @@ int main() {
6060
return 1;
6161
}
6262

63-
// std::cout << "6. Executing query" << std::endl;
64-
// SQLCHAR query[] = R"(
65-
// DECLARE $p1 AS Int64?;
66-
// SELECT $p1 + 1, 'test1';
67-
// SELECT $p1 + 2, 'test2';
68-
// SELECT $p1 + 3, 'test3';
69-
// SELECT $p1 + 4, 'test4';
70-
// SELECT $p1 + 5, 'test5';
71-
// SELECT $p1 + 6, 'test6';
72-
// SELECT $p1 + 7, 'test7';
73-
// SELECT $p1 + 8, 'test8';
74-
// SELECT $p1 + 9, 'test9';
75-
// )";
76-
77-
// int64_t paramValue = 42;
78-
// SQLLEN paramInd = 0;
79-
// ret = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &paramValue, 0, &paramInd);
80-
// if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
81-
// std::cerr << "Error binding parameter" << std::endl;
82-
// PrintOdbcError(SQL_HANDLE_STMT, hstmt);
83-
// SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
84-
// SQLDisconnect(hdbc);
85-
// SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
86-
// SQLFreeHandle(SQL_HANDLE_ENV, henv);
87-
// return 1;
88-
// }
89-
9063
std::cout << "6. Getting tables" << std::endl;
9164

9265
SQLCHAR pattern[] = "/local";
@@ -127,8 +100,8 @@ int main() {
127100
return 1;
128101
}
129102

130-
std::cout << "Result column 1: " << value1 << std::endl;
131-
std::cout << "Result column 2: " << value2 << std::endl;
103+
std::cout << "Table name: " << value1 << std::endl;
104+
std::cout << "Table type: " << value2 << std::endl;
132105

133106
std::cout << "--------------------------------" << std::endl;
134107
}

odbc/src/odbc_driver.cpp

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

155177
SQLRETURN 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

Comments
 (0)