type_info.cpp
上传用户:clovervx
上传日期:2010-03-30
资源大小:787k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <string>
  3. using namespace std;
  4. #include <mysql.h>
  5. #include <string.h>
  6. #include "datetime1.hh"
  7. #include "set1.hh"
  8. #include "type_info3.hh"
  9. // for some reason, Visual C++ needs to have static data initialized
  10. // out of the class definition, otherwise it thinks it's an
  11. // abstract function
  12. const unsigned char mysql_type_info::offset = 0;
  13. const unsigned char mysql_type_info::unsigned_offset = 21; 
  14. const unsigned char mysql_type_info::null_offset = 31;
  15. const unsigned char mysql_type_info::unsigned_null_offset = 52;
  16. const unsigned char mysql_type_info::string_type = 20;
  17. typedef string Enum;
  18. const mysql_type_info::sql_type_info mysql_type_info::types[62] = {
  19.   sql_type_info("DECIMAL NOT NULL", typeid(double), 0),
  20.   sql_type_info("TINYINT NOT NULL", typeid(signed char), 1, true),
  21.   sql_type_info("SMALLINT NOT NULL", typeid(short int), 2, true),
  22.   sql_type_info("INT NOT NULL", typeid(int), 3, true),
  23.   sql_type_info("FLOAT NOT NULL", typeid(float), 4, true),
  24.   sql_type_info("DOUBLE NOT NULL", typeid(double), 5, true),
  25.   sql_type_info("NULL NOT NULL", typeid(void), 6),
  26.   sql_type_info("TIMESTAMP NOT NULL", typeid(Time), 7),
  27.   sql_type_info("BIGINT NOT NULL", typeid(longlong), 8, true),
  28.   sql_type_info("MEDIUMINT NOT NULL", typeid(int), 9),
  29.   sql_type_info("DATE NOT NULL", typeid(Date), 10, true),
  30.   sql_type_info("TIME NOT NULL", typeid(Time), 11, true),
  31.   sql_type_info("DATETIME NOT NULL", typeid(DateTime), 12, true),
  32.   sql_type_info("ENUM NOT NULL", typeid(Enum), 13, true),
  33.   sql_type_info("SET NOT NULL", typeid(Set<string>), 14, true),
  34.   sql_type_info("TINYBLOB NOT NULL", typeid(string), 15),
  35.   sql_type_info("MEDIUMBLOB NOT NULL", typeid(string), 16),
  36.   sql_type_info("LONGBLOB NOT NULL", typeid(string), 17),
  37.   sql_type_info("BLOB NOT NULL", typeid(string), 18),
  38.   sql_type_info("VARCHAR NOT NULL", typeid(string), 19, true),
  39.   sql_type_info("CHAR NOT NULL", typeid(string), 20),
  40.   sql_type_info("CHAR NOT NULL", typeid(string), 21),
  41.   sql_type_info("TINYINT UNSIGNED NOT NULL", typeid(unsigned char), 22, true),
  42.   sql_type_info("SMALLINT UNSIGNED NOT NULL", typeid(unsigned short int), 23, true),
  43.   sql_type_info("INT UNSIGNED NOT NULL", typeid(unsigned int), 24, true),
  44.   sql_type_info("INT UNSIGNED NOT NULL", typeid(unsigned int), 25, true),
  45.   sql_type_info("INT UNSIGNED NOT NULL", typeid(unsigned int), 26, true),
  46.   sql_type_info("INT UNSIGNED NOT NULL", typeid(unsigned int), 27, true),
  47.   sql_type_info("INT UNSIGNED NOT NULL", typeid(unsigned int), 28, true),
  48.   sql_type_info("BIGINT UNSIGNED NOT NULL", typeid(ulonglong), 29, true),
  49.   sql_type_info("MEDIUMINT UNSIGNED NOT NULL", typeid(unsigned int), 30),
  50.   sql_type_info("DECIMAL NULL", typeid(Null<double>), 0),
  51.   sql_type_info("TINYINT NULL", typeid(Null<signed char>), 1, true),
  52.   sql_type_info("SMALLINT NULL", typeid(Null<short int>), 2, true),
  53.   sql_type_info("INT NULL", typeid(Null<int>), 3, true),
  54.   sql_type_info("FLOAT NULL", typeid(Null<float>), 4, true),
  55.   sql_type_info("DOUBLE NULL", typeid(Null<double>), 5, true),
  56.   sql_type_info("NULL NULL", typeid(Null<void>), 6),
  57.   sql_type_info("TIMESTAMP NULL", typeid(Null<Time>), 7),
  58.   sql_type_info("BIGINT NULL", typeid(Null<longlong>), 8, true),
  59.   sql_type_info("MEDIUMINT NULL", typeid(Null<int>), 9), 
  60.   sql_type_info("DATE NULL", typeid(Null<Date>), 10, true),
  61.   sql_type_info("TIME NULL", typeid(Null<Time>), 11, true),
  62.   sql_type_info("DATETIME NULL", typeid(Null<DateTime>), 12, true),
  63.   sql_type_info("ENUM NULL", typeid(Null<Enum>), 13, true),
  64.   sql_type_info("SET NULL", typeid(Null<Set<string> >), 14, true),
  65.   sql_type_info("TINYBLOB NULL", typeid(Null<string>), 15),
  66.   sql_type_info("MEDIUMBLOB NULL", typeid(Null<string>), 16),
  67.   sql_type_info("LONGBLOB NULL", typeid(Null<string>), 17),
  68.   sql_type_info("BLOB NULL", typeid(Null<string>), 18),
  69.   sql_type_info("VARCHAR NULL", typeid(Null<string>), 19, true),
  70.   sql_type_info("CHAR NULL", typeid(Null<string>), 20),
  71.   sql_type_info("CHAR NULL", typeid(Null<string>), 21),
  72.   sql_type_info("TINYINT UNSIGNED NULL", typeid(Null<unsigned char>), 22, true),
  73.   sql_type_info("SMALLINT UNSIGNED NULL", typeid(Null<unsigned short int>),23, true),
  74.   sql_type_info("INT UNSIGNED NULL", typeid(Null<unsigned int>), 24, true),
  75.   sql_type_info("INT UNSIGNED NULL", typeid(Null<unsigned int>), 25, true),
  76.   sql_type_info("INT UNSIGNED NULL", typeid(Null<unsigned int>), 26, true),
  77.   sql_type_info("INT UNSIGNED NULL", typeid(Null<unsigned int>), 27, true),
  78.   sql_type_info("INT UNSIGNED NULL", typeid(Null<unsigned int>), 28, true),
  79.   sql_type_info("BIGINT UNSIGNED NULL", typeid(Null<ulonglong>),29, true),
  80.   sql_type_info("MEDIUMINT UNSIGNED NULL", typeid(Null<unsigned int>), 30),
  81. };
  82. const mysql_type_info::sql_type_info_lookup 
  83.   mysql_type_info::lookups(mysql_type_info::types, 62);
  84. mysql_ti_sql_type_info_lookup::
  85. mysql_ti_sql_type_info_lookup(const sql_type_info types[], const int size) {
  86.   for (int i = 0; i != size; i++) {
  87.     if (types[i]._default)
  88.       _map[types[i]._c_type] = i;
  89.   }
  90. }
  91. unsigned char mysql_type_info::type(enum_field_types t, 
  92.               bool _unsigned, bool _null) {
  93.   if (_null) {
  94.     if (_unsigned) {
  95.       return unsigned_null_offset + t;
  96.     } else {
  97.       if (t < 200) return null_offset + t;
  98.       else return null_offset + (t-234);
  99.     }
  100.   } else {
  101.     if (_unsigned) {
  102.       return unsigned_offset + t;
  103.     } else {
  104.       if (t < 200) return offset + t;
  105.       else return offset + (t-234);
  106.     }
  107.   }
  108. }
  109. //----------------------------------------------------
  110. bool mysql_type_info::quote_q() const
  111. {
  112.   if (base_type().c_type() == typeid(string) ||
  113.       base_type().c_type() == typeid(Date) ||
  114.       base_type().c_type() == typeid(Time) ||
  115.       base_type().c_type() == typeid(DateTime) ||
  116.       base_type().c_type() == typeid(Enum) ||
  117.       base_type().c_type() == typeid(Set<string>)) 
  118.   {
  119.       return true;
  120.   }
  121.   else
  122.   {
  123.       return false;
  124.   }
  125. }
  126. //-----------------------------------------------------
  127. bool mysql_type_info::escape_q() const
  128. {
  129.   if (c_type() == typeid(string))
  130.     return true;
  131.   else
  132.     return false;
  133. }
  134. //--------------------------------------------