Skip to content

Commit

Permalink
Merge pull request #92 from zussel/release/0.5.1
Browse files Browse the repository at this point in the history
Release/0.5.1
  • Loading branch information
zussel committed May 12, 2019
2 parents b3e954f + 3602d38 commit 3d20c59
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 120 deletions.
30 changes: 15 additions & 15 deletions include/matador/db/mssql/mssql_connection.hpp
Expand Up @@ -55,37 +55,37 @@ class OOS_MSSQL_API mssql_connection : public connection_impl
{
public:
explicit mssql_connection();
virtual ~mssql_connection();
~mssql_connection() override;

virtual void open(const std::string &db) override;
virtual void close() override;
void open(const std::string &db) override;
void close() override;

/**
* Returns true if the connection is open
*
* @return True on open connection connection.
*/
virtual bool is_open() const override;
bool is_open() const override;

virtual matador::detail::result_impl* execute(const matador::sql &stmt) override;
virtual matador::detail::result_impl* execute(const std::string &stmt) override;
virtual matador::detail::statement_impl* prepare(const matador::sql &stmt) override;
matador::detail::result_impl* execute(const matador::sql &stmt) override;
matador::detail::result_impl* execute(const std::string &stmt) override;
matador::detail::statement_impl* prepare(const matador::sql &stmt) override;

virtual void begin() override;
virtual void commit() override;
virtual void rollback() override;
void begin() override;
void commit() override;
void rollback() override;

virtual std::string type() const override;
virtual std::string version() const override;
std::string type() const override;
std::string version() const override;

virtual bool exists(const std::string &tablename) override;
virtual std::vector<field> describe(const std::string &table) override;
bool exists(const std::string &tablename) override;
std::vector<field> describe(const std::string &table) override;

SQLHANDLE handle();

virtual unsigned long last_inserted_id();

virtual basic_dialect* dialect() override;
basic_dialect* dialect() override;

private:
void execute_no_result(const std::string &stmt);
Expand Down
12 changes: 6 additions & 6 deletions include/matador/db/mssql/mssql_dialect_compiler.hpp
Expand Up @@ -16,15 +16,15 @@ namespace mssql {
class mssql_dialect_compiler : public detail::basic_dialect_compiler
{
public:
mssql_dialect_compiler();
mssql_dialect_compiler() = default;

virtual void visit(const matador::detail::select &select1) override;
virtual void visit(const matador::detail::update &update1) override;
virtual void visit(const matador::detail::remove &remove1) override;
virtual void visit(const matador::detail::top &top1) override;
void visit(const matador::detail::select &select1) override;
void visit(const matador::detail::update &update1) override;
void visit(const matador::detail::remove &remove1) override;
void visit(const matador::detail::top &top1) override;

protected:
virtual void on_compile_start() override;
void on_compile_start() override;

private:
std::stack<token_list_t::iterator> commands_;
Expand Down
4 changes: 2 additions & 2 deletions include/matador/db/mssql/mssql_dialect_linker.hpp
Expand Up @@ -14,9 +14,9 @@ namespace mssql {
class mssql_dialect_linker : public detail::basic_dialect_linker
{
public:
virtual ~mssql_dialect_linker() {}
~mssql_dialect_linker() override = default;

virtual void visit(const matador::detail::top &top) override;
void visit(const matador::detail::top &top) override;

};

Expand Down
60 changes: 30 additions & 30 deletions include/matador/db/mssql/mssql_result.hpp
Expand Up @@ -41,29 +41,29 @@ namespace mssql {

class mssql_result : public detail::result_impl
{
private:
public:
mssql_result(const mssql_result&) = delete;
mssql_result& operator=(const mssql_result&) = delete;

public:
explicit mssql_result(SQLHANDLE stmt);
virtual ~mssql_result();
~mssql_result() override;

virtual const char* column(size_type c) const override;
virtual bool fetch() override;
const char* column(size_type c) const override;
bool fetch() override;

virtual size_type affected_rows() const override;
virtual size_type result_rows() const override;
virtual size_type fields() const override;
size_type affected_rows() const override;
size_type result_rows() const override;
size_type fields() const override;

virtual int transform_index(int index) const override;
int transform_index(int index) const override;

template < class T >
T get(size_type index, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr) const
{
T val;
SQLLEN info = 0;
SQLSMALLINT type = (SQLSMALLINT)mssql_statement::type2int(matador::data_type_traits<T>::type());
auto type = (SQLSMALLINT)mssql_statement::type2int(matador::data_type_traits<T>::type());
SQLRETURN ret = SQLGetData(stmt_, (SQLUSMALLINT)(index), type, &val, sizeof(T), &info);
if (!SQL_SUCCEEDED(ret)) {
throw_error(ret, SQL_HANDLE_STMT, stmt_, "mssql", "error on retrieving column value");
Expand All @@ -84,30 +84,30 @@ class mssql_result : public detail::result_impl
}

protected:
virtual void serialize(const char*, char&) override;
virtual void serialize(const char*, short&) override;
virtual void serialize(const char*, int&) override;
virtual void serialize(const char*, long&) override;
virtual void serialize(const char*, unsigned char&) override;
virtual void serialize(const char*, unsigned short&) override;
virtual void serialize(const char*, unsigned int&) override;
virtual void serialize(const char*, unsigned long&) override;
virtual void serialize(const char*, bool&) override;
virtual void serialize(const char*, float&) override;
virtual void serialize(const char*, double&) override;
virtual void serialize(const char*, char *, size_t) override;
virtual void serialize(const char*, std::string&) override;
virtual void serialize(const char*, matador::varchar_base&) override;
virtual void serialize(const char*, matador::time&) override;
virtual void serialize(const char*, matador::date&) override;
virtual void serialize(const char*, matador::basic_identifier &x) override;
virtual void serialize(const char*, matador::identifiable_holder &x, cascade_type) override;
void serialize(const char*, char&) override;
void serialize(const char*, short&) override;
void serialize(const char*, int&) override;
void serialize(const char*, long&) override;
void serialize(const char*, unsigned char&) override;
void serialize(const char*, unsigned short&) override;
void serialize(const char*, unsigned int&) override;
void serialize(const char*, unsigned long&) override;
void serialize(const char*, bool&) override;
void serialize(const char*, float&) override;
void serialize(const char*, double&) override;
void serialize(const char*, char *, size_t) override;
void serialize(const char*, std::string&) override;
void serialize(const char*, matador::varchar_base&) override;
void serialize(const char*, matador::time&) override;
void serialize(const char*, matador::date&) override;
void serialize(const char*, matador::basic_identifier &x) override;
void serialize(const char*, matador::identifiable_holder &x, cascade_type) override;

template < class T >
void read_column(const char *, T & val)
{
SQLLEN info = 0;
SQLSMALLINT type = (SQLSMALLINT)mssql_statement::type2int(data_type_traits<T>::type());
auto type = (SQLSMALLINT)mssql_statement::type2int(data_type_traits<T>::type());
SQLRETURN ret = SQLGetData(stmt_, (SQLUSMALLINT)(result_index_++), type, &val, sizeof(T), &info);
if (SQL_SUCCEEDED(ret)) {
return;
Expand All @@ -123,9 +123,9 @@ class mssql_result : public detail::result_impl
void read_column(const char *, matador::time &val);


virtual bool prepare_fetch() override;
bool prepare_fetch() override;

virtual bool finalize_fetch() override;
bool finalize_fetch() override;

private:
size_type affected_rows_ = 0;
Expand Down
61 changes: 31 additions & 30 deletions include/matador/db/mssql/mssql_statement.hpp
Expand Up @@ -45,11 +45,11 @@ class mssql_statement : public detail::statement_impl
{
public:
mssql_statement(mssql_connection &db, const sql &s);
virtual ~mssql_statement();
~mssql_statement() override;

virtual void clear() override;
virtual detail::result_impl* execute() override;
virtual void reset() override;
void clear() override;
detail::result_impl* execute() override;
void reset() override;

// virtual int column_count() const;
// virtual const char* column_name(int i) const;
Expand All @@ -58,41 +58,41 @@ class mssql_statement : public detail::statement_impl
static int type2sql(data_type type);

protected:
virtual void serialize(const char*, char&) override;
virtual void serialize(const char*, short&) override;
virtual void serialize(const char*, int&) override;
virtual void serialize(const char*, long&) override;
virtual void serialize(const char*, unsigned char&) override;
virtual void serialize(const char*, unsigned short&) override;
virtual void serialize(const char*, unsigned int&) override;
virtual void serialize(const char*, unsigned long&) override;
virtual void serialize(const char*, bool&) override;
virtual void serialize(const char*, float&) override;
virtual void serialize(const char*, double&) override;
virtual void serialize(const char*, char *, size_t) override;
virtual void serialize(const char*, std::string&) override;
virtual void serialize(const char*, matador::varchar_base&) override;
virtual void serialize(const char*, matador::time&) override;
virtual void serialize(const char*, matador::date&) override;
virtual void serialize(const char*, matador::basic_identifier &x) override;
virtual void serialize(const char*, matador::identifiable_holder &x, cascade_type) override;
void serialize(const char*, char&) override;
void serialize(const char*, short&) override;
void serialize(const char*, int&) override;
void serialize(const char*, long&) override;
void serialize(const char*, unsigned char&) override;
void serialize(const char*, unsigned short&) override;
void serialize(const char*, unsigned int&) override;
void serialize(const char*, unsigned long&) override;
void serialize(const char*, bool&) override;
void serialize(const char*, float&) override;
void serialize(const char*, double&) override;
void serialize(const char*, char *, size_t) override;
void serialize(const char*, std::string&) override;
void serialize(const char*, matador::varchar_base&) override;
void serialize(const char*, matador::time&) override;
void serialize(const char*, matador::date&) override;
void serialize(const char*, matador::basic_identifier &x) override;
void serialize(const char*, matador::identifiable_holder &x, cascade_type) override;

template < class T >
void bind_value(T val, size_t index)
{
value_t *v = new value_t;
auto *v = new value_t;
if (bind_null_) {
v->data = NULL;
v->data = nullptr;
v->len = SQL_NULL_DATA;
} else {
v->data = new char[sizeof(T)];
*reinterpret_cast<T*>(v->data) = val;
}
host_data_.push_back(v);

SQLSMALLINT ctype = (SQLSMALLINT)mssql_statement::type2int(data_type_traits<T>::type());
SQLSMALLINT type = (SQLSMALLINT)mssql_statement::type2sql(data_type_traits<T>::type());
SQLRETURN ret = SQLBindParameter(stmt_, (SQLUSMALLINT)index, SQL_PARAM_INPUT, ctype, type, 0, 0, v->data, 0, NULL);
auto ctype = (SQLSMALLINT)mssql_statement::type2int(data_type_traits<T>::type());
auto type = (SQLSMALLINT)mssql_statement::type2sql(data_type_traits<T>::type());
SQLRETURN ret = SQLBindParameter(stmt_, (SQLUSMALLINT)index, SQL_PARAM_INPUT, ctype, type, 0, 0, v->data, 0, nullptr);
throw_error(ret, SQL_HANDLE_STMT, stmt_, "mssql", "couldn't bind parameter");
}
void bind_value(char c, size_t index);
Expand All @@ -107,14 +107,15 @@ class mssql_statement : public detail::statement_impl
template < class T >
void bind_null(size_t index)
{
value_t *v = new value_t;
auto *v = new value_t;
v->data = nullptr;
v->len = SQL_NULL_DATA;
host_data_.push_back(v);

int ctype = mssql_statement::type2int(data_type_traits<T>::type());
int type = mssql_statement::type2sql(data_type_traits<T>::type());
SQLRETURN ret = SQLBindParameter(stmt_, (SQLUSMALLINT)index, SQL_PARAM_INPUT, (SQLSMALLINT)ctype, (SQLSMALLINT)type, 0, 0, NULL, 0, NULL);
SQLRETURN ret = SQLBindParameter(stmt_, (SQLUSMALLINT)index, SQL_PARAM_INPUT, (SQLSMALLINT)ctype, (SQLSMALLINT)type,
0, 0, nullptr, 0, nullptr);
throw_error(ret, SQL_HANDLE_STMT, stmt_, "mssql", "couldn't bind null parameter");
}

Expand All @@ -126,7 +127,7 @@ class mssql_statement : public detail::statement_impl

private:
struct value_t {
explicit value_t(SQLLEN l = 0) : len(l), data(0) {}
explicit value_t(SQLLEN l = 0) : len(l), data(nullptr) {}
~value_t() { delete [] data; }
SQLLEN len;
SQLLEN result_len = 0;
Expand Down
20 changes: 11 additions & 9 deletions src/db/mssql/mssql_connection.cpp
Expand Up @@ -32,8 +32,8 @@ namespace matador {
namespace mssql {

mssql_connection::mssql_connection()
: odbc_(0)
, connection_(0)
: odbc_(nullptr)
, connection_(nullptr)
, is_open_(false)
{
}
Expand All @@ -48,7 +48,8 @@ void mssql_connection::open(const std::string &connection)
{
// dns syntax:
// user[:passwd]@host[:port]/instance/db [(Drivername)]
static const std::regex DNS_RGX("(.+?)(?::(.+?))?@([^:]+?)(?::([1-9][0-9]*?))?(?:/(.+?))?/(.+?)(?:\\s+\\((.+)\\))?");
//static const std::regex DNS_RGX("(.+?)(?::(.+?))?@([^:]+?)(?::([1-9][0-9]*?))?(?:/(.+?))?/(.+?)(?:\\s+\\((.+)\\))?");
static const std::regex DNS_RGX(R"((.+?)(?::(.+?))?@([^:]+?)(?::([1-9][0-9]*?))?(?:/(.+?))?/(.+?)(?:\s+\((.+)\))?)");
std::smatch what;

if (!std::regex_match(connection, what, DNS_RGX)) {
Expand Down Expand Up @@ -98,7 +99,7 @@ void mssql_connection::open(const std::string &connection)
std::string dns("DRIVER={" + driver + "};SERVER=" + host + ";Protocol=TCPIP;Port=" + port + ";DATABASE=" + db_ + ";UID=" + user + ";PWD=" + passwd + ";");

SQLCHAR retconstring[1024];
ret = SQLDriverConnect(connection_, 0, (SQLCHAR*)dns.c_str(), SQL_NTS, retconstring, 1024, NULL,SQL_DRIVER_NOPROMPT);
ret = SQLDriverConnect(connection_, nullptr, (SQLCHAR*)dns.c_str(), SQL_NTS, retconstring, 1024, nullptr, SQL_DRIVER_NOPROMPT);

throw_error(ret, SQL_HANDLE_DBC, connection_, "mssql", "error on connect");

Expand Down Expand Up @@ -207,7 +208,7 @@ bool mssql_connection::exists(const std::string &tablename)
}
}

static data_type type2data_type(SQLSMALLINT type, SQLINTEGER size);
static data_type type2data_type(SQLSMALLINT type, size_t size);

std::vector<field> mssql_connection::describe(const std::string &table)
{
Expand All @@ -224,16 +225,17 @@ std::vector<field> mssql_connection::describe(const std::string &table)
#else
strcpy((char*)buf, table.c_str());
#endif
ret = SQLColumns(stmt, NULL, 0, NULL, 0, buf, SQL_NTS, NULL, 0);
ret = SQLColumns(stmt, nullptr, 0, nullptr, 0, buf, SQL_NTS, nullptr, 0);
throw_error(ret, SQL_HANDLE_STMT, stmt, "mssql", "error on executing column description");
//std::unique_ptr<mssql_result> res(static_cast<mssql_result*>(execute(stmt)));

// bind to columns we need (column name, data type of column and index)
SQLINTEGER pos(0);
size_t pos(0);
size_t size(0);

SQLCHAR column[64];
SQLSMALLINT data_type(0);
SQLCHAR type[64];
SQLINTEGER size(0);
SQLINTEGER not_null(0);
SQLLEN indicator[6];

Expand Down Expand Up @@ -276,7 +278,7 @@ std::vector<field> mssql_connection::describe(const std::string &table)
return fields;
}

data_type type2data_type(SQLSMALLINT type, SQLINTEGER size)
data_type type2data_type(SQLSMALLINT type, size_t size)
{
switch (type) {
case SQL_CHAR:
Expand Down
3 changes: 0 additions & 3 deletions src/db/mssql/mssql_dialect_compiler.cpp
Expand Up @@ -10,9 +10,6 @@ namespace matador {

namespace mssql {

mssql_dialect_compiler::mssql_dialect_compiler()
{ }

void mssql_dialect_compiler::visit(const matador::detail::select &)
{
commands_.push(top().current);
Expand Down

0 comments on commit 3d20c59

Please sign in to comment.