version.c
上传用户: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. #include <ndb_global.h>
  14. #include <ndb_version.h>
  15. #include <version.h>
  16. #include <basestring_vsnprintf.h>
  17. #include <NdbEnv.h>
  18. #include <NdbOut.hpp>
  19. Uint32 getMajor(Uint32 version) {
  20.   return (version >> 16) & 0xFF;
  21. }
  22. Uint32 getMinor(Uint32 version) {
  23.   return (version >> 8) & 0xFF;
  24. }
  25. Uint32 getBuild(Uint32 version) {
  26.   return (version >> 0) & 0xFF;
  27. }
  28. Uint32 makeVersion(Uint32 major, Uint32 minor, Uint32 build) {
  29.   return MAKE_VERSION(major, minor, build);
  30.   
  31. }
  32. char ndb_version_string_buf[NDB_VERSION_STRING_BUF_SZ];
  33. const char * getVersionString(Uint32 version, const char * status,
  34.       char *buf, unsigned sz)
  35. {
  36.   if (status && status[0] != 0)
  37.   basestring_snprintf(buf, sz,
  38.      "Version %d.%d.%d (%s)",
  39.      getMajor(version),
  40.      getMinor(version),
  41.      getBuild(version),
  42.      status);
  43.   else
  44.     basestring_snprintf(buf, sz,
  45.      "Version %d.%d.%d",
  46.      getMajor(version),
  47.      getMinor(version),
  48.      getBuild(version));
  49.   return buf;
  50. }
  51. typedef enum {
  52.   UG_Null,
  53.   UG_Range,
  54.   UG_Exact
  55. } UG_MatchType;
  56. struct NdbUpGradeCompatible {
  57.   Uint32 ownVersion;
  58.   Uint32 otherVersion;
  59.   UG_MatchType matchType;
  60. };
  61. /*#define TEST_VERSION*/
  62. #define HAVE_NDB_SETVERSION
  63. #ifdef HAVE_NDB_SETVERSION
  64. Uint32 ndbOwnVersionTesting = 0;
  65. void
  66. ndbSetOwnVersion() {
  67.   char buf[256];
  68.   if (NdbEnv_GetEnv("NDB_SETVERSION", buf, sizeof(buf))) {
  69.     Uint32 _v1,_v2,_v3;
  70.     if (sscanf(buf, "%u.%u.%u", &_v1, &_v2, &_v3) == 3) {
  71.       ndbOwnVersionTesting = MAKE_VERSION(_v1,_v2,_v3);
  72.       ndbout_c("Testing: Version set to 0x%x",  ndbOwnVersionTesting);
  73.     }
  74.   }
  75. }
  76. #else
  77. void ndbSetOwnVersion() {}
  78. #endif
  79. #ifndef TEST_VERSION
  80. struct NdbUpGradeCompatible ndbCompatibleTable_full[] = {
  81.   { MAKE_VERSION(4,1,NDB_VERSION_BUILD), MAKE_VERSION(4,1,15), UG_Range },
  82.   { MAKE_VERSION(4,1,14), MAKE_VERSION(4,1,10), UG_Range },
  83.   { MAKE_VERSION(4,1,10), MAKE_VERSION(4,1,9), UG_Exact },
  84.   { MAKE_VERSION(4,1,9), MAKE_VERSION(4,1,8), UG_Exact },
  85.   { MAKE_VERSION(3,5,2), MAKE_VERSION(3,5,1), UG_Exact },
  86.   { 0, 0, UG_Null }
  87. };
  88. struct NdbUpGradeCompatible ndbCompatibleTable_upgrade[] = {
  89.   { MAKE_VERSION(4,1,15), MAKE_VERSION(4,1,14), UG_Exact },
  90.   { MAKE_VERSION(3,5,4), MAKE_VERSION(3,5,3), UG_Exact },
  91.   { 0, 0, UG_Null }
  92. };
  93. #else /* testing purposes */
  94. struct NdbUpGradeCompatible ndbCompatibleTable_full[] = {
  95.   { MAKE_VERSION(4,1,5), MAKE_VERSION(4,1,0), UG_Range },
  96.   { MAKE_VERSION(3,6,9), MAKE_VERSION(3,6,1), UG_Range },
  97.   { MAKE_VERSION(3,6,2), MAKE_VERSION(3,6,1), UG_Range },
  98.   { MAKE_VERSION(3,5,7), MAKE_VERSION(3,5,0), UG_Range },
  99.   { MAKE_VERSION(3,5,1), MAKE_VERSION(3,5,0), UG_Range },
  100.   { NDB_VERSION_D      , MAKE_VERSION(NDB_VERSION_MAJOR,NDB_VERSION_MINOR,2), UG_Range },
  101.   { 0, 0, UG_Null }
  102. };
  103. struct NdbUpGradeCompatible ndbCompatibleTable_upgrade[] = {
  104.   { MAKE_VERSION(4,1,5), MAKE_VERSION(3,6,9), UG_Exact },
  105.   { MAKE_VERSION(3,6,2), MAKE_VERSION(3,5,7), UG_Exact },
  106.   { MAKE_VERSION(3,5,1), NDB_VERSION_D      , UG_Exact },
  107.   { 0, 0, UG_Null }
  108. };
  109. #endif
  110. void ndbPrintVersion()
  111. {
  112.   printf("Version: %u.%u.%un",
  113.  getMajor(ndbGetOwnVersion()),
  114.  getMinor(ndbGetOwnVersion()),
  115.  getBuild(ndbGetOwnVersion()));
  116. }
  117. Uint32
  118. ndbGetOwnVersion()
  119. {
  120. #ifdef HAVE_NDB_SETVERSION
  121.   if (ndbOwnVersionTesting == 0)
  122.     return NDB_VERSION_D;
  123.   else
  124.     return ndbOwnVersionTesting;
  125. #else
  126.   return NDB_VERSION_D;
  127. #endif
  128. }
  129. int
  130. ndbSearchUpgradeCompatibleTable(Uint32 ownVersion, Uint32 otherVersion,
  131. struct NdbUpGradeCompatible table[])
  132. {
  133.   int i;
  134.   for (i = 0; table[i].ownVersion != 0 && table[i].otherVersion != 0; i++) {
  135.     if (table[i].ownVersion == ownVersion ||
  136. table[i].ownVersion == (Uint32) ~0) {
  137.       switch (table[i].matchType) {
  138.       case UG_Range:
  139. if (otherVersion >= table[i].otherVersion){
  140.   return 1;
  141. }
  142. break;
  143.       case UG_Exact:
  144. if (otherVersion == table[i].otherVersion){
  145.   return 1;
  146. }
  147. break;
  148.       default:
  149. break;
  150.       }
  151.     }
  152.   }
  153.   return 0;
  154. }
  155. int
  156. ndbCompatible(Uint32 ownVersion, Uint32 otherVersion, struct NdbUpGradeCompatible table[])
  157. {
  158.   if (otherVersion >= ownVersion) {
  159.     return 1;
  160.   }
  161.   return ndbSearchUpgradeCompatibleTable(ownVersion, otherVersion, table);
  162. }
  163. int
  164. ndbCompatible_full(Uint32 ownVersion, Uint32 otherVersion)
  165. {
  166.   return ndbCompatible(ownVersion, otherVersion, ndbCompatibleTable_full);
  167. }
  168. int
  169. ndbCompatible_upgrade(Uint32 ownVersion, Uint32 otherVersion)
  170. {
  171.   if (ndbCompatible_full(ownVersion, otherVersion))
  172.     return 1;
  173.   return ndbCompatible(ownVersion, otherVersion, ndbCompatibleTable_upgrade);
  174. }
  175. int
  176. ndbCompatible_mgmt_ndb(Uint32 ownVersion, Uint32 otherVersion)
  177. {
  178.   return ndbCompatible_upgrade(ownVersion, otherVersion);
  179. }
  180. int
  181. ndbCompatible_mgmt_api(Uint32 ownVersion, Uint32 otherVersion)
  182. {
  183.   return ndbCompatible_upgrade(ownVersion, otherVersion);
  184. }
  185. int
  186. ndbCompatible_ndb_mgmt(Uint32 ownVersion, Uint32 otherVersion)
  187. {
  188.   return ndbCompatible_full(ownVersion, otherVersion);
  189. }
  190. int
  191. ndbCompatible_api_mgmt(Uint32 ownVersion, Uint32 otherVersion)
  192. {
  193.   return ndbCompatible_full(ownVersion, otherVersion);
  194. }
  195. int
  196. ndbCompatible_api_ndb(Uint32 ownVersion, Uint32 otherVersion)
  197. {
  198.   return ndbCompatible_full(ownVersion, otherVersion);
  199. }
  200. int
  201. ndbCompatible_ndb_api(Uint32 ownVersion, Uint32 otherVersion)
  202. {
  203.   return ndbCompatible_upgrade(ownVersion, otherVersion);
  204. }
  205. int
  206. ndbCompatible_ndb_ndb(Uint32 ownVersion, Uint32 otherVersion)
  207. {
  208.   return ndbCompatible_upgrade(ownVersion, otherVersion);
  209. }