You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
3.9 KiB

  1. #
  2. # Test that user data is correctly "visualized" in
  3. # INFORMATION_SCHEMA.innodb_locks.lock_data
  4. #
  5. -- source include/have_innodb.inc
  6. -- disable_query_log
  7. -- disable_result_log
  8. SET storage_engine=InnoDB;
  9. -- disable_warnings
  10. DROP TABLE IF EXISTS t_min, t_max;
  11. -- enable_warnings
  12. let $table_def =
  13. (
  14. c01 TINYINT,
  15. c02 TINYINT UNSIGNED,
  16. c03 SMALLINT,
  17. c04 SMALLINT UNSIGNED,
  18. c05 MEDIUMINT,
  19. c06 MEDIUMINT UNSIGNED,
  20. c07 INT,
  21. c08 INT UNSIGNED,
  22. c09 BIGINT,
  23. c10 BIGINT UNSIGNED,
  24. PRIMARY KEY(c01, c02, c03, c04, c05, c06, c07, c08, c09, c10)
  25. );
  26. -- eval CREATE TABLE t_min $table_def;
  27. INSERT INTO t_min VALUES
  28. (-128, 0,
  29. -32768, 0,
  30. -8388608, 0,
  31. -2147483648, 0,
  32. -9223372036854775808, 0);
  33. -- eval CREATE TABLE t_max $table_def;
  34. INSERT INTO t_max VALUES
  35. (127, 255,
  36. 32767, 65535,
  37. 8388607, 16777215,
  38. 2147483647, 4294967295,
  39. 9223372036854775807, 18446744073709551615);
  40. CREATE TABLE ```t'\"_str` (
  41. c1 VARCHAR(32),
  42. c2 VARCHAR(32),
  43. c3 VARCHAR(32),
  44. c4 VARCHAR(32),
  45. c5 VARCHAR(32),
  46. c6 VARCHAR(32),
  47. c7 VARCHAR(32),
  48. PRIMARY KEY(c1, c2, c3, c4, c5, c6, c7)
  49. );
  50. INSERT INTO ```t'\"_str` VALUES
  51. ('1', 'abc', '''abc', 'abc''', 'a''bc', 'a''bc''', '''abc''''');
  52. INSERT INTO ```t'\"_str` VALUES
  53. ('2', 'abc', '"abc', 'abc"', 'a"bc', 'a"bc"', '"abc""');
  54. INSERT INTO ```t'\"_str` VALUES
  55. ('3', 'abc', '\\abc', 'abc\\', 'a\\bc', 'a\\bc\\', '\\abc\\\\');
  56. INSERT INTO ```t'\"_str` VALUES
  57. ('4', 'abc', 0x00616263, 0x61626300, 0x61006263, 0x6100626300, 0x610062630000);
  58. -- connect (con_lock,localhost,root,,)
  59. -- connect (con_min_trylock,localhost,root,,)
  60. -- connect (con_max_trylock,localhost,root,,)
  61. -- connect (con_str_insert_supremum,localhost,root,,)
  62. -- connect (con_str_lock_row1,localhost,root,,)
  63. -- connect (con_str_lock_row2,localhost,root,,)
  64. -- connect (con_str_lock_row3,localhost,root,,)
  65. -- connect (con_str_lock_row4,localhost,root,,)
  66. -- connect (con_verify_innodb_locks,localhost,root,,)
  67. -- connection con_lock
  68. SET autocommit=0;
  69. SELECT * FROM t_min FOR UPDATE;
  70. SELECT * FROM t_max FOR UPDATE;
  71. SELECT * FROM ```t'\"_str` FOR UPDATE;
  72. -- connection con_min_trylock
  73. -- send
  74. SELECT * FROM t_min FOR UPDATE;
  75. -- connection con_max_trylock
  76. -- send
  77. SELECT * FROM t_max FOR UPDATE;
  78. -- connection con_str_insert_supremum
  79. -- send
  80. INSERT INTO ```t'\"_str` VALUES
  81. ('z', 'z', 'z', 'z', 'z', 'z', 'z');
  82. -- connection con_str_lock_row1
  83. -- send
  84. SELECT * FROM ```t'\"_str` WHERE c1 = '1' FOR UPDATE;
  85. -- connection con_str_lock_row2
  86. -- send
  87. SELECT * FROM ```t'\"_str` WHERE c1 = '2' FOR UPDATE;
  88. -- connection con_str_lock_row3
  89. -- send
  90. SELECT * FROM ```t'\"_str` WHERE c1 = '3' FOR UPDATE;
  91. -- connection con_str_lock_row4
  92. -- send
  93. SELECT * FROM ```t'\"_str` WHERE c1 = '4' FOR UPDATE;
  94. -- enable_result_log
  95. -- connection con_verify_innodb_locks
  96. # Wait for the above queries to execute before continuing.
  97. # Without this, it sometimes happens that the SELECT from innodb_locks
  98. # executes before some of them, resulting in less than expected number
  99. # of rows being selected from innodb_locks. If there is a bug and there
  100. # are no 14 rows in innodb_locks then this test will fail with timeout.
  101. let $count = 14;
  102. let $table = INFORMATION_SCHEMA.INNODB_LOCKS;
  103. -- source include/wait_until_rows_count.inc
  104. # the above enables the query log, re-disable it
  105. -- disable_query_log
  106. SELECT lock_mode, lock_type, lock_table, lock_index, lock_rec, lock_data
  107. FROM INFORMATION_SCHEMA.INNODB_LOCKS ORDER BY lock_data;
  108. SELECT lock_table,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
  109. GROUP BY lock_table;
  110. set @save_sql_mode = @@sql_mode;
  111. SET SQL_MODE='ANSI_QUOTES';
  112. SELECT lock_table,COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
  113. GROUP BY lock_table;
  114. SET @@sql_mode=@save_sql_mode;
  115. -- disable_result_log
  116. -- connection default
  117. -- disconnect con_lock
  118. -- disconnect con_min_trylock
  119. -- disconnect con_max_trylock
  120. -- disconnect con_str_insert_supremum
  121. -- disconnect con_str_lock_row1
  122. -- disconnect con_str_lock_row2
  123. -- disconnect con_str_lock_row3
  124. -- disconnect con_str_lock_row4
  125. -- disconnect con_verify_innodb_locks
  126. DROP TABLE t_min, t_max, ```t'\"_str`;