arpadboda commented on a change in pull request #656: MINIFI-1013 Used soci 
library.
URL: https://github.com/apache/nifi-minifi-cpp/pull/656#discussion_r331059819
 
 

 ##########
 File path: extensions/sql/win/Odbc.cpp
 ##########
 @@ -0,0 +1,182 @@
+#include "../sql/Odbc.h"
+
+#pragma comment(lib, "Odbc32.lib")
+
+inline bool IsSuccess(SQLRETURN ret) {
+  return ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO;
+}
+
+
+// ODBCDatabase class
+void ODBCDatabase::SQLAlloc() {
+       SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv_);
+       SQLSetEnvAttr(hEnv_, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
+       SQLAllocHandle(SQL_HANDLE_DBC, hEnv_, &hDbc_); 
+}
+
+void ODBCDatabase::SQLFree() {
+  if (hDbc_) {
+    SQLFreeHandle(SQL_HANDLE_DBC, hDbc_);
+  }
+  hDbc_ = 0;
+  
+  if (hEnv_) {
+    SQLFreeHandle(SQL_HANDLE_ENV, hEnv_);
+  }
+       hEnv_ = 0;
+}
+
+void ODBCDatabase::Close() {
+       isConnected_ = false;
+  
+  if (hDbc_) {
+    SQLDisconnect(hDbc_);
+  }
+
+       SQLFree();
+}
+
+void ODBCDatabase::SetConnectionTimeout(LONG seconds) {
+  if (hDbc_) {
+    SQLSetConnectAttr(hDbc_, SQL_ATTR_CONNECTION_TIMEOUT, (SQLPOINTER)seconds, 
0);
+  }
+
+       connectionTimeout_ = seconds;
+}
+
+bool ODBCDatabase::DriverConnect(const std::string& connStr) {
+  SQLSMALLINT connStrOut{};
+  auto ret = SQLDriverConnect(hDbc_, 0,  (SQLCHAR*)connStr.c_str(),  SQL_NTS,  
0, 0,  &connStrOut,  0);
+       
+       return isConnected_ = IsSuccess(ret);
+}
+
+LONG ODBCDatabase::GetConnectionTimeout() {
+  LONG seconds{};
+       SQLGetConnectAttr(hDbc_, SQL_ATTR_CONNECTION_TIMEOUT, &seconds, 0, 0);
+
+       return seconds;
+}
+
+bool ODBCDatabase::Execute(CHAR *sqlStr) {
+  SQLHSTMT hStmt{};
+       SQLAllocHandle(SQL_HANDLE_STMT, hDbc_, &hStmt);
+  auto ret = SQLExecDirect(hStmt, (SQLCHAR*)sqlStr, SQL_NTS);
+  if (!IsSuccess(ret)) {
+    rowCount_ = 0;
+    return false;
+  }
+       
+  SQLINTEGER rowCount{};
+  SQLRowCount(hStmt, &rowCount);
+       
+       rowCount_ = rowCount;
+
+       return true;
+}
+
+
+// ODBCRecordset Class
+ODBCRecordset::ODBCRecordset(ODBCDatabase* pDb) {
+  hDbc_ = *pDb;
+
+  AllocStmt();
+}
+
+ODBCRecordset::~ODBCRecordset() {
+  Close();
+}
+
+
+void ODBCRecordset::AllocStmt() {
+       SQLAllocHandle(SQL_HANDLE_STMT, hDbc_, &hStmt_);
+}
+
+bool ODBCRecordset::Open(const std::string& sqlStr) {
+  auto ret = SQLExecDirect(hStmt_, (SQLCHAR*)sqlStr.c_str(), SQL_NTS);
+       if (!IsSuccess(ret))    {
+               return false;
+       }
+       
+  ret = SQLFetch(hStmt_);
+  if (!IsSuccess(ret)) {
 
 Review comment:
   Can we simply return this? :)

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to