OdbcData.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef ODBC_COMMON_OdbcData_hpp
  14. #define ODBC_COMMON_OdbcData_hpp
  15. #include <ndb_types.h>
  16. #include <common/common.hpp>
  17. /**
  18.  * @class OdbcData
  19.  * @brief Odbc data types and storage
  20.  *
  21.  * Stores diagnostics, attributes, and descriptors.  Also used
  22.  * for converting to and from driver function arguments.
  23.  */
  24. class OdbcData {
  25. public:
  26.     enum Type {
  27. Undef = 0,
  28. Smallint,
  29. Usmallint,
  30. Integer,
  31. Uinteger,
  32. Pointer,
  33. SmallintPtr,
  34. UsmallintPtr,
  35. IntegerPtr,
  36. UintegerPtr,
  37. PointerPtr,
  38. Sqlchar,
  39. Sqlstate
  40.     };
  41.     OdbcData();
  42.     OdbcData(Type type);
  43.     OdbcData(const OdbcData& odbcData);
  44.     OdbcData(SQLSMALLINT smallint);
  45.     OdbcData(SQLUSMALLINT usmallint);
  46.     OdbcData(SQLINTEGER integer);
  47.     OdbcData(SQLUINTEGER uinteger);
  48.     OdbcData(SQLPOINTER pointer);
  49.     OdbcData(SQLSMALLINT* smallintPtr);
  50.     OdbcData(SQLUSMALLINT* usmallintPtr);
  51.     OdbcData(SQLINTEGER* integerPtr);
  52.     OdbcData(SQLUINTEGER* uintegerPtr);
  53.     OdbcData(SQLPOINTER* pointerPtr);
  54.     OdbcData(const char* sqlchar);
  55.     OdbcData(const ::Sqlstate& sqlstate);
  56.     ~OdbcData();
  57.     Type type() const;
  58.     void setValue();
  59.     void setValue(Type type);
  60.     void setValue(const OdbcData odbcData);
  61.     // get value
  62.     SQLSMALLINT smallint() const;
  63.     SQLUSMALLINT usmallint() const;
  64.     SQLINTEGER integer() const;
  65.     SQLUINTEGER uinteger() const;
  66.     SQLPOINTER pointer() const;
  67.     SQLSMALLINT* smallintPtr() const;
  68.     SQLUSMALLINT* usmallintPtr() const;
  69.     SQLINTEGER* integerPtr() const;
  70.     SQLUINTEGER* uintegerPtr() const;
  71.     SQLPOINTER* pointerPtr() const;
  72.     const char* sqlchar() const;
  73.     const ::Sqlstate& sqlstate() const;
  74.     // copy in from user buffer
  75.     void copyin(Ctx& ctx, Type type, SQLPOINTER buf, SQLINTEGER length);
  76.     // copy out to user buffer
  77.     void copyout(Ctx& ctx, SQLPOINTER buf, SQLINTEGER length, SQLINTEGER* total, SQLSMALLINT* total2 = 0);
  78.     // logging
  79.     void print(char* buf, unsigned size) const;
  80. private:
  81.     OdbcData& operator=(const OdbcData& odbcData); // disallowed
  82.     Type m_type;
  83.     union {
  84. SQLSMALLINT m_smallint;
  85. SQLUSMALLINT m_usmallint;
  86. SQLINTEGER m_integer;
  87. SQLUINTEGER m_uinteger;
  88. SQLPOINTER m_pointer;
  89. SQLSMALLINT* m_smallintPtr;
  90. SQLUSMALLINT* m_usmallintPtr;
  91. SQLINTEGER* m_integerPtr;
  92. SQLUINTEGER* m_uintegerPtr;
  93. SQLPOINTER* m_pointerPtr;
  94. char* m_sqlchar;
  95. const ::Sqlstate* m_sqlstate;
  96.     };
  97. };
  98. inline OdbcData::Type
  99. OdbcData::type() const
  100. {
  101.     return m_type;
  102. }
  103. inline
  104. OdbcData::OdbcData(SQLSMALLINT smallint) :
  105.     m_type(Smallint),
  106.     m_smallint(smallint)
  107. {
  108. }
  109. inline
  110. OdbcData::OdbcData(SQLUSMALLINT usmallint) :
  111.     m_type(Usmallint),
  112.     m_usmallint(usmallint)
  113. {
  114. }
  115. inline
  116. OdbcData::OdbcData(SQLINTEGER integer) :
  117.     m_type(Integer),
  118.     m_integer(integer)
  119. {
  120. }
  121. inline
  122. OdbcData::OdbcData(SQLUINTEGER uinteger) :
  123.     m_type(Uinteger),
  124.     m_uinteger(uinteger)
  125. {
  126. }
  127. inline
  128. OdbcData::OdbcData(SQLPOINTER pointer) :
  129.     m_type(Pointer),
  130.     m_pointer(pointer)
  131. {
  132. }
  133. inline
  134. OdbcData::OdbcData(SQLSMALLINT* smallintPtr) :
  135.     m_type(SmallintPtr),
  136.     m_smallintPtr(smallintPtr)
  137. {
  138. }
  139. inline
  140. OdbcData::OdbcData(SQLUSMALLINT* usmallintPtr) :
  141.     m_type(UsmallintPtr),
  142.     m_usmallintPtr(usmallintPtr)
  143. {
  144. }
  145. inline
  146. OdbcData::OdbcData(SQLINTEGER* integerPtr) :
  147.     m_type(IntegerPtr),
  148.     m_integerPtr(integerPtr)
  149. {
  150. }
  151. inline
  152. OdbcData::OdbcData(SQLUINTEGER* uintegerPtr) :
  153.     m_type(UintegerPtr),
  154.     m_uintegerPtr(uintegerPtr)
  155. {
  156. }
  157. inline
  158. OdbcData::OdbcData(SQLPOINTER* pointerPtr) :
  159.     m_type(PointerPtr),
  160.     m_pointerPtr(pointerPtr)
  161. {
  162. }
  163. inline
  164. OdbcData::OdbcData(const char* sqlchar) :
  165.     m_type(Sqlchar)
  166. {
  167.     unsigned n = strlen(sqlchar);
  168.     m_sqlchar = new char[n + 1];
  169.     strcpy(m_sqlchar, sqlchar);
  170. }
  171. inline
  172. OdbcData::OdbcData(const ::Sqlstate& sqlstate) :
  173.     m_type(Sqlstate),
  174.     m_sqlstate(&sqlstate)
  175. {
  176. }
  177. // get value
  178. inline SQLSMALLINT
  179. OdbcData::smallint() const
  180. {
  181.     ctx_assert(m_type == Smallint);
  182.     return m_smallint;
  183. }
  184. inline SQLUSMALLINT
  185. OdbcData::usmallint() const
  186. {
  187.     ctx_assert(m_type == Usmallint);
  188.     return m_usmallint;
  189. }
  190. inline SQLINTEGER
  191. OdbcData::integer() const
  192. {
  193.     ctx_assert(m_type == Integer);
  194.     return m_integer;
  195. }
  196. inline SQLUINTEGER
  197. OdbcData::uinteger() const
  198. {
  199.     ctx_assert(m_type == Uinteger);
  200.     return m_uinteger;
  201. }
  202. inline SQLPOINTER
  203. OdbcData::pointer() const
  204. {
  205.     ctx_assert(m_type == Pointer);
  206.     return m_pointer;
  207. }
  208. inline SQLSMALLINT*
  209. OdbcData::smallintPtr() const
  210. {
  211.     ctx_assert(m_type == SmallintPtr);
  212.     return m_smallintPtr;
  213. }
  214. inline SQLUSMALLINT*
  215. OdbcData::usmallintPtr() const
  216. {
  217.     ctx_assert(m_type == UsmallintPtr);
  218.     return m_usmallintPtr;
  219. }
  220. inline SQLINTEGER*
  221. OdbcData::integerPtr() const
  222. {
  223.     ctx_assert(m_type == IntegerPtr);
  224.     return m_integerPtr;
  225. }
  226. inline SQLUINTEGER*
  227. OdbcData::uintegerPtr() const
  228. {
  229.     ctx_assert(m_type == UintegerPtr);
  230.     return m_uintegerPtr;
  231. }
  232. inline SQLPOINTER*
  233. OdbcData::pointerPtr() const
  234. {
  235.     ctx_assert(m_type == PointerPtr);
  236.     return m_pointerPtr;
  237. }
  238. inline const char*
  239. OdbcData::sqlchar() const
  240. {
  241.     ctx_assert(m_type == Sqlchar);
  242.     return m_sqlchar;
  243. }
  244. inline const ::Sqlstate&
  245. OdbcData::sqlstate() const
  246. {
  247.     ctx_assert(m_type == Sqlstate);
  248.     return *m_sqlstate;
  249. }
  250. #endif