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

MySQL数据库

开发平台:

Visual C++

  1. -- source include/have_ndb.inc
  2. -- source include/not_embedded.inc
  3. --disable_warnings
  4. drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
  5. --enable_warnings
  6. ################################################
  7. # Test that a table that does not exist as a 
  8. # frm file on disk can be "discovered" from a 
  9. # connected NDB Cluster
  10. #
  11. flush status;
  12. #
  13. # Test discover + SELECT
  14. #
  15. create table t1(
  16.   id int not null primary key,
  17.   name char(20)
  18. ) engine=ndb;
  19. insert into t1 values(1, "Autodiscover");
  20. flush tables;
  21. system rm var/master-data/test/t1.frm ;
  22. select * from t1;
  23. show status like 'handler_discover%';
  24. #
  25. # Test discover + INSERT
  26. #
  27. flush tables;
  28. system rm var/master-data/test/t1.frm ;
  29. insert into t1 values (2, "Auto 2");
  30. show status like 'handler_discover%';
  31. insert into t1 values (3, "Discover 3");
  32. show status like 'handler_discover%';
  33. flush tables;
  34. system rm var/master-data/test/t1.frm ;
  35. select * from t1 order by id;
  36. show status like 'handler_discover%';
  37. #
  38. # Test discover + UPDATE
  39. #
  40. flush tables;
  41. system rm var/master-data/test/t1.frm ;
  42. update t1 set name="Autodiscover" where id = 2;
  43. show status like 'handler_discover%';
  44. select * from t1 order by id;
  45. show status like 'handler_discover%';
  46. #
  47. # Test discover + DELETE
  48. #
  49. flush tables;
  50. system rm var/master-data/test/t1.frm ;
  51. delete from  t1 where id = 3;
  52. select * from t1 order by id;
  53. show status like 'handler_discover%';
  54. drop table t1;
  55. ######################################################
  56. # Test that a table that is outdated on disk
  57. # can be "discovered" from a connected NDB Cluster
  58. #
  59. flush status;
  60. create table t2(
  61.   id int not null primary key,
  62.   name char(22)
  63. ) engine=ndb;
  64. insert into t2 values (1, "Discoverer");
  65. select * from t2;
  66. show status like 'handler_discover%';
  67. flush tables;
  68. # Modify the frm file on disk
  69. system echo "blaj" >> var/master-data/test/t2.frm ;
  70. select * from t2;
  71. show status like 'handler_discover%';
  72. drop table t2;
  73. ##################################################
  74. # Test that a table that already exists in NDB 
  75. # is only discovered if CREATE TABLE IF NOT EXISTS 
  76. # is used
  77. #
  78. flush status;
  79. create table t3(
  80.   id int not null primary key,
  81.   name char(255)
  82. ) engine=ndb;
  83. insert into t3 values (1, "Explorer");
  84. select * from t3;
  85. show status like 'handler_discover%';
  86. flush tables;
  87. # Remove the frm file from disk
  88. system rm var/master-data/test/t3.frm ;
  89. --error 1050
  90. create table t3(
  91.   id int not null primary key,
  92.   name char(20), a int, b float, c char(24)
  93. ) engine=ndb;
  94. # The table shall not have been discovered since
  95. # IF NOT EXISTS wasn't specified
  96. show status like 'handler_discover%';
  97. # now it should be discovered
  98. create table IF NOT EXISTS t3(
  99.   id int not null primary key,
  100.   id2 int not null,
  101.   name char(20)
  102. ) engine=ndb;
  103. # NOTE! the table called t3 have now been updated to 
  104. # use the same frm as in NDB, thus it's not certain that 
  105. # the table schema is the same as was stated in the 
  106. # CREATE TABLE statement above
  107. show status like 'handler_discover%';
  108. SHOW CREATE TABLE t3;
  109. select * from t3;
  110. show status like 'handler_discover%';
  111. drop table t3;
  112. ##################################################
  113. # Test that a table that already exists in NDB 
  114. # is discovered when SHOW TABLES
  115. # is used
  116. #
  117. flush status;
  118. create table t7(
  119.   id int not null primary key,
  120.   name char(255)
  121. ) engine=ndb;
  122. create table t6(
  123.   id int not null primary key,
  124.   name char(255)
  125. ) engine=MyISAM;
  126. insert into t7 values (1, "Explorer");
  127. insert into t6 values (2, "MyISAM table");
  128. select * from t7;
  129. show status like 'handler_discover%';
  130. # Remove the frm file from disk
  131. flush tables;
  132. system rm var/master-data/test/t7.frm ;
  133. show tables from test;
  134. show status like 'handler_discover%';
  135. # Remove the frm file from disk again
  136. flush tables;
  137. system rm var/master-data/test/t7.frm ;
  138. --replace_column 7 # 8 # 9 # 12 # 13 # 15 #
  139. show table status;
  140. show status like 'handler_discover%';
  141. drop table t6, t7;
  142. #######################################################
  143. # Test that a table that has been dropped from NDB
  144. # but still exists on disk, get a consistent error message
  145. # saying "No such table existed"
  146. #
  147. flush status;
  148. create table t4(
  149.   id int not null primary key,
  150.   name char(27)
  151. ) engine=ndb;
  152. insert into t4 values (1, "Automatic");
  153. select * from t4;
  154. # Remove the table from NDB
  155. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS_OUTPUT ; 
  156. #
  157. # Test that correct error is returned
  158. --error 1146
  159. select * from t4;
  160. --error 1146
  161. select * from t4;
  162. show status like 'handler_discover%';
  163. drop table t4;
  164. #######################################################
  165. # Test that a table that has been dropped from NDB
  166. # but still exists on disk is deleted from disk 
  167. # when SHOW TABLES is called
  168. #
  169. flush status;
  170. create table t4(
  171.   id int not null primary key,
  172.   id2 int,
  173.   name char(27)
  174. ) engine=ndb;
  175. insert into t4 values (1, 76, "Automatic2");
  176. select * from t4;
  177. flush tables;
  178. # Remove the table from NDB
  179. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS_OUTPUT ;
  180. SHOW TABLES;
  181. --error 1146
  182. select * from t4;
  183. #######################################################
  184. # Test SHOW TABLES ability to detect new and delete old
  185. # tables. Test all at once using many tables
  186. #
  187. flush status;
  188. # Create tables
  189. create table t1(id int) engine=ndbcluster;
  190. create table t2(id int, b char(255)) engine=myisam;
  191. create table t3(id int, c char(255)) engine=ndbcluster;
  192. create table t4(id int) engine=myisam;
  193. create table t5(id int, d char(56)) engine=ndbcluster;
  194. create table t6(id int) engine=ndbcluster;
  195. create table t7(id int) engine=ndbcluster;
  196. create table t8(id int, e char(34)) engine=myisam;
  197. create table t9(id int) engine=myisam;
  198. # Populate tables
  199. insert into t2 values (2, "myisam table 2");
  200. insert into t3 values (3, "ndb table 3");
  201. insert into t5 values (5, "ndb table 5");
  202. insert into t6 values (6);
  203. insert into t8 values (8, "myisam table 8");
  204. insert into t9 values (9);
  205. # Remove t3, t5 from NDB
  206. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 >> $NDB_TOOLS_OUTPUT ;
  207. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 >> $NDB_TOOLS_OUTPUT ;
  208. # Remove t6, t7 from disk
  209. system rm var/master-data/test/t6.frm > /dev/null ; 
  210. system rm var/master-data/test/t7.frm > /dev/null ; 
  211. SHOW TABLES;
  212. select * from t6;
  213. select * from t7;
  214. show status like 'handler_discover%';
  215. drop table t1, t2, t4, t6, t7, t8, t9;
  216. #######################################################
  217. # Test SHOW TABLES LIKE ability to detect new and delete old
  218. # tables. Test all at once using many tables.
  219. #
  220. flush status;
  221. # Create tables
  222. create table t1(id int) engine=ndbcluster;
  223. create table t2(id int, b char(255)) engine=myisam;
  224. create table t3(id int, c char(255)) engine=ndbcluster;
  225. create table t4(id int) engine=myisam;
  226. create table t5(id int, d char(56)) engine=ndbcluster;
  227. create table t6(id int) engine=ndbcluster;
  228. create table t7(id int) engine=ndbcluster;
  229. create table t8(id int, e char(34)) engine=myisam;
  230. create table t9(id int) engine=myisam;
  231. # Populate tables
  232. insert into t2 values (2, "myisam table 2");
  233. insert into t3 values (3, "ndb table 3");
  234. insert into t5 values (5, "ndb table 5");
  235. insert into t6 values (6);
  236. insert into t8 values (8, "myisam table 8");
  237. insert into t9 values (9);
  238. # Remove t3, t5 from NDB
  239. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 > /dev/null  ;
  240. system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 > /dev/null  ;
  241. # Remove t6, t7 from disk
  242. system rm var/master-data/test/t6.frm > /dev/null ; 
  243. system rm var/master-data/test/t7.frm > /dev/null ; 
  244. SHOW TABLES LIKE 't6';
  245. show status like 'handler_discover%';
  246. # Check that t3 or t5 can't be created
  247. # frm files for these tables is stilll on disk
  248. --error 1050
  249. create table t3(a int);
  250. --error 1050
  251. create table t5(a int);
  252. SHOW TABLES LIKE 't%';
  253. show status like 'handler_discover%';
  254. drop table t1, t2, t4, t6, t7, t8, t9;
  255. ######################################################
  256. # Test that several tables can be discovered when 
  257. # one statement access several table at once.
  258. #
  259. flush status;
  260. # Create tables
  261. create table t1(id int) engine=ndbcluster;
  262. create table t2(id int, b char(255)) engine=ndbcluster;
  263. create table t3(id int, c char(255)) engine=ndbcluster;
  264. create table t4(id int) engine=myisam;
  265. # Populate tables
  266. insert into t1 values (1);
  267. insert into t2 values (2, "table 2");
  268. insert into t3 values (3, "ndb table 3");
  269. insert into t4 values (4);
  270. # Remove t1, t2, t3 from disk
  271. system rm var/master-data/test/t1.frm > /dev/null ; 
  272. system rm var/master-data/test/t2.frm > /dev/null ; 
  273. system rm var/master-data/test/t3.frm > /dev/null ; 
  274. flush tables;
  275. # Select from the table which only exists in NDB.
  276. select * from t1, t2, t3, t4;
  277. # 3 table should have been discovered
  278. show status like 'handler_discover%';
  279. drop table t1, t2, t3, t4;
  280. #########################################################
  281. # Test that a table that has been changed in NDB 
  282. # since it's been opened will be refreshed and discovered
  283. # again
  284. #
  285. flush status;
  286. show status like 'handler_discover%';
  287. create table t5(
  288.   id int not null primary key,
  289.   name char(200)
  290. ) engine=ndb;
  291. insert into t5 values (1, "Magnus");
  292. select * from t5;
  293. ALTER TABLE t5 ADD COLUMN adress char(255) FIRST;
  294. select * from t5;
  295. insert into t5 values 
  296.  ("Adress for record 2", 2, "Carl-Gustav"), 
  297.  ("Adress for record 3", 3, "Karl-Emil");
  298. update t5 set name="Bertil" where id = 2;
  299. select * from t5 order by id;
  300. show status like 'handler_discover%';
  301. drop table t5;
  302. ################################################################
  303. # Test that a table that has been changed with ALTER TABLE
  304. # can be used from the same thread
  305. #
  306. flush status;
  307. show status like 'handler_discover%';
  308. create table t6(
  309.   id int not null primary key,
  310.   name char(20)
  311. ) engine=ndb;
  312. insert into t6 values (1, "Magnus");
  313. select * from t6;
  314. ALTER TABLE t6 ADD COLUMN adress char(255) FIRST;
  315. select * from t6;
  316. insert into t6 values 
  317.  ("Adress for record 2", 2, "Carl-Gustav"), 
  318.  ("Adress for record 3", 3, "Karl-Emil");
  319. update t6 set name="Bertil" where id = 2;
  320. select * from t6 order by id;
  321. show status like 'handler_discover%';
  322. drop table t6;
  323. #####################################################
  324. # Test that only tables in the current database shows 
  325. # up in SHOW TABLES
  326. #
  327. show tables;
  328. create table t1 (a int,b longblob) engine=ndb;
  329. show tables;
  330. create database test2;
  331. use test2;
  332. show tables;
  333. --error 1146
  334. select * from t1;
  335. create table t2 (b int,c longblob) engine=ndb;
  336. use test;
  337. select * from t1;
  338. show tables;
  339. drop table t1;
  340. use test2;
  341. drop table t2;
  342. drop database test2;
  343. show databases;
  344. use test;
  345. #####################################################
  346. # Test that it's not possible to create tables
  347. # with same name as NDB internal tables
  348. # This will also test that it's not possible to create
  349. # a table with tha same name as a table that can't be
  350. # discovered( for example a table created via NDBAPI)
  351. # Test disabled since it doesn't work on case insensitive systems
  352. #--error 1050
  353. #CREATE TABLE sys.SYSTAB_0 (a int);
  354. #--error 1105
  355. #select * from sys.SYSTAB_0;
  356. #CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
  357. #show warnings;
  358. #--error 1105
  359. #select * from sys.SYSTAB_0;
  360. #--error 1051
  361. #drop table sys.SYSTAB_0;
  362. #drop table IF EXISTS sys.SYSTAB_0;
  363. ######################################################
  364. # Note! This should always be the last step in this 
  365. # file, the table t9 will be used and dropped 
  366. # by ndb_autodiscover2
  367. #
  368. CREATE TABLE t9 (
  369.   a int NOT NULL PRIMARY KEY,
  370.   b int
  371. ) engine=ndb;
  372. insert t9 values(1, 2), (2,3), (3, 4), (4, 5);
  373. #Don't drop the table, instead remove the frm file
  374. system rm var/master-data/test/t9.frm ;
  375. # Now leave test case, when ndb_autodiscover2 will  run, this 
  376. # MySQL Server will have been restarted because it has a 
  377. # ndb_autodiscover2-master.opt file.
  378. create table t10 (
  379.   a int not null primary key,
  380.   b blob
  381. ) engine=ndb;
  382. insert into t10 values (1, 'kalle');
  383. --exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test `$NDB_TOOLS_DIR/ndb_show_tables --no-defaults | grep BLOB` >> $NDB_TOOLS_OUTPUT 2>&1 || true
  384. # End of 4.1 tests