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

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 NDB_SQL_UTIL_HPP
  14. #define NDB_SQL_UTIL_HPP
  15. #include <ndb_global.h>
  16. #include <kernel/ndb_limits.h>
  17. class NdbSqlUtil {
  18. public:
  19.   /**
  20.    * Compare strings, optionally with padded semantics.  Returns
  21.    * negative (less), zero (equal), or positive (greater).
  22.    */
  23.   static int char_compare(const char* s1, unsigned n1,
  24.                           const char* s2, unsigned n2, bool padded);
  25.   /**
  26.    * Like operator, optionally with padded semantics.  Returns true or
  27.    * false.
  28.    */
  29.   static bool char_like(const char* s1, unsigned n1,
  30.                         const char* s2, unsigned n2, bool padded);
  31.   /**
  32.    * Compare kernel attribute values.  Returns -1, 0, +1 for less,
  33.    * equal, greater, respectively.  Parameters are pointers to values,
  34.    * full attribute size in words, and size of available data in words.
  35.    * There is also pointer to type specific extra info.  Char types
  36.    * receive CHARSET_INFO in it.
  37.    *
  38.    * If available size is less than full size, CmpUnknown may be
  39.    * returned.  If a value cannot be parsed, it compares like NULL i.e.
  40.    * less than any valid value.
  41.    */
  42.   typedef int Cmp(const void* info, const Uint32* p1, const Uint32* p2, Uint32 full, Uint32 size);
  43.   enum CmpResult {
  44.     CmpLess = -1,
  45.     CmpEqual = 0,
  46.     CmpGreater = 1,
  47.     CmpUnknown = 2      // insufficient partial data
  48.   };
  49.   /**
  50.    * Kernel data types.  Must match m_typeList in NdbSqlUtil.cpp.
  51.    * Now also must match types in NdbDictionary.
  52.    */
  53.   struct Type {
  54.     enum Enum {
  55.       Undefined = 0,    // Undefined 
  56.       Tinyint,          // 8 bit
  57.       Tinyunsigned,     // 8 bit
  58.       Smallint,         // 16 bit
  59.       Smallunsigned,    // 16 bit
  60.       Mediumint,        // 24 bit
  61.       Mediumunsigned,   // 24 bit
  62.       Int,              // 32 bit
  63.       Unsigned,         // 32 bit
  64.       Bigint,           // 64 bit
  65.       Bigunsigned,      // 64 Bit
  66.       Float,            // 32-bit float
  67.       Double,           // 64-bit float
  68.       Olddecimal,       // Precision, Scale
  69.       Char,             // Len
  70.       Varchar,          // Max len
  71.       Binary,           // Len
  72.       Varbinary,        // Max len
  73.       Datetime,         // Precision down to 1 sec  (size 8 bytes)
  74.       Date,             // Precision down to 1 day (size 4 bytes)
  75.       Blob,             // Blob
  76.       Text,             // Text blob
  77.       Time = 25,        // Time without date
  78.       Year = 26,        // Year (size 1 byte)
  79.       Timestamp = 27,   // Unix seconds (uint32)
  80.       Olddecimalunsigned = 28
  81.     };
  82.     Enum m_typeId;
  83.     Cmp* m_cmp;         // comparison method
  84.   };
  85.   /**
  86.    * Get type by id.  Can return the Undefined type.
  87.    */
  88.   static const Type& getType(Uint32 typeId);
  89.   /**
  90.    * Get type by id but replace char type by corresponding binary type.
  91.    */
  92.   static const Type& getTypeBinary(Uint32 typeId);
  93.   /**
  94.    * Check character set.
  95.    */
  96.   static bool usable_in_pk(Uint32 typeId, const void* cs);
  97.   static bool usable_in_hash_index(Uint32 typeId, const void* cs);
  98.   static bool usable_in_ordered_index(Uint32 typeId, const void* cs);
  99.   /**
  100.    * Compare decimal numbers.
  101.    */
  102.   static int cmp_olddecimal(const uchar* s1, const uchar* s2, unsigned n);
  103. private:
  104.   /**
  105.    * List of all types.  Must match Type::Enum.
  106.    */
  107.   static const Type m_typeList[];
  108.   /**
  109.    * Comparison methods.
  110.    */
  111.   static Cmp cmpTinyint;
  112.   static Cmp cmpTinyunsigned;
  113.   static Cmp cmpSmallint;
  114.   static Cmp cmpSmallunsigned;
  115.   static Cmp cmpMediumint;
  116.   static Cmp cmpMediumunsigned;
  117.   static Cmp cmpInt;
  118.   static Cmp cmpUnsigned;
  119.   static Cmp cmpBigint;
  120.   static Cmp cmpBigunsigned;
  121.   static Cmp cmpFloat;
  122.   static Cmp cmpDouble;
  123.   static Cmp cmpOlddecimal;
  124.   static Cmp cmpChar;
  125.   static Cmp cmpVarchar;
  126.   static Cmp cmpBinary;
  127.   static Cmp cmpVarbinary;
  128.   static Cmp cmpDatetime;
  129.   static Cmp cmpDate;
  130.   static Cmp cmpBlob;
  131.   static Cmp cmpText;
  132.   static Cmp cmpTime;
  133.   static Cmp cmpYear;
  134.   static Cmp cmpTimestamp;
  135.   static Cmp cmpOlddecimalunsigned;
  136. };
  137. #endif