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

MySQL数据库

开发平台:

Visual C++

  1. ############################ ps_conv.inc ##############################
  2. #                                                                      #
  3. #  Tests for prepared statements: conversion of parameters             #
  4. #                                                                      #
  5. #  Please don't                                                        #
  6. #  - try to execute this script in ANSI mode, because many statements  #
  7. #    will fail due to the strict type checking                         #
  8. #  - reuse such ugly assignments like timestamp column = float value . #
  9. #    I included them only for controlling purposes.                    #
  10. ########################################################################
  11. #    
  12. # NOTE: PLEASE SEE ps_1general.test (bottom) 
  13. #       BEFORE ADDING NEW TEST CASES HERE !!!
  14. #
  15. # Please be aware, that this file will be sourced by several test case files
  16. # stored within the subdirectory 't'. So every change here will affect 
  17. # several test cases.
  18. # The MySQL User Variables do not support the simulation of all 
  19. # C-API field types.
  20. #
  21. # - There is no method to make an explicit assignment of a type to a variable.
  22. # - The type of the variable can be only influenced by the writing style
  23. #   of the value.
  24. #
  25. # The next tests should give an example for these properties.
  26. --disable_warnings
  27. drop table if exists t5 ;
  28. --enable_warnings
  29. set @arg01= 8;
  30. set @arg02= 8.0;
  31. set @arg03= 80.00000000000e-1;
  32. set @arg04= 'abc' ;
  33. set @arg05= CAST('abc' as binary) ;
  34. set @arg06= '1991-08-05' ;
  35. set @arg07= CAST('1991-08-05' as date);
  36. set @arg08= '1991-08-05 01:01:01' ;
  37. set @arg09= CAST('1991-08-05 01:01:01' as datetime) ;
  38. set @arg10= unix_timestamp('1991-01-01 01:01:01');
  39. set @arg11= YEAR('1991-01-01 01:01:01');
  40. # This first assignment to @arg<n> fixes the type of the variable
  41. # The second assignment sets the value to NULL, but it does not change
  42. # the numeric types.
  43. set @arg12= 8 ;
  44. set @arg12= NULL ;
  45. set @arg13= 8.0 ;
  46. set @arg13= NULL ;
  47. set @arg14= 'abc';
  48. set @arg14= NULL ;
  49. set @arg15= CAST('abc' as binary) ;
  50. set @arg15= NULL ;
  51. create table t5 as select
  52.   8                           as const01, @arg01 as param01,
  53.   8.0                         as const02, @arg02 as param02,
  54.   80.00000000000e-1           as const03, @arg03 as param03,
  55.   'abc'                       as const04, @arg04 as param04,
  56.   CAST('abc' as binary)       as const05, @arg05 as param05,
  57.   '1991-08-05'                as const06, @arg06 as param06,
  58.   CAST('1991-08-05' as date)  as const07, @arg07 as param07,
  59.   '1991-08-05 01:01:01'       as const08, @arg08 as param08,
  60.   CAST('1991-08-05 01:01:01'  as datetime) as const09, @arg09 as param09,
  61.   unix_timestamp('1991-01-01 01:01:01')    as const10, @arg10 as param10,
  62.   YEAR('1991-01-01 01:01:01') as const11, @arg11 as param11, 
  63.   NULL                        as const12, @arg12 as param12,
  64.                                           @arg13 as param13,
  65.                                           @arg14 as param14,
  66.                                           @arg15 as param15;
  67.   
  68. # Bug#4788 show create table provides incorrect statement
  69. show create table t5 ;
  70. --vertical_results
  71. --enable_metadata
  72. --disable_ps_protocol
  73. select * from t5 ;
  74. --enable_ps_protocol
  75. --disable_metadata
  76. --horizontal_results
  77. drop table t5 ;
  78. # But there seems to be also an implicit conversion of C-API
  79. # data types to a smaller number of base data types.
  80. # Example: C-API for prepared statements
  81. #          CREATE TABLE abc as SELECT  ? as a, ? as b, ...
  82. #
  83. #    MYSQL_TYPE of parameter  column type
  84. #    MYSQL_TYPE_TINY          bigint(4)
  85. #    MYSQL_TYPE_SHORT         bigint(6)
  86. #    MYSQL_TYPE_FLOAT         double
  87. #    ...
  88. #
  89. # So we can hope that the functionality of mysqltest + user variables
  90. # sufficient to simulate much of the behaviour of the C-API
  91. # vis-a-vis the server.
  92. # The main test object is the table t9, defined as follows:
  93. #
  94. # eval create table t9 
  95. # (
  96. #   c1  tinyint, c2  smallint, c3  mediumint, c4  int,
  97. #   c5  integer, c6  bigint, c7  float, c8  double,
  98. #   c9  double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
  99. #   c13 date, c14 datetime, c15 timestamp(14), c16 time,
  100. #   c17 year, c18 bit, c19 bool, c20 char,
  101. #   c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
  102. #   c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
  103. #   c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
  104. #   c32 set('monday', 'tuesday', 'wednesday'),
  105. #   primary key(c1)
  106. # ) engine = $type ;
  107. # We test each statement in non-prepared mode and in prepared mode
  108. # for comparison purposes.
  109. #
  110. # We test the following conversions:
  111. # BIGINT -> the rest of numeric columns
  112. # CHAR, LONGTEXT, LONGBLOB, NULL, FLOAT, REAL, DOUBLE -> numeric columns
  113. # FLOAT, REAL, CHAR, LONGTEXT, BINARY, BIGINT -> string
  114. # DATETIME, TIME -> text, and back
  115. --disable_query_log
  116. select '------ data type conversion tests ------' as test_sequence ;
  117. --enable_query_log
  118. --source include/ps_renew.inc
  119. # insert a record with many NULLs
  120. insert into t9 set c1= 0, c15= '1991-01-01 01:01:01' ;
  121. select * from t9 order by c1 ;
  122. ############ select @parm:= .. / select .. into @parm tests ############
  123. --disable_query_log
  124. select '------ select @parameter:= column ------' as test_sequence ;
  125. --enable_query_log
  126. # PS query to retrieve the content of the @variables
  127. prepare full_info from "select @arg01, @arg02, @arg03, @arg04,
  128.        @arg05, @arg06, @arg07, @arg08,
  129.        @arg09, @arg10, @arg11, @arg12,
  130.        @arg13, @arg14, @arg15, @arg16,
  131.        @arg17, @arg18, @arg19, @arg20,
  132.        @arg21, @arg22, @arg23, @arg24,
  133.        @arg25, @arg26, @arg27, @arg28,
  134.        @arg29, @arg30, @arg31, @arg32" ;
  135. # non PS statement for comparison purposes
  136. select @arg01:=  c1, @arg02:=  c2, @arg03:=  c3, @arg04:=  c4,
  137.        @arg05:=  c5, @arg06:=  c6, @arg07:=  c7, @arg08:=  c8,
  138.        @arg09:=  c9, @arg10:= c10, @arg11:= c11, @arg12:= c12,
  139.        @arg13:= c13, @arg14:= c14, @arg15:= c15, @arg16:= c16,
  140.        @arg17:= c17, @arg18:= c18, @arg19:= c19, @arg20:= c20,
  141.        @arg21:= c21, @arg22:= c22, @arg23:= c23, @arg24:= c24,
  142.        @arg25:= c25, @arg26:= c26, @arg27:= c27, @arg28:= c28,
  143.        @arg29:= c29, @arg30:= c30, @arg31:= c31, @arg32:= c32
  144. from t9 where c1= 1 ;
  145. # get as much informations about the parameters as possible
  146. --enable_metadata
  147. execute full_info ;
  148. --disable_metadata
  149. # now the same procedure with the record containing so many NULLs
  150. select @arg01:=  c1, @arg02:=  c2, @arg03:=  c3, @arg04:=  c4,
  151.        @arg05:=  c5, @arg06:=  c6, @arg07:=  c7, @arg08:=  c8,
  152.        @arg09:=  c9, @arg10:= c10, @arg11:= c11, @arg12:= c12,
  153.        @arg13:= c13, @arg14:= c14, @arg15:= c15, @arg16:= c16,
  154.        @arg17:= c17, @arg18:= c18, @arg19:= c19, @arg20:= c20,
  155.        @arg21:= c21, @arg22:= c22, @arg23:= c23, @arg24:= c24,
  156.        @arg25:= c25, @arg26:= c26, @arg27:= c27, @arg28:= c28,
  157.        @arg29:= c29, @arg30:= c30, @arg31:= c31, @arg32:= c32
  158. from t9 where c1= 0 ;
  159. # get as much informations about the parameters as possible
  160. --enable_metadata
  161. execute full_info ;
  162. --disable_metadata
  163. prepare stmt1 from "select 
  164.        @arg01:=  c1, @arg02:=  c2, @arg03:=  c3, @arg04:=  c4,
  165.        @arg05:=  c5, @arg06:=  c6, @arg07:=  c7, @arg08:=  c8,
  166.        @arg09:=  c9, @arg10:= c10, @arg11:= c11, @arg12:= c12,
  167.        @arg13:= c13, @arg14:= c14, @arg15:= c15, @arg16:= c16,
  168.        @arg17:= c17, @arg18:= c18, @arg19:= c19, @arg20:= c20,
  169.        @arg21:= c21, @arg22:= c22, @arg23:= c23, @arg24:= c24,
  170.        @arg25:= c25, @arg26:= c26, @arg27:= c27, @arg28:= c28,
  171.        @arg29:= c29, @arg30:= c30, @arg31:= c31, @arg32:= c32
  172. from t9 where c1= ?" ;
  173. set @my_key= 1 ;
  174. execute stmt1 using @my_key ;
  175. # get as much informations about the parameters as possible
  176. --enable_metadata
  177. execute full_info ;
  178. --disable_metadata
  179. # now the same procedure with the record containing so many NULLs
  180. set @my_key= 0 ;
  181. execute stmt1 using @my_key ;
  182. # get as much informations about the parameters as possible
  183. --enable_metadata
  184. execute full_info ;
  185. --disable_metadata
  186. # the next statement must fail
  187. --error 1064
  188. prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
  189. --disable_query_log
  190. select '------ select column, .. into @parm,.. ------' as test_sequence ;
  191. --enable_query_log
  192. select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
  193.        c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24,
  194.        c25, c26, c27, c28, c29, c30, c31, c32
  195. into @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08,
  196.      @arg09, @arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16,
  197.      @arg17, @arg18, @arg19, @arg20, @arg21, @arg22, @arg23, @arg24,
  198.      @arg25, @arg26, @arg27, @arg28, @arg29, @arg30, @arg31, @arg32
  199. from t9 where c1= 1 ;
  200. # get as much informations about the parameters as possible
  201. --enable_metadata
  202. execute full_info ;
  203. --disable_metadata
  204. # now the same procedure with the record containing so many NULLs
  205. select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
  206.        c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24,
  207.        c25, c26, c27, c28, c29, c30, c31, c32
  208. into @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08,
  209.      @arg09, @arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16,
  210.      @arg17, @arg18, @arg19, @arg20, @arg21, @arg22, @arg23, @arg24,
  211.      @arg25, @arg26, @arg27, @arg28, @arg29, @arg30, @arg31, @arg32
  212. from t9 where c1= 0 ;
  213. # get as much informations about the parameters as possible
  214. --enable_metadata
  215. execute full_info ;
  216. --disable_metadata
  217. prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
  218.        c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24,
  219.        c25, c26, c27, c28, c29, c30, c31, c32
  220. into @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08,
  221.      @arg09, @arg10, @arg11, @arg12, @arg13, @arg14, @arg15, @arg16,
  222.      @arg17, @arg18, @arg19, @arg20, @arg21, @arg22, @arg23, @arg24,
  223.      @arg25, @arg26, @arg27, @arg28, @arg29, @arg30, @arg31, @arg32
  224. from t9 where c1= ?" ;
  225. set @my_key= 1 ;
  226. execute stmt1 using @my_key ;
  227. # get as much informations about the parameters as possible
  228. --enable_metadata
  229. execute full_info ;
  230. --disable_metadata
  231. # now the same procedure with the record containing so many NULLs
  232. # Bug#5034: prepared "select 1 into @arg15", second execute crashes server
  233. set @my_key= 0 ;
  234. execute stmt1 using @my_key ;
  235. # get as much informations about the parameters as possible
  236. --enable_metadata
  237. execute full_info ;
  238. --disable_metadata
  239. # the next statement must fail
  240. --error 1064
  241. prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
  242. ######################### test of numeric types ##########################
  243. #                                                                        #
  244. # c1  tinyint, c2  smallint, c3  mediumint, c4  int,                     # 
  245. # c5  integer, c6  bigint, c7  float, c8  double,                        #
  246. # c9  double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),  #
  247. #                                                                        #
  248. ##########################################################################
  249. --disable_query_log
  250. select '-- insert into numeric columns --' as test_sequence ;
  251. --enable_query_log
  252. ######## INSERT into .. numeric columns values(BIGINT(n),BIGINT) ########
  253. insert into t9 
  254.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  255. values
  256.   ( 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 ) ;
  257. set @arg00= 21 ;
  258. insert into t9 
  259.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  260. values
  261.   ( @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  262.                          @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  263. prepare stmt1 from "insert into t9 
  264.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  265. values
  266.   ( 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22 )" ;
  267. execute stmt1 ;
  268. set @arg00= 23;
  269. prepare stmt2 from "insert into t9 
  270.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  271. values 
  272.   (  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  273. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  274.                     @arg00, @arg00, @arg00, @arg00 ;
  275. ######## INSERT into .. numeric columns values(DOUBLE(m,n),DOUBLE) ########
  276. insert into t9 
  277.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  278. values
  279.   ( 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0,
  280.     30.0, 30.0, 30.0 ) ;
  281. set @arg00= 31.0 ;
  282. insert into t9 
  283.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  284. values
  285.   ( @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  286.                          @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  287. prepare stmt1 from "insert into t9 
  288.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  289. values
  290.   ( 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0, 32.0,
  291.     32.0, 32.0, 32.0 )" ;
  292. execute stmt1 ;
  293. set @arg00= 33.0;
  294. prepare stmt2 from "insert into t9 
  295.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  296. values 
  297.   (  ?,  ?,  ?,  ?,  ?,  ?,  ?,  ?,  ?,   ?,   ? )" ;
  298. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  299.                     @arg00, @arg00, @arg00, @arg00 ;
  300. ######## INSERT into .. numeric columns values(CHAR(n),LONGTEXT) #########
  301. insert into t9 
  302.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  303. values
  304.   ( '40', '40', '40', '40', '40', '40', '40', '40',
  305.     '40', '40', '40' ) ;
  306. set @arg00= '41' ;
  307. insert into t9 
  308.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  309. values
  310.   ( @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  311.                              @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  312. prepare stmt1 from "insert into t9 
  313.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  314. values
  315.   ( '42', '42', '42', '42', '42', '42', '42', '42',
  316.     '42', '42', '42' )" ;
  317. execute stmt1 ;
  318. set @arg00= '43';
  319. prepare stmt2 from "insert into t9 
  320.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  321. values 
  322.   ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  323. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  324.                     @arg00, @arg00, @arg00, @arg00 ;
  325. ######## INSERT into .. numeric columns values(BINARY(n),LONGBLOB) ########
  326. insert into t9 
  327.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  328. values
  329.   ( CAST('50' as binary), CAST('50' as binary), 
  330.   CAST('50' as binary), CAST('50' as binary), CAST('50' as binary), 
  331.   CAST('50' as binary), CAST('50' as binary), CAST('50' as binary),
  332.   CAST('50' as binary), CAST('50' as binary), CAST('50' as binary) ) ;
  333. set @arg00= CAST('51' as binary) ;
  334. insert into t9 
  335.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  336. values
  337.   ( @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  338.                              @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  339. prepare stmt1 from "insert into t9 
  340.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  341. values
  342.   ( CAST('52' as binary), CAST('52' as binary),
  343.   CAST('52' as binary), CAST('52' as binary), CAST('52' as binary), 
  344.   CAST('52' as binary), CAST('52' as binary), CAST('52' as binary),
  345.   CAST('52' as binary), CAST('52' as binary), CAST('52' as binary) )" ;
  346. execute stmt1 ;
  347. set @arg00= CAST('53' as binary) ;
  348. prepare stmt2 from "insert into t9 
  349.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  350. values 
  351.   ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  352. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  353.                     @arg00, @arg00, @arg00, @arg00 ;
  354. ######## INSERT into .. numeric columns values(BIGINT,NULL) ########
  355. # we first assign number to arg00 to set it's datatype to numeric.
  356. set @arg00= 2 ;
  357. set @arg00= NULL ;
  358. insert into t9
  359.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  360. values
  361.   ( 60, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  362.     NULL, NULL, NULL ) ;
  363. insert into t9
  364.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  365. values
  366.   ( 61, @arg00, @arg00, @arg00, @arg00, @arg00,
  367.                              @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  368. prepare stmt1 from "insert into t9
  369.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  370. values
  371.   ( 62, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  372.     NULL, NULL, NULL )" ;
  373. execute stmt1 ;
  374. prepare stmt2 from "insert into t9
  375.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  376. values
  377.   ( 63, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  378. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  379.                     @arg00, @arg00, @arg00, @arg00 ;
  380. ######## INSERT into .. numeric columns values(DOUBLE,NULL) ########
  381. set @arg00= 8.0 ;
  382. set @arg00= NULL ;
  383. insert into t9
  384.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  385. values
  386.   ( 71, @arg00, @arg00, @arg00, @arg00, @arg00,
  387.                              @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  388. prepare stmt2 from "insert into t9
  389.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  390. values
  391.   ( 73, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  392. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  393.                     @arg00, @arg00, @arg00, @arg00 ;
  394. ######## INSERT into .. numeric columns values(LONGBLOB,NULL) ########
  395. set @arg00= 'abc' ;
  396. set @arg00= NULL ;
  397. insert into t9
  398.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  399. values
  400.   ( 81, @arg00, @arg00, @arg00, @arg00, @arg00,
  401.                              @arg00, @arg00, @arg00, @arg00, @arg00 ) ;
  402. prepare stmt2 from "insert into t9
  403.   ( c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  404. values
  405.   ( 83, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  406. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  407.                     @arg00, @arg00, @arg00, @arg00 ;
  408. ######## SELECT of all inserted records ########
  409. select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12
  410. from t9 where c1 >= 20
  411. order by c1 ;
  412. --disable_query_log
  413. select '-- select .. where numeric column = .. --' as test_sequence ;
  414. --enable_query_log
  415. ######## SELECT .. WHERE column(numeric)=value(BIGINT(n)/BIGINT) ########
  416. set @arg00= 20;
  417. select 'true' as found from t9 
  418. where c1= 20 and c2= 20 and c3= 20 and c4= 20 and c5= 20 and c6= 20 and c7= 20
  419.   and c8= 20 and c9= 20 and c10= 20 and c12= 20;
  420. select 'true' as found from t9 
  421. where c1= @arg00 and c2= @arg00 and c3= @arg00 and c4= @arg00 and c5= @arg00 
  422.   and c6= @arg00 and c7= @arg00 and c8= @arg00 and c9= @arg00 and c10= @arg00
  423.   and c12= @arg00;
  424. prepare stmt1 from "select 'true' as found from t9 
  425. where c1= 20 and c2= 20 and c3= 20 and c4= 20 and c5= 20 and c6= 20 and c7= 20
  426.   and c8= 20 and c9= 20 and c10= 20 and c12= 20 ";
  427. execute stmt1 ;
  428. prepare stmt1 from "select 'true' as found from t9 
  429. where c1= ? and c2= ? and c3= ? and c4= ? and c5= ? 
  430.   and c6= ? and c7= ? and c8= ? and c9= ? and c10= ?
  431.   and c12= ? ";
  432. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  433.                     @arg00, @arg00, @arg00, @arg00 ;
  434. ######## SELECT .. WHERE column(numeric)=value(DOUBLE(m,n)/DOUBLE) ########
  435. set @arg00= 20.0;
  436. select 'true' as found from t9 
  437. where c1= 20.0 and c2= 20.0 and c3= 20.0 and c4= 20.0 and c5= 20.0 and c6= 20.0
  438.   and c7= 20.0 and c8= 20.0 and c9= 20.0 and c10= 20.0 and c12= 20.0;
  439. select 'true' as found from t9 
  440. where c1= @arg00 and c2= @arg00 and c3= @arg00 and c4= @arg00 and c5= @arg00 
  441.   and c6= @arg00 and c7= @arg00 and c8= @arg00 and c9= @arg00 and c10= @arg00
  442.   and c12= @arg00;
  443. prepare stmt1 from "select 'true' as found from t9 
  444. where c1= 20.0 and c2= 20.0 and c3= 20.0 and c4= 20.0 and c5= 20.0 and c6= 20.0
  445.   and c7= 20.0 and c8= 20.0 and c9= 20.0 and c10= 20.0 and c12= 20.0 ";
  446. execute stmt1 ;
  447. prepare stmt1 from "select 'true' as found from t9 
  448. where c1= ? and c2= ? and c3= ? and c4= ? and c5= ? 
  449.   and c6= ? and c7= ? and c8= ? and c9= ? and c10= ?
  450.   and c12= ? ";
  451. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  452.                     @arg00, @arg00, @arg00, @arg00 ;
  453. ######## SELECT .. WHERE column(numeric)=value(CHAR(n)/LONGTEXT) ########
  454. select 'true' as found from t9 
  455. where c1= '20' and c2= '20' and c3= '20' and c4= '20' and c5= '20' and c6= '20'
  456.   and c7= '20' and c8= '20' and c9= '20' and c10= '20' and c12= '20';
  457. prepare stmt1 from "select 'true' as found from t9
  458. where c1= '20' and c2= '20' and c3= '20' and c4= '20' and c5= '20' and c6= '20'
  459.   and c7= '20' and c8= '20' and c9= '20' and c10= '20' and c12= '20' ";
  460. execute stmt1 ;
  461. set @arg00= '20';
  462. select 'true' as found from t9 
  463. where c1= @arg00 and c2= @arg00 and c3= @arg00 and c4= @arg00 and c5= @arg00 
  464.   and c6= @arg00 and c7= @arg00 and c8= @arg00 and c9= @arg00 and c10= @arg00
  465.   and c12= @arg00;
  466. prepare stmt1 from "select 'true' as found from t9 
  467. where c1= ? and c2= ? and c3= ? and c4= ? and c5= ? 
  468.   and c6= ? and c7= ? and c8= ? and c9= ? and c10= ?
  469.   and c12= ? ";
  470. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  471.                     @arg00, @arg00, @arg00, @arg00 ;
  472. ######## SELECT .. WHERE column(numeric)=value(BINARY(n)/LONGBLOB) ########
  473. select 'true' as found from t9 
  474. where c1= CAST('20' as binary) and c2= CAST('20' as binary) and 
  475.       c3= CAST('20' as binary) and c4= CAST('20' as binary) and 
  476.       c5= CAST('20' as binary) and c6= CAST('20' as binary) and 
  477.       c7= CAST('20' as binary) and c8= CAST('20' as binary) and 
  478.       c9= CAST('20' as binary) and c10= CAST('20' as binary) and 
  479.       c12= CAST('20' as binary);
  480. prepare stmt1 from "select 'true' as found from t9
  481. where c1= CAST('20' as binary) and c2= CAST('20' as binary) and 
  482.       c3= CAST('20' as binary) and c4= CAST('20' as binary) and 
  483.       c5= CAST('20' as binary) and c6= CAST('20' as binary) and 
  484.       c7= CAST('20' as binary) and c8= CAST('20' as binary) and 
  485.       c9= CAST('20' as binary) and c10= CAST('20' as binary) and 
  486.       c12= CAST('20' as binary) ";
  487. execute stmt1 ;
  488. set @arg00= CAST('20' as binary) ;
  489. select 'true' as found from t9 
  490. where c1= @arg00 and c2= @arg00 and c3= @arg00 and c4= @arg00 and c5= @arg00 
  491.   and c6= @arg00 and c7= @arg00 and c8= @arg00 and c9= @arg00 and c10= @arg00
  492.   and c12= @arg00;
  493. prepare stmt1 from "select 'true' as found from t9 
  494. where c1= ? and c2= ? and c3= ? and c4= ? and c5= ? 
  495.   and c6= ? and c7= ? and c8= ? and c9= ? and c10= ?
  496.   and c12= ? ";
  497. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  498.                     @arg00, @arg00, @arg00, @arg00 ;
  499. delete from t9 ;
  500. #################### Some overflow experiments ################################
  501. #                                                                             #
  502. # MySQL Manual (July 2004)                                                    #
  503. # - Setting a numeric column to a value that lies outside the column's range. #
  504. #   The value is clipped to the closest endpoint of the range.                #
  505. # ...                                                                         #
  506. # - For example, inserting the string '1999.0e-2' into an INT, FLOAT,         #
  507. #   DECIMAL(10,6), or YEAR column results in the values 1999, 19.9921,        #
  508. #   19.992100, and 1999.                                                      #
  509. # That means there is an anomaly if a float value is assigned via string to   #
  510. # a column of type bigint. The string will be cut from the right side to      #
  511. # a "usable" integer value.                                                   #
  512. #                                                                             #
  513. ###############################################################################
  514. --disable_query_log
  515. select '-- some numeric overflow experiments --' as test_sequence ;
  516. --enable_query_log
  517. prepare my_insert from "insert into t9 
  518.    ( c21, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12 )
  519. values 
  520.    ( 'O',  ?,  ?,  ?,  ?,  ?,  ?,  ?,  ?,  ?,   ?,   ? )" ;
  521. prepare my_select from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c12
  522. from t9 where c21 = 'O' ";
  523. prepare my_delete from "delete from t9 where c21 = 'O' ";
  524. # Numeric overflow of columns(c1, c2, c3, c4, c5, c12) with type not in 
  525. # (BIGINT,FLOAT,REAL,DOUBLE) during insert
  526. #
  527. # Use the maximum BIGINT from the manual
  528. set @arg00= 9223372036854775807 ;
  529. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  530.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  531. --vertical_results
  532. --replace_result e+0 e+
  533. execute my_select ;
  534. --horizontal_results
  535. --replace_result e+0 e+
  536. execute my_delete ;
  537. set @arg00= '9223372036854775807' ;
  538. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  539.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  540. --vertical_results
  541. --replace_result e+0 e+
  542. execute my_select ;
  543. --horizontal_results
  544. --replace_result e+0 e+
  545. execute my_delete ;
  546. # Use the minimum BIGINT from the manual
  547. #
  548. set @arg00= -9223372036854775808 ;
  549. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  550.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  551. --vertical_results
  552. --replace_result e+0 e+
  553. execute my_select ;
  554. --horizontal_results
  555. --replace_result e+0 e+
  556. execute my_delete ;
  557. set @arg00= '-9223372036854775808' ;
  558. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  559.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  560. --vertical_results
  561. --replace_result e+0 e+
  562. execute my_select ;
  563. --horizontal_results
  564. --replace_result e+0 e+
  565. execute my_delete ;
  566. # Numeric overflow of columns(c1, c2, c3, c4, c5, c12) with type not in 
  567. # (FLOAT,REAL,DOUBLE) during insert
  568. #
  569. set @arg00= 1.11111111111111111111e+50 ;
  570. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  571.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  572. --vertical_results
  573. --replace_result e+0 e+
  574. execute my_select ;
  575. --horizontal_results
  576. --replace_result e+0 e+
  577. execute my_delete ;
  578. # Attention: The columns(c1,c2,c3,c4,c5,c6) do not get the overflow,
  579. #             because the string is treated as written integer and
  580. #             '.11111111111111111111e+50' is cut away.
  581. set @arg00= '1.11111111111111111111e+50' ;
  582. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  583.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  584. --vertical_results
  585. --replace_result e+0 e+
  586. execute my_select ;
  587. --horizontal_results
  588. --replace_result e+0 e+
  589. execute my_delete ;
  590. set @arg00= -1.11111111111111111111e+50 ;
  591. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  592.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  593. --vertical_results
  594. --replace_result e+0 e+
  595. execute my_select ;
  596. --horizontal_results
  597. --replace_result e+0 e+
  598. execute my_delete ;
  599. # Attention: The columns(c1,c2,c3,c4,c5,c6) do not get the overflow,
  600. #             because the string is treated as written integer and
  601. #             '.11111111111111111111e+50' is cut away.
  602. set @arg00= '-1.11111111111111111111e+50' ;
  603. execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  604.                         @arg00, @arg00, @arg00, @arg00, @arg00 ;
  605. --vertical_results
  606. --replace_result e+0 e+
  607. execute my_select ;
  608. --horizontal_results
  609. --replace_result e+0 e+
  610. execute my_delete ;
  611. ########################## test of string types ##########################
  612. #                                                                        # 
  613. #   c20 char, c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext, #
  614. #   c25 blob, c26 text, c27 mediumblob, c28 mediumtext, c29 longblob,    #
  615. #   c30 longtext, c31 enum('one', 'two', 'three')                        #
  616. #                                                                        #
  617. ##########################################################################
  618. --disable_query_log
  619. select '-- insert into string columns --' as test_sequence ;
  620. --enable_query_log
  621. ######## INSERT into .. string columns values(CHAR(n),LONGTEXT) ########
  622. --disable_query_log
  623. insert into t9 
  624.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  625. values
  626.   ( 20, '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20' ) ;
  627. set @arg00= '21' ;
  628. insert into t9 
  629.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  630. values
  631.   ( 21, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  632.         @arg00, @arg00, @arg00 ) ;
  633. prepare stmt1 from "insert into t9 
  634.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  635. values
  636.   ( 22, '22', '22', '22', '22', '22', '22', '22', '22', '22', '22', '22' )" ;
  637. execute stmt1 ;
  638. set @arg00= '23';
  639. prepare stmt2 from "insert into t9 
  640.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  641. values 
  642.   ( 23, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  643. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  644.                     @arg00, @arg00, @arg00, @arg00 ;
  645. ######## INSERT into .. string columns values(BINARY(n),LONGBLOB) ########
  646. insert into t9 
  647.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  648. values
  649.   ( 30, CAST('30' as binary), CAST('30' as binary), CAST('30' as binary),
  650.   CAST('30' as binary), CAST('30' as binary), CAST('30' as binary),
  651.   CAST('30' as binary), CAST('30' as binary), CAST('30' as binary),
  652.   CAST('30' as binary), CAST('30' as binary) ) ;
  653. set @arg00= '31' ;
  654. insert into t9 
  655.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  656. values
  657.   ( 31, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  658.         @arg00, @arg00, @arg00 ) ;
  659. prepare stmt1 from "insert into t9 
  660.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  661. values
  662.   ( 32, CAST('32' as binary), CAST('32' as binary), CAST('32' as binary),
  663.   CAST('32' as binary), CAST('32' as binary), CAST('32' as binary),
  664.   CAST('32' as binary), CAST('32' as binary), CAST('32' as binary),
  665.   CAST('32' as binary), CAST('32' as binary) )" ;
  666. execute stmt1 ;
  667. set @arg00= CAST('33' as binary);
  668. prepare stmt2 from "insert into t9 
  669.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  670. values 
  671.   ( 33, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  672. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  673.                     @arg00, @arg00, @arg00, @arg00 ;
  674. ######## INSERT into .. string columns values(BIGINT(n),BIGINT) ########
  675. insert into t9 
  676.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  677. values
  678.   ( 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 ) ;
  679. set @arg00= 41 ;
  680. insert into t9 
  681.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  682. values
  683.   ( 41, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  684.         @arg00, @arg00, @arg00 ) ;
  685. prepare stmt1 from "insert into t9 
  686.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  687. values
  688.   ( 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42 )" ;
  689. execute stmt1 ;
  690. set @arg00= 43;
  691. prepare stmt2 from "insert into t9 
  692.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  693. values 
  694.   ( 43, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  695. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  696.                     @arg00, @arg00, @arg00, @arg00 ;
  697. ######## INSERT into .. string columns values(DOUBLE(m,n),DOUBLE) ########
  698. insert into t9 
  699.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  700. values
  701.   ( 50, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0 ) ;
  702. set @arg00= 51.0 ;
  703. insert into t9 
  704.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  705. values
  706.   ( 51, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  707.         @arg00, @arg00, @arg00 ) ;
  708. prepare stmt1 from "insert into t9 
  709.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  710. values
  711.   ( 52, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0, 52.0 )" ;
  712. execute stmt1 ;
  713. set @arg00= 53.0;
  714. prepare stmt2 from "insert into t9 
  715.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  716. values 
  717.   ( 53, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  718. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  719.                     @arg00, @arg00, @arg00, @arg00 ;
  720. ######## INSERT into .. string columns values(DOUBLE(m,n),DOUBLE) ########
  721. #  typical float writing style
  722. insert into t9 
  723.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  724. values
  725.   ( 54, 5.4e+1, 5.4e+1, 5.4e+1, 5.4e+1, 5.4e+1, 5.4e+1, 5.4e+1, 5.4e+1,
  726.     5.4e+1, 5.4e+1, 5.4e+1 ) ;
  727. set @arg00= 5.5e+1 ;
  728. insert into t9 
  729.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  730. values
  731.   ( 55, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  732.         @arg00, @arg00, @arg00 ) ;
  733. prepare stmt1 from "insert into t9 
  734.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  735. values
  736.   ( 56, 5.6e+1, 5.6e+1, 5.6e+1, 5.6e+1, 5.6e+1, 5.6e+1, 5.6e+1, 5.6e+1,
  737.     5.6e+1, 5.6e+1, 5.6e+1 )" ;
  738. execute stmt1 ;
  739. set @arg00= 5.7e+1;
  740. prepare stmt2 from "insert into t9 
  741.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  742. values 
  743.   ( 57, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  744. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  745.                     @arg00, @arg00, @arg00, @arg00 ;
  746. ######## INSERT into .. string columns values(LONGBLOB,NULL) ########
  747. set @arg00= 'abc' ;
  748. set @arg00= NULL ;
  749. insert into t9
  750.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  751. values
  752.   ( 60, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ;
  753. insert into t9
  754.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  755. values
  756.   ( 61, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  757.         @arg00, @arg00, @arg00 ) ;
  758. prepare stmt1 from "insert into t9
  759.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  760. values
  761.   ( 62, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )" ;
  762. execute stmt1 ;
  763. prepare stmt2 from "insert into t9
  764.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  765. values
  766.   ( 63, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  767. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  768.                     @arg00, @arg00, @arg00, @arg00 ;
  769. ######## INSERT into .. string columns values(BIGINT,NULL) ########
  770. set @arg00= 2 ;
  771. set @arg00= NULL ;
  772. insert into t9
  773.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  774. values
  775.   ( 71, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  776.         @arg00, @arg00, @arg00 ) ;
  777. prepare stmt2 from "insert into t9
  778.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  779. values
  780.   ( 73, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  781. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  782.                     @arg00, @arg00, @arg00, @arg00 ;
  783. ######## INSERT into .. string columns values(DOUBLE,NULL) ########
  784. set @arg00= 8 ;
  785. set @arg00= NULL ;
  786. insert into t9
  787.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  788. values
  789.   ( 81, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  790.         @arg00, @arg00, @arg00 ) ;
  791. prepare stmt2 from "insert into t9
  792.   ( c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30 )
  793. values
  794.   ( 83, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" ;
  795. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
  796.                     @arg00, @arg00, @arg00, @arg00 ;
  797. --enable_query_log
  798. ######## SELECT of all inserted records ########
  799. select c1, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30
  800. from t9 where c1 >= 20
  801. order by c1 ;
  802. --disable_query_log
  803. select '-- select .. where string column = .. --' as test_sequence ;
  804. --enable_query_log
  805. ######## SELECT .. WHERE column(string)=value(CHAR(n)/LONGTEXT) ########
  806. set @arg00= '20';
  807. # c20 (char) must be extended for the comparison
  808. select 'true' as found from t9 
  809. where c1= 20 and concat(c20,substr('20',1+length(c20)))= '20' and c21= '20' and
  810.   c22= '20' and c23= '20' and c24= '20' and c25= '20' and c26= '20' and
  811.   c27= '20' and c28= '20' and c29= '20' and c30= '20' ;
  812. select 'true' as found from t9 
  813. where c1= 20 and concat(c20,substr(@arg00,1+length(c20)))= @arg00 and
  814.   c21= @arg00 and c22= @arg00 and c23= @arg00 and c25= @arg00 and
  815.   c26= @arg00 and c27= @arg00 and c28= @arg00 and c29= @arg00 and c30= @arg00;
  816. prepare stmt1 from "select 'true' as found from t9 
  817. where c1= 20 and concat(c20,substr('20',1+length(c20)))= '20' and c21= '20' and
  818.   c22= '20' and c23= '20' and c24= '20' and c25= '20' and c26= '20' and
  819.   c27= '20' and c28= '20' and c29= '20' and c30= '20'" ;
  820. execute stmt1 ;
  821. prepare stmt1 from "select 'true' as found from t9 
  822. where c1= 20 and concat(c20,substr(?,1+length(c20)))= ? and
  823.   c21= ? and c22= ? and c23= ? and c25= ? and
  824.   c26= ? and c27= ? and c28= ? and c29= ? and c30= ?" ;
  825. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  826.                     @arg00, @arg00, @arg00, @arg00, @arg00 ;
  827. ######## SELECT .. WHERE column(string)=value(BINARY(n)/LONGBLOB) ########
  828. set @arg00= CAST('20' as binary);
  829. # c20 (char) must be extended for the comparison
  830. select 'true' as found from t9 
  831. where c1= 20 and concat(c20,substr(CAST('20' as binary),1+length(c20)))
  832.                  = CAST('20' as binary) and c21= CAST('20' as binary)
  833.   and c22= CAST('20' as binary) and c23= CAST('20' as binary) and
  834.   c24= CAST('20' as binary) and c25= CAST('20' as binary) and
  835.   c26= CAST('20' as binary) and c27= CAST('20' as binary) and
  836.   c28= CAST('20' as binary) and c29= CAST('20' as binary) and
  837.   c30= CAST('20' as binary) ;
  838. select 'true' as found from t9 
  839. where c1= 20 and concat(c20,substr(@arg00,1+length(c20))) = @arg00 and
  840.   c21= @arg00 and c22= @arg00 and c23= @arg00 and c25= @arg00 and
  841.   c26= @arg00 and c27= @arg00 and c28= @arg00 and c29= @arg00 and
  842.   c30= @arg00;
  843. prepare stmt1 from "select 'true' as found from t9 
  844. where c1= 20 and concat(c20,substr(CAST('20' as binary),1+length(c20)))
  845.                  = CAST('20' as binary) and c21= CAST('20' as binary)
  846.   and c22= CAST('20' as binary) and c23= CAST('20' as binary) and
  847.   c24= CAST('20' as binary) and c25= CAST('20' as binary) and
  848.   c26= CAST('20' as binary) and c27= CAST('20' as binary) and
  849.   c28= CAST('20' as binary) and c29= CAST('20' as binary) and
  850.   c30= CAST('20' as binary)" ;
  851. execute stmt1 ;
  852. prepare stmt1 from "select 'true' as found from t9 
  853. where c1= 20 and concat(c20,substr(?,1+length(c20))) = ? and c21= ? and
  854.   c22= ? and c23= ? and c25= ? and c26= ? and c27= ? and c28= ? and
  855.   c29= ? and c30= ?";
  856. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  857.                     @arg00, @arg00, @arg00, @arg00, @arg00 ;
  858. ######## SELECT .. WHERE column(string)=value(BIGINT(m,n),BIGINT) ########
  859. set @arg00= 20;
  860. # c20 (char) must be extended for the comparison
  861. select 'true' as found from t9 
  862. where c1= 20 and concat(c20,substr(20,1+length(c20)))= 20 and c21= 20 and
  863.   c22= 20 and c23= 20 and c24= 20 and c25= 20 and c26= 20 and
  864.   c27= 20 and c28= 20 and c29= 20 and c30= 20 ;
  865. select 'true' as found from t9 
  866. where c1= 20 and concat(c20,substr(@arg00,1+length(c20)))= @arg00 and
  867.   c21= @arg00 and c22= @arg00 and c23= @arg00 and c25= @arg00 and
  868.   c26= @arg00 and c27= @arg00 and c28= @arg00 and c29= @arg00 and c30= @arg00;
  869. prepare stmt1 from "select 'true' as found from t9 
  870. where c1= 20 and concat(c20,substr(20,1+length(c20)))= 20 and c21= 20 and
  871.   c22= 20 and c23= 20 and c24= 20 and c25= 20 and c26= 20 and
  872.   c27= 20 and c28= 20 and c29= 20 and c30= 20" ;
  873. execute stmt1 ;
  874. prepare stmt1 from "select 'true' as found from t9 
  875. where c1= 20 and concat(c20,substr(?,1+length(c20)))= ? and
  876.   c21= ? and c22= ? and c23= ? and c25= ? and
  877.   c26= ? and c27= ? and c28= ? and c29= ? and c30= ?" ;
  878. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  879.                     @arg00, @arg00, @arg00, @arg00, @arg00 ;
  880. ######## SELECT .. WHERE column(string)=value(DOUBLE(m,n),DOUBLE) ########
  881. set @arg00= 20.0;
  882. # c20 (char) must be extended for the comparison
  883. select 'true' as found from t9 
  884. where c1= 20 and concat(c20,substr(20.0,1+length(c20)))= 20.0 and c21= 20.0 and
  885.   c22= 20.0 and c23= 20.0 and c24= 20.0 and c25= 20.0 and c26= 20.0 and
  886.   c27= 20.0 and c28= 20.0 and c29= 20.0 and c30= 20.0 ;
  887. select 'true' as found from t9 
  888. where c1= 20 and concat(c20,substr(@arg00,1+length(c20)))= @arg00 and
  889.   c21= @arg00 and c22= @arg00 and c23= @arg00 and c25= @arg00 and
  890.   c26= @arg00 and c27= @arg00 and c28= @arg00 and c29= @arg00 and c30= @arg00;
  891. prepare stmt1 from "select 'true' as found from t9 
  892. where c1= 20 and concat(c20,substr(20.0,1+length(c20)))= 20.0 and c21= 20.0 and
  893.   c22= 20.0 and c23= 20.0 and c24= 20.0 and c25= 20.0 and c26= 20.0 and
  894.   c27= 20.0 and c28= 20.0 and c29= 20.0 and c30= 20.0" ;
  895. execute stmt1 ;
  896. prepare stmt1 from "select 'true' as found from t9 
  897. where c1= 20 and concat(c20,substr(?,1+length(c20)))= ? and
  898.   c21= ? and c22= ? and c23= ? and c25= ? and
  899.   c26= ? and c27= ? and c28= ? and c29= ? and c30= ?" ;
  900. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00, 
  901.                     @arg00, @arg00, @arg00, @arg00, @arg00 ;
  902. delete from t9 ;
  903. ######################### test of date/time columns ########################
  904. #                                                                          #
  905. #      c13 date, c14 datetime, c15 timestamp(14), c16 time, c17 year       #
  906. #                                                                          #
  907. ############################################################################
  908. --disable_query_log
  909. select '-- insert into date/time columns --' as test_sequence ;
  910. --enable_query_log
  911. ######## INSERT into .. date/time columns values(VARCHAR(19),LONGTEXT) ########
  912. --disable_query_log
  913. set @arg00= '1991-01-01 01:01:01' ;
  914. insert into t9
  915.   ( c1, c13, c14, c15, c16, c17 )
  916. values
  917.   ( 20, '1991-01-01 01:01:01', '1991-01-01 01:01:01', '1991-01-01 01:01:01',
  918.         '1991-01-01 01:01:01', '1991-01-01 01:01:01') ;
  919. insert into t9
  920.   ( c1, c13, c14, c15, c16, c17 )
  921. values
  922.   ( 21, @arg00, @arg00, @arg00, @arg00, @arg00) ;
  923. prepare stmt1 from "insert into t9
  924.   ( c1, c13, c14, c15, c16, c17 )
  925. values
  926.   ( 22, '1991-01-01 01:01:01', '1991-01-01 01:01:01', '1991-01-01 01:01:01',
  927.         '1991-01-01 01:01:01', '1991-01-01 01:01:01')" ;
  928. execute stmt1 ;
  929. prepare stmt2 from "insert into t9
  930.   ( c1, c13, c14, c15, c16, c17 )
  931. values
  932.   ( 23, ?, ?, ?, ?, ? )" ;
  933. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  934. ######## INSERT into .. date/time columns values(DATETIME,LONGBLOB) ########
  935. set @arg00= CAST('1991-01-01 01:01:01' as datetime) ;
  936. insert into t9
  937.   ( c1, c13, c14, c15, c16, c17 )
  938. values
  939.   ( 30, CAST('1991-01-01 01:01:01' as datetime), 
  940.         CAST('1991-01-01 01:01:01' as datetime),
  941.         CAST('1991-01-01 01:01:01' as datetime),
  942.         CAST('1991-01-01 01:01:01' as datetime),
  943.         CAST('1991-01-01 01:01:01' as datetime)) ;
  944. insert into t9
  945.   ( c1, c13, c14, c15, c16, c17 )
  946. values
  947.   ( 31, @arg00, @arg00, @arg00, @arg00, @arg00) ;
  948. prepare stmt1 from "insert into t9
  949.   ( c1, c13, c14, c15, c16, c17 )
  950. values
  951.   ( 32, CAST('1991-01-01 01:01:01' as datetime),
  952.         CAST('1991-01-01 01:01:01' as datetime),
  953.         CAST('1991-01-01 01:01:01' as datetime),
  954.         CAST('1991-01-01 01:01:01' as datetime),
  955.         CAST('1991-01-01 01:01:01' as datetime))" ;
  956. execute stmt1 ;
  957. prepare stmt2 from "insert into t9
  958.   ( c1, c13, c14, c15, c16, c17 )
  959. values
  960.   ( 33, ?, ?, ?, ?, ? )" ;
  961. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  962. ######## INSERT into .. date/time columns values(BIGINT(n),BIGINT) ########
  963. set @arg00= 2000000000 ;
  964. insert into t9
  965.   ( c1, c13, c14, c15, c16, c17 )
  966. values
  967.   ( 40, 2000000000, 2000000000, 2000000000, 2000000000, 2000000000 ) ;
  968. insert into t9
  969.   ( c1, c13, c14, c15, c16, c17 )
  970. values
  971.   ( 41, @arg00, @arg00, @arg00, @arg00, @arg00) ;
  972. prepare stmt1 from "insert into t9
  973.   ( c1, c13, c14, c15, c16, c17 )
  974. values
  975.   ( 42, 2000000000, 2000000000, 2000000000, 2000000000, 2000000000 )" ;
  976. execute stmt1 ;
  977. prepare stmt2 from "insert into t9
  978.   ( c1, c13, c14, c15, c16, c17 )
  979. values
  980.   ( 43, ?, ?, ?, ?, ? )" ;
  981. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  982. ######## INSERT into .. date/time columns values(DOUBLE(m,n),DOUBLE) ########
  983. set @arg00= 1.0e+10 ;
  984. insert into t9
  985.   ( c1, c13, c14, c15, c16, c17 )
  986. values
  987.   ( 50, 1.0e+10, 1.0e+10, 1.0e+10, 1.0e+10, 1.0e+10 ) ;
  988. insert into t9
  989.   ( c1, c13, c14, c15, c16, c17 )
  990. values
  991.   ( 51, @arg00, @arg00, @arg00, @arg00, @arg00) ;
  992. prepare stmt1 from "insert into t9
  993.   ( c1, c13, c14, c15, c16, c17 )
  994. values
  995.   ( 52, 1.0e+10, 1.0e+10, 1.0e+10, 1.0e+10, 1.0e+10 )" ;
  996. execute stmt1 ;
  997. prepare stmt2 from "insert into t9
  998.   ( c1, c13, c14, c15, c16, c17 )
  999. values
  1000.   ( 53, ?, ?, ?, ?, ? )" ;
  1001. execute stmt2 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  1002. ######## INSERT into .. date/time columns values(LONGBLOB,NULL) ########
  1003. # Attention: c15 is timestamp and the manual says:
  1004. #    The first TIMESTAMP column in table row automatically is updated 
  1005. #    to the current timestamp when the value of any other column in the
  1006. #    row is changed, unless the TIMESTAMP column explicitly is assigned 
  1007. #    a value other than NULL.
  1008. # That's why a fixed NOT NULL value is inserted.
  1009. set @arg00= 'abc' ;
  1010. set @arg00= NULL ;
  1011. insert into t9
  1012.   ( c1, c13, c14, c15, c16, c17 )
  1013. values
  1014.   ( 60, NULL, NULL, '1991-01-01 01:01:01',
  1015.         NULL, NULL) ;
  1016. insert into t9
  1017.   ( c1, c13, c14, c15, c16, c17 )
  1018. values
  1019.   ( 61, @arg00, @arg00, '1991-01-01 01:01:01', @arg00, @arg00) ;
  1020. prepare stmt1 from "insert into t9
  1021.   ( c1, c13, c14, c15, c16, c17 )
  1022. values
  1023.   ( 62, NULL, NULL, '1991-01-01 01:01:01',
  1024.         NULL, NULL)" ;
  1025. execute stmt1 ;
  1026. prepare stmt2 from "insert into t9
  1027.   ( c1, c13, c14, c15, c16, c17 )
  1028. values
  1029.   ( 63, ?, ?, '1991-01-01 01:01:01', ?, ? )" ;
  1030. execute stmt2 using @arg00, @arg00, @arg00, @arg00 ;
  1031. ######## INSERT into .. date/time columns values(BIGINT,NULL) ########
  1032. set @arg00= 8 ;
  1033. set @arg00= NULL ;
  1034. insert into t9
  1035.   ( c1, c13, c14, c15, c16, c17 )
  1036. values
  1037.   ( 71, @arg00, @arg00, '1991-01-01 01:01:01', @arg00, @arg00) ;
  1038. prepare stmt2 from "insert into t9
  1039.   ( c1, c13, c14, c15, c16, c17 )
  1040. values
  1041.   ( 73, ?, ?, '1991-01-01 01:01:01', ?, ? )" ;
  1042. execute stmt2 using @arg00, @arg00, @arg00, @arg00 ;
  1043. ######## INSERT into .. date/time columns values(DOUBLE,NULL) ########
  1044. set @arg00= 8.0 ;
  1045. set @arg00= NULL ;
  1046. insert into t9
  1047.   ( c1, c13, c14, c15, c16, c17 )
  1048. values
  1049.   ( 81, @arg00, @arg00, '1991-01-01 01:01:01', @arg00, @arg00) ;
  1050. prepare stmt2 from "insert into t9
  1051.   ( c1, c13, c14, c15, c16, c17 )
  1052. values
  1053.   ( 83, ?, ?, '1991-01-01 01:01:01', ?, ? )" ;
  1054. execute stmt2 using @arg00, @arg00, @arg00, @arg00 ;
  1055. --enable_query_log
  1056. ######## SELECT of all inserted records ########
  1057. select c1, c13, c14, c15, c16, c17 from t9 order by c1 ;
  1058. --disable_query_log
  1059. select '-- select .. where date/time column = .. --' as test_sequence ;
  1060. --enable_query_log
  1061. ######## SELECT .. WHERE column(date/time/..)=value(CHAR(n)/LONGTEXT) ########
  1062. set @arg00= '1991-01-01 01:01:01' ;
  1063. select 'true' as found from t9 
  1064. where c1= 20 and c13= '1991-01-01 01:01:01' and c14= '1991-01-01 01:01:01' and
  1065.   c15= '1991-01-01 01:01:01' and c16= '1991-01-01 01:01:01' and
  1066.   c17= '1991-01-01 01:01:01' ;
  1067. select 'true' as found from t9 
  1068. where c1= 20 and c13= @arg00 and c14= @arg00 and c15= @arg00 and c16= @arg00
  1069.   and c17= @arg00 ;
  1070. prepare stmt1 from "select 'true' as found from t9 
  1071. where c1= 20 and c13= '1991-01-01 01:01:01' and c14= '1991-01-01 01:01:01' and
  1072.   c15= '1991-01-01 01:01:01' and c16= '1991-01-01 01:01:01' and
  1073.   c17= '1991-01-01 01:01:01'" ;
  1074. execute stmt1 ;
  1075. prepare stmt1 from "select 'true' as found from t9 
  1076. where c1= 20 and c13= ? and c14= ? and c15= ? and c16= ? and c17= ?" ;
  1077. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  1078. ######## SELECT .. WHERE column(date/time/..)=value(DATETIME/LONGBLOB) ########
  1079. set @arg00= CAST('1991-01-01 01:01:01' as datetime) ;
  1080. select 'true' as found from t9 
  1081. where c1= 20 and c13= CAST('1991-01-01 01:01:01' as datetime) and
  1082.   c14= CAST('1991-01-01 01:01:01' as datetime) and
  1083.   c15= CAST('1991-01-01 01:01:01' as datetime) and
  1084.   c16= CAST('1991-01-01 01:01:01' as datetime) and
  1085.   c17= CAST('1991-01-01 01:01:01' as datetime) ;
  1086. select 'true' as found from t9 
  1087. where c1= 20 and c13= @arg00 and c14= @arg00 and c15= @arg00 and c16= @arg00
  1088.   and c17= @arg00 ;
  1089. prepare stmt1 from "select 'true' as found from t9 
  1090. where c1= 20 and c13= CAST('1991-01-01 01:01:01' as datetime) and
  1091.   c14= CAST('1991-01-01 01:01:01' as datetime) and
  1092.   c15= CAST('1991-01-01 01:01:01' as datetime) and
  1093.   c16= CAST('1991-01-01 01:01:01' as datetime) and
  1094.   c17= CAST('1991-01-01 01:01:01' as datetime)" ;
  1095. execute stmt1 ;
  1096. prepare stmt1 from "select 'true' as found from t9 
  1097. where c1= 20 and c13= ? and c14= ? and c15= ? and c16= ? and c17= ?" ;
  1098. execute stmt1 using @arg00, @arg00, @arg00, @arg00, @arg00 ;
  1099. ######## SELECT .. WHERE column(year)=value(INT(10)/BIGINT) ########
  1100. set @arg00= 1991 ;
  1101. select 'true' as found from t9 
  1102. where c1= 20 and c17= 1991 ;
  1103. select 'true' as found from t9 
  1104. where c1= 20 and c17= @arg00 ;
  1105. prepare stmt1 from "select 'true' as found from t9 
  1106. where c1= 20 and c17= 1991" ;
  1107. execute stmt1 ;
  1108. prepare stmt1 from "select 'true' as found from t9
  1109. where c1= 20 and c17= ?" ;
  1110. execute stmt1 using @arg00 ;
  1111. ######## SELECT .. WHERE column(year)=value(DOUBLE(m,n)/DOUBLE) ########
  1112. set @arg00= 1.991e+3 ;
  1113. select 'true' as found from t9 
  1114. where c1= 20 and abs(c17 - 1.991e+3) < 0.01 ;
  1115. select 'true' as found from t9 
  1116. where c1= 20 and abs(c17 - @arg00) < 0.01 ;
  1117. prepare stmt1 from "select 'true' as found from t9 
  1118. where c1= 20 and abs(c17 - 1.991e+3) < 0.01" ;
  1119. execute stmt1 ;
  1120. prepare stmt1 from "select 'true' as found from t9
  1121. where c1= 20 and abs(c17 - ?) < 0.01" ;
  1122. execute stmt1 using @arg00 ;