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

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. #include "HandleEnv.hpp"
  14. static void
  15. callback_SQL_ATTR_CP_MATCH_set(Ctx& ctx, HandleBase* self, const OdbcData& data)
  16. {
  17.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  18.     ctx_assert(pEnv != 0 && data.type() == OdbcData::Uinteger);
  19.     SQLUINTEGER value = data.uinteger();
  20.     switch (value) {
  21.     case SQL_CP_STRICT_MATCH:
  22. break;
  23.     case SQL_CP_RELAXED_MATCH:
  24. break;
  25.     default:
  26. ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid cp match value %u", (unsigned)value);
  27. break;
  28.     }
  29. }
  30. static void
  31. callback_SQL_ATTR_CP_MATCH_default(Ctx& ctx, HandleBase* self, OdbcData& data)
  32. {
  33.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  34.     ctx_assert(pEnv != 0);
  35.     SQLUINTEGER value = SQL_CP_STRICT_MATCH;
  36.     data.setValue(value);
  37. }
  38. static void
  39. callback_SQL_ATTR_ODBC_VERSION_set(Ctx& ctx, HandleBase* self, const OdbcData& data)
  40. {
  41.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  42.     ctx_assert(pEnv != 0 && data.type() == OdbcData::Integer);
  43.     int version = data.integer();
  44.     switch (version) {
  45.     case SQL_OV_ODBC2:
  46.     case SQL_OV_ODBC3:
  47. break;
  48.     default:
  49. ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid ODBC version %d", version);
  50. return;
  51.     }
  52.     ctx_log1(("odbc version set to %d", version));
  53. }
  54. static void
  55. callback_SQL_ATTR_ODBC_VERSION_default(Ctx& ctx, HandleBase* self, OdbcData& data)
  56. {
  57.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  58.     ctx_assert(pEnv != 0);
  59.     // no default
  60.     ctx_log1(("odbc version has not been set"));
  61.     ctx.pushStatus(Sqlstate::_HY010, Error::Gen, "odbc version has not been set");
  62. }
  63. static void
  64. callback_SQL_ATTR_OUTPUT_NTS_set(Ctx& ctx, HandleBase* self, const OdbcData& data)
  65. {
  66.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  67.     ctx_assert(pEnv != 0 && data.type() == OdbcData::Integer);
  68.     SQLINTEGER value = data.integer();
  69.     switch (value) {
  70.     case SQL_TRUE:
  71. break;
  72.     case SQL_FALSE:
  73. ctx.pushStatus(Sqlstate::_HYC00, Error::Gen, "output nts FALSE not supported");
  74. break;
  75.     default:
  76. ctx.pushStatus(Sqlstate::_HY024, Error::Gen, "invalid output nts value %u", (unsigned)value);
  77. break;
  78.     }
  79. }
  80. static void
  81. callback_SQL_ATTR_OUTPUT_NTS_default(Ctx& ctx, HandleBase* self, OdbcData& data)
  82. {
  83.     HandleEnv* pEnv = static_cast<HandleEnv*>(self);
  84.     ctx_assert(pEnv != 0);
  85.     data.setValue();
  86. }
  87. AttrSpec HandleEnv::m_attrSpec[] = {
  88.     {   SQL_ATTR_CP_MATCH,
  89.         OdbcData::Uinteger,
  90.         Attr_mode_readwrite,
  91.         callback_SQL_ATTR_CP_MATCH_set,
  92.         callback_SQL_ATTR_CP_MATCH_default,
  93.     },
  94.     {   SQL_ATTR_ODBC_VERSION,
  95.         OdbcData::Integer,
  96.         Attr_mode_readwrite,
  97.         callback_SQL_ATTR_ODBC_VERSION_set,
  98.         callback_SQL_ATTR_ODBC_VERSION_default,
  99.     },
  100.     {   SQL_ATTR_OUTPUT_NTS,
  101.         OdbcData::Integer,
  102.         Attr_mode_readwrite,
  103.         callback_SQL_ATTR_OUTPUT_NTS_set,
  104.         callback_SQL_ATTR_OUTPUT_NTS_default,
  105.     },
  106.     {   0,
  107.         OdbcData::Undef,
  108.         Attr_mode_undef,
  109.         0,
  110.         0,
  111.     },
  112. };