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

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_HANDLES_HandleDesc_hpp
  14. #define ODBC_HANDLES_HandleDesc_hpp
  15. #include <common/common.hpp>
  16. #include <common/DescArea.hpp>
  17. #include "HandleBase.hpp"
  18. class HandleRoot;
  19. class HandleDbc;
  20. /**
  21.  * @class HandleDesc
  22.  * @brief Descriptor handle (SQLHDESC).
  23.  */
  24. class HandleDesc : public HandleBase {
  25. public:
  26.     HandleDesc(HandleDbc* pDbc);
  27.     ~HandleDesc();
  28.     void ctor(Ctx& ctx);
  29.     void dtor(Ctx& ctx);
  30.     HandleDbc* getDbc();
  31.     HandleBase* getParent();
  32.     HandleRoot* getRoot();
  33.     OdbcHandle odbcHandle();
  34.     DescArea& descArea();
  35.     // allocate and free handles (no valid case)
  36.     void sqlAllocHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase** ppChild);
  37.     void sqlFreeHandle(Ctx& ctx, SQLSMALLINT childType, HandleBase* pChild);
  38.     // set and get descriptor values (internal use)
  39.     void sqlSetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength);
  40.     void sqlGetDescField(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT fieldIdentifier, SQLPOINTER value, SQLINTEGER bufferLength, SQLINTEGER* stringLength, SQLSMALLINT* stringLength2 = 0);
  41.     void sqlColAttribute(Ctx& ctx, SQLUSMALLINT columnNumber, SQLUSMALLINT fieldIdentifier, SQLPOINTER characterAttribute, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength, SQLPOINTER numericAttribute);
  42.     void sqlColAttributes(Ctx& ctx, SQLUSMALLINT icol, SQLUSMALLINT fdescType, SQLPOINTER rgbDesc, SQLSMALLINT cbDescMax, SQLSMALLINT* pcbDesc, SQLINTEGER* pfDesc);
  43.     // set and get several common descriptor values
  44.     void sqlSetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLSMALLINT Type, SQLSMALLINT SubType, SQLINTEGER Length, SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER Data, SQLINTEGER* StringLength, SQLINTEGER* Indicator);
  45.     void sqlGetDescRec(Ctx& ctx, SQLSMALLINT recNumber, SQLCHAR* Name, SQLSMALLINT BufferLength, SQLSMALLINT* StringLength, SQLSMALLINT* Type, SQLSMALLINT* SubType, SQLINTEGER* Length, SQLSMALLINT* Precision, SQLSMALLINT* Scale, SQLSMALLINT* Nullable);
  46. private:
  47.     HandleDbc* const m_dbc;
  48.     static DescSpec m_descSpec[];
  49.     DescArea m_descArea;
  50. };
  51. inline HandleDbc*
  52. HandleDesc::getDbc()
  53. {
  54.     return m_dbc;
  55. }
  56. inline HandleBase*
  57. HandleDesc::getParent()
  58. {
  59.     return (HandleDbc*)getDbc();
  60. }
  61. inline HandleRoot*
  62. HandleDesc::getRoot()
  63. {
  64.     return getParent()->getRoot();
  65. }
  66. inline OdbcHandle
  67. HandleDesc::odbcHandle()
  68. {
  69.     return Odbc_handle_desc;
  70. }
  71. inline DescArea&
  72. HandleDesc::descArea()
  73. {
  74.     return m_descArea;
  75. }
  76. #endif