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

MySQL数据库

开发平台:

Visual C++

  1. ###############################################
  2. #                                             #
  3. #   Prepared Statements                       #
  4. #   re-testing bug DB entries                 #
  5. #                                             #
  6. # The bugs are reported as "closed".          #
  7. # Command sequences taken from bug report.    #
  8. # No other test contains the bug# as comment. #
  9. #                                             #
  10. # Tests drop/create tables 't1', 't2', ...    #
  11. #                                             #
  12. ###############################################
  13. --disable_warnings
  14. drop table if exists t1, t2;
  15. --enable_warnings
  16. # bug#1180: optimized away part of WHERE clause cause incorect prepared satatement results
  17. CREATE TABLE t1(session_id  char(9) NOT NULL);
  18. INSERT INTO t1 VALUES ("abc");
  19. SELECT * FROM t1;
  20. prepare st_1180 from 'SELECT * FROM t1 WHERE ?="1111" and session_id = "abc"';
  21. # Must not find a row
  22. set @arg1= 'abc';
  23. execute st_1180 using @arg1;
  24. # Now, it should find one row
  25. set @arg1= '1111';
  26. execute st_1180 using @arg1;
  27. # Back to non-matching
  28. set @arg1= 'abc';
  29. execute st_1180 using @arg1;
  30. drop table t1;
  31. # end of bug#1180
  32. # bug#1644: Insertion of more than 3 NULL columns with parameter binding fails
  33. # Using prepared statements, insertion of more than three columns with NULL
  34. # values fails to insert additional NULLS.  After the third column NULLS will
  35. # be inserted into the database as zeros.
  36. # First insert four columns of a value (i.e. 22) to verify binding is working
  37. # correctly.  Then Bind to each columns bind parameter an is_null value of 1.
  38. # Then insert four more columns of integers, just for sanity.
  39. # A subsequent select on the server will result in this:
  40. # mysql> select * from foo_dfr;
  41. # +------+------+------+------+
  42. # | col1 | col2 | col3 | col4 |
  43. # +------+------+------+------+
  44. # |   22 |   22 |   22 |   22 |
  45. # | NULL | NULL | NULL |    0 |
  46. # |   88 |   88 |   88 |   88 |
  47. # +------+------+------+------+
  48. # Test is extended to more columns - code stores bit vector in bytes.
  49. create table t1 (
  50.   c_01 char(6), c_02 integer, c_03 real, c_04 int(3), c_05 varchar(20),
  51.   c_06 date,    c_07 char(1), c_08 real, c_09 int(11), c_10 time,
  52.   c_11 char(6), c_12 integer, c_13 real, c_14 int(3), c_15 varchar(20),
  53.   c_16 date,    c_17 char(1), c_18 real, c_19 int(11), c_20 text);
  54. # Do not use "timestamp" type, because it has a non-NULL default as of 4.1.2
  55. prepare st_1644 from 'insert into t1 values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
  56. set @arg01= 'row_1'; set @arg02= 1; set @arg03= 1.1; set @arg04= 111; set @arg05= 'row_one';
  57. set @arg06= '2004-10-12'; set @arg07= '1'; set @arg08= 1.1; set @arg09= '100100100'; set @arg10= '12:34:56';
  58. set @arg11= 'row_1'; set @arg12= 1; set @arg13= 1.1; set @arg14= 111; set @arg15= 'row_one';
  59. set @arg16= '2004-10-12'; set @arg17= '1'; set @arg18= 1.1; set @arg19= '100100100'; set @arg20= '12:34:56';
  60. execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
  61.                       @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
  62. set @arg01= NULL; set @arg02= NULL; set @arg03= NULL; set @arg04= NULL; set @arg05= NULL;
  63. set @arg06= NULL; set @arg07= NULL; set @arg08= NULL; set @arg09= NULL; set @arg10= NULL;
  64. set @arg11= NULL; set @arg12= NULL; set @arg13= NULL; set @arg14= NULL; set @arg15= NULL;
  65. set @arg16= NULL; set @arg17= NULL; set @arg18= NULL; set @arg19= NULL; set @arg20= NULL;
  66. execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
  67.                       @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
  68. set @arg01= 'row_3'; set @arg02= 3; set @arg03= 3.3; set @arg04= 333; set @arg05= 'row_three';
  69. set @arg06= '2004-10-12'; set @arg07= '3'; set @arg08= 3.3; set @arg09= '300300300'; set @arg10= '12:34:56';
  70. set @arg11= 'row_3'; set @arg12= 3; set @arg13= 3.3; set @arg14= 333; set @arg15= 'row_three';
  71. set @arg16= '2004-10-12'; set @arg17= '3'; set @arg18= 3.3; set @arg19= '300300300'; set @arg20= '12:34:56';
  72. execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
  73.                       @arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
  74. select * from t1;
  75. drop table t1;
  76. # end of bug#1644
  77. # bug#1676: Prepared statement two-table join returns no rows when one is expected
  78. create table t1(
  79.    cola varchar(50) not null,
  80.    colb varchar(8) not null,
  81.    colc varchar(12) not null,
  82.    cold varchar(2) not null,
  83.    primary key (cola, colb, cold));
  84. create table t2(
  85.    cola varchar(50) not null,
  86.    colb varchar(8) not null,
  87.    colc varchar(2) not null,
  88.    cold float,
  89.    primary key (cold));
  90. insert into t1 values ('aaaa', 'yyyy', 'yyyy-dd-mm', 'R');
  91. insert into t2 values ('aaaa', 'yyyy', 'R', 203), ('bbbb', 'zzzz', 'C', 201);
  92. prepare st_1676 from 'select a.cola, a.colb, a.cold from t1 a, t2 b where a.cola = ? and a.colb = ? and a.cold = ? and b.cola = a.cola and b.colb = a.colb and b.colc = a.cold';
  93. set @arg0= "aaaa";
  94. set @arg1= "yyyy";
  95. set @arg2= "R";
  96. execute st_1676 using @arg0, @arg1, @arg2;
  97. drop table t1, t2;
  98. # end of bug#1676
  99. # End of 4.1 tests