C++DB is the database layer that was designed to work with C++CMS. This customized version is used within Ye Ol' Pi Shack.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

174 lines
4.8 KiB

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (C) 2010-2011 Artyom Beilis (Tonkikh) <artyomtnk@yahoo.com>
  4. //
  5. // Distributed under:
  6. //
  7. // the Boost Software License, Version 1.0.
  8. // (See accompanying file LICENSE_1_0.txt or copy at
  9. // http://www.boost.org/LICENSE_1_0.txt)
  10. //
  11. // or (at your opinion) under:
  12. //
  13. // The MIT License
  14. // (See accompanying file MIT.txt or a copy at
  15. // http://www.opensource.org/licenses/mit-license.php)
  16. //
  17. ///////////////////////////////////////////////////////////////////////////////
  18. #include <cppdb/backend.h>
  19. namespace dummy {
  20. int results = 0;
  21. int statements = 0;
  22. int connections = 0;
  23. int drivers = 0;
  24. class result : public cppdb::backend::result {
  25. public:
  26. virtual next_row has_next()
  27. {
  28. return next_row_unknown;
  29. }
  30. virtual bool next()
  31. {
  32. if(called_)
  33. return false;
  34. called_ = true;
  35. return true;
  36. }
  37. virtual bool fetch(int,short &)
  38. {
  39. return false;
  40. }
  41. virtual bool fetch(int,unsigned short &){ return false; }
  42. virtual bool fetch(int,int &){ return false; }
  43. virtual bool fetch(int,unsigned &){ return false; }
  44. virtual bool fetch(int,long &){ return false; }
  45. virtual bool fetch(int,unsigned long &){ return false; }
  46. virtual bool fetch(int,long long &){ return false; }
  47. virtual bool fetch(int,unsigned long long &){ return false; }
  48. virtual bool fetch(int,float &){ return false; }
  49. virtual bool fetch(int,double &){ return false; }
  50. virtual bool fetch(int,long double &){ return false; }
  51. virtual bool fetch(int,std::string &){ return false; }
  52. virtual bool fetch(int,std::ostream &){ return false; }
  53. virtual bool fetch(int,std::tm &){ return false; }
  54. virtual bool is_null(int){ return true; }
  55. virtual int cols() { return 10; }
  56. virtual int name_to_column(std::string const &) {
  57. return -1;
  58. }
  59. virtual std::string column_to_name(int)
  60. {
  61. throw cppdb::not_supported_by_backend("unsupported");
  62. }
  63. // End of API
  64. result() : called_(false)
  65. {
  66. results++;
  67. }
  68. ~result()
  69. {
  70. results--;
  71. }
  72. private:
  73. bool called_;
  74. };
  75. class statement : public cppdb::backend::statement {
  76. public:
  77. virtual void reset(){}
  78. std::string const &sql_query() { return q_; }
  79. virtual void bind(int,std::string const &) {}
  80. virtual void bind(int,char const *){}
  81. virtual void bind(int,char const *,char const *){}
  82. virtual void bind(int,std::tm const &){}
  83. virtual void bind(int,std::istream &){}
  84. virtual void bind(int,int){}
  85. virtual void bind(int,unsigned){}
  86. virtual void bind(int,long){}
  87. virtual void bind(int,unsigned long){}
  88. virtual void bind(int,long long){}
  89. virtual void bind(int,unsigned long long){}
  90. virtual void bind(int,double){}
  91. virtual void bind(int,long double){}
  92. virtual void bind_null(int){}
  93. virtual long long sequence_last(std::string const &/*sequence*/) { throw cppdb::not_supported_by_backend("unsupported"); }
  94. virtual unsigned long long affected() { return 0; }
  95. virtual result *query() { return new result(); }
  96. virtual void exec() {}
  97. statement(std::string const &q) : q_(q)
  98. {
  99. statements++;
  100. }
  101. ~statement()
  102. {
  103. statements--;
  104. }
  105. private:
  106. std::string q_;
  107. };
  108. extern "C" {
  109. typedef cppdb::backend::connection *cppdb_backend_connect_function(cppdb::connection_info const &ci);
  110. }
  111. class connection : public cppdb::backend::connection {
  112. public:
  113. connection(cppdb::connection_info const &info) : cppdb::backend::connection(info)
  114. {
  115. connections++;
  116. }
  117. ~connection()
  118. {
  119. connections--;
  120. }
  121. virtual void begin(){}
  122. virtual void commit(){}
  123. virtual void rollback(){}
  124. virtual statement *prepare_statement(std::string const &q) { return new statement(q); }
  125. virtual statement *create_statement(std::string const &q) { return new statement(q); }
  126. virtual std::string escape(std::string const &) { throw cppdb::not_supported_by_backend("not supported"); }
  127. virtual std::string escape(char const *) { throw cppdb::not_supported_by_backend("not supported"); }
  128. virtual std::string escape(char const *,char const *) { throw cppdb::not_supported_by_backend("not supported"); }
  129. virtual std::string driver() { return "dummy"; }
  130. virtual std::string engine() { return "dummy"; }
  131. };
  132. class loadable_driver : public cppdb::backend::loadable_driver {
  133. public:
  134. loadable_driver()
  135. {
  136. drivers++;
  137. }
  138. bool in_use()
  139. {
  140. return connections > 0;
  141. }
  142. connection *open(cppdb::connection_info const &cs)
  143. {
  144. return new connection(cs);
  145. }
  146. ~loadable_driver()
  147. {
  148. drivers--;
  149. }
  150. };
  151. } // dummy
  152. extern "C" {
  153. cppdb::backend::connection *dummy_connect_function(cppdb::connection_info const &ci)
  154. {
  155. return new dummy::connection(ci);
  156. }
  157. }