diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-24 04:08:56 +0000 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-12-24 04:08:56 +0000 | 
| commit | 63d9cbb434ec4f6e828083b99d638127cfce7a95 (patch) | |
| tree | 2dfcf95372467a9119147265fccfba058c617b8a /libodbcpp/selectcommand.cpp | |
| parent | Use parent glibmm (diff) | |
| download | libdbpp-odbc-63d9cbb434ec4f6e828083b99d638127cfce7a95.tar.bz2 libdbpp-odbc-63d9cbb434ec4f6e828083b99d638127cfce7a95.tar.xz libdbpp-odbc-63d9cbb434ec4f6e828083b99d638127cfce7a95.zip  | |
ODBC files prefixed with odbc-
Diffstat (limited to 'libodbcpp/selectcommand.cpp')
| -rw-r--r-- | libodbcpp/selectcommand.cpp | 144 | 
1 files changed, 0 insertions, 144 deletions
diff --git a/libodbcpp/selectcommand.cpp b/libodbcpp/selectcommand.cpp deleted file mode 100644 index 744c2c2..0000000 --- a/libodbcpp/selectcommand.cpp +++ /dev/null @@ -1,144 +0,0 @@ -#include "selectcommand.h" -#include "error.h" -#include "column.h" -#include <sqlext.h> -#include <stdio.h> -#include <string.h> -#include <boost/multi_index_container.hpp> -#include <boost/multi_index/ordered_index.hpp> - -ODBC::SelectCommand::SelectCommand(const Connection & c, const std::string & s) : -	DB::Command(s), -	ODBC::Command(c, s), -	DB::SelectCommand(s) -{ -} - -ODBC::SelectCommand::~SelectCommand() -{ -	if (!columns->empty()) { -		RETCODE rc = SQLCloseCursor(hStmt); -		if (!SQL_SUCCEEDED(rc)) { -			throw Error(rc, SQL_HANDLE_STMT, hStmt, "ODBC::SelectCommand::~SelectCommand SQLCloseCursor"); -		} -	} -} - -bool -ODBC::SelectCommand::fetch() -{ -	return fetch(SQL_FETCH_NEXT, 0); -} - -bool -ODBC::SelectCommand::fetch(SQLSMALLINT orientation, SQLLEN offset) -{ -	if (columns->empty()) { -		execute(); -	} -	RETCODE rc = SQLFetchScroll(hStmt, orientation, offset); -	switch (rc) { -		case SQL_SUCCESS_WITH_INFO: -		default: -			{ -				SQLCHAR sqlstatus[6]; -				RETCODE diagrc = SQLGetDiagRec(SQL_HANDLE_STMT, hStmt, 1, sqlstatus, NULL, NULL, 0, NULL); -				if (SQL_SUCCEEDED(diagrc)) { -					if (!strncmp((const char*)sqlstatus, "01004", 5)) { -						for (Columns::iterator i = columns->begin(); i != columns->end(); ++i) { -							boost::dynamic_pointer_cast<Column>(*i)->resize(); -						} -						return fetch(SQL_FETCH_RELATIVE, 0); -					} -				} -				if (rc != SQL_SUCCESS_WITH_INFO) { -					throw Error(rc, SQL_HANDLE_STMT, hStmt, "ODBC::SelectCommand::fetch SQLFetch"); -				} -			} -		case SQL_SUCCESS: -			{ -				bool resized = false; -				for (Columns::iterator i = columns->begin(); i != columns->end(); ++i) { -					resized |= boost::dynamic_pointer_cast<Column>(*i)->resize(); -				} -				if (resized) { -					return fetch(SQL_FETCH_RELATIVE, 0); -				} -				return true; -			} -		case SQL_NO_DATA: -			return false; -	} -} - -void -ODBC::SelectCommand::execute() -{ -	RETCODE rc = SQLExecute(hStmt); -	if (!SQL_SUCCEEDED(rc)) { -		throw Error(rc, SQL_HANDLE_STMT, hStmt, "ODBC::SelectCommand::execute SQLExecute"); -	} -	SQLSMALLINT colCount; -	if (!SQL_SUCCEEDED(rc = SQLNumResultCols(hStmt, &colCount))) { -		throw Error(rc, SQL_HANDLE_STMT, hStmt, "ODBC::SelectCommand::execute SQLNumResultCols"); -	} -	if (colCount < 1) { -		throw Error("ODBC::SelectCommand::execute No result columns"); -	} -	for (int col = 0; col < colCount; col++) { -		SQLCHAR _colName[300]; -		SQLSMALLINT nameLen, dp, nullable, bindType; -		SQLULEN bindSize; -		int sqlcol = col + 1; -		if (!SQL_SUCCEEDED(rc = SQLDescribeCol(hStmt, sqlcol, _colName, sizeof(_colName), &nameLen, &bindType, -						&bindSize, &dp, &nullable))) { -			throw Error(rc, SQL_HANDLE_STMT, hStmt, "ODBC::SelectCommand::execute SQLDescribeCol for %d"); -		} -		Glib::ustring colName((const char *)_colName, nameLen); -		DB::ColumnPtr ncol; -		switch (bindType) { -			case SQL_DECIMAL: -			case SQL_NUMERIC: -			case SQL_REAL: -			case SQL_FLOAT: -			case SQL_DOUBLE: -				ncol = insertColumn(DB::ColumnPtr(new FloatingPointColumn(this, colName, col))); -				break; -			case SQL_SMALLINT: -			case SQL_INTEGER: -			case SQL_TINYINT: -			case SQL_BIGINT: -				ncol = insertColumn(DB::ColumnPtr(new SignedIntegerColumn(this, colName, col))); -				break; -			case SQL_TYPE_TIME: -			case SQL_INTERVAL_YEAR: -			case SQL_INTERVAL_MONTH: -			case SQL_INTERVAL_DAY: -			case SQL_INTERVAL_HOUR: -			case SQL_INTERVAL_MINUTE: -			case SQL_INTERVAL_SECOND: -			case SQL_INTERVAL_YEAR_TO_MONTH: -			case SQL_INTERVAL_DAY_TO_HOUR: -			case SQL_INTERVAL_DAY_TO_MINUTE: -			case SQL_INTERVAL_DAY_TO_SECOND: -			case SQL_INTERVAL_HOUR_TO_MINUTE: -			case SQL_INTERVAL_HOUR_TO_SECOND: -			case SQL_INTERVAL_MINUTE_TO_SECOND: -				ncol = insertColumn(DB::ColumnPtr(new IntervalColumn(this, colName, col))); -				break; -			case SQL_TIMESTAMP: -			case SQL_DATETIME: -			case SQL_TYPE_DATE: -			case SQL_TYPE_TIMESTAMP: -				ncol = insertColumn(DB::ColumnPtr(new TimeStampColumn(this, colName, col))); -				break; -			case SQL_UNKNOWN_TYPE: -				throw Error("Unknown column type"); -			default: -				ncol = insertColumn(DB::ColumnPtr(new CharArrayColumn(this, colName, col, bindSize))); -				break; -		}; -		boost::dynamic_pointer_cast<Column>(ncol)->bind(); -	} -} -  | 
