///////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2010 Artyom Beilis (Tonkikh) <artyomtnk@yahoo.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
///////////////////////////////////////////////////////////////////////////////
#include <cppdb/backend.h>
namespace dummy {
int results = 0;
int statements = 0;
int connections = 0;
int drivers = 0;
class result : public cppdb::backend::result {
public:
virtual next_row has_next()
{
return next_row_unknown;
}
virtual bool next()
{
if(called_)
return false;
called_ = true;
return true;
}
virtual bool fetch(int,short &)
{
return false;
}
virtual bool fetch(int,unsigned short &){ return false; }
virtual bool fetch(int,int &){ return false; }
virtual bool fetch(int,unsigned &){ return false; }
virtual bool fetch(int,long &){ return false; }
virtual bool fetch(int,unsigned long &){ return false; }
virtual bool fetch(int,long long &){ return false; }
virtual bool fetch(int,unsigned long long &){ return false; }
virtual bool fetch(int,float &){ return false; }
virtual bool fetch(int,double &){ return false; }
virtual bool fetch(int,long double &){ return false; }
virtual bool fetch(int,std::string &){ return false; }
virtual bool fetch(int,std::ostream &){ return false; }
virtual bool fetch(int,std::tm &){ return false; }
virtual bool is_null(int){ return true; }
virtual int cols() { return 10; }
virtual int name_to_column(std::string const &) {
return -1;
}
virtual std::string column_to_name(int)
{
throw cppdb::not_supported_by_backend("unsupported");
}
// End of API
result() : called_(false)
{
results++;
}
~result()
{
results--;
}
private:
bool called_;
};
class statement : public cppdb::backend::statement {
public:
virtual void reset(){}
std::string const &sql_query() { return q_; }
virtual void bind(int,std::string const &) {}
virtual void bind(int,char const *){}
virtual void bind(int,char const *,char const *){}
virtual void bind(int,std::tm const &){}
virtual void bind(int,std::istream &){}
virtual void bind(int,int){}
virtual void bind(int,unsigned){}
virtual void bind(int,long){}
virtual void bind(int,unsigned long){}
virtual void bind(int,long long){}
virtual void bind(int,unsigned long long){}
virtual void bind(int,double){}
virtual void bind(int,long double){}
virtual void bind_null(int){}
virtual long long sequence_last(std::string const &/*sequence*/) { throw cppdb::not_supported_by_backend("unsupported"); }
virtual unsigned long long affected() { return 0; }
virtual result *query() { return new result(); }
virtual void exec() {}
statement(std::string const &q) : q_(q)
{
statements++;
}
~statement()
{
statements--;
}
private:
std::string q_;
};
extern "C" {
typedef cppdb::backend::connection *cppdb_backend_connect_function(cppdb::connection_info const &ci);
}
class connection : public cppdb::backend::connection {
public:
connection(cppdb::connection_info const &info) : cppdb::backend::connection(info)
{
connections++;
}
~connection()
{
connections--;
}
virtual void begin(){}
virtual void commit(){}
virtual void rollback(){}
virtual statement *prepare_statement(std::string const &q) { return new statement(q); }
virtual statement *create_statement(std::string const &q) { return new statement(q); }
virtual std::string escape(std::string const &) { throw cppdb::not_supported_by_backend("not supported"); }
virtual std::string escape(char const *) { throw cppdb::not_supported_by_backend("not supported"); }
virtual std::string escape(char const *,char const *) { throw cppdb::not_supported_by_backend("not supported"); }
virtual std::string driver() { return "dummy"; }
virtual std::string engine() { return "dummy"; }
};
class loadable_driver : public cppdb::backend::loadable_driver {
public:
loadable_driver()
{
drivers++;
}
bool in_use()
{
return connections > 0;
}
connection *open(cppdb::connection_info const &cs)
{
return new connection(cs);
}
~loadable_driver()
{
drivers--;
}
};
} // dummy
extern "C" {
cppdb::backend::connection *dummy_connect_function(cppdb::connection_info const &ci)
{
return new dummy::connection(ci);
}
}